git » swiftpm » commit 719d48b

Latest Borogove

author Stephen Paul Weber
2026-10-06 19:46:10 UTC
committer Stephen Paul Weber
2026-10-06 19:46:10 UTC
parent 9b4e911750681308892c6d1e92805969fd081c0a

Latest Borogove

Sources/Borogove/Borogove.swift +304 -88
Sources/c_borogove/iinclude/Array.h +429 -72
Sources/c_borogove/iinclude/Dynamic.h +76 -49
Sources/c_borogove/iinclude/Enum.h +6 -6
Sources/c_borogove/iinclude/Lambda.h +3 -0
Sources/c_borogove/iinclude/StringTools.h +3 -0
Sources/c_borogove/iinclude/Xml.h +3 -0
Sources/c_borogove/iinclude/borogove/AttachmentUploadError.h +59 -0
Sources/c_borogove/iinclude/borogove/AvailableChat.h +5 -3
Sources/c_borogove/iinclude/borogove/Channel.h +39 -3
Sources/c_borogove/iinclude/borogove/ChannelPinger.h +84 -0
Sources/c_borogove/iinclude/borogove/Chat.h +19 -11
Sources/c_borogove/iinclude/borogove/ChatAttachment.h +16 -0
Sources/c_borogove/iinclude/borogove/ChatMessage.h +22 -4
Sources/c_borogove/iinclude/borogove/ChatMessageBuilder.h +17 -6
Sources/c_borogove/iinclude/borogove/ChatMessageCombiner.h +73 -0
Sources/c_borogove/iinclude/borogove/Client.h +52 -5
Sources/c_borogove/iinclude/borogove/Command.h +1 -1
Sources/c_borogove/iinclude/borogove/CommandSession.h +1 -1
Sources/c_borogove/iinclude/borogove/DirectChat.h +2 -2
Sources/c_borogove/iinclude/borogove/EncryptionInfo.h +3 -3
Sources/c_borogove/iinclude/borogove/FormOption.h +12 -12
Sources/c_borogove/iinclude/borogove/Hash.h +13 -0
Sources/c_borogove/iinclude/borogove/IncrementalHash.h +59 -0
Sources/c_borogove/iinclude/borogove/Member.h +6 -0
Sources/c_borogove/iinclude/borogove/MessageStanza.h +3 -0
Sources/c_borogove/iinclude/borogove/MessageSync.h +3 -0
Sources/c_borogove/iinclude/borogove/ModerationAction.h +14 -12
Sources/c_borogove/iinclude/borogove/MucSettingsCommand.h +56 -0
Sources/c_borogove/iinclude/borogove/MucSettingsCommandSession.h +58 -0
Sources/c_borogove/iinclude/borogove/Notification.h +4 -0
Sources/c_borogove/iinclude/borogove/Participant.h +0 -92
Sources/c_borogove/iinclude/borogove/Persistence.h +23 -9
Sources/c_borogove/iinclude/borogove/Persistence__Companion.h +5 -3
Sources/c_borogove/iinclude/borogove/SerializedChat.h +7 -6
Sources/c_borogove/iinclude/borogove/Sha1.h +74 -0
Sources/c_borogove/iinclude/borogove/Stanza.h +15 -6
Sources/c_borogove/iinclude/borogove/StanzaError.h +5 -5
Sources/c_borogove/iinclude/borogove/_Source/Source_Impl_.h +66 -0
Sources/c_borogove/iinclude/borogove/_XEP0454/XEP0454_Fields_.h +73 -0
Sources/c_borogove/iinclude/borogove/persistence/Dummy.h +14 -3
Sources/c_borogove/iinclude/borogove/persistence/MediaStore.h +8 -6
Sources/c_borogove/iinclude/borogove/persistence/MediaStoreFS.h +4 -2
Sources/c_borogove/iinclude/borogove/persistence/MediaStore__Companion.h +4 -2
Sources/c_borogove/iinclude/borogove/persistence/Sqlite.h +43 -3
Sources/c_borogove/iinclude/borogove/persistence/SqliteDriver.h +2 -0
Sources/c_borogove/iinclude/borogove/queries/HttpUploadSlot.h +3 -4
Sources/c_borogove/iinclude/borogove/queries/MucSettingsGet.h +64 -0
Sources/c_borogove/iinclude/borogove/queries/MucSettingsSubmit.h +64 -0
Sources/c_borogove/iinclude/borogove/streams/XmppStropheStream.h +4 -0
Sources/c_borogove/iinclude/cpp/CppInt32__.h +4 -4
Sources/c_borogove/iinclude/cpp/FastIterator.h +14 -9
Sources/c_borogove/iinclude/cpp/Pointer.h +11 -2
Sources/c_borogove/iinclude/cpp/Variant.h +53 -28
Sources/c_borogove/iinclude/cpp/VirtualArray.h +71 -19
Sources/c_borogove/iinclude/cpp/encoding/Ascii.hpp +24 -0
Sources/c_borogove/iinclude/cpp/encoding/Utf16.hpp +27 -0
Sources/c_borogove/iinclude/cpp/encoding/Utf8.hpp +26 -0
Sources/c_borogove/iinclude/cpp/marshal/Boxed.hpp +39 -0
Sources/c_borogove/iinclude/cpp/marshal/Definitions.inc +330 -0
Sources/c_borogove/iinclude/cpp/marshal/Marshal.hpp +521 -0
Sources/c_borogove/iinclude/cpp/marshal/PointerReference.hpp +170 -0
Sources/c_borogove/iinclude/cpp/marshal/PointerType.hpp +68 -0
Sources/c_borogove/iinclude/cpp/marshal/RootHandle.hpp +46 -0
Sources/c_borogove/iinclude/cpp/marshal/ValueReference.hpp +140 -0
Sources/c_borogove/iinclude/cpp/marshal/ValueType.hpp +74 -0
Sources/c_borogove/iinclude/cpp/marshal/View.hpp +136 -0
Sources/c_borogove/iinclude/cpp/vm/Gc.h +62 -0
Sources/c_borogove/iinclude/cpp/vm/WeakRef.h +81 -0
Sources/c_borogove/iinclude/haxe/crypto/Aes.h +107 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/CBC.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/CCM.h +86 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/CFB.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/CMAC.h +71 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/CTR.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/EAX.h +74 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/ECB.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/GCM.h +89 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/GCMSIV.h +92 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/OFB.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/PCBC.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/mode/SIV.h +86 -0
Sources/c_borogove/iinclude/haxe/crypto/padding/AnsiX923.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/padding/BitPadding.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/padding/ISO10126.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/padding/NoPadding.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/padding/NullPadding.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/padding/PKCS7.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/padding/SpacePadding.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/padding/TBC.h +68 -0
Sources/c_borogove/iinclude/haxe/crypto/random/SecureRandom.h +10 -0
Sources/c_borogove/iinclude/haxe/io/Input.h +3 -0
Sources/c_borogove/iinclude/haxe/io/Output.h +0 -3
Sources/c_borogove/iinclude/haxe/io/Path.h +3 -0
Sources/c_borogove/iinclude/hx/Anon.h +24 -24
Sources/c_borogove/iinclude/hx/CFFILoader.h +1 -1
Sources/c_borogove/iinclude/hx/CFFIPrime.h +69 -64
Sources/c_borogove/iinclude/hx/Class.h +7 -7
Sources/c_borogove/iinclude/hx/Debug.h +11 -0
Sources/c_borogove/iinclude/hx/DynamicImpl.h +232 -145
Sources/c_borogove/iinclude/hx/DynamicImpl.tpl +35 -28
Sources/c_borogove/iinclude/hx/ErrorCodes.h +9 -9
Sources/c_borogove/iinclude/hx/FieldRef.h +11 -11
Sources/c_borogove/iinclude/hx/Functions.h +401 -3
Sources/c_borogove/iinclude/hx/GC.h +28 -28
Sources/c_borogove/iinclude/hx/GcTypeInference.h +8 -0
Sources/c_borogove/iinclude/hx/GenMacro.hx +7 -5
Sources/c_borogove/iinclude/hx/HxcppMain.h +16 -7
Sources/c_borogove/iinclude/hx/Invoker.h +193 -0
Sources/c_borogove/iinclude/hx/LessThanEq.h +59 -4
Sources/c_borogove/iinclude/hx/Macros.h +378 -244
Sources/c_borogove/iinclude/hx/Macros.tpl +58 -32
Sources/c_borogove/iinclude/hx/MacrosFixed.h +8 -8
Sources/c_borogove/iinclude/hx/MacrosJumbo.h +551 -295
Sources/c_borogove/iinclude/hx/MacrosJumbo.tpl +18 -8
Sources/c_borogove/iinclude/hx/Native.h +2 -2
Sources/c_borogove/iinclude/hx/ObjcHelpers.h +12 -12
Sources/c_borogove/iinclude/hx/Object.h +10 -5
Sources/c_borogove/iinclude/hx/Operators.h +18 -5
Sources/c_borogove/iinclude/hx/Scriptable.h +34 -26
Sources/c_borogove/iinclude/hx/StackContext.h +1 -1
Sources/c_borogove/iinclude/hx/StdLibs.h +115 -14
Sources/c_borogove/iinclude/hx/StringAlloc.h +9 -1
Sources/c_borogove/iinclude/hx/Telemetry.h +0 -1
Sources/c_borogove/iinclude/hx/TelemetryTracy.h +3 -3
Sources/c_borogove/iinclude/hx/Thread.h +21 -20
Sources/c_borogove/iinclude/hx/Tls.h +8 -8
Sources/c_borogove/iinclude/hx/thread/ConditionVariable.hpp +30 -0
Sources/c_borogove/iinclude/hx/thread/CountingSemaphore.hpp +27 -0
Sources/c_borogove/iinclude/hx/thread/RecursiveMutex.hpp +27 -0
Sources/c_borogove/iinclude/hx/thread/Scratch.hpp +33 -0
Sources/c_borogove/iinclude/hx/thread/Thread.hpp +30 -0
Sources/c_borogove/iinclude/hx/thread/ThreadLocal.hpp +26 -0
Sources/c_borogove/iinclude/hx/zip/Compress.hpp +19 -0
Sources/c_borogove/iinclude/hx/zip/Uncompress.hpp +17 -0
Sources/c_borogove/iinclude/hx/zip/Zip.hpp +36 -0
Sources/c_borogove/iinclude/hxMath.h +26 -1
Sources/c_borogove/iinclude/hxString.h +27 -3
Sources/c_borogove/iinclude/hxcpp.h +35 -10
Sources/c_borogove/iinclude/null.h +21 -8
Sources/c_borogove/iinclude/sys/FileSystem.h +3 -0
Sources/c_borogove/iinclude/sys/io/File.h +0 -4
Sources/c_borogove/iinclude/tink/core/OutcomeTools.h +63 -0
Sources/c_borogove/iinclude/tink/http/ContentType.h +65 -0
Sources/c_borogove/iinclude/tink/http/Header.h +3 -0
Sources/c_borogove/iinclude/tink/http/_Header/HeaderValue_Impl_.h +6 -0
Sources/c_borogove/iinclude/tink/streams/StreamBase.h +3 -0
Sources/c_borogove/iinclude/tink/streams/StreamObject.h +4 -0
Sources/c_borogove/iinclude/tink/streams/_Stream/Handler_Impl_.h +0 -4
Sources/c_borogove/iinclude/tink/streams/_Stream/Mapping_Impl_.h +64 -0
Sources/c_borogove/iinclude/tink/url/_Portion/Portion_Impl_.h +67 -0
Sources/c_borogove/iinclude/tink/url/_Query/QueryStringParser.h +69 -0
Sources/c_borogove/include/borogove.h +179 -25
Sources/c_borogove/src/Array.cpp +306 -119
Sources/c_borogove/src/Dynamic.cpp +68 -56
Sources/c_borogove/src/HaxeCBridge.cpp +166 -166
Sources/c_borogove/src/Lambda.cpp +21 -0
Sources/c_borogove/src/Math.cpp +59 -0
Sources/c_borogove/src/String.cpp +301 -70
Sources/c_borogove/src/StringTools.cpp +25 -14
Sources/c_borogove/src/Xml.cpp +32 -0
Sources/c_borogove/src/_HaxeCBridge/HaxeArray_Impl_.cpp +29 -29
Sources/c_borogove/src/_HaxeCBridge/HaxeOpaqueArray_Impl_.cpp +23 -23
Sources/c_borogove/src/_HaxeCBridge/HaxeStringArray_Impl_.cpp +33 -33
Sources/c_borogove/src/_HaxeCBridge/Internal.cpp +7 -7
Sources/c_borogove/src/__HaxeCBridgeBindings__.cpp +882 -112
Sources/c_borogove/src/__boot__.cpp +169 -20
Sources/c_borogove/src/borogove/AttachmentUploadError.cpp +192 -0
Sources/c_borogove/src/borogove/Autolink.cpp +7 -1
Sources/c_borogove/src/borogove/AvailableChat.cpp +61 -46
Sources/c_borogove/src/borogove/AvailableChatIterator.cpp +103 -100
Sources/c_borogove/src/borogove/Caps.cpp +324 -301
Sources/c_borogove/src/borogove/CapsRepo.cpp +4 -7
Sources/c_borogove/src/borogove/Channel.cpp +2519 -1754
Sources/c_borogove/src/borogove/ChannelPinger.cpp +325 -0
Sources/c_borogove/src/borogove/Chat.cpp +1183 -960
Sources/c_borogove/src/borogove/ChatAttachment.cpp +180 -62
Sources/c_borogove/src/borogove/ChatMessage.cpp +951 -751
Sources/c_borogove/src/borogove/ChatMessageBuilder.cpp +443 -337
Sources/c_borogove/src/borogove/ChatMessageCombiner.cpp +296 -0
Sources/c_borogove/src/borogove/Client.cpp +4172 -2919
Sources/c_borogove/src/borogove/CommandSession.cpp +6 -3
Sources/c_borogove/src/borogove/DirectChat.cpp +676 -577
Sources/c_borogove/src/borogove/EncryptionInfo.cpp +37 -37
Sources/c_borogove/src/borogove/Form.cpp +18 -15
Sources/c_borogove/src/borogove/FormField.cpp +86 -83
Sources/c_borogove/src/borogove/FormLayoutSection.cpp +16 -13
Sources/c_borogove/src/borogove/FormOption.cpp +25 -22
Sources/c_borogove/src/borogove/FormSubmitBuilder.cpp +10 -13
Sources/c_borogove/src/borogove/GenericStream.cpp +10 -7
Sources/c_borogove/src/borogove/Hash.cpp +146 -79
Sources/c_borogove/src/borogove/Html.cpp +36 -24
Sources/c_borogove/src/borogove/Identity.cpp +58 -52
Sources/c_borogove/src/borogove/IncrementalHash.cpp +165 -0
Sources/c_borogove/src/borogove/LinkMetadata.cpp +19 -19
Sources/c_borogove/src/borogove/Member.cpp +199 -138
Sources/c_borogove/src/borogove/MemberUpdate.cpp +9 -12
Sources/c_borogove/src/borogove/Message.cpp +912 -760
Sources/c_borogove/src/borogove/MessageStanza.cpp +17 -2
Sources/c_borogove/src/borogove/MessageSync.cpp +194 -133
Sources/c_borogove/src/borogove/ModerationAction.cpp +30 -18
Sources/c_borogove/src/borogove/MucSettingsCommand.cpp +189 -0
Sources/c_borogove/src/borogove/MucSettingsCommandSession.cpp +200 -0
Sources/c_borogove/src/borogove/Notification.cpp +81 -10
Sources/c_borogove/src/borogove/Participant.cpp +0 -596
Sources/c_borogove/src/borogove/Persistence.cpp +29 -14
Sources/c_borogove/src/borogove/Persistence__Companion.cpp +55 -63
Sources/c_borogove/src/borogove/ProfileBuilder.cpp +2 -2
Sources/c_borogove/src/borogove/PubsubEvent.cpp +9 -6
Sources/c_borogove/src/borogove/Push.cpp +119 -82
Sources/c_borogove/src/borogove/ReactionUpdate.cpp +3 -3
Sources/c_borogove/src/borogove/SerializedChat.cpp +132 -115
Sources/c_borogove/src/borogove/Sha1.cpp +440 -0
Sources/c_borogove/src/borogove/Stanza.cpp +524 -416
Sources/c_borogove/src/borogove/StanzaError.cpp +5 -5
Sources/c_borogove/src/borogove/Status.cpp +11 -5
Sources/c_borogove/src/borogove/Util.cpp +43 -43
Sources/c_borogove/src/borogove/XEP0393.cpp +17 -14
Sources/c_borogove/src/borogove/_DataForm/DataForm_Impl_.cpp +7 -4
Sources/c_borogove/src/borogove/_DataForm/Field_Impl_.cpp +24 -21
Sources/c_borogove/src/borogove/_Presence/Presence_Impl_.cpp +17 -14
Sources/c_borogove/src/borogove/_Source/Source_Impl_.cpp +103 -0
Sources/c_borogove/src/borogove/_Util/Util_Fields_.cpp +30 -30
Sources/c_borogove/src/borogove/_XEP0454/XEP0454_Fields_.cpp +340 -0
Sources/c_borogove/src/borogove/calls/Group.cpp +11 -8
Sources/c_borogove/src/borogove/calls/IceCandidate.cpp +19 -19
Sources/c_borogove/src/borogove/calls/IncomingProposedSession.cpp +121 -121
Sources/c_borogove/src/borogove/calls/InitiatedSession.cpp +594 -609
Sources/c_borogove/src/borogove/calls/Media.cpp +79 -77
Sources/c_borogove/src/borogove/calls/OutgoingProposedSession.cpp +132 -135
Sources/c_borogove/src/borogove/calls/OutgoingSession.cpp +26 -26
Sources/c_borogove/src/borogove/calls/SessionDescription.cpp +8 -2
Sources/c_borogove/src/borogove/calls/TransportInfo.cpp +8 -2
Sources/c_borogove/src/borogove/calls/_Session/Session_Fields_.cpp +19 -16
Sources/c_borogove/src/borogove/persistence/Dummy.cpp +135 -86
Sources/c_borogove/src/borogove/persistence/MediaStore.cpp +6 -0
Sources/c_borogove/src/borogove/persistence/MediaStoreFS.cpp +162 -78
Sources/c_borogove/src/borogove/persistence/MediaStore__Companion.cpp +61 -60
Sources/c_borogove/src/borogove/persistence/Sqlite.cpp +2765 -2195
Sources/c_borogove/src/borogove/persistence/SqliteDriver.cpp +120 -90
Sources/c_borogove/src/borogove/queries/BlocklistGet.cpp +9 -6
Sources/c_borogove/src/borogove/queries/BoB.cpp +10 -7
Sources/c_borogove/src/borogove/queries/CommandExecute.cpp +25 -19
Sources/c_borogove/src/borogove/queries/DiscoInfoGet.cpp +13 -7
Sources/c_borogove/src/borogove/queries/DiscoItemsGet.cpp +10 -4
Sources/c_borogove/src/borogove/queries/ExtDiscoGet.cpp +8 -2
Sources/c_borogove/src/borogove/queries/HttpUploadSlot.cpp +42 -60
Sources/c_borogove/src/borogove/queries/JabberIqGatewayGet.cpp +9 -3
Sources/c_borogove/src/borogove/queries/MAMQuery.cpp +20 -17
Sources/c_borogove/src/borogove/queries/MucSettingsGet.cpp +225 -0
Sources/c_borogove/src/borogove/queries/MucSettingsSubmit.cpp +217 -0
Sources/c_borogove/src/borogove/queries/PubsubGet.cpp +12 -6
Sources/c_borogove/src/borogove/queries/Push2Disable.cpp +8 -2
Sources/c_borogove/src/borogove/queries/Push2Enable.cpp +15 -15
Sources/c_borogove/src/borogove/queries/RosterGet.cpp +10 -39
Sources/c_borogove/src/borogove/queries/VcardTempGet.cpp +8 -2
Sources/c_borogove/src/borogove/streams/XmppStropheStream.cpp +358 -311
Sources/c_borogove/src/cpp/vm/Gc.cpp +88 -0
Sources/c_borogove/src/cpp/vm/WeakRef.cpp +143 -0
Sources/c_borogove/src/haxe/crypto/Aes.cpp +1020 -0
Sources/c_borogove/src/haxe/crypto/mode/CBC.cpp +146 -0
Sources/c_borogove/src/haxe/crypto/mode/CCM.cpp +446 -0
Sources/c_borogove/src/haxe/crypto/mode/CFB.cpp +150 -0
Sources/c_borogove/src/haxe/crypto/mode/CMAC.cpp +239 -0
Sources/c_borogove/src/haxe/crypto/mode/CTR.cpp +135 -0
Sources/c_borogove/src/haxe/crypto/mode/EAX.cpp +266 -0
Sources/c_borogove/src/haxe/crypto/mode/ECB.cpp +113 -0
Sources/c_borogove/src/haxe/crypto/mode/GCM.cpp +427 -0
Sources/c_borogove/src/haxe/crypto/mode/GCMSIV.cpp +625 -0
Sources/c_borogove/src/haxe/crypto/mode/OFB.cpp +125 -0
Sources/c_borogove/src/haxe/crypto/mode/PCBC.cpp +151 -0
Sources/c_borogove/src/haxe/crypto/mode/SIV.cpp +342 -0
Sources/c_borogove/src/haxe/crypto/padding/AnsiX923.cpp +117 -0
Sources/c_borogove/src/haxe/crypto/padding/BitPadding.cpp +133 -0
Sources/c_borogove/src/haxe/crypto/padding/ISO10126.cpp +123 -0
Sources/c_borogove/src/haxe/crypto/padding/NoPadding.cpp +105 -0
Sources/c_borogove/src/haxe/crypto/padding/NullPadding.cpp +132 -0
Sources/c_borogove/src/haxe/crypto/padding/PKCS7.cpp +138 -0
Sources/c_borogove/src/haxe/crypto/padding/SpacePadding.cpp +132 -0
Sources/c_borogove/src/haxe/crypto/padding/TBC.cpp +140 -0
Sources/c_borogove/src/haxe/crypto/random/SecureRandom.cpp +104 -0
Sources/c_borogove/src/haxe/io/Input.cpp +23 -0
Sources/c_borogove/src/haxe/io/Output.cpp +0 -20
Sources/c_borogove/src/haxe/io/Path.cpp +26 -11
Sources/c_borogove/src/hx/CFFI.cpp +57 -13
Sources/c_borogove/src/hx/Debug.cpp +19 -16
Sources/c_borogove/src/hx/Hash.h +22 -22
Sources/c_borogove/src/hx/Lib.cpp +78 -40
Sources/c_borogove/src/hx/Object.cpp +12 -10
Sources/c_borogove/src/hx/Thread.cpp +81 -609
Sources/c_borogove/src/hx/gc/Immix.cpp +104 -146
Sources/c_borogove/src/hx/libs/regexp/Build.xml +3 -3
Sources/c_borogove/src/hx/libs/regexp/RegExp.cpp +3 -3
Sources/c_borogove/src/hx/libs/sqlite/Build.xml +1 -1
Sources/c_borogove/src/hx/libs/sqlite/Sqlite.cpp +6 -5
Sources/c_borogove/src/hx/libs/ssl/SSL.cpp +48 -0
Sources/c_borogove/src/hx/libs/std/File.cpp +42 -5
Sources/c_borogove/src/hx/libs/std/Process.cpp +2 -2
Sources/c_borogove/src/hx/libs/std/Random.cpp +1 -1
Sources/c_borogove/src/hx/libs/std/Socket.cpp +38 -17
Sources/c_borogove/src/hx/libs/std/Sys.cpp +2 -2
Sources/c_borogove/src/hx/thread/ConditionVariable.cpp +55 -0
Sources/c_borogove/src/hx/thread/CountingSemaphore.apple.cpp +48 -0
Sources/c_borogove/src/hx/thread/RecursiveMutex.cpp +35 -0
Sources/c_borogove/src/hx/thread/Scratch.cpp +74 -0
Sources/c_borogove/src/hx/thread/ThreadImpl.cpp +188 -0
Sources/c_borogove/src/hx/thread/ThreadImpl.hpp +58 -0
Sources/c_borogove/src/hx/thread/ThreadImpl.noop.cpp +15 -0
Sources/c_borogove/src/hx/thread/ThreadLocal.cpp +67 -0
Sources/c_borogove/src/sys/FileSystem.cpp +11 -0
Sources/c_borogove/src/sys/io/File.cpp +0 -18
Sources/c_borogove/src/tink/core/OutcomeTools.cpp +100 -0
Sources/c_borogove/src/tink/http/ContentType.cpp +219 -0
Sources/c_borogove/src/tink/http/Header.cpp +19 -0
Sources/c_borogove/src/tink/http/_Header/HeaderValue_Impl_.cpp +85 -0
Sources/c_borogove/src/tink/streams/StreamBase.cpp +14 -0
Sources/c_borogove/src/tink/streams/StreamObject.cpp +1 -0
Sources/c_borogove/src/tink/streams/_Stream/Handler_Impl_.cpp +0 -35
Sources/c_borogove/src/tink/streams/_Stream/Mapping_Impl_.cpp +125 -0
Sources/c_borogove/src/tink/url/_Portion/Portion_Impl_.cpp +131 -0
Sources/c_borogove/src/tink/url/_Query/QueryStringParser.cpp +249 -0

diff --git a/Sources/Borogove/Borogove.swift b/Sources/Borogove/Borogove.swift
index 5a0f6bf..732320d 100644
--- a/Sources/Borogove/Borogove.swift
+++ b/Sources/Borogove/Borogove.swift
@@ -1,6 +1,6 @@
 import c_borogove
 
-public func setup(_ handler: @convention(c) @escaping (UnsafePointer<CChar>?)->Void) {
+public func setup(_ handler: @convention(c) @escaping @Sendable (UnsafePointer<CChar>?)->Void) {
 	c_borogove.borogove_setup(handler)
 }
 
@@ -180,25 +180,22 @@ public class Html: SDKObject, @unchecked Sendable {
 }
 
 public protocol MediaStore: SDKObject {
-	func hasMedia(hashAlgorithm: String, hash: Array<UInt8>) async -> Bool
+	func hasMedia(hash: Hash) async -> String?
 
 	func removeMedia(hashAlgorithm: String, hash: Array<UInt8>) async -> Bool
 
-	func storeMedia(mime: String, bytes: Array<UInt8>) async -> Bool
-
 }
 
 public extension MediaStore {
-	func hasMedia(hashAlgorithm: String, hash: Array<UInt8>) async -> Bool {
+	func hasMedia(hash: Hash) async -> String? {
 		return await withUnsafeContinuation { cont in
 		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
 		let __result = c_borogove.borogove_persistence_media_store_has_media(
 			self.o,
-			hashAlgorithm,
-			hash, hash.count,
+			hash.o,
 			{ (a, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Bool, Never>
-				cont.resume(returning: a)
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<String?, Never>
+				cont.resume(returning: useString(a))
 			},
 			__cont_ptr
 		)
@@ -223,23 +220,6 @@ public extension MediaStore {
 		}
 	}
 
-	func storeMedia(mime: String, bytes: Array<UInt8>) async -> Bool {
-		return await withUnsafeContinuation { cont in
-		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
-		let __result = c_borogove.borogove_persistence_media_store_store_media(
-			self.o,
-			mime,
-			bytes, bytes.count,
-			{ (a, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Bool, Never>
-				cont.resume(returning: a)
-			},
-			__cont_ptr
-		)
-		return __result
-		}
-	}
-
 }
 
 public class AnyMediaStore: MediaStore {
@@ -446,6 +426,14 @@ public class Hash: SDKObject, @unchecked Sendable {
 		return __result
 	}
 
+	public func equals(other: Hash) -> Bool {
+		let __result = c_borogove.borogove_hash_equals(
+			self.o,
+			other.o
+		)
+		return __result
+	}
+
 	deinit {
 		c_borogove.borogove_release(o)
 	}
@@ -476,6 +464,15 @@ public class ChatAttachment: SDKObject, @unchecked Sendable {
 		)!)
 	}
 
+	/**
+	 Location of the data in cache, if present
+	 */
+	public var cachedAt: String? {
+		get {
+			useString(c_borogove.borogove_chat_attachment_cached_at(o))
+		}
+	}
+
 	/**
 	 Filename
 	 */
@@ -679,6 +676,12 @@ public class ChatMessage: SDKObject, @unchecked Sendable {
 		c_borogove.borogove_set_finalizer(ptr, releaseContexts)
 	}
 
+	public static func combineCorrections(messages: Array<ChatMessage>) -> Array<ChatMessage> {
+		{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_chat_message_combine_corrections(
+			messages.map { $0.o }, messages.count
+		, &__ret);return { let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({ChatMessage($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
+	}
+
 	/**
 	 The ID as set by the creator of this message
 	 */
@@ -716,11 +719,25 @@ public class ChatMessage: SDKObject, @unchecked Sendable {
 	}
 
 	/**
-	 The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+	 The timestamp this message was sent, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+	 
+	 If the exact time is not known, the received time may be used
 	 */
-	public var timestamp: String {
+	public var timeSent: String {
+		get {
+			useString(c_borogove.borogove_chat_message_time_sent(o))!
+		}
+	}
+
+	/**
+	 The timestamp this message was received, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+	 
+	 This will be the time received by our server, if known, or the time
+	 received at the client otherwise.
+	 */
+	public var timeReceived: String {
 		get {
-			useString(c_borogove.borogove_chat_message_timestamp(o))!
+			useString(c_borogove.borogove_chat_message_time_received(o))!
 		}
 	}
 
@@ -980,6 +997,33 @@ public class ChatMessage: SDKObject, @unchecked Sendable {
 		return __result
 	}
 
+	/**
+	 Fetch data for a ChatAttachment into local media cache
+	 
+	 If cachedAt is already filled in for this ChatAttachment, it is simply returned.
+	 
+	 @param attachment ChatAttachment to fetch
+	 @param client Client to use when fetching
+	 @returns Promise resolving to a ChatAttachment with cachedAt filled in, if possible
+	 */
+	public func fetchAttachment(attachment: ChatAttachment, client: Client, storeIfNeeded: Bool = true) async -> ChatAttachment {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		let __result = c_borogove.borogove_chat_message_fetch_attachment(
+			self.o,
+			attachment.o,
+			client.o,
+			storeIfNeeded,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<ChatAttachment, Never>
+				cont.resume(returning: ChatAttachment(a!))
+			},
+			__cont_ptr
+		)
+		return __result
+		}
+	}
+
 	deinit {
 		c_borogove.borogove_release(o)
 	}
@@ -1287,7 +1331,7 @@ public class Status: SDKObject, @unchecked Sendable {
 	}
 }
 
-public class Member: Identifiable, SDKObject, @unchecked Sendable {
+public class Member: SDKObject, Identifiable, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -1295,6 +1339,15 @@ public class Member: Identifiable, SDKObject, @unchecked Sendable {
 		c_borogove.borogove_set_finalizer(ptr, releaseContexts)
 	}
 
+	/**
+	 A placeholder member suitable for moderated messages
+	 */
+	public var MODERATED: Member {
+		get {
+			Member(c_borogove.borogove_member_moderated()!)
+		}
+	}
+
 	/**
 	 A unique id for this member
 	 */
@@ -2046,11 +2099,13 @@ public class Chat: EventEmitter, @unchecked Sendable {
 	 Send a message to this Chat
 	 
 	 @param message the ChatMessageBuilder to send
+	 @param e2eePreference optional explicit End-to-End Encryption preference for this message. If Default, uses the client's preferred allowed E2EE method.
 	 */
-	public func sendMessage(message: ChatMessageBuilder) -> Void {
+	public func sendMessage(message: ChatMessageBuilder, e2eePreference: OutgoingE2EEPreference = OutgoingE2EEPreference.Default) -> Void {
 		let __result = c_borogove.borogove_chat_send_message(
 			self.o,
-			message.o
+			message.o,
+			e2eePreference
 		)
 		return __result
 	}
@@ -2393,6 +2448,16 @@ public class Chat: EventEmitter, @unchecked Sendable {
 		return __result
 	}
 
+	/**
+	 Has the user ever read this chat?
+	 */
+	public func hasEverRead() -> Bool {
+		let __result = c_borogove.borogove_chat_has_ever_read(
+			self.o
+		)
+		return __result
+	}
+
 	/**
 	 An ID of the last message displayed to the user
 	 */
@@ -2464,6 +2529,19 @@ public class Chat: EventEmitter, @unchecked Sendable {
 		return __result
 	}
 
+	/**
+	 Set tags on this Chat
+	 
+	 @param tags The tags to set
+	 */
+	public func setTags(tags: Array<String>) -> Void {
+		withArrayOfCStrings(tags) { __tags in let __result = c_borogove.borogove_chat_set_tags(
+			self.o,
+			__tags, tags.count
+		)
+		return __result}
+	}
+
 	/**
 	 Set if this chat is to be trusted with our presence, etc
 	 
@@ -2582,16 +2660,6 @@ public class Chat: EventEmitter, @unchecked Sendable {
 		return __result
 	}
 
-	/**
-	 Get encryption mode for this chat
-	 */
-	public func encryptionMode() -> String {
-		let __result = useString(c_borogove.borogove_chat_encryption_mode(
-			self.o
-		))!
-		return __result
-	}
-
 	/**
 	 Can the user send messages to this chat?
 	 */
@@ -2781,20 +2849,10 @@ public protocol Persistence: SDKObject {
 	/**
 	 Check whether a media blob is already stored
 	 
-	 @param hashAlgorithm hash algorithm for the content ID
-	 @param hash raw hash bytes
-	 @returns Promise resolving to true when the media exists
-	 */
-	func hasMedia(hashAlgorithm: String, hash: Array<UInt8>) async -> Bool
-
-	/**
-	 Store media bytes and any metadata needed to retrieve them later
-	 
-	 @param mime MIME type of the media
-	 @param bytes raw media bytes
-	 @returns Promise resolving to true when storage succeeded
+	 @param hash hash of the media we're looking for
+	 @returns Promise resolving to an ID when the media exists, null when it does not
 	 */
-	func storeMedia(mime: String, bytes: Array<UInt8>) async -> Bool
+	func hasMedia(hash: Hash) async -> String?
 
 	/**
 	 Delete previously stored media
@@ -2811,10 +2869,11 @@ public protocol Persistence: SDKObject {
 	 @param accountId the account to store login state for
 	 @param clientId negotiated client ID
 	 @param displayName last known display name
-	 @param token persisted token or null to clear it
+	 @param rosterVer roster version string if known
+	 @param token persisted token or null to keep the current value
 	 @returns Promise resolving to true when store succeeded
 	 */
-	func storeLogin(accountId: String, clientId: String, displayName: String, token: String?) async -> Bool
+	func storeLogin(accountId: String, clientId: String, displayName: String, rosterVer: String?, token: String?) async -> Bool
 
 	/**
 	 Remove stored data for an account
@@ -2978,33 +3037,15 @@ public extension Persistence {
 		}
 	}
 
-	func hasMedia(hashAlgorithm: String, hash: Array<UInt8>) async -> Bool {
+	func hasMedia(hash: Hash) async -> String? {
 		return await withUnsafeContinuation { cont in
 		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
 		let __result = c_borogove.borogove_persistence_has_media(
 			self.o,
-			hashAlgorithm,
-			hash, hash.count,
-			{ (a, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Bool, Never>
-				cont.resume(returning: a)
-			},
-			__cont_ptr
-		)
-		return __result
-		}
-	}
-
-	func storeMedia(mime: String, bytes: Array<UInt8>) async -> Bool {
-		return await withUnsafeContinuation { cont in
-		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
-		let __result = c_borogove.borogove_persistence_store_media(
-			self.o,
-			mime,
-			bytes, bytes.count,
+			hash.o,
 			{ (a, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Bool, Never>
-				cont.resume(returning: a)
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<String?, Never>
+				cont.resume(returning: useString(a))
 			},
 			__cont_ptr
 		)
@@ -3029,7 +3070,7 @@ public extension Persistence {
 		}
 	}
 
-	func storeLogin(accountId: String, clientId: String, displayName: String, token: String?) async -> Bool {
+	func storeLogin(accountId: String, clientId: String, displayName: String, rosterVer: String?, token: String?) async -> Bool {
 		return await withUnsafeContinuation { cont in
 		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
 		let __result = c_borogove.borogove_persistence_store_login(
@@ -3037,6 +3078,7 @@ public extension Persistence {
 			accountId,
 			clientId,
 			displayName,
+			rosterVer,
 			token,
 			{ (a, ctx) in
 				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Bool, Never>
@@ -3199,6 +3241,15 @@ public class ChatMessageBuilder: SDKObject, @unchecked Sendable {
 		o = (c_borogove.borogove_chat_message_builder_new())
 	}
 
+	/**
+	 Create a new ChatMessageBuilder from an existing ChatMessage
+	 */
+	public static func fromMessage(m: ChatMessage) -> ChatMessageBuilder {
+		ChatMessageBuilder(c_borogove.borogove_chat_message_builder_from_message(
+			m.o
+		)!)
+	}
+
 	/**
 	 The ID as set by the creator of this message
 	 */
@@ -3248,14 +3299,31 @@ public class ChatMessageBuilder: SDKObject, @unchecked Sendable {
 	}
 
 	/**
-	 The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+	 The timestamp this message was sent, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+	 
+	 If the exact time is not known, the received time may be used
 	 */
-	public var timestamp: String? {
+	public var timeSent: String? {
 		get {
-			useString(c_borogove.borogove_chat_message_builder_timestamp(o))
+			useString(c_borogove.borogove_chat_message_builder_time_sent(o))
 		}
 		set {
-			c_borogove.borogove_chat_message_builder_set_timestamp(o, newValue)
+			c_borogove.borogove_chat_message_builder_set_time_sent(o, newValue)
+		}
+	}
+
+	/**
+	 The timestamp this message was received, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+	 
+	 This will be the time received by our server, if known, or the time
+	 received at the client otherwise.
+	 */
+	public var timeReceived: String? {
+		get {
+			useString(c_borogove.borogove_chat_message_builder_time_received(o))
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_time_received(o, newValue)
 		}
 	}
 
@@ -3443,10 +3511,10 @@ public class ChatMessageBuilder: SDKObject, @unchecked Sendable {
 	 
 	 @returns sender ID for this message
 	 */
-	public func get_senderId() -> String {
+	public func get_senderId() -> String? {
 		let __result = useString(c_borogove.borogove_chat_message_builder_get_sender_id(
 			self.o
-		))!
+		))
 		return __result
 	}
 
@@ -3816,6 +3884,19 @@ public class Client: EventEmitter, @unchecked Sendable {
 		super.init(c_borogove.borogove_client_new(accountId, persistence.o))
 	}
 
+	/**
+	 If true, the client will block and return a policy-violation error for
+	 any incoming chat message that is not end-to-end encrypted.
+	 */
+	public var blockIncomingWithoutE2EE: Bool {
+		get {
+			c_borogove.borogove_client_block_incoming_without_e_2_ee(o)
+		}
+		set {
+			c_borogove.borogove_client_set_block_incoming_without_e_2_ee(o, newValue)
+		}
+	}
+
 	/**
 	 Start this client running and trying to connect to the server
 	 */
@@ -3896,6 +3977,21 @@ public class Client: EventEmitter, @unchecked Sendable {
 		return __result
 	}
 
+	/**
+	 Set the current profile photo for this account on the server
+	 
+	 @param photo to set
+	 @param publicAccess set the access for the photo to public
+	 */
+	public func setPhoto(source: AttachmentSource, publicAccess: Bool) -> Void {
+		let __result = c_borogove.borogove_client_set_photo(
+			self.o,
+			source.o,
+			publicAccess
+		)
+		return __result
+	}
+
 	/**
 	 Set the current profile for this account on the server
 	 
@@ -3928,18 +4024,51 @@ public class Client: EventEmitter, @unchecked Sendable {
 		return __result
 	}
 
+	/**
+	 Adjusts the outgoing E2EE preference list to prioritize the specified preference.
+	 This ensures that the client will attempt to use this E2EE protocol first when sending messages.
+	 
+	 @param preference the OutgoingE2EEPreference to prioritize
+	 */
+	public func preferE2ee(preference: OutgoingE2EEPreference) -> Void {
+		let __result = c_borogove.borogove_client_prefer_e_2_ee(
+			self.o,
+			preference
+		)
+		return __result
+	}
+
+	/**
+	 Removes the specified E2EE preference from the allowed outgoing preferences.
+	 The client will no longer use this protocol for outgoing messages.
+	 
+	 @param preference the OutgoingE2EEPreference to ban
+	 */
+	public func banE2ee(preference: OutgoingE2EEPreference) -> Void {
+		let __result = c_borogove.borogove_client_ban_e_2_ee(
+			self.o,
+			preference
+		)
+		return __result
+	}
+
 	/**
 	 Turn a file into a ChatAttachment for attaching to a ChatMessage
 	 
 	 @param source The AttachmentSource to use
-	 @returns Promise resolving to a ChatAttachment or null
+	 @param encrypt Should the data be encrypted with a fresh key?
+	 @returns Promise resolving to a ChatAttachment
+	 @throws AttachmentUploadError when no upload service is available or all
+	 	discovered services fail. Inspect `code` and, for
+	 	`all-services-failed`, the per-service `failures`.
 	 */
-	public func prepareAttachment(source: AttachmentSource) async -> ChatAttachment? {
+	public func prepareAttachment(source: AttachmentSource, encrypt: Bool = true) async -> ChatAttachment? {
 		return await withUnsafeContinuation { cont in
 		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
 		let __result = c_borogove.borogove_client_prepare_attachment(
 			self.o,
 			source.o,
+			encrypt,
 			{ (a, ctx) in
 				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<ChatAttachment?, Never>
 				cont.resume(returning: (a).map({ ChatAttachment($0) }))
@@ -4553,6 +4682,28 @@ public class Channel: Chat, @unchecked Sendable {
 		return __result
 	}
 
+	/**
+	 Can the user set the Channel subject?
+	 */
+	public func canSetSubject() -> Bool {
+		let __result = c_borogove.borogove_channel_can_set_subject(
+			self.o
+		)
+		return __result
+	}
+
+	/**
+	 Set the Channel subject, or subject of a thread
+	 */
+	public func setSubject(subject: String, threadId: String? = nil) -> Void {
+		let __result = c_borogove.borogove_channel_set_subject(
+			self.o,
+			subject,
+			threadId
+		)
+		return __result
+	}
+
 	/**
 	 Description of this Channel
 	 */
@@ -4563,6 +4714,39 @@ public class Channel: Chat, @unchecked Sendable {
 		return __result
 	}
 
+	/**
+	 If the user is muted by local policy, send a request to moderators
+	 */
+	public func requestToSend() -> Void {
+		let __result = c_borogove.borogove_channel_request_to_send(
+			self.o
+		)
+		return __result
+	}
+
+	/**
+	 Can the user set the photo of this channel?
+	 */
+	public func canSetPhoto() -> Bool {
+		let __result = c_borogove.borogove_channel_can_set_photo(
+			self.o
+		)
+		return __result
+	}
+
+	/**
+	 Set the current photo for this channel on the server, if user is an owner
+	 
+	 @param photo to set
+	 */
+	public func setPhoto(source: AttachmentSource) -> Void {
+		let __result = c_borogove.borogove_channel_set_photo(
+			self.o,
+			source.o
+		)
+		return __result
+	}
+
 	/**
 	 Whether this channel is members-only/private.
 	 */
@@ -4573,6 +4757,36 @@ public class Channel: Chat, @unchecked Sendable {
 		return __result
 	}
 
+	/**
+	 List of current voice requests we are aware of
+	 */
+	public func voiceRequests() async -> Array<Member> {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		let __result = c_borogove.borogove_channel_voice_requests(
+			self.o,
+			{ (a, a_length, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<Member>, Never>
+				cont.resume(returning: { let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({Member($0!)});c_borogove.borogove_release(a);return __r;}())
+			},
+			__cont_ptr
+		)
+		return __result
+		}
+	}
+
+	/**
+	 Respond to a particular voice request
+	 */
+	public func voiceRequestRespond(member: Member, canSend: Bool) -> Void {
+		let __result = c_borogove.borogove_channel_voice_request_respond(
+			self.o,
+			member.o,
+			canSend
+		)
+		return __result
+	}
+
 }
 
 public class DirectChat: Chat, @unchecked Sendable {
@@ -4700,6 +4914,8 @@ public typealias UiState = borogove_ui_state
 
 public typealias ShowPresence = borogove_show_presence
 
+public typealias OutgoingE2EEPreference = borogove_outgoing_e_2_ee_preference
+
 public typealias MessageType = borogove_message_type
 
 public typealias MessageStatus = borogove_message_status
diff --git a/Sources/c_borogove/iinclude/Array.h b/Sources/c_borogove/iinclude/Array.h
index ed6f738..72e5804 100644
--- a/Sources/c_borogove/iinclude/Array.h
+++ b/Sources/c_borogove/iinclude/Array.h
@@ -39,6 +39,8 @@ template<> struct ReturnNull<double> { typedef Dynamic type; };
 template<> struct ReturnNull<float> { typedef Dynamic type; };
 template<> struct ReturnNull<bool> { typedef Dynamic type; };
 template<> struct ReturnNull<char> { typedef Dynamic type; };
+template<> struct ReturnNull<char16_t> { typedef Dynamic type; };
+template<> struct ReturnNull<char32_t> { typedef Dynamic type; };
 template<> struct ReturnNull<signed char> { typedef Dynamic type; };
 template<> struct ReturnNull<unsigned char> { typedef Dynamic type; };
 template<> struct ReturnNull<short> { typedef Dynamic type; };
@@ -76,18 +78,18 @@ public:
    ArrayIterator(Array<FROM> inArray) : mArray(inArray), mIdx(0) { }
 
    // Fast versions ...
-   bool hasNext()  { return mIdx < mArray->length; }
+   bool hasNext() HXCPP_OVERRIDE { return mIdx < mArray->length; }
 
    inline TO toTo(const Dynamic &inD) { return inD.StaticCast<TO>(); }
 
    template<typename T>
    inline TO toTo(T inT) { return inT; }
 
-   TO next() { return toTo(mArray->__get(mIdx++)); }
+   TO next() HXCPP_OVERRIDE { return toTo(mArray->__get(mIdx++)); }
 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER_NAME(mArray,"mArray"); }
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER_NAME(mArray,"mArray"); }
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER_NAME(mArray,"mArray"); }
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER_NAME(mArray,"mArray"); }
    #endif
 
    int      mIdx;
@@ -103,7 +105,7 @@ public:
 
    ArrayKeyValueIterator(Array<FROM> inArray) : mArray(inArray), mIdx(0) { }
 
-   bool hasNext()  { return mIdx < mArray->length; }
+   bool hasNext() HXCPP_OVERRIDE { return mIdx < mArray->length; }
 
    inline TO toTo(const Dynamic &inD) { return inD.StaticCast<TO>(); }
 
@@ -111,11 +113,11 @@ public:
    inline TO toTo(T inT) { return inT; }
 
 
-   Dynamic next();
+   Dynamic next() HXCPP_OVERRIDE;
 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER_NAME(mArray,"mArray"); }
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER_NAME(mArray,"mArray"); }
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER_NAME(mArray,"mArray"); }
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER_NAME(mArray,"mArray"); }
    #endif
 
    int      mIdx;
@@ -147,6 +149,30 @@ class HXCPP_EXTERN_CLASS_ATTRIBUTES ArrayCommon : public hx::Object
 class HXCPP_EXTERN_CLASS_ATTRIBUTES ArrayBase : public ArrayCommon
 {
 public:
+    typedef
+#if (HXCPP_API_LEVEL>=500)
+        ::hx::Callable<int(Dynamic, Dynamic)>
+#else
+        Dynamic
+#endif
+        DynamicSorterFunc;
+
+    typedef
+#if (HXCPP_API_LEVEL>=500)
+        ::hx::Callable<bool(Dynamic)>
+#else
+        Dynamic
+#endif
+        DynamicFilterFunc;
+
+    typedef
+#if (HXCPP_API_LEVEL>=500)
+        ::hx::Callable<Dynamic(Dynamic)>
+#else
+        Dynamic
+#endif
+        DynamicMappingFunc;
+
    ArrayBase(int inSize,int inReserve,int inElementSize,bool inAtomic);
 
    // Defined later so we can use "Array"
@@ -165,14 +191,14 @@ public:
    inline char * getBase() const { return mBase; }
 
 
-   hx::Val __SetField(const String &inString,const hx::Val &inValue ,hx::PropertyAccess inCallProp) { return null(); }
+   hx::Val __SetField(const String &inString,const hx::Val &inValue ,hx::PropertyAccess inCallProp) HXCPP_OVERRIDE { return null(); }
 
    static hx::Class __mClass;
    static hx::Class &__SGetClass() { return __mClass; }
-   hx::Class __GetClass() const { return __mClass; }
-   String toString();
-   String __ToString() const;
-   int __Compare(const hx::Object *inRHS) const;
+   hx::Class __GetClass() const HXCPP_OVERRIDE { return __mClass; }
+   String toString() HXCPP_OVERRIDE;
+   String __ToString() const HXCPP_OVERRIDE;
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE;
 
 
    void setData(void *inData, int inElements)
@@ -191,14 +217,14 @@ public:
    }
 
 
-   int __GetType() const { return vtArray; }
+   int __GetType() const HXCPP_OVERRIDE { return vtArray; }
 
    inline size_t size() const { return length; }
-   inline int __length() const { return (int)length; }
+   inline int __length() const HXCPP_OVERRIDE { return (int)length; }
 
    virtual String ItemString(int inI)  = 0;
 
-   const char * __CStr() const { return mBase; }
+   const char * __CStr() const HXCPP_OVERRIDE { return mBase; }
    inline const char *GetBase() const { return mBase; }
    inline char *GetBase() { return mBase; }
 
@@ -225,7 +251,7 @@ public:
    Dynamic __unsafe_get(const Dynamic &i);
    Dynamic __unsafe_set(const Dynamic &i, const Dynamic &val);
 
-   void safeSort(Dynamic sorter, bool isString);
+   void safeSort(DynamicSorterFunc sorter, bool isString);
 
    inline void __unsafeStringReference(String inString)
    {
@@ -240,7 +266,12 @@ public:
 
 
    // Dynamic interface
-   hx::Val __Field(const String &inString ,hx::PropertyAccess inCallProp);
+#if (HXCPP_API_LEVEL>=500)
+   hx::Val __pointerToBase();
+   hx::Val __Field(const String &inString ,hx::PropertyAccess inCallProp) override = 0;
+#else
+   hx::Val __Field(const String& inString, hx::PropertyAccess inCallProp) HXCPP_OVERRIDE;
+#endif
 
    inline void ____SetSize(int len)  { resize(len); } 
    inline void ____SetSizeExact(int len)  { __SetSizeExact(len); } 
@@ -264,20 +295,21 @@ public:
    virtual Dynamic __shift() = 0;
    virtual hx::ArrayBase *__slice(const Dynamic &a0,const Dynamic &a1) = 0;
    virtual hx::ArrayBase *__splice(const Dynamic &a0,const Dynamic &a1) = 0;
-   virtual void __sort(const Dynamic &a0) = 0;
+   virtual void __sort(const DynamicSorterFunc& a0) = 0;
    virtual ::String __toString() = 0;
    virtual void  __unshift(const Dynamic &a0) = 0;
-   virtual cpp::VirtualArray_obj *__map(const Dynamic &func) = 0;
-   virtual hx::ArrayBase *__filter(const Dynamic &func) = 0;
+   virtual cpp::VirtualArray_obj *__map(const DynamicMappingFunc &func) = 0;
+   virtual hx::ArrayBase *__filter(const DynamicFilterFunc &func) = 0;
    virtual void __blit(int inDestElement,const cpp::VirtualArray &inSourceArray,int inSourceElement,int inElementCount) = 0;
    virtual int __memcmp(const cpp::VirtualArray &a0) = 0;
    inline void __zero(const Dynamic &a0,const Dynamic &a1)  { zero(a0,a1); }
-   virtual void __qsort(Dynamic inCompare) = 0;
+   virtual void __qsort(DynamicSorterFunc inCompare) = 0;
    virtual void __resize(int inLen) = 0;
 
    virtual void set(int inIdx, const cpp::Variant &inValue) = 0;
    virtual void setUnsafe(int inIdx, const cpp::Variant &inValue) = 0;
 
+#if (HXCPP_API_LEVEL<500)
    Dynamic concat_dyn();
    Dynamic copy_dyn();
    Dynamic insert_dyn();
@@ -308,6 +340,7 @@ public:
    Dynamic zero_dyn();
    Dynamic memcmp_dyn();
    Dynamic resize_dyn();
+#endif
 
    void Realloc(int inLen) const;
 
@@ -431,6 +464,8 @@ template<> struct ArrayClassId<unsigned char> { enum { id=hx::clsIdArrayByte };
 template<> struct ArrayClassId<signed char> { enum { id=hx::clsIdArrayByte }; };
 template<> struct ArrayClassId<unsigned short> { enum { id=hx::clsIdArrayShort }; };
 template<> struct ArrayClassId<signed short> { enum { id=hx::clsIdArrayShort }; };
+template<> struct ArrayClassId<char16_t> { enum { id = hx::clsIdArrayShort }; };
+template<> struct ArrayClassId<char32_t> { enum { id = hx::clsIdArrayInt }; };
 template<> struct ArrayClassId<unsigned int> { enum { id=hx::clsIdArrayInt }; };
 template<> struct ArrayClassId<signed int> { enum { id=hx::clsIdArrayInt }; };
 template<> struct ArrayClassId<float> { enum { id=hx::clsIdArrayFloat32 }; };
@@ -460,6 +495,29 @@ class Array_obj : public hx::ArrayBase
    typedef hx::ObjectPtr< Array_obj<ELEM_> > ObjPtr;
    typedef typename hx::ReturnNull<ELEM_>::type NullType;
 
+   typedef
+#if (HXCPP_API_LEVEL>=500)
+       ::hx::Callable<int(Elem, Elem)>
+#else
+       Dynamic
+#endif
+       SorterFunc;
+
+   typedef
+#if (HXCPP_API_LEVEL>=500)
+       ::hx::Callable<bool(Elem)>
+#else
+       Dynamic
+#endif
+       FilterFunc;
+
+#if (HXCPP_API_LEVEL>=500)
+   template<class TO>
+   using MappingFunc = ::hx::Callable<TO(Elem)>;
+#else
+   typedef Dynamic MappingFunc;
+#endif
+
 public:
    enum { _hx_ClassId = ArrayClassId<ELEM_>::id };
 
@@ -473,15 +531,51 @@ public:
    static Array<ELEM_> __newConstWrapper(ELEM_ *inData,int inSize);
    static Array<ELEM_> fromData(const ELEM_ *inData,int inCount);
 
-   bool _hx_isInstanceOf(int inClassId)
+#if (HXCPP_API_LEVEL>=500)
+   ::hx::Callable<Array<ELEM_>(Array<ELEM_>)> concat_dyn();
+   ::hx::Callable<Array<ELEM_>()> copy_dyn();
+   ::hx::Callable<void(int, ELEM_)> insert_dyn();
+   ::hx::Callable<::Dynamic()> iterator_dyn();
+   ::hx::Callable<::Dynamic()> keyValueIterator_dyn();
+   ::hx::Callable<::String(::String)> join_dyn();
+   ::hx::Callable<::Dynamic()> pop_dyn();
+   ::hx::Callable<int(ELEM_)> push_dyn();
+   ::hx::Callable<bool(ELEM_)> contains_dyn();
+   ::hx::Callable<bool(ELEM_)> remove_dyn();
+   ::hx::Callable<bool(int)> removeAt_dyn();
+   ::hx::Callable<int(ELEM_, ::Dynamic)> indexOf_dyn();
+   ::hx::Callable<int(ELEM_, ::Dynamic)> lastIndexOf_dyn();
+   ::hx::Callable<void()> reverse_dyn();
+   ::hx::Callable<::Dynamic()> shift_dyn();
+   ::hx::Callable<Array<ELEM_>(int, ::Dynamic)> slice_dyn();
+   ::hx::Callable<Array<ELEM_>(int, int)> splice_dyn();
+   ::hx::Callable<void(SorterFunc)> sort_dyn();
+   ::hx::Callable<::String()> toString_dyn();
+   ::hx::Callable<void(ELEM_)> unshift_dyn();
+   template<class TO>
+   ::hx::Callable<Array<TO>(MappingFunc<TO>)> map_dyn();
+   ::hx::Callable<Array<ELEM_>(FilterFunc)> filter_dyn();
+   ::hx::Callable<void(int)> __SetSize_dyn();
+   ::hx::Callable<void(int)> __SetSizeExact_dyn();
+   ::hx::Callable<ELEM_& (int)> __unsafe_get_dyn();
+   ::hx::Callable<ELEM_& (int, ELEM_)> __unsafe_set_dyn();
+   ::hx::Callable<void(int, Array<ELEM_>, int, int)> blit_dyn();
+   ::hx::Callable<void(::Dynamic, ::Dynamic)> zero_dyn();
+   ::hx::Callable<void(Array<ELEM_>)> memcmp_dyn();
+   ::hx::Callable<void(int)> resize_dyn();
+
+   hx::Val __Field(const String& inString, hx::PropertyAccess inCallProp) override;
+#endif
+
+   bool _hx_isInstanceOf(int inClassId) HXCPP_OVERRIDE
    {
       return inClassId==1 || inClassId==(int)hx::clsIdArrayBase || inClassId==(int)_hx_ClassId;
    }
 
-   virtual bool AllocAtomic() const { return !hx::ContainsPointers<ELEM_>(); }
+   bool AllocAtomic() const HXCPP_OVERRIDE { return !hx::ContainsPointers<ELEM_>(); }
 
-   virtual Dynamic __GetItem(int inIndex) const { return __get(inIndex); }
-   virtual Dynamic __SetItem(int inIndex,Dynamic inValue)
+   Dynamic __GetItem(int inIndex) const HXCPP_OVERRIDE { return __get(inIndex); }
+   Dynamic __SetItem(int inIndex, Dynamic inValue) HXCPP_OVERRIDE
    {
       ELEM_ &elem = Item(inIndex);
       elem = inValue;
@@ -541,7 +635,7 @@ public:
    }
 
 
-   void __Mark(hx::MarkContext *__inCtx)
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE
    {
       if (mAlloc>0) hx::MarkAlloc((void *)mBase, __inCtx );
       if (length && hx::ContainsPointers<ELEM_>())
@@ -552,7 +646,7 @@ public:
    }
 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx)
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE
    {
       if (mAlloc>0) __inCtx->visitAlloc((void **)&mBase);
       if (hx::ContainsPointers<ELEM_>())
@@ -568,9 +662,9 @@ public:
 
    inline Array<ELEM_> __SetSizeExact(int inLen);
 
-   int GetElementSize() const { return sizeof(ELEM_); }
+   int GetElementSize() const HXCPP_OVERRIDE { return sizeof(ELEM_); }
 
-   String ItemString(int inI)
+   String ItemString(int inI) HXCPP_OVERRIDE
    {
       String result(__get(inI));
       if (result==null()) return HX_CSTRING("null");
@@ -722,9 +816,13 @@ public:
    {
       hx::ArrayBase::Splice(0,inPos,len);
    }
-
-   cpp::VirtualArray map(Dynamic inFunc);
-   Array<ELEM_> filter(Dynamic inFunc);
+   #if (HXCPP_API_LEVEL>=500)
+   template<class TO>
+   Array<TO> map(MappingFunc<TO> inFunc);
+   #else
+   cpp::VirtualArray map(MappingFunc inFunc);
+   #endif
+   Array<ELEM_> filter(FilterFunc inFunc);
 
    void insert(int inPos, ELEM_ inValue)
    {
@@ -776,23 +874,27 @@ public:
 
    struct Sorter
    {
-      Sorter(Dynamic inFunc) : mFunc(inFunc) { }
+      Sorter(SorterFunc inFunc) : mFunc(inFunc) { }
 
       bool operator()(const ELEM_ &inA, const ELEM_ &inB)
       {
+#if (HXCPP_API_LEVEL>=500)
+          return mFunc(inA, inB) < 0;
+#else
          return mFunc( Dynamic(inA), Dynamic(inB))->__ToInt() < 0;
+#endif
       }
 
-      Dynamic mFunc;
+      SorterFunc mFunc;
    };
 
-   inline void qsort(Dynamic inSorter)
+   inline void qsort(SorterFunc inSorter)
    {
       ELEM_ *e = (ELEM_ *)mBase;
       std::sort(e, e+length, Sorter(inSorter) );
    }
 
-   void sort(Dynamic inSorter)
+   void sort(SorterFunc inSorter)
    {
       if ( (int)hx::ArrayTraits<ELEM_>::StoreType==(int)hx::arrayObject ||
           (int)hx::ArrayTraits<ELEM_>::StoreType==(int)hx::arrayString)
@@ -815,8 +917,8 @@ public:
 
    template<typename TO>
    Dynamic keyValueIteratorFast() { return new hx::ArrayKeyValueIterator<ELEM_,TO>(this); }
-   
-   virtual hx::ArrayStore getStoreType() const
+
+   hx::ArrayStore getStoreType() const HXCPP_OVERRIDE
    {
       return (hx::ArrayStore) hx::ArrayTraits<ELEM_>::StoreType;
    }
@@ -830,45 +932,49 @@ public:
 
 
    // Dynamic interface
-   virtual hx::ArrayBase *__concat(const cpp::VirtualArray &a0) { return concat(a0).mPtr; }
-   virtual hx::ArrayBase *__copy() { return copy().mPtr; }
-   virtual void __insert(int inIndex,const Dynamic &a1) { insert(inIndex,a1);}
-   virtual Dynamic __iterator() { return iterator(); }
-   virtual Dynamic __keyValueIterator() { return keyValueIterator(); }
-   virtual ::String __join(::String a0) { return join(a0); }
-   virtual Dynamic __pop() { return pop(); }
-   virtual int __push(const Dynamic &a0) { return push(a0);}
-   virtual bool __contains(const Dynamic &a0) { return contains(a0); }
-   virtual bool __remove(const Dynamic &a0) { return remove(a0); }
-   virtual bool __removeAt(int inIndex) { return removeAt(inIndex); }
-   virtual int __indexOf(const Dynamic &a0,const Dynamic &a1) { return indexOf(a0, a1); }
-   virtual int __lastIndexOf(const Dynamic &a0,const Dynamic &a1) { return lastIndexOf(a0, a1); }
-   virtual void __reverse() { reverse(); }
-   virtual Dynamic __shift() { return shift(); }
-   virtual hx::ArrayBase *__slice(const Dynamic &a0,const Dynamic &a1) { return slice(a0,a1).mPtr; }
-   virtual hx::ArrayBase *__splice(const Dynamic &a0,const Dynamic &a1) { return splice(a0,a1).mPtr; }
-   virtual void __sort(const Dynamic &a0) { sort(a0); }
-   virtual ::String __toString() { return toString(); }
-   virtual void  __unshift(const Dynamic &a0) { unshift(a0); }
-   virtual cpp::VirtualArray_obj *__map(const Dynamic &func) { return map(func).mPtr; }
-   virtual void __resize(int inLen) { resize(inLen); }
-
-   virtual hx::ArrayBase *__filter(const Dynamic &func) { return filter(func).mPtr; }
-   virtual void __blit(int inDestElement,const cpp::VirtualArray &inSourceArray,int inSourceElement,int inElementCount)
+   hx::ArrayBase* __concat(const cpp::VirtualArray& a0) HXCPP_OVERRIDE { return concat(a0).mPtr; }
+   hx::ArrayBase *__copy() HXCPP_OVERRIDE { return copy().mPtr; }
+   void __insert(int inIndex,const Dynamic &a1) HXCPP_OVERRIDE { insert(inIndex,a1);}
+   Dynamic __iterator() HXCPP_OVERRIDE { return iterator(); }
+   Dynamic __keyValueIterator() HXCPP_OVERRIDE { return keyValueIterator(); }
+   ::String __join(::String a0) HXCPP_OVERRIDE { return join(a0); }
+   Dynamic __pop() HXCPP_OVERRIDE { return pop(); }
+   int __push(const Dynamic &a0) HXCPP_OVERRIDE { return push(a0);}
+   bool __contains(const Dynamic &a0) HXCPP_OVERRIDE { return contains(a0); }
+   bool __remove(const Dynamic &a0) HXCPP_OVERRIDE { return remove(a0); }
+   bool __removeAt(int inIndex) HXCPP_OVERRIDE { return removeAt(inIndex); }
+   int __indexOf(const Dynamic &a0,const Dynamic &a1) HXCPP_OVERRIDE { return indexOf(a0, a1); }
+   int __lastIndexOf(const Dynamic &a0,const Dynamic &a1) HXCPP_OVERRIDE { return lastIndexOf(a0, a1); }
+   void __reverse() HXCPP_OVERRIDE { reverse(); }
+   Dynamic __shift() HXCPP_OVERRIDE { return shift(); }
+   hx::ArrayBase *__slice(const Dynamic &a0,const Dynamic &a1) HXCPP_OVERRIDE { return slice(a0,a1).mPtr; }
+   hx::ArrayBase *__splice(const Dynamic &a0,const Dynamic &a1) HXCPP_OVERRIDE { return splice(a0,a1).mPtr; }
+   void __sort(const DynamicSorterFunc& a0) HXCPP_OVERRIDE { sort(a0); }
+   ::String __toString() HXCPP_OVERRIDE { return toString(); }
+   void  __unshift(const Dynamic &a0) HXCPP_OVERRIDE { unshift(a0); }
+#if (HXCPP_API_LEVEL>=500)
+   cpp::VirtualArray_obj* __map(const DynamicMappingFunc& func) override { return cpp::VirtualArray(map<Dynamic>(func)).mPtr; }
+#else
+   cpp::VirtualArray_obj* __map(const DynamicMappingFunc& func) HXCPP_OVERRIDE { return map(func).mPtr; }
+#endif
+   void __resize(int inLen) HXCPP_OVERRIDE { resize(inLen); }
+
+   hx::ArrayBase *__filter(const DynamicFilterFunc &func) HXCPP_OVERRIDE { return filter(func).mPtr; }
+   void __blit(int inDestElement,const cpp::VirtualArray &inSourceArray,int inSourceElement,int inElementCount) HXCPP_OVERRIDE
    {
       blit(inDestElement,inSourceArray,inSourceElement,inElementCount);
    }
-   virtual int __memcmp(const cpp::VirtualArray &a0) { return memcmp(a0); }
-   virtual void __qsort(Dynamic inCompare) { this->qsort(inCompare); };
+   int __memcmp(const cpp::VirtualArray &a0) HXCPP_OVERRIDE { return memcmp(a0); }
+   void __qsort(DynamicSorterFunc inCompare) HXCPP_OVERRIDE { this->qsort(inCompare); };
 
-   virtual void set(int inIndex, const cpp::Variant &inValue) {
+   void set(int inIndex, const cpp::Variant &inValue) HXCPP_OVERRIDE {
       ELEM_ &elem = Item(inIndex);
       elem = ELEM_(inValue);
       if (hx::ContainsPointers<ELEM_>()) {
          HX_OBJ_WB_GET(this, hx::PointerOf(elem));
       }
    }
-   virtual void setUnsafe(int inIndex, const cpp::Variant &inValue) {
+   void setUnsafe(int inIndex, const cpp::Variant& inValue) HXCPP_OVERRIDE {
       ELEM_ &elem = *(ELEM_ *)(mBase + inIndex*sizeof(ELEM_));
       elem = ELEM_(inValue);
       if (hx::ContainsPointers<ELEM_>()) { HX_OBJ_WB_GET(this,hx::PointerOf(elem)); }
@@ -1125,7 +1231,7 @@ Array<ELEM_> Array_obj<ELEM_>::splice(int inPos, int len)
 
 
 template<typename ELEM_>
-Array<ELEM_> Array_obj<ELEM_>::filter(Dynamic inFunc)
+Array<ELEM_> Array_obj<ELEM_>::filter(FilterFunc inFunc)
 {
    Array_obj *result = new Array_obj(0,0);
    for(int i=0;i<length;i++)
@@ -1174,13 +1280,264 @@ inline typename ARRAY::Elem _hx_array_unsafe_get(ARRAY inArray, int inIndex)
 #include "cpp/VirtualArray.h"
 #endif
 
+#if (HXCPP_API_LEVEL>=500)
+template<typename ELEM_>
+template<class TO>
+Array<TO> Array_obj<ELEM_>::map(MappingFunc<TO> inFunc)
+{
+    auto result = Array_obj<TO>::__new(length, 0);
+    for (int i = 0; i < length; i++)
+        result->__unsafe_set(i, inFunc(__unsafe_get(i)));
+    return result;
+}
+#else
 template<typename ELEM_>
-cpp::VirtualArray Array_obj<ELEM_>::map(Dynamic inFunc)
+cpp::VirtualArray Array_obj<ELEM_>::map(MappingFunc inFunc)
 {
-   cpp::VirtualArray result = cpp::VirtualArray_obj::__new(length,0);
+   cpp::VirtualArray result = cpp::VirtualArray_obj::__new(length, 0);
    for(int i=0;i<length;i++)
       result->__unsafe_set(i,inFunc(__unsafe_get(i)));
    return result;
 }
 
-#endif
\ No newline at end of file
+#endif
+
+#ifdef HXCPP_VISIT_ALLOCS
+#define ARRAY_VISIT_FUNC \
+    void __Visit(::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(mThis); }
+#else
+#define ARRAY_VISIT_FUNC
+#endif
+
+
+#if (HXCPP_API_LEVEL>=500)
+
+// For some reason this forward declared template type is needed for clang,
+// MSVC and GCC have no problem finding it when it used in the closures below.
+// Don't know who's "right" or "wrong".
+namespace hx
+{
+    template<typename T1, typename T2>
+    bool IsPointerEq(const T1& v1, const T2& v2);
+}
+
+#define HX_ARRAY_ARG_LIST0
+#define HX_ARRAY_ARG_LIST1(arg0) arg0
+#define HX_ARRAY_ARG_LIST2(arg0, arg1) arg0, arg1
+#define HX_ARRAY_ARG_LIST3(arg0, arg1, arg2) arg0, arg1, arg2
+#define HX_ARRAY_ARG_LIST4(arg0, arg1, arg2, arg3) arg0, arg1, arg2, arg3
+
+#define HX_ARRAY_FUNC_LIST0
+#define HX_ARRAY_FUNC_LIST1(arg0) arg0 inArg0
+#define HX_ARRAY_FUNC_LIST2(arg0, arg1) arg0 inArg0, arg1 inArg1
+#define HX_ARRAY_FUNC_LIST3(arg0, arg1, arg2) arg0 inArg0, arg1 inArg1, arg2 inArg2
+#define HX_ARRAY_FUNC_LIST4(arg0, arg1, arg2, arg3) arg0 inArg0, arg1 inArg1, arg2 inArg2, arg3 inArg3
+
+#define HX_ARRAY_FUNC(ret, value, name, args_list, func_list, args_call) \
+    template<class ELEM_> \
+    ::hx::Callable<value(args_list)> Array_obj<ELEM_>::name##_dyn() \
+    { \
+        struct _hx_array_##name final : public ::hx::AutoCallable_obj<value(args_list)> \
+        { \
+            ::Array<ELEM_> mThis; \
+            _hx_array_##name(::Array<ELEM_> inThis) : mThis(inThis) \
+            { \
+                HX_OBJ_WB_NEW_MARKED_OBJECT(this); \
+            } \
+            value HX_LOCAL_RUN(func_list) override \
+            { \
+                ret mThis->name(args_call); \
+            } \
+            void *__GetHandle() const override { return mThis.GetPtr(); } \
+            void __Mark(::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(mThis); } \
+            ARRAY_VISIT_FUNC \
+            int __Compare(const ::hx::Object* inRhs) const override \
+            { \
+                auto casted = dynamic_cast<const _hx_array_##name *>(inRhs); \
+                if (!casted) return 1; \
+                if (!::hx::IsPointerEq(mThis, casted->mThis)) return -1; \
+                return 0; \
+            } \
+        }; \
+        return new _hx_array_##name(this); \
+    }
+
+HX_ARRAY_FUNC(return, Array<ELEM_>, concat, HX_ARRAY_ARG_LIST1(Array<ELEM_>), HX_ARRAY_FUNC_LIST1(Array<ELEM_>), HX_ARG_LIST1);
+HX_ARRAY_FUNC(return, Array<ELEM_>, copy, HX_ARRAY_ARG_LIST0, HX_ARRAY_FUNC_LIST0, HX_ARG_LIST0);
+HX_ARRAY_FUNC(, void, insert, HX_ARRAY_ARG_LIST2(int, ELEM_), HX_ARRAY_FUNC_LIST2(int, ELEM_), HX_ARG_LIST2);
+HX_ARRAY_FUNC(return, ::Dynamic, iterator, HX_ARRAY_ARG_LIST0, HX_ARRAY_FUNC_LIST0, HX_ARG_LIST0);
+HX_ARRAY_FUNC(return, ::Dynamic, keyValueIterator, HX_ARRAY_ARG_LIST0, HX_ARRAY_FUNC_LIST0, HX_ARG_LIST0);
+HX_ARRAY_FUNC(return, ::String, join, HX_ARRAY_ARG_LIST1(::String), HX_ARRAY_FUNC_LIST1(::String), HX_ARG_LIST1);
+HX_ARRAY_FUNC(return, ::Dynamic, pop, HX_ARRAY_ARG_LIST0, HX_ARRAY_FUNC_LIST0, HX_ARG_LIST0);
+HX_ARRAY_FUNC(return, int, push, HX_ARRAY_ARG_LIST1(ELEM_), HX_ARRAY_FUNC_LIST1(ELEM_), HX_ARG_LIST1);
+HX_ARRAY_FUNC(return, bool, contains, HX_ARRAY_ARG_LIST1(ELEM_), HX_ARRAY_FUNC_LIST1(ELEM_), HX_ARG_LIST1);
+HX_ARRAY_FUNC(return, bool, remove, HX_ARRAY_ARG_LIST1(ELEM_), HX_ARRAY_FUNC_LIST1(ELEM_), HX_ARG_LIST1);
+HX_ARRAY_FUNC(return, bool, removeAt, HX_ARRAY_ARG_LIST1(int), HX_ARRAY_FUNC_LIST1(int), HX_ARG_LIST1);
+HX_ARRAY_FUNC(return, int, indexOf, HX_ARRAY_ARG_LIST2(ELEM_, ::Dynamic), HX_ARRAY_FUNC_LIST2(ELEM_, ::Dynamic), HX_ARG_LIST2);
+HX_ARRAY_FUNC(return, int, lastIndexOf, HX_ARRAY_ARG_LIST2(ELEM_, ::Dynamic), HX_ARRAY_FUNC_LIST2(ELEM_, ::Dynamic), HX_ARG_LIST2);
+HX_ARRAY_FUNC(, void, reverse, HX_ARRAY_ARG_LIST0, HX_ARRAY_FUNC_LIST0, HX_ARG_LIST0);
+HX_ARRAY_FUNC(return, ::Dynamic, shift, HX_ARRAY_ARG_LIST0, HX_ARRAY_FUNC_LIST0, HX_ARG_LIST0);
+HX_ARRAY_FUNC(return, Array<ELEM_>, splice, HX_ARRAY_ARG_LIST2(int, int), HX_ARRAY_FUNC_LIST2(int, int), HX_ARG_LIST2);
+HX_ARRAY_FUNC(return, Array<ELEM_>, slice, HX_ARRAY_ARG_LIST2(int, ::Dynamic), HX_ARRAY_FUNC_LIST2(int, ::Dynamic), HX_ARG_LIST2);
+HX_ARRAY_FUNC(, void, sort, HX_ARRAY_ARG_LIST1(hx::Callable<int(ELEM_, ELEM_)>), HX_ARRAY_FUNC_LIST1(hx::Callable<int(ELEM_, ELEM_)>), HX_ARG_LIST1);
+HX_ARRAY_FUNC(return, ::String, toString, HX_ARRAY_ARG_LIST0, HX_ARRAY_FUNC_LIST0, HX_ARG_LIST0);
+HX_ARRAY_FUNC(, void, unshift, HX_ARRAY_ARG_LIST1(ELEM_), HX_ARRAY_FUNC_LIST1(ELEM_), HX_ARG_LIST1);
+HX_ARRAY_FUNC(return, Array<ELEM_>, filter, HX_ARRAY_ARG_LIST1(hx::Callable<bool(ELEM_)>), HX_ARRAY_FUNC_LIST1(hx::Callable<bool(ELEM_)>), HX_ARG_LIST1);
+template<class ELEM_>
+template<class TO>
+::hx::Callable<Array<TO>(::hx::Callable<TO(ELEM_)>)> Array_obj<ELEM_>::map_dyn()
+{
+    struct _hx_array_map final : public ::hx::AutoCallable_obj<Array<TO>(::hx::Callable<TO(ELEM_)>)>
+    {
+        Array<ELEM_> mThis;
+        _hx_array_map(Array<ELEM_> inThis) : mThis(inThis)
+        {
+            HX_OBJ_WB_NEW_MARKED_OBJECT(this);
+        }
+        Array<TO> _hx_run(::hx::Callable<TO(ELEM_)> inArg0) override
+        {
+            return mThis->map(inArg0);
+        }
+        void __Mark(hx::MarkContext* __inCtx) override
+        {
+            hx::MarkMember(mThis, __inCtx);
+        }
+        ARRAY_VISIT_FUNC
+        int __Compare(const ::hx::Object* inRhs) const override
+        {
+            auto casted = dynamic_cast<const _hx_array_map*>(inRhs);
+            if (!casted) return 1;
+            if (mThis != casted->mThis) return -1;
+            return 0;
+        }
+        void* __GetHandle() const override
+        {
+            return mThis.GetPtr();
+        }
+    };
+
+    return new _hx_array_map(this);
+}
+HX_ARRAY_FUNC(, void, __SetSize, HX_ARRAY_ARG_LIST1(int), HX_ARRAY_FUNC_LIST1(int), HX_ARG_LIST1);
+HX_ARRAY_FUNC(, void, __SetSizeExact, HX_ARRAY_ARG_LIST1(int), HX_ARRAY_FUNC_LIST1(int), HX_ARG_LIST1);
+HX_ARRAY_FUNC(return, ELEM_&, __unsafe_get, HX_ARRAY_ARG_LIST1(int), HX_ARRAY_FUNC_LIST1(int), HX_ARG_LIST1);
+HX_ARRAY_FUNC(return, ELEM_&, __unsafe_set, HX_ARRAY_ARG_LIST2(int, ELEM_), HX_ARRAY_FUNC_LIST2(int, ELEM_), HX_ARG_LIST2);
+HX_ARRAY_FUNC(, void, blit, HX_ARRAY_ARG_LIST4(int, Array<ELEM_>, int, int), HX_ARRAY_FUNC_LIST4(int, Array<ELEM_>, int, int), HX_ARG_LIST4);
+HX_ARRAY_FUNC(, void, zero, HX_ARRAY_ARG_LIST2(::Dynamic, ::Dynamic), HX_ARRAY_FUNC_LIST2(::Dynamic, ::Dynamic), HX_ARG_LIST2);
+HX_ARRAY_FUNC(, void, memcmp, HX_ARRAY_ARG_LIST1(Array<ELEM_>), HX_ARRAY_FUNC_LIST1(Array<ELEM_>), HX_ARG_LIST1);
+HX_ARRAY_FUNC(, void, resize, HX_ARRAY_ARG_LIST1(int), HX_ARRAY_FUNC_LIST1(int), HX_ARG_LIST1);
+
+template<class ELEM_>
+hx::Val Array_obj<ELEM_>::__Field(const String& inString, hx::PropertyAccess inCallProp)
+{
+#define ARRAY_RUN_FUNC(ret,func,dynamic_arg_list,arg_list) \
+    ::Dynamic __run(dynamic_arg_list) \
+    { \
+        ret mThis->__##func(arg_list); return ::Dynamic(); \
+    }
+
+#define DEFINE_ARRAY_FUNC(ret,func,array_list,run_func,ARG_C) \
+    struct Reflective_##func : public ::hx::Object \
+    { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId = ::hx::clsIdClosure }; \
+       bool __IsFunction() const { return true; } \
+       ::Array_obj<ELEM_> *mThis; \
+       Reflective_##func(::Array_obj<ELEM_> *inThis) : mThis(inThis) { } \
+       ::String toString() override { return HX_CSTRING(#func) ; } \
+       ::String __ToString() const override { return HX_CSTRING(#func) ; } \
+       int __GetType() const override { return vtFunction; } \
+       void *__GetHandle() const override { return mThis; } \
+       int __ArgCount() const override { return ARG_C; } \
+       void __Mark(::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(mThis); } \
+       ARRAY_VISIT_FUNC \
+       ::Dynamic __Run(const ::Array<::Dynamic> &inArgs) override \
+       { \
+          ret mThis->__##func(array_list); return ::Dynamic(); \
+       } \
+       run_func \
+       int __Compare(const ::hx::Object *inRHS) const override \
+       { \
+          if (!dynamic_cast<const Reflective_##func *>(inRHS)) return -1; \
+          return (mThis==inRHS->__GetHandle() ? 0 : -1); \
+       } \
+    };
+
+
+#define DEFINE_ARRAY_FUNC0(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST0,ARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST0,HX_ARG_LIST0),0)
+#define DEFINE_ARRAY_FUNC1(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST1,ARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST1,HX_ARG_LIST1),1)
+#define DEFINE_ARRAY_FUNC2(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST2,ARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST2,HX_ARG_LIST2),2)
+#define DEFINE_ARRAY_FUNC3(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST3,ARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST3,HX_ARG_LIST3),3)
+#define DEFINE_ARRAY_FUNC4(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST4,ARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST4,HX_ARG_LIST4),4)
+
+    DEFINE_ARRAY_FUNC1(, __SetSize);
+    DEFINE_ARRAY_FUNC1(, __SetSizeExact);
+    DEFINE_ARRAY_FUNC2(, insert);
+    DEFINE_ARRAY_FUNC0(, reverse);
+    DEFINE_ARRAY_FUNC1(, sort);
+    DEFINE_ARRAY_FUNC1(, unshift);
+    DEFINE_ARRAY_FUNC4(, blit);
+    DEFINE_ARRAY_FUNC2(, zero);
+    DEFINE_ARRAY_FUNC1(, resize);
+    DEFINE_ARRAY_FUNC1(return, concat);
+    DEFINE_ARRAY_FUNC0(return, iterator);
+    DEFINE_ARRAY_FUNC0(return, keyValueIterator);
+    DEFINE_ARRAY_FUNC1(return, join);
+    DEFINE_ARRAY_FUNC0(return, pop);
+    DEFINE_ARRAY_FUNC0(return, copy);
+    DEFINE_ARRAY_FUNC1(return, push);
+    DEFINE_ARRAY_FUNC1(return, contains);
+    DEFINE_ARRAY_FUNC1(return, remove);
+    DEFINE_ARRAY_FUNC1(return, removeAt);
+    DEFINE_ARRAY_FUNC2(return, indexOf);
+    DEFINE_ARRAY_FUNC2(return, lastIndexOf);
+    DEFINE_ARRAY_FUNC0(return, shift);
+    DEFINE_ARRAY_FUNC2(return, slice);
+    DEFINE_ARRAY_FUNC2(return, splice);
+    DEFINE_ARRAY_FUNC0(return, toString);
+    DEFINE_ARRAY_FUNC1(return, map);
+    DEFINE_ARRAY_FUNC1(return, filter);
+    DEFINE_ARRAY_FUNC1(return, __unsafe_get);
+    DEFINE_ARRAY_FUNC2(return, __unsafe_set);
+    DEFINE_ARRAY_FUNC1(return, memcmp);
+
+    if (inString == HX_CSTRING("length")) return (int)size();
+    if (inString == HX_CSTRING("concat")) return new Reflective_concat(this);
+    if (inString == HX_CSTRING("insert")) return new Reflective_insert(this);
+    if (inString == HX_CSTRING("copy")) return new Reflective_copy(this);
+    if (inString == HX_CSTRING("iterator")) return new Reflective_iterator(this);
+    if (inString == HX_CSTRING("keyValueIterator")) return new Reflective_keyValueIterator(this);
+    if (inString == HX_CSTRING("join")) return new Reflective_join(this);
+    if (inString == HX_CSTRING("pop")) return new Reflective_pop(this);
+    if (inString == HX_CSTRING("push")) return new Reflective_push(this);
+    if (inString == HX_CSTRING("contains")) return new Reflective_contains(this);
+    if (inString == HX_CSTRING("remove")) return new Reflective_remove(this);
+    if (inString == HX_CSTRING("removeAt")) return new Reflective_removeAt(this);
+    if (inString == HX_CSTRING("indexOf")) return new Reflective_indexOf(this);
+    if (inString == HX_CSTRING("lastIndexOf")) return new Reflective_lastIndexOf(this);
+    if (inString == HX_CSTRING("reverse")) return new Reflective_reverse(this);
+    if (inString == HX_CSTRING("shift")) return new Reflective_shift(this);
+    if (inString == HX_CSTRING("splice")) return new Reflective_splice(this);
+    if (inString == HX_CSTRING("slice")) return new Reflective_slice(this);
+    if (inString == HX_CSTRING("sort")) return new Reflective_sort(this);
+    if (inString == HX_CSTRING("toString")) return new Reflective_toString(this);
+    if (inString == HX_CSTRING("unshift")) return new Reflective_unshift(this);
+    if (inString == HX_CSTRING("filter")) return new Reflective_filter(this);
+    if (inString == HX_CSTRING("map")) return new Reflective_map(this);
+    if (inString == HX_CSTRING("__SetSize")) return new Reflective___SetSize(this);
+    if (inString == HX_CSTRING("__SetSizeExact")) return new Reflective___SetSizeExact(this);
+    if (inString == HX_CSTRING("__unsafe_get")) return new Reflective___unsafe_get(this);
+    if (inString == HX_CSTRING("__unsafe_set")) return new Reflective___unsafe_set(this);
+    if (inString == HX_CSTRING("blit")) return new Reflective_blit(this);
+    if (inString == HX_CSTRING("zero")) return new Reflective_zero(this);
+    if (inString == HX_CSTRING("memcmp")) return new Reflective_memcmp(this);
+    if (inString == HX_CSTRING("_hx_storeType")) return (int)getStoreType();
+    if (inString == HX_CSTRING("_hx_elementSize")) return (int)GetElementSize();
+    if (inString == HX_CSTRING("_hx_pointer")) return __pointerToBase();
+    if (inString == HX_CSTRING("resize")) return new Reflective_resize(this);
+    return null();
+}
+
+#endif
+
+
+#endif
diff --git a/Sources/c_borogove/iinclude/Dynamic.h b/Sources/c_borogove/iinclude/Dynamic.h
index b586516..1414347 100644
--- a/Sources/c_borogove/iinclude/Dynamic.h
+++ b/Sources/c_borogove/iinclude/Dynamic.h
@@ -1,6 +1,8 @@
 #ifndef HX_DYNAMIC_H
 #define HX_DYNAMIC_H
 
+#include <hx/OS.h>
+
 // --- Dynamic ---------------------------------------------------------------
 //
 // The Dynamic class views all classes through the hx::Object interface, and
@@ -24,13 +26,14 @@ public:
    Dynamic(unsigned short inVal);
    Dynamic(unsigned char inVal);
    Dynamic(signed char inVal);
+   Dynamic(char16_t inVal);
+   Dynamic(char32_t inVal);
    Dynamic(const cpp::CppInt32__ &inVal);
    Dynamic(bool inVal);
    Dynamic(double inVal);
    Dynamic(float inVal);
    Dynamic(cpp::Int64 inVal);
    Dynamic(cpp::UInt64 inVal);
-   Dynamic(unsigned long inVal);
    Dynamic(hx::Object *inObj) : super(inObj) { }
    Dynamic(const String &inString);
    Dynamic(const null &inNull) : super(0) { }
@@ -42,6 +45,9 @@ public:
    #if !defined(__GNUC__) || defined(__MINGW32__) || (defined(__WORDSIZE) && (__WORDSIZE != 64))
    Dynamic(long inVal);
    #endif
+   #if defined(NEKO_MAC) || defined(NEKO_BSD)
+   Dynamic(unsigned long inVal);
+   #endif
 #ifdef __OBJC__
 #ifdef HXCPP_OBJC
    Dynamic(const id inObjc);
@@ -71,10 +77,15 @@ public:
    inline operator unsigned char () const { return mPtr ? mPtr->__ToInt() : 0; }
    inline operator char () const { return mPtr ? mPtr->__ToInt() : 0; }
    inline operator signed char () const { return mPtr ? mPtr->__ToInt() : 0; }
+   inline operator char16_t () const { return mPtr ? mPtr->__ToInt() : 0; }
+   inline operator char32_t () const { return mPtr ? mPtr->__ToInt() : 0; }
    inline operator bool() const { return mPtr && mPtr->__ToInt(); }
    inline operator cpp::Int64() const { return mPtr ? mPtr->__ToInt64() : 0; }
    inline operator cpp::UInt64() const { return mPtr ? mPtr->__ToInt64() : 0; }
+   inline operator ::hx::Object*() const { return mPtr; }
+   #if defined(NEKO_MAC) || defined(NEKO_BSD)
    inline operator unsigned long() const { return mPtr ? mPtr->__ToInt64() : 0; }
+    #endif
 
    // Conversion to generic pointer requires you to tag the class with a typedef
    template<typename T>
@@ -161,10 +172,10 @@ public:
 
 
    #define DYNAMIC_COMPARE_OP( op ) \
-      bool operator op (const String &inRHS)  const { return mPtr && ((String)(*this) op inRHS); } \
+      bool operator op (const ::String &inRHS)  const { return mPtr && ((::String)(*this) op inRHS); } \
       bool operator op (double inRHS)  const { return IsNumeric() && ((double)(*this) op inRHS); } \
-      bool operator op (cpp::Int64 inRHS)  const { return IsNumeric() && ((cpp::Int64)(*this) op inRHS); } \
-      bool operator op (cpp::UInt64 inRHS)  const { return IsNumeric() && ((cpp::Int64)(*this) op inRHS); } \
+      bool operator op (::cpp::Int64 inRHS)  const { return IsNumeric() && ((::cpp::Int64)(*this) op inRHS); } \
+      bool operator op (::cpp::UInt64 inRHS)  const { return IsNumeric() && ((::cpp::UInt64)(*this) op inRHS); } \
       bool operator op (float inRHS)  const { return IsNumeric() && ((double)(*this) op inRHS); } \
       bool operator op (int inRHS)  const { return IsNumeric() && ((double)(*this) op (double)inRHS); } \
       bool operator op (unsigned int inRHS)  const { return IsNumeric() && ((double)(*this) op (double)inRHS); } \
@@ -172,12 +183,14 @@ public:
       bool operator op (unsigned short inRHS)  const { return IsNumeric() && ((double)(*this) op (double)inRHS); } \
       bool operator op (signed char inRHS)  const { return IsNumeric() && ((double)(*this) op (double)inRHS); } \
       bool operator op (unsigned char inRHS)  const { return IsNumeric() && ((double)(*this) op (double)inRHS); } \
+      bool operator op (char16_t inRHS)  const { return IsNumeric() && ((double)(*this) op (double)inRHS); } \
+      bool operator op (char32_t inRHS)  const { return IsNumeric() && ((double)(*this) op (double)inRHS); } \
       bool operator op (bool inRHS)  const { return IsBool() && ((double)(*this) op (double)inRHS); } \
 
    bool operator != (const String &inRHS)  const { return !mPtr || ((String)(*this) != inRHS); }
    bool operator != (double inRHS)  const { return !IsNumeric() || ((double)(*this) != inRHS); }
    bool operator != (cpp::Int64 inRHS)  const { return !IsNumeric() || ((cpp::Int64)(*this) != inRHS); }
-   bool operator != (cpp::UInt64 inRHS)  const { return !IsNumeric() || ((cpp::Int64)(*this) != inRHS); }
+   bool operator != (cpp::UInt64 inRHS)  const { return !IsNumeric() || ((cpp::UInt64)(*this) != inRHS); }
    bool operator != (float inRHS)  const { return !IsNumeric() || ((double)(*this) != inRHS); }
    bool operator != (int inRHS)  const { return !IsNumeric() || ((double)(*this) != (double)inRHS); }
    bool operator != (unsigned int inRHS)  const { return !IsNumeric() || ((double)(*this) != (double)inRHS); }
@@ -185,13 +198,15 @@ public:
    bool operator != (unsigned short inRHS)  const { return !IsNumeric() || ((double)(*this) != (double)inRHS); }
    bool operator != (signed char inRHS)  const { return !IsNumeric() || ((double)(*this) != (double)inRHS); }
    bool operator != (unsigned char inRHS)  const { return !IsNumeric() || ((double)(*this) != (double)inRHS); }
+   bool operator != (char16_t inRHS)  const { return !IsNumeric() || ((double)(*this) != (double)inRHS); }
+   bool operator != (char32_t inRHS)  const { return !IsNumeric() || ((double)(*this) != (double)inRHS); }
    bool operator != (bool inRHS)  const { return !IsBool() || ((double)(*this) != (double)inRHS); }
 
 
 
    #define DYNAMIC_COMPARE_OP_ALL( op ) \
-      bool operator op (const Dynamic &inRHS) const { return mPtr && (Compare(inRHS) op 0); } \
-      bool operator op (const cpp::Variant &inRHS) const { return *this op Dynamic(inRHS); } \
+      bool operator op (const ::Dynamic &inRHS) const { return mPtr && (Compare(inRHS) op 0); } \
+      bool operator op (const ::cpp::Variant &inRHS) const { return *this op ::Dynamic(inRHS); } \
       DYNAMIC_COMPARE_OP(op)
 
 
@@ -230,6 +245,8 @@ public:
     Dynamic operator+(const unsigned short &i) const;
     Dynamic operator+(const signed char &i) const;
     Dynamic operator+(const unsigned char &i) const;
+    Dynamic operator+(const char16_t& i) const;
+    Dynamic operator+(const char32_t& i) const;
     Dynamic operator+(const double &d) const;
     Dynamic operator+(const float &d) const;
     Dynamic operator+(const cpp::Variant &d) const;
@@ -249,32 +266,36 @@ public:
    double operator / (const int &inRHS) const { return (double)(*this) / (double)inRHS; }
 
    #define DYNAMIC_ARITH( op ) \
-      Dynamic operator op (const cpp::Variant &inRHS) const \
+      ::Dynamic operator op (const ::cpp::Variant &inRHS) const \
         { return mPtr->__GetType()==vtInt && inRHS.isInt() ? \
-              Dynamic((int)(*this) op (int)inRHS) : \
-              Dynamic( (double)(*this) op (double)inRHS); } \
-      Dynamic operator op (const Dynamic &inRHS) const \
+              ::Dynamic((int)(*this) op (int)inRHS) : \
+              ::Dynamic( (double)(*this) op (double)inRHS); } \
+      ::Dynamic operator op (const ::Dynamic &inRHS) const \
         { return mPtr->__GetType()==vtInt && inRHS.mPtr->__GetType()==vtInt ? \
-              Dynamic((int)(*this) op (int)inRHS) : \
-              Dynamic( (double)(*this) op (double)inRHS); } \
+              ::Dynamic((int)(*this) op (int)inRHS) : \
+              ::Dynamic( (double)(*this) op (double)inRHS); } \
       double operator op (const double &inRHS) const { return (double)(*this) op (double)inRHS; } \
       double operator op (const float &inRHS) const { return (double)(*this) op (double)inRHS; } \
-      Dynamic operator op (const int &inRHS) const \
-        { return mPtr->__GetType()==vtInt ?  Dynamic((int)(*this) op inRHS) : Dynamic((double)(*this) op inRHS); } \
-      Dynamic operator op (const unsigned int &inRHS) const \
-        { return mPtr->__GetType()==vtInt ?  Dynamic((int)(*this) op inRHS) : Dynamic((double)(*this) op inRHS); } \
-      Dynamic operator op (const short &inRHS) const \
-        { return mPtr->__GetType()==vtInt ?  Dynamic((int)(*this) op inRHS) : Dynamic((double)(*this) op inRHS); } \
-      Dynamic operator op (const unsigned short &inRHS) const \
-        { return mPtr->__GetType()==vtInt ?  Dynamic((int)(*this) op inRHS) : Dynamic((double)(*this) op inRHS); } \
-      Dynamic operator op (const signed char &inRHS) const \
-        { return mPtr->__GetType()==vtInt ?  Dynamic((int)(*this) op inRHS) : Dynamic((double)(*this) op inRHS); } \
-      Dynamic operator op (const unsigned char &inRHS) const \
-        { return mPtr->__GetType()==vtInt ?  Dynamic((int)(*this) op inRHS) : Dynamic((double)(*this) op inRHS); } \
-      Dynamic operator op (const cpp::Int64 &inRHS) const \
-        { return Dynamic((double)(*this) op inRHS); } \
-      Dynamic operator op (const cpp::UInt64 &inRHS) const \
-        { return Dynamic((double)(*this) op inRHS); } \
+      ::Dynamic operator op (const int &inRHS) const \
+        { return mPtr->__GetType()==vtInt ?  ::Dynamic((int)(*this) op inRHS) : ::Dynamic((double)(*this) op inRHS); } \
+      ::Dynamic operator op (const unsigned int &inRHS) const \
+        { return mPtr->__GetType()==vtInt ?  ::Dynamic((int)(*this) op inRHS) : ::Dynamic((double)(*this) op inRHS); } \
+      ::Dynamic operator op (const short &inRHS) const \
+        { return mPtr->__GetType()==vtInt ?  ::Dynamic((int)(*this) op inRHS) : ::Dynamic((double)(*this) op inRHS); } \
+      ::Dynamic operator op (const unsigned short &inRHS) const \
+        { return mPtr->__GetType()==vtInt ?  ::Dynamic((int)(*this) op inRHS) : ::Dynamic((double)(*this) op inRHS); } \
+      ::Dynamic operator op (const signed char &inRHS) const \
+        { return mPtr->__GetType()==vtInt ?  ::Dynamic((int)(*this) op inRHS) : ::Dynamic((double)(*this) op inRHS); } \
+      ::Dynamic operator op (const unsigned char &inRHS) const \
+        { return mPtr->__GetType()==vtInt ?  ::Dynamic((int)(*this) op inRHS) : ::Dynamic((double)(*this) op inRHS); } \
+      ::Dynamic operator op (const char16_t &inRHS) const \
+        { return mPtr->__GetType()==vtInt ?  ::Dynamic((int)(*this) op inRHS) : ::Dynamic((double)(*this) op inRHS); } \
+      ::Dynamic operator op (const char32_t &inRHS) const \
+        { return mPtr->__GetType()==vtInt ?  ::Dynamic((int)(*this) op inRHS) : ::Dynamic((double)(*this) op inRHS); } \
+      ::Dynamic operator op (const ::cpp::Int64 &inRHS) const \
+        { return ::Dynamic((double)(*this) op inRHS); } \
+      ::Dynamic operator op (const ::cpp::UInt64 &inRHS) const \
+        { return ::Dynamic((double)(*this) op inRHS); } \
 
    DYNAMIC_ARITH( - )
    DYNAMIC_ARITH( * )
@@ -282,21 +303,25 @@ public:
    static void ThrowBadFunctionError();
    inline void CheckFPtr() { if (!mPtr) ThrowBadFunctionError(); }
 
+#if (HXCPP_API_LEVEL>=500)
+   template<class... TArgs>
+   ::Dynamic operator()(const TArgs&... args);
+#else
    inline  ::Dynamic operator()() { CheckFPtr(); return mPtr->__run(); }
-   inline  ::Dynamic operator()(const Dynamic &inArg0) { CheckFPtr(); return mPtr->__run(inArg0); }
-   inline  ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1) { CheckFPtr(); return mPtr->__run(inArg0,inArg1); }
-   inline  ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2) { CheckFPtr(); return mPtr->__run(inArg0,inArg1,inArg2); }
-   inline  ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3) { CheckFPtr(); return mPtr->__run(inArg0,inArg1,inArg2,inArg3); }
-   inline  ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4) { CheckFPtr(); return mPtr->__run(inArg0,inArg1,inArg2,inArg3,inArg4); }
+   inline  ::Dynamic operator()(const Dynamic& inArg0) { CheckFPtr(); return mPtr->__run(inArg0); }
+   inline  ::Dynamic operator()(const Dynamic& inArg0, const Dynamic& inArg1) { CheckFPtr(); return mPtr->__run(inArg0, inArg1); }
+   inline  ::Dynamic operator()(const Dynamic& inArg0, const Dynamic& inArg1, const Dynamic& inArg2) { CheckFPtr(); return mPtr->__run(inArg0, inArg1, inArg2); }
+   inline  ::Dynamic operator()(const Dynamic& inArg0, const Dynamic& inArg1, const Dynamic& inArg2, const Dynamic& inArg3) { CheckFPtr(); return mPtr->__run(inArg0, inArg1, inArg2, inArg3); }
+   inline  ::Dynamic operator()(const Dynamic& inArg0, const Dynamic& inArg1, const Dynamic& inArg2, const Dynamic& inArg3, const Dynamic& inArg4) { CheckFPtr(); return mPtr->__run(inArg0, inArg1, inArg2, inArg3, inArg4); }
 
    HX_DECLARE_DYNAMIC_FUNCTIONS;
+#endif
 
 
    typedef const Dynamic &D;
 };
 
 
-
 namespace hx
 {
 
@@ -363,9 +388,9 @@ inline int Dynamic::Cast<int>() const { return mPtr ? mPtr->__ToInt() : 0; }
 template<>
 inline bool Dynamic::Cast<bool>() const { return mPtr ? mPtr->__ToInt() : 0; }
 template<>
-inline double Dynamic::Cast<double>() const { return mPtr ? mPtr->__ToDouble() : 0; }
+inline double Dynamic::Cast<double>() const { return mPtr ? mPtr->__ToDouble() : 0.0; }
 template<>
-inline float Dynamic::Cast<float>() const { return mPtr ? mPtr->__ToDouble() : 0; }
+inline float Dynamic::Cast<float>() const { return (float)(mPtr ? mPtr->__ToDouble() : 0.0f); }
 template<>
 inline String Dynamic::Cast<String>() const { return mPtr ? mPtr->toString() : String(null()); }
 
@@ -407,8 +432,8 @@ inline bool Dynamic::IsClass< ::cpp::Int64>() { return mPtr && mPtr->__GetClass(
 inline String Dynamic::operator+(const String &s) const { return Cast<String>() + s; }
 
 #define HX_DYNAMIC_OP_ISEQ(T) \
-inline bool operator == (const T &inLHS,const Dynamic &inRHS) { return inRHS==inLHS; } \
-inline bool operator != (const T &inLHS,const Dynamic &inRHS) { return inRHS!=inLHS; }
+inline bool operator == (const T &inLHS,const ::Dynamic &inRHS) { return inRHS==inLHS; } \
+inline bool operator != (const T &inLHS,const ::Dynamic &inRHS) { return inRHS!=inLHS; }
 
 HX_DYNAMIC_OP_ISEQ(String)
 HX_DYNAMIC_OP_ISEQ(double)
@@ -448,16 +473,18 @@ COMPARE_DYNAMIC_OP( >  )
 
 
 #define ARITH_DYNAMIC( op ) \
-   inline double operator op (const cpp::Int64 &inLHS,const Dynamic &inRHS) { return inLHS op (cpp::Int64)inRHS;} \
-   inline double operator op (const cpp::UInt64 &inLHS,const Dynamic &inRHS) { return inLHS op (cpp::UInt64)inRHS;} \
-   inline double operator op (const double &inLHS,const Dynamic &inRHS) { return inLHS op (double)inRHS;} \
-   inline double operator op (const float &inLHS,const Dynamic &inRHS) { return inLHS op (double)inRHS;} \
-   inline double operator op (const int &inLHS,const Dynamic &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const unsigned int &inLHS,const Dynamic &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const short &inLHS,const Dynamic &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const unsigned short &inLHS,const Dynamic &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const signed char &inLHS,const Dynamic &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const unsigned char &inLHS,const Dynamic &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const ::cpp::Int64 &inLHS,const ::Dynamic &inRHS) { return (double)( inLHS op (::cpp::Int64)inRHS );} \
+   inline double operator op (const ::cpp::UInt64 &inLHS,const ::Dynamic &inRHS) { return (double)( inLHS op (::cpp::UInt64)inRHS );} \
+   inline double operator op (const double &inLHS,const ::Dynamic &inRHS) { return inLHS op (double)inRHS;} \
+   inline double operator op (const float &inLHS,const ::Dynamic &inRHS) { return inLHS op (double)inRHS;} \
+   inline double operator op (const int &inLHS,const ::Dynamic &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const unsigned int &inLHS,const ::Dynamic &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const short &inLHS,const ::Dynamic &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const unsigned short &inLHS,const ::Dynamic &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const signed char &inLHS,const ::Dynamic &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const unsigned char &inLHS,const ::Dynamic &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const char16_t &inLHS,const ::Dynamic &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const char32_t &inLHS,const ::Dynamic &inRHS) { return inLHS op (double)inRHS; } \
 
 ARITH_DYNAMIC( - )
 ARITH_DYNAMIC( + )
diff --git a/Sources/c_borogove/iinclude/Enum.h b/Sources/c_borogove/iinclude/Enum.h
index fed5b22..2b41785 100644
--- a/Sources/c_borogove/iinclude/Enum.h
+++ b/Sources/c_borogove/iinclude/Enum.h
@@ -47,18 +47,18 @@ class HXCPP_EXTERN_CLASS_ATTRIBUTES EnumBase_obj : public hx::Object
       static hx::ObjectPtr<hx::Class_obj> &__SGetClass();
 
 
-      String toString();
+      String toString() HXCPP_OVERRIDE;
 
       EnumBase_obj() : index(-1) { }
       EnumBase_obj(const null &inNull) : index(-1) { }
-      int __GetType() const { return vtEnum; }
+      int __GetType() const HXCPP_OVERRIDE { return vtEnum; }
       static Dynamic __CreateEmpty();
       static Dynamic __Create(DynamicArray inArgs);
       static void __boot();
 
-      void __Mark(hx::MarkContext *__inCtx);
+      void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE;
       #ifdef HXCPP_VISIT_ALLOCS
-      void __Visit(hx::VisitContext *__inCtx);
+      void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE;
       #endif
 
       static hx::ObjectPtr<EnumBase_obj> Resolve(String inName);
@@ -98,7 +98,7 @@ class HXCPP_EXTERN_CLASS_ATTRIBUTES EnumBase_obj : public hx::Object
       inline ::Dynamic _hx_getParamI(int inId) { return _hx_getFixed()[inId]; }
       inline int _hx_getParamCount() { return mFixedFields; }
       // Alias for _hx_getParamI
-      Dynamic __GetItem(int inIndex) const;
+      Dynamic __GetItem(int inIndex) const HXCPP_OVERRIDE;
 
       // For legacy
       inline String __Tag() const { return _hx_tag; }
@@ -108,7 +108,7 @@ class HXCPP_EXTERN_CLASS_ATTRIBUTES EnumBase_obj : public hx::Object
       int _hx_getIndex() const { return index; }
 
 
-      int __Compare(const hx::Object *inRHS) const;
+      int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE;
 
       virtual String GetEnumName( ) const { return HX_CSTRING("Enum"); }
 };
diff --git a/Sources/c_borogove/iinclude/Lambda.h b/Sources/c_borogove/iinclude/Lambda.h
index 1ccb0b7..43b4ef0 100644
--- a/Sources/c_borogove/iinclude/Lambda.h
+++ b/Sources/c_borogove/iinclude/Lambda.h
@@ -55,6 +55,9 @@ class HXCPP_CLASS_ATTRIBUTES Lambda_obj : public ::hx::Object
 		static bool exists( ::Dynamic it, ::Dynamic f);
 		static ::Dynamic exists_dyn();
 
+		static ::cpp::VirtualArray filter( ::Dynamic it, ::Dynamic f);
+		static ::Dynamic filter_dyn();
+
 		static  ::Dynamic fold( ::Dynamic it, ::Dynamic f, ::Dynamic first);
 		static ::Dynamic fold_dyn();
 
diff --git a/Sources/c_borogove/iinclude/StringTools.h b/Sources/c_borogove/iinclude/StringTools.h
index 039cb8b..f08c996 100644
--- a/Sources/c_borogove/iinclude/StringTools.h
+++ b/Sources/c_borogove/iinclude/StringTools.h
@@ -52,6 +52,9 @@ class HXCPP_CLASS_ATTRIBUTES StringTools_obj : public ::hx::Object
 		static ::String urlEncode(::String s);
 		static ::Dynamic urlEncode_dyn();
 
+		static ::String urlDecode(::String s);
+		static ::Dynamic urlDecode_dyn();
+
 		static ::String htmlEscape(::String s, ::Dynamic quotes);
 		static ::Dynamic htmlEscape_dyn();
 
diff --git a/Sources/c_borogove/iinclude/Xml.h b/Sources/c_borogove/iinclude/Xml.h
index d4c0dc7..6019e13 100644
--- a/Sources/c_borogove/iinclude/Xml.h
+++ b/Sources/c_borogove/iinclude/Xml.h
@@ -66,6 +66,9 @@ class HXCPP_CLASS_ATTRIBUTES Xml_obj : public ::hx::Object
 		 ::Dynamic attributes();
 		::Dynamic attributes_dyn();
 
+		 ::Xml firstElement();
+		::Dynamic firstElement_dyn();
+
 		virtual ::String toString();
 		::Dynamic toString_dyn();
 
diff --git a/Sources/c_borogove/iinclude/borogove/AttachmentUploadError.h b/Sources/c_borogove/iinclude/borogove/AttachmentUploadError.h
new file mode 100644
index 0000000..7bc6a86
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/AttachmentUploadError.h
@@ -0,0 +1,59 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_AttachmentUploadError
+#define INCLUDED_borogove_AttachmentUploadError
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+#ifndef INCLUDED_haxe_Exception
+#include <haxe/Exception.h>
+#endif
+HX_DECLARE_CLASS1(borogove,AttachmentUploadError)
+HX_DECLARE_CLASS1(haxe,Exception)
+
+namespace borogove{
+
+
+class HXCPP_CLASS_ATTRIBUTES AttachmentUploadError_obj : public  ::haxe::Exception_obj
+{
+	public:
+		typedef  ::haxe::Exception_obj super;
+		typedef AttachmentUploadError_obj OBJ_;
+		AttachmentUploadError_obj();
+
+	public:
+		enum { _hx_ClassId = 0x0936a07b };
+
+		void __construct(::String code,::String message,::String serviceId, ::Dynamic statusCode, ::Dynamic cause,::Array< ::Dynamic> failures);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.AttachmentUploadError")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.AttachmentUploadError"); }
+		static ::hx::ObjectPtr< AttachmentUploadError_obj > __new(::String code,::String message,::String serviceId, ::Dynamic statusCode, ::Dynamic cause,::Array< ::Dynamic> failures);
+		static ::hx::ObjectPtr< AttachmentUploadError_obj > __alloc(::hx::Ctx *_hx_ctx,::String code,::String message,::String serviceId, ::Dynamic statusCode, ::Dynamic cause,::Array< ::Dynamic> failures);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~AttachmentUploadError_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("AttachmentUploadError",c4,e2,8c,4d); }
+
+		::String code;
+		::String serviceId;
+		 ::Dynamic statusCode;
+		 ::Dynamic cause;
+		::Array< ::Dynamic> failures;
+};
+
+} // end namespace borogove
+
+#endif /* INCLUDED_borogove_AttachmentUploadError */ 
diff --git a/Sources/c_borogove/iinclude/borogove/AvailableChat.h b/Sources/c_borogove/iinclude/borogove/AvailableChat.h
index 3b5f962..e00b0fc 100644
--- a/Sources/c_borogove/iinclude/borogove/AvailableChat.h
+++ b/Sources/c_borogove/iinclude/borogove/AvailableChat.h
@@ -8,6 +8,7 @@
 
 HX_DECLARE_CLASS1(borogove,AvailableChat)
 HX_DECLARE_CLASS1(borogove,Caps)
+HX_DECLARE_CLASS1(borogove,Stanza)
 
 namespace borogove{
 
@@ -22,13 +23,13 @@ class HXCPP_CLASS_ATTRIBUTES AvailableChat_obj : public ::hx::Object
 	public:
 		enum { _hx_ClassId = 0x579930bc };
 
-		void __construct(::String chatId,::String displayName,::String note, ::borogove::Caps caps);
+		void __construct(::String chatId,::String displayName,::String note, ::borogove::Caps caps, ::borogove::Stanza rosterItem);
 		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.AvailableChat")
 			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
 		inline void *operator new(size_t inSize, int extra)
 			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.AvailableChat"); }
-		static ::hx::ObjectPtr< AvailableChat_obj > __new(::String chatId,::String displayName,::String note, ::borogove::Caps caps);
-		static ::hx::ObjectPtr< AvailableChat_obj > __alloc(::hx::Ctx *_hx_ctx,::String chatId,::String displayName,::String note, ::borogove::Caps caps);
+		static ::hx::ObjectPtr< AvailableChat_obj > __new(::String chatId,::String displayName,::String note, ::borogove::Caps caps, ::borogove::Stanza rosterItem);
+		static ::hx::ObjectPtr< AvailableChat_obj > __alloc(::hx::Ctx *_hx_ctx,::String chatId,::String displayName,::String note, ::borogove::Caps caps, ::borogove::Stanza rosterItem);
 		static void * _hx_vtable;
 		static Dynamic __CreateEmpty();
 		static Dynamic __Create(::hx::DynamicArray inArgs);
@@ -59,6 +60,7 @@ class HXCPP_CLASS_ATTRIBUTES AvailableChat_obj : public ::hx::Object
 		::Dynamic note__fromC_dyn();
 
 		 ::borogove::Caps caps;
+		 ::borogove::Stanza rosterItem;
 		bool isChannel();
 		::Dynamic isChannel_dyn();
 
diff --git a/Sources/c_borogove/iinclude/borogove/Channel.h b/Sources/c_borogove/iinclude/borogove/Channel.h
index 41b45c8..7a3db80 100644
--- a/Sources/c_borogove/iinclude/borogove/Channel.h
+++ b/Sources/c_borogove/iinclude/borogove/Channel.h
@@ -9,6 +9,7 @@
 #ifndef INCLUDED_borogove_Chat
 #include <borogove/Chat.h>
 #endif
+HX_DECLARE_CLASS1(borogove,AttachmentSource)
 HX_DECLARE_CLASS1(borogove,Caps)
 HX_DECLARE_CLASS1(borogove,Channel)
 HX_DECLARE_CLASS1(borogove,Chat)
@@ -77,7 +78,7 @@ class HXCPP_CLASS_ATTRIBUTES Channel_obj : public  ::borogove::Chat_obj
 		void selfPing(bool refresh);
 		::Dynamic selfPing_dyn();
 
-		::Dynamic join();
+		::Dynamic join(::hx::Null< bool >  justCleared);
 		::Dynamic join_dyn();
 
 		void selfPingSuccess();
@@ -88,6 +89,12 @@ class HXCPP_CLASS_ATTRIBUTES Channel_obj : public  ::borogove::Chat_obj
 		::String subject();
 		::Dynamic subject_dyn();
 
+		bool canSetSubject();
+		::Dynamic canSetSubject_dyn();
+
+		void setSubject(::String subject,::String threadId);
+		::Dynamic setSubject_dyn();
+
 		::String description();
 		::Dynamic description_dyn();
 
@@ -102,6 +109,22 @@ class HXCPP_CLASS_ATTRIBUTES Channel_obj : public  ::borogove::Chat_obj
 
 		bool canModerate();
 
+		void requestToSend();
+		::Dynamic requestToSend_dyn();
+
+		bool isOwner();
+		::Dynamic isOwner_dyn();
+
+		::Dynamic commands();
+
+		bool hasCommands();
+
+		bool canSetPhoto();
+		::Dynamic canSetPhoto_dyn();
+
+		void setPhoto( ::borogove::AttachmentSource source);
+		::Dynamic setPhoto_dyn();
+
 		 ::Dynamic getCaps();
 
 		void setPresence(::String resource, ::borogove::Stanza presence,bool noStore);
@@ -128,6 +151,8 @@ class HXCPP_CLASS_ATTRIBUTES Channel_obj : public  ::borogove::Chat_obj
 
 		bool syncing();
 
+		bool inMessageSync();
+
 		::Dynamic setLastMessage( ::borogove::ChatMessage message);
 
 		bool canAudioCall();
@@ -144,6 +169,14 @@ class HXCPP_CLASS_ATTRIBUTES Channel_obj : public  ::borogove::Chat_obj
 
 		::Dynamic getMemberDetails(::Array< ::String > memberIds);
 
+		::Dynamic voiceRequests();
+		::Dynamic voiceRequests_dyn();
+
+		void voiceRequests__fromC(::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context);
+
+		void voiceRequestRespond( ::borogove::Member member,bool canSend);
+		::Dynamic voiceRequestRespond_dyn();
+
 		 ::borogove::Member buildMember(::String resource, ::borogove::Stanza presence);
 		::Dynamic buildMember_dyn();
 
@@ -168,11 +201,14 @@ class HXCPP_CLASS_ATTRIBUTES Channel_obj : public  ::borogove::Chat_obj
 
 		void correctMessage( ::borogove::ChatMessage correct, ::borogove::ChatMessageBuilder message);
 
-		void sendMessage( ::borogove::ChatMessageBuilder message);
+		void sendMessage( ::borogove::ChatMessageBuilder message,::hx::Null< int >  e2eePreference);
 
 		void removeReaction( ::borogove::ChatMessage m, ::borogove::Reaction reaction);
 
-		void sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem);
+		int defaultE2ee();
+		::Dynamic defaultE2ee_dyn();
+
+		void sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem,::hx::Null< int >  e2eePreference);
 
 		void markReadUpTo( ::borogove::ChatMessage message);
 
diff --git a/Sources/c_borogove/iinclude/borogove/ChannelPinger.h b/Sources/c_borogove/iinclude/borogove/ChannelPinger.h
new file mode 100644
index 0000000..ef65a3e
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/ChannelPinger.h
@@ -0,0 +1,84 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_ChannelPinger
+#define INCLUDED_borogove_ChannelPinger
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS1(borogove,Channel)
+HX_DECLARE_CLASS1(borogove,ChannelPinger)
+HX_DECLARE_CLASS1(borogove,Chat)
+HX_DECLARE_CLASS1(borogove,EventEmitter)
+HX_DECLARE_CLASS1(haxe,IMap)
+HX_DECLARE_CLASS1(haxe,Timer)
+HX_DECLARE_CLASS2(haxe,ds,StringMap)
+
+namespace borogove{
+
+
+class HXCPP_CLASS_ATTRIBUTES ChannelPinger_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef ChannelPinger_obj OBJ_;
+		ChannelPinger_obj();
+
+	public:
+		enum { _hx_ClassId = 0x6ea167fd };
+
+		void __construct( ::Dynamic now);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.ChannelPinger")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.ChannelPinger"); }
+		static ::hx::ObjectPtr< ChannelPinger_obj > __new( ::Dynamic now);
+		static ::hx::ObjectPtr< ChannelPinger_obj > __alloc(::hx::Ctx *_hx_ctx, ::Dynamic now);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~ChannelPinger_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("ChannelPinger",62,84,bf,e5); }
+
+		 ::Dynamic now;
+		Dynamic now_dyn() { return now;}
+		 ::haxe::ds::StringMap scheduledChannels;
+		 ::haxe::Timer timer;
+		void startTimer();
+		::Dynamic startTimer_dyn();
+
+		void stopTimer();
+		::Dynamic stopTimer_dyn();
+
+		void schedule( ::borogove::Channel channel, ::Dynamic deadline);
+		::Dynamic schedule_dyn();
+
+		void remove( ::borogove::Channel channel);
+		::Dynamic remove_dyn();
+
+		void pingPastDue();
+		::Dynamic pingPastDue_dyn();
+
+		void pingDueInWindow();
+		::Dynamic pingDueInWindow_dyn();
+
+		void pingDueBy(Float cutoff);
+		::Dynamic pingDueBy_dyn();
+
+		::Array< ::Dynamic> getDueBy(Float cutoff);
+		::Dynamic getDueBy_dyn();
+
+};
+
+} // end namespace borogove
+
+#endif /* INCLUDED_borogove_ChannelPinger */ 
diff --git a/Sources/c_borogove/iinclude/borogove/Chat.h b/Sources/c_borogove/iinclude/borogove/Chat.h
index 95f8e61..4d8b96b 100644
--- a/Sources/c_borogove/iinclude/borogove/Chat.h
+++ b/Sources/c_borogove/iinclude/borogove/Chat.h
@@ -110,8 +110,8 @@ class HXCPP_CLASS_ATTRIBUTES Chat_obj : public  ::borogove::EventEmitter_obj
 		::String activeThread;
 		 ::Dynamic notificationSettings;
 		 ::borogove::Outbox outbox;
-		int _encryptionMode;
 		::Array< int > omemoContactDeviceIDs;
+		bool omemoDeviceListRefreshed;
 		virtual  ::borogove::ChatMessageBuilder prepareIncomingMessage( ::borogove::ChatMessageBuilder message, ::borogove::Stanza stanza) { return 0; }
 		::Dynamic prepareIncomingMessage_dyn();
 		virtual ::Dynamic getMessagesBefore( ::borogove::ChatMessage before) { return 0; }
@@ -129,13 +129,12 @@ class HXCPP_CLASS_ATTRIBUTES Chat_obj : public  ::borogove::EventEmitter_obj
 		::Dynamic fetchFromSync( ::borogove::MessageSync sync);
 		::Dynamic fetchFromSync_dyn();
 
-		virtual void sendMessage( ::borogove::ChatMessageBuilder message) {}
+		virtual void sendMessage( ::borogove::ChatMessageBuilder message,::hx::Null< int >  e2eePreference);
 		::Dynamic sendMessage_dyn();
-		void sendMessage__fromC( ::borogove::ChatMessageBuilder message);
-		::Dynamic sendMessage__fromC_dyn();
 
-		virtual void sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem) {}
+		virtual void sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem,::hx::Null< int >  e2eePreference);
 		::Dynamic sendMessageStanza_dyn();
+
 		virtual void markReadUpTo( ::borogove::ChatMessage message) {}
 		::Dynamic markReadUpTo_dyn();
 		void markReadUpTo__fromC( ::borogove::ChatMessage message);
@@ -229,7 +228,7 @@ class HXCPP_CLASS_ATTRIBUTES Chat_obj : public  ::borogove::EventEmitter_obj
 		void updateFromBookmark( ::borogove::Stanza item);
 		::Dynamic updateFromBookmark_dyn();
 
-		void updateFromRoster( ::Dynamic item);
+		void updateFromRoster( ::borogove::Stanza item);
 		::Dynamic updateFromRoster_dyn();
 
 		::String getPhoto();
@@ -238,6 +237,9 @@ class HXCPP_CLASS_ATTRIBUTES Chat_obj : public  ::borogove::EventEmitter_obj
 		::String getPlaceholder();
 		::Dynamic getPlaceholder_dyn();
 
+		bool hasEverRead();
+		::Dynamic hasEverRead_dyn();
+
 		::Dynamic readUpTo();
 		::Dynamic readUpTo_dyn();
 
@@ -266,6 +268,12 @@ class HXCPP_CLASS_ATTRIBUTES Chat_obj : public  ::borogove::EventEmitter_obj
 
 		size_t getTags__fromC(const char*** outPtr);
 
+		void setTags(::Array< ::String > tags);
+		::Dynamic setTags_dyn();
+
+		void setTags__fromC(::cpp::Pointer< const char* > tags,size_t tags__len);
+		::Dynamic setTags__fromC_dyn();
+
 		void setThreadSubject(::String threadId,::String subject);
 		::Dynamic setThreadSubject_dyn();
 
@@ -288,6 +296,9 @@ class HXCPP_CLASS_ATTRIBUTES Chat_obj : public  ::borogove::EventEmitter_obj
 		virtual bool syncing();
 		::Dynamic syncing_dyn();
 
+		virtual bool inMessageSync();
+		::Dynamic inMessageSync_dyn();
+
 		virtual bool canAudioCall();
 		::Dynamic canAudioCall_dyn();
 
@@ -317,9 +328,6 @@ class HXCPP_CLASS_ATTRIBUTES Chat_obj : public  ::borogove::EventEmitter_obj
 
 		size_t videoTracks__fromC(void*** outPtr);
 
-		::String encryptionMode();
-		::Dynamic encryptionMode_dyn();
-
 		virtual bool canSend();
 		::Dynamic canSend_dyn();
 
@@ -335,10 +343,10 @@ class HXCPP_CLASS_ATTRIBUTES Chat_obj : public  ::borogove::EventEmitter_obj
 		bool isApp();
 		::Dynamic isApp_dyn();
 
-		bool hasCommands();
+		virtual bool hasCommands();
 		::Dynamic hasCommands_dyn();
 
-		::Dynamic commands();
+		virtual ::Dynamic commands();
 		::Dynamic commands_dyn();
 
 		void commands__fromC(::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context);
diff --git a/Sources/c_borogove/iinclude/borogove/ChatAttachment.h b/Sources/c_borogove/iinclude/borogove/ChatAttachment.h
index 5fc568e..72dda5a 100644
--- a/Sources/c_borogove/iinclude/borogove/ChatAttachment.h
+++ b/Sources/c_borogove/iinclude/borogove/ChatAttachment.h
@@ -8,6 +8,9 @@
 
 HX_DECLARE_CLASS1(borogove,ChatAttachment)
 HX_DECLARE_CLASS1(borogove,Hash)
+HX_DECLARE_CLASS1(borogove,Persistence)
+HX_DECLARE_CLASS1(borogove,Stanza)
+HX_DECLARE_CLASS1(thenshim,Thenable)
 
 namespace borogove{
 
@@ -50,6 +53,10 @@ class HXCPP_CLASS_ATTRIBUTES ChatAttachment_obj : public ::hx::Object
 		static  ::borogove::ChatAttachment create(::String name,::String mime,int size,::String uri);
 		static ::Dynamic create_dyn();
 
+		::String cachedAt;
+		::String cachedAt__fromC();
+		::Dynamic cachedAt__fromC_dyn();
+
 		::String name;
 		::String name__fromC();
 		::Dynamic name__fromC_dyn();
@@ -68,6 +75,15 @@ class HXCPP_CLASS_ATTRIBUTES ChatAttachment_obj : public ::hx::Object
 		::Array< ::Dynamic> hashes;
 		size_t hashes__fromC(void*** outPtr);
 
+		::Dynamic lookup(::Dynamic persistence);
+		::Dynamic lookup_dyn();
+
+		::Dynamic lookupHashes(::Dynamic persistence,::Array< ::Dynamic> hashes);
+		::Dynamic lookupHashes_dyn();
+
+		 ::borogove::Stanza sims();
+		::Dynamic sims_dyn();
+
 };
 
 } // end namespace borogove
diff --git a/Sources/c_borogove/iinclude/borogove/ChatMessage.h b/Sources/c_borogove/iinclude/borogove/ChatMessage.h
index f05b910..7cbb665 100644
--- a/Sources/c_borogove/iinclude/borogove/ChatMessage.h
+++ b/Sources/c_borogove/iinclude/borogove/ChatMessage.h
@@ -9,7 +9,9 @@
 HX_DECLARE_CLASS1(borogove,ChatAttachment)
 HX_DECLARE_CLASS1(borogove,ChatMessage)
 HX_DECLARE_CLASS1(borogove,ChatMessageBuilder)
+HX_DECLARE_CLASS1(borogove,Client)
 HX_DECLARE_CLASS1(borogove,EncryptionInfo)
+HX_DECLARE_CLASS1(borogove,EventEmitter)
 HX_DECLARE_CLASS1(borogove,Hash)
 HX_DECLARE_CLASS1(borogove,Html)
 HX_DECLARE_CLASS1(borogove,JID)
@@ -20,6 +22,7 @@ HX_DECLARE_CLASS1(borogove,Reaction)
 HX_DECLARE_CLASS1(borogove,Stanza)
 HX_DECLARE_CLASS1(haxe,IMap)
 HX_DECLARE_CLASS2(haxe,ds,StringMap)
+HX_DECLARE_CLASS1(thenshim,Thenable)
 
 namespace borogove{
 
@@ -59,9 +62,14 @@ class HXCPP_CLASS_ATTRIBUTES ChatMessage_obj : public ::hx::Object
 
 		static void __boot();
 		static  ::Dynamic __meta__;
-		static  ::borogove::ChatMessage fromStanza( ::borogove::Stanza stanza, ::borogove::JID localJid, ::Dynamic addContext);
+		static  ::borogove::ChatMessage fromStanza( ::borogove::Stanza stanza, ::borogove::JID localJid, ::Dynamic addContext, ::borogove::EncryptionInfo encryptionInfo);
 		static ::Dynamic fromStanza_dyn();
 
+		static ::Array< ::Dynamic> combineCorrections(::Array< ::Dynamic> messages);
+		static ::Dynamic combineCorrections_dyn();
+
+		static size_t combineCorrections__fromC(::cpp::Pointer< void* > messages,size_t messages__len,void*** outPtr);
+
 		::String localId;
 		::String localId__fromC();
 		::Dynamic localId__fromC_dyn();
@@ -81,9 +89,13 @@ class HXCPP_CLASS_ATTRIBUTES ChatMessage_obj : public ::hx::Object
 		::String sortId;
 		bool syncPoint;
 		::String replyId;
-		::String timestamp;
-		::String timestamp__fromC();
-		::Dynamic timestamp__fromC_dyn();
+		::String timeSent;
+		::String timeSent__fromC();
+		::Dynamic timeSent__fromC_dyn();
+
+		::String timeReceived;
+		::String timeReceived__fromC();
+		::Dynamic timeReceived__fromC_dyn();
 
 		 ::borogove::JID to;
 		 ::borogove::JID from;
@@ -104,6 +116,7 @@ class HXCPP_CLASS_ATTRIBUTES ChatMessage_obj : public ::hx::Object
 		::Array< ::Dynamic> attachments;
 		size_t attachments__fromC(void*** outPtr);
 
+		 ::Dynamic debug;
 		 ::haxe::ds::StringMap reactions;
 		size_t reactionKeys__fromC(const char*** outPtr);
 
@@ -198,6 +211,11 @@ class HXCPP_CLASS_ATTRIBUTES ChatMessage_obj : public ::hx::Object
 		::String callDuration();
 		::Dynamic callDuration_dyn();
 
+		::Dynamic fetchAttachment( ::borogove::ChatAttachment attachment, ::borogove::Client client,::hx::Null< bool >  storeIfNeeded);
+		::Dynamic fetchAttachment_dyn();
+
+		void fetchAttachment__fromC( ::borogove::ChatAttachment attachment, ::borogove::Client client,::hx::Null< bool >  storeIfNeeded,::cpp::Function< void  (void*,void*) > handler,void* handler__context);
+
 		 ::borogove::Stanza asStanza();
 		::Dynamic asStanza_dyn();
 
diff --git a/Sources/c_borogove/iinclude/borogove/ChatMessageBuilder.h b/Sources/c_borogove/iinclude/borogove/ChatMessageBuilder.h
index f253c42..5fa8df1 100644
--- a/Sources/c_borogove/iinclude/borogove/ChatMessageBuilder.h
+++ b/Sources/c_borogove/iinclude/borogove/ChatMessageBuilder.h
@@ -55,7 +55,10 @@ class HXCPP_CLASS_ATTRIBUTES ChatMessageBuilder_obj : public ::hx::Object
 
 		static void __boot();
 		static  ::Dynamic __meta__;
-		static  ::borogove::ChatMessage makeModerated( ::borogove::ChatMessage m,::String timestamp,::String moderatorId,::String reason);
+		static  ::borogove::ChatMessageBuilder fromMessage( ::borogove::ChatMessage m);
+		static ::Dynamic fromMessage_dyn();
+
+		static  ::borogove::ChatMessage makeModerated( ::borogove::ChatMessage m,::String timeSent,::String timeReceived,::String moderatorId,::String reason);
 		static ::Dynamic makeModerated_dyn();
 
 		::String localId;
@@ -89,12 +92,19 @@ class HXCPP_CLASS_ATTRIBUTES ChatMessageBuilder_obj : public ::hx::Object
 
 		bool syncPoint;
 		::String replyId;
-		::String timestamp;
-		::String timestamp__fromC();
-		::Dynamic timestamp__fromC_dyn();
+		::String timeSent;
+		::String timeSent__fromC();
+		::Dynamic timeSent__fromC_dyn();
+
+		void set_timeSent__fromC(::String value);
+		::Dynamic set_timeSent__fromC_dyn();
+
+		::String timeReceived;
+		::String timeReceived__fromC();
+		::Dynamic timeReceived__fromC_dyn();
 
-		void set_timestamp__fromC(::String value);
-		::Dynamic set_timestamp__fromC_dyn();
+		void set_timeReceived__fromC(::String value);
+		::Dynamic set_timeReceived__fromC_dyn();
 
 		 ::borogove::JID to;
 		 ::borogove::JID from;
@@ -125,6 +135,7 @@ class HXCPP_CLASS_ATTRIBUTES ChatMessageBuilder_obj : public ::hx::Object
 		::Array< ::Dynamic> attachments;
 		size_t attachments__fromC(void*** outPtr);
 
+		 ::Dynamic debug;
 		 ::haxe::ds::StringMap reactions;
 		::String text;
 		::String lang;
diff --git a/Sources/c_borogove/iinclude/borogove/ChatMessageCombiner.h b/Sources/c_borogove/iinclude/borogove/ChatMessageCombiner.h
new file mode 100644
index 0000000..326b12e
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/ChatMessageCombiner.h
@@ -0,0 +1,73 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_ChatMessageCombiner
+#define INCLUDED_borogove_ChatMessageCombiner
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS1(borogove,ChatMessage)
+HX_DECLARE_CLASS1(borogove,ChatMessageCombiner)
+
+namespace borogove{
+
+
+class HXCPP_CLASS_ATTRIBUTES ChatMessageCombiner_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef ChatMessageCombiner_obj OBJ_;
+		ChatMessageCombiner_obj();
+
+	public:
+		enum { _hx_ClassId = 0x79f82ba1 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="borogove.ChatMessageCombiner")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"borogove.ChatMessageCombiner"); }
+
+		inline static ::hx::ObjectPtr< ChatMessageCombiner_obj > __new() {
+			::hx::ObjectPtr< ChatMessageCombiner_obj > __this = new ChatMessageCombiner_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< ChatMessageCombiner_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			ChatMessageCombiner_obj *__this = (ChatMessageCombiner_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(ChatMessageCombiner_obj), false, "borogove.ChatMessageCombiner"));
+			*(void **)__this = ChatMessageCombiner_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~ChatMessageCombiner_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("ChatMessageCombiner",e2,29,26,db); }
+
+		static ::Array< ::Dynamic> combine(::Array< ::Dynamic> messages);
+		static ::Dynamic combine_dyn();
+
+		static ::String correctionKey( ::borogove::ChatMessage message);
+		static ::Dynamic correctionKey_dyn();
+
+		static  ::borogove::ChatMessage combineMessages(::Array< ::Dynamic> messages);
+		static ::Dynamic combineMessages_dyn();
+
+		static ::Array< ::Dynamic> combineVersions( ::borogove::ChatMessage original,::Array< ::Dynamic> messages);
+		static ::Dynamic combineVersions_dyn();
+
+		static ::String identity( ::borogove::ChatMessage message);
+		static ::Dynamic identity_dyn();
+
+};
+
+} // end namespace borogove
+
+#endif /* INCLUDED_borogove_ChatMessageCombiner */ 
diff --git a/Sources/c_borogove/iinclude/borogove/Client.h b/Sources/c_borogove/iinclude/borogove/Client.h
index 82538ef..574d4e7 100644
--- a/Sources/c_borogove/iinclude/borogove/Client.h
+++ b/Sources/c_borogove/iinclude/borogove/Client.h
@@ -10,10 +10,13 @@
 #include <borogove/EventEmitter.h>
 #endif
 HX_DECLARE_CLASS1(borogove,AttachmentSource)
+HX_DECLARE_CLASS1(borogove,AttachmentUploadError)
 HX_DECLARE_CLASS1(borogove,AvailableChat)
 HX_DECLARE_CLASS1(borogove,AvailableChatIterator)
 HX_DECLARE_CLASS1(borogove,Caps)
 HX_DECLARE_CLASS1(borogove,CapsRepo)
+HX_DECLARE_CLASS1(borogove,Channel)
+HX_DECLARE_CLASS1(borogove,ChannelPinger)
 HX_DECLARE_CLASS1(borogove,Chat)
 HX_DECLARE_CLASS1(borogove,ChatAttachment)
 HX_DECLARE_CLASS1(borogove,ChatMessage)
@@ -21,7 +24,6 @@ HX_DECLARE_CLASS1(borogove,ChatMessageBuilder)
 HX_DECLARE_CLASS1(borogove,Client)
 HX_DECLARE_CLASS1(borogove,DirectChat)
 HX_DECLARE_CLASS1(borogove,EncryptionInfo)
-HX_DECLARE_CLASS1(borogove,EncryptionPolicy)
 HX_DECLARE_CLASS1(borogove,EventEmitter)
 HX_DECLARE_CLASS1(borogove,EventResult)
 HX_DECLARE_CLASS1(borogove,GenericStream)
@@ -37,10 +39,15 @@ HX_DECLARE_CLASS2(borogove,calls,MediaStream)
 HX_DECLARE_CLASS2(borogove,calls,MediaStreamTrack)
 HX_DECLARE_CLASS2(borogove,calls,Session)
 HX_DECLARE_CLASS2(borogove,queries,GenericQuery)
+HX_DECLARE_CLASS1(haxe,Exception)
 HX_DECLARE_CLASS1(haxe,IMap)
 HX_DECLARE_CLASS1(haxe,Timer)
 HX_DECLARE_CLASS2(haxe,ds,StringMap)
 HX_DECLARE_CLASS1(thenshim,Thenable)
+HX_DECLARE_CLASS2(tink,core,NamedWith)
+HX_DECLARE_CLASS2(tink,http,ClientObject)
+HX_DECLARE_CLASS2(tink,http,HeaderField)
+HX_DECLARE_CLASS2(tink,streams,StreamObject)
 
 namespace borogove{
 
@@ -83,9 +90,18 @@ class HXCPP_CLASS_ATTRIBUTES Client_obj : public  ::borogove::EventEmitter_obj
 		void set_sendAvailable__fromC(bool value);
 		::Dynamic set_sendAvailable__fromC_dyn();
 
+		bool blockIncomingWithoutE2EE;
+		bool blockIncomingWithoutE2EE__fromC();
+		::Dynamic blockIncomingWithoutE2EE__fromC_dyn();
+
+		void set_blockIncomingWithoutE2EE__fromC(bool value);
+		::Dynamic set_blockIncomingWithoutE2EE__fromC_dyn();
+
+		::Array< int > outgoingE2EEPreference;
 		 ::borogove::GenericStream stream;
 		 ::borogove::JID jid;
 		::Array< ::Dynamic> chats;
+		 ::haxe::ds::StringMap chatsIndex;
 		::Dynamic persistence;
 		 ::borogove::CapsRepo capsRepo;
 		 ::borogove::Caps caps;
@@ -94,11 +110,12 @@ class HXCPP_CLASS_ATTRIBUTES Client_obj : public  ::borogove::EventEmitter_obj
 		::String token;
 		 ::Dynamic fastCount;
 		::String sortId;
+		::String rosterVer;
 		 ::haxe::ds::StringMap pendingCaps;
 		 ::haxe::ds::StringMap brokenAvatars;
-		 ::borogove::EncryptionPolicy encryptionPolicy;
 		bool inSync;
 		bool firstSync;
+		 ::borogove::ChannelPinger channelPinger;
 		void processLiveMessage( ::borogove::Stanza stanza, ::borogove::Stanza fwd, ::borogove::EncryptionInfo encryptionInfo);
 		::Dynamic processLiveMessage_dyn();
 
@@ -122,6 +139,9 @@ class HXCPP_CLASS_ATTRIBUTES Client_obj : public  ::borogove::EventEmitter_obj
 		::String displayName();
 		::Dynamic displayName_dyn();
 
+		void setPhoto( ::borogove::AttachmentSource source,bool publicAccess);
+		::Dynamic setPhoto_dyn();
+
 		void setProfile( ::borogove::ProfileBuilder profile,bool publicAccess);
 		::Dynamic setProfile_dyn();
 
@@ -131,22 +151,43 @@ class HXCPP_CLASS_ATTRIBUTES Client_obj : public  ::borogove::EventEmitter_obj
 		bool updateDisplayName(::String fn);
 		::Dynamic updateDisplayName_dyn();
 
+		void preferE2ee(int preference);
+		::Dynamic preferE2ee_dyn();
+
+		void banE2ee(int preference);
+		::Dynamic banE2ee_dyn();
+
 		 ::borogove::EventResult onConnected( ::Dynamic data);
 		::Dynamic onConnected_dyn();
 
-		::Dynamic prepareAttachment( ::borogove::AttachmentSource source);
+		::Dynamic fetchAttachment( ::borogove::ChatAttachment attachment);
+		::Dynamic fetchAttachment_dyn();
+
+		::Dynamic fetchUris(::Array< ::String > uris);
+		::Dynamic fetchUris_dyn();
+
+		::Dynamic prepareAttachment( ::borogove::AttachmentSource source,::hx::Null< bool >  encrypt);
 		::Dynamic prepareAttachment_dyn();
 
-		void prepareAttachment__fromC( ::borogove::AttachmentSource source,::cpp::Function< void  (void*,void*) > handler,void* handler__context);
+		void prepareAttachment__fromC( ::borogove::AttachmentSource source,::hx::Null< bool >  encrypt,::cpp::Function< void  (void*,void*) > handler,void* handler__context);
 
-		void prepareAttachmentFor( ::borogove::AttachmentSource source,::Array< ::Dynamic> services,::Array< ::Dynamic> hashes, ::Dynamic callback);
+		::Dynamic prepareAttachmentFor(::Dynamic source,::String name,int size,::String mime,::Array< ::Dynamic> services,::Dynamic httpClient);
 		::Dynamic prepareAttachmentFor_dyn();
 
+		::Dynamic putAttachment(::String url,::Array< ::Dynamic> headers,::Dynamic source,int size,::Dynamic httpClient);
+		::Dynamic putAttachment_dyn();
+
+		::Dynamic tryNextAttachmentService(::Dynamic source,::String name,int size,::String mime,::Array< ::Dynamic> services, ::borogove::AttachmentUploadError failure,::Dynamic httpClient);
+		::Dynamic tryNextAttachmentService_dyn();
+
 		::Array< ::Dynamic> getChats();
 		::Dynamic getChats_dyn();
 
 		size_t getChats__fromC(void*** outPtr);
 
+		::Array< ::Dynamic> getChannels();
+		::Dynamic getChannels_dyn();
+
 		 ::borogove::AvailableChatIterator findAvailableChats(::String q);
 		::Dynamic findAvailableChats_dyn();
 
@@ -256,6 +297,9 @@ class HXCPP_CLASS_ATTRIBUTES Client_obj : public  ::borogove::EventEmitter_obj
 		::Dynamic fetchMediaByHash(::Array< ::Dynamic> hashes,::Array< ::Dynamic> counterparts);
 		::Dynamic fetchMediaByHash_dyn();
 
+		::Dynamic maybeAutodownloadAttachments( ::borogove::Chat chat, ::borogove::ChatMessage message);
+		::Dynamic maybeAutodownloadAttachments_dyn();
+
 		::Dynamic fetchMediaByHashOneCounterpart(::Array< ::Dynamic> hashes, ::borogove::JID counterpart);
 		::Dynamic fetchMediaByHashOneCounterpart_dyn();
 
@@ -274,6 +318,9 @@ class HXCPP_CLASS_ATTRIBUTES Client_obj : public  ::borogove::EventEmitter_obj
 		::Dynamic storeMessages(::Array< ::Dynamic> messages);
 		::Dynamic storeMessages_dyn();
 
+		void checkForResends();
+		::Dynamic checkForResends_dyn();
+
 		void sendQuery( ::borogove::queries::GenericQuery query);
 		::Dynamic sendQuery_dyn();
 
diff --git a/Sources/c_borogove/iinclude/borogove/Command.h b/Sources/c_borogove/iinclude/borogove/Command.h
index 5b85cb6..1aab690 100644
--- a/Sources/c_borogove/iinclude/borogove/Command.h
+++ b/Sources/c_borogove/iinclude/borogove/Command.h
@@ -56,7 +56,7 @@ class HXCPP_CLASS_ATTRIBUTES Command_obj : public ::hx::Object
 		 ::borogove::JID jid;
 		::String node;
 		 ::borogove::Client client;
-		::Dynamic execute();
+		virtual ::Dynamic execute();
 		::Dynamic execute_dyn();
 
 		void execute__fromC(::cpp::Function< void  (void*,void*) > handler,void* handler__context);
diff --git a/Sources/c_borogove/iinclude/borogove/CommandSession.h b/Sources/c_borogove/iinclude/borogove/CommandSession.h
index d11c9d2..bced4ae 100644
--- a/Sources/c_borogove/iinclude/borogove/CommandSession.h
+++ b/Sources/c_borogove/iinclude/borogove/CommandSession.h
@@ -67,7 +67,7 @@ class HXCPP_CLASS_ATTRIBUTES CommandSession_obj : public ::hx::Object
 
 		::String sessionid;
 		 ::borogove::Command command;
-		::Dynamic execute(::String action, ::borogove::FormSubmitBuilder data,::hx::Null< int >  formIdx);
+		virtual ::Dynamic execute(::String action, ::borogove::FormSubmitBuilder data,::hx::Null< int >  formIdx);
 		::Dynamic execute_dyn();
 
 		void execute__fromC(::String action, ::borogove::FormSubmitBuilder data,::hx::Null< int >  formIdx,::cpp::Function< void  (void*,void*) > handler,void* handler__context);
diff --git a/Sources/c_borogove/iinclude/borogove/DirectChat.h b/Sources/c_borogove/iinclude/borogove/DirectChat.h
index 1dc78de..a342be7 100644
--- a/Sources/c_borogove/iinclude/borogove/DirectChat.h
+++ b/Sources/c_borogove/iinclude/borogove/DirectChat.h
@@ -95,11 +95,11 @@ class HXCPP_CLASS_ATTRIBUTES DirectChat_obj : public  ::borogove::Chat_obj
 
 		void correctMessage( ::borogove::ChatMessage correct, ::borogove::ChatMessageBuilder message);
 
-		void sendMessage( ::borogove::ChatMessageBuilder message);
+		void sendMessage( ::borogove::ChatMessageBuilder message,::hx::Null< int >  e2eePreference);
 
 		void removeReaction( ::borogove::ChatMessage m, ::borogove::Reaction reaction);
 
-		void sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem);
+		void sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem,::hx::Null< int >  e2eePreference);
 
 		void markReadUpTo( ::borogove::ChatMessage message);
 
diff --git a/Sources/c_borogove/iinclude/borogove/EncryptionInfo.h b/Sources/c_borogove/iinclude/borogove/EncryptionInfo.h
index f8e17f1..82d14b8 100644
--- a/Sources/c_borogove/iinclude/borogove/EncryptionInfo.h
+++ b/Sources/c_borogove/iinclude/borogove/EncryptionInfo.h
@@ -24,13 +24,13 @@ class HXCPP_CLASS_ATTRIBUTES EncryptionInfo_obj : public ::hx::Object
 	public:
 		enum { _hx_ClassId = 0x618b2952 };
 
-		void __construct(int status,::String method,::String methodName,::String reason,::String reasonText);
+		void __construct(int status,::String method,::String reason,::String reasonText,::String methodName);
 		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.EncryptionInfo")
 			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
 		inline void *operator new(size_t inSize, int extra)
 			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.EncryptionInfo"); }
-		static ::hx::ObjectPtr< EncryptionInfo_obj > __new(int status,::String method,::String methodName,::String reason,::String reasonText);
-		static ::hx::ObjectPtr< EncryptionInfo_obj > __alloc(::hx::Ctx *_hx_ctx,int status,::String method,::String methodName,::String reason,::String reasonText);
+		static ::hx::ObjectPtr< EncryptionInfo_obj > __new(int status,::String method,::String reason,::String reasonText,::String methodName);
+		static ::hx::ObjectPtr< EncryptionInfo_obj > __alloc(::hx::Ctx *_hx_ctx,int status,::String method,::String reason,::String reasonText,::String methodName);
 		static void * _hx_vtable;
 		static Dynamic __CreateEmpty();
 		static Dynamic __Create(::hx::DynamicArray inArgs);
diff --git a/Sources/c_borogove/iinclude/borogove/FormOption.h b/Sources/c_borogove/iinclude/borogove/FormOption.h
index b279f0a..d574f8f 100644
--- a/Sources/c_borogove/iinclude/borogove/FormOption.h
+++ b/Sources/c_borogove/iinclude/borogove/FormOption.h
@@ -6,7 +6,7 @@
 #include <hxcpp.h>
 #endif
 
-HX_DECLARE_STACK_FRAME(_hx_pos_a7d595b8126d2317_221_new)
+HX_DECLARE_STACK_FRAME(_hx_pos_a7d595b8126d2317_222_new)
 HX_DECLARE_CLASS1(borogove,FormOption)
 HX_DECLARE_CLASS1(borogove,Stanza)
 
@@ -39,23 +39,23 @@ class HXCPP_CLASS_ATTRIBUTES FormOption_obj : public ::hx::Object
 			FormOption_obj *__this = (FormOption_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(FormOption_obj), true, "borogove.FormOption"));
 			*(void **)__this = FormOption_obj::_hx_vtable;
 {
-            	HX_STACKFRAME(&_hx_pos_a7d595b8126d2317_221_new)
-HXLINE( 222)		::String _hx_tmp;
-HXDLIN( 222)		if (::hx::IsNotNull( label )) {
-HXLINE( 222)			_hx_tmp = label;
+            	HX_STACKFRAME(&_hx_pos_a7d595b8126d2317_222_new)
+HXLINE( 223)		::String _hx_tmp;
+HXDLIN( 223)		if (::hx::IsNotNull( label )) {
+HXLINE( 223)			_hx_tmp = label;
             		}
             		else {
-HXLINE( 222)			_hx_tmp = value;
+HXLINE( 223)			_hx_tmp = value;
             		}
-HXDLIN( 222)		( ( ::borogove::FormOption)(__this) )->label = _hx_tmp;
-HXLINE( 223)		::String _hx_tmp1;
-HXDLIN( 223)		if (::hx::IsNotNull( value )) {
-HXLINE( 223)			_hx_tmp1 = value;
+HXDLIN( 223)		( ( ::borogove::FormOption)(__this) )->label = _hx_tmp;
+HXLINE( 224)		::String _hx_tmp1;
+HXDLIN( 224)		if (::hx::IsNotNull( value )) {
+HXLINE( 224)			_hx_tmp1 = value;
             		}
             		else {
-HXLINE( 223)			_hx_tmp1 = HX_("",00,00,00,00);
+HXLINE( 224)			_hx_tmp1 = HX_("",00,00,00,00);
             		}
-HXDLIN( 223)		( ( ::borogove::FormOption)(__this) )->value = _hx_tmp1;
+HXDLIN( 224)		( ( ::borogove::FormOption)(__this) )->value = _hx_tmp1;
             	}
 		
 			return __this;
diff --git a/Sources/c_borogove/iinclude/borogove/Hash.h b/Sources/c_borogove/iinclude/borogove/Hash.h
index 8fd88c4..c24f719 100644
--- a/Sources/c_borogove/iinclude/borogove/Hash.h
+++ b/Sources/c_borogove/iinclude/borogove/Hash.h
@@ -7,6 +7,7 @@
 #endif
 
 HX_DECLARE_CLASS1(borogove,Hash)
+HX_DECLARE_CLASS1(borogove,IncrementalHash)
 HX_DECLARE_CLASS2(haxe,io,Bytes)
 
 namespace borogove{
@@ -53,12 +54,21 @@ class HXCPP_CLASS_ATTRIBUTES Hash_obj : public ::hx::Object
 		static  ::borogove::Hash fromUri(::String uri);
 		static ::Dynamic fromUri_dyn();
 
+		static  ::borogove::Hash mk(::String algorithm, ::haxe::io::Bytes bytes);
+		static ::Dynamic mk_dyn();
+
 		static  ::borogove::Hash sha1( ::haxe::io::Bytes bytes);
 		static ::Dynamic sha1_dyn();
 
+		static  ::borogove::IncrementalHash sha1incr();
+		static ::Dynamic sha1incr_dyn();
+
 		static  ::borogove::Hash sha256( ::haxe::io::Bytes bytes);
 		static ::Dynamic sha256_dyn();
 
+		static  ::borogove::IncrementalHash sha256incr();
+		static ::Dynamic sha256incr_dyn();
+
 		::String algorithm;
 		::String algorithm__fromC();
 		::Dynamic algorithm__fromC_dyn();
@@ -82,6 +92,9 @@ class HXCPP_CLASS_ATTRIBUTES Hash_obj : public ::hx::Object
 		::String toBase64Url();
 		::Dynamic toBase64Url_dyn();
 
+		bool equals( ::borogove::Hash other);
+		::Dynamic equals_dyn();
+
 };
 
 } // end namespace borogove
diff --git a/Sources/c_borogove/iinclude/borogove/IncrementalHash.h b/Sources/c_borogove/iinclude/borogove/IncrementalHash.h
new file mode 100644
index 0000000..e659a98
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/IncrementalHash.h
@@ -0,0 +1,59 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_IncrementalHash
+#define INCLUDED_borogove_IncrementalHash
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS1(borogove,Hash)
+HX_DECLARE_CLASS1(borogove,IncrementalHash)
+
+namespace borogove{
+
+
+class HXCPP_CLASS_ATTRIBUTES IncrementalHash_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef IncrementalHash_obj OBJ_;
+		IncrementalHash_obj();
+
+	public:
+		enum { _hx_ClassId = 0x66ead3e7 };
+
+		void __construct(::String algorithm, ::Dynamic hash);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.IncrementalHash")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.IncrementalHash"); }
+		static ::hx::ObjectPtr< IncrementalHash_obj > __new(::String algorithm, ::Dynamic hash);
+		static ::hx::ObjectPtr< IncrementalHash_obj > __alloc(::hx::Ctx *_hx_ctx,::String algorithm, ::Dynamic hash);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~IncrementalHash_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("IncrementalHash",a8,5d,ca,e6); }
+
+		::String algorithm;
+		 ::Dynamic hash;
+		void update(::Array< unsigned char > bytes);
+		::Dynamic update_dyn();
+
+		 ::borogove::Hash digest();
+		::Dynamic digest_dyn();
+
+};
+
+} // end namespace borogove
+
+#endif /* INCLUDED_borogove_IncrementalHash */ 
diff --git a/Sources/c_borogove/iinclude/borogove/Member.h b/Sources/c_borogove/iinclude/borogove/Member.h
index 07418ec..5425c8c 100644
--- a/Sources/c_borogove/iinclude/borogove/Member.h
+++ b/Sources/c_borogove/iinclude/borogove/Member.h
@@ -43,7 +43,9 @@ class HXCPP_CLASS_ATTRIBUTES Member_obj : public ::hx::Object
 
 		HX_DO_RTTI_ALL;
 		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
 		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		static bool __SetStatic(const ::String &inString, Dynamic &ioValue, ::hx::PropertyAccess inCallProp);
 		void __GetFields(Array< ::String> &outFields);
 		static void __register();
 		void __Mark(HX_MARK_PARAMS);
@@ -53,6 +55,10 @@ class HXCPP_CLASS_ATTRIBUTES Member_obj : public ::hx::Object
 
 		static void __boot();
 		static  ::Dynamic __meta__;
+		static  ::borogove::Member MODERATED;
+		static  ::borogove::Member MODERATED__fromC();
+		static ::Dynamic MODERATED__fromC_dyn();
+
 		::String id;
 		::String id__fromC();
 		::Dynamic id__fromC_dyn();
diff --git a/Sources/c_borogove/iinclude/borogove/MessageStanza.h b/Sources/c_borogove/iinclude/borogove/MessageStanza.h
index 532c90a..a237fae 100644
--- a/Sources/c_borogove/iinclude/borogove/MessageStanza.h
+++ b/Sources/c_borogove/iinclude/borogove/MessageStanza.h
@@ -7,6 +7,7 @@
 #endif
 
 HX_DECLARE_CLASS1(borogove,ChatMessage)
+HX_DECLARE_CLASS1(borogove,JID)
 HX_DECLARE_CLASS1(borogove,MessageStanza)
 HX_DECLARE_CLASS1(borogove,ModerationAction)
 HX_DECLARE_CLASS1(borogove,ReactionUpdate)
@@ -36,6 +37,8 @@ class MessageStanza_obj : public ::hx::EnumBase_obj
 		static ::Dynamic ModerateMessageStanza_dyn();
 		static ::borogove::MessageStanza MucInviteStanza(::String serverId,::String serverIdBy,::String reason,::String password);
 		static ::Dynamic MucInviteStanza_dyn();
+		static ::borogove::MessageStanza MucVoiceRequest( ::borogove::JID jid);
+		static ::Dynamic MucVoiceRequest_dyn();
 		static ::borogove::MessageStanza ReactionUpdateStanza( ::borogove::ReactionUpdate update);
 		static ::Dynamic ReactionUpdateStanza_dyn();
 		static ::borogove::MessageStanza SubjectStanza(::String subject);
diff --git a/Sources/c_borogove/iinclude/borogove/MessageSync.h b/Sources/c_borogove/iinclude/borogove/MessageSync.h
index 3999558..179ba9a 100644
--- a/Sources/c_borogove/iinclude/borogove/MessageSync.h
+++ b/Sources/c_borogove/iinclude/borogove/MessageSync.h
@@ -60,8 +60,11 @@ class HXCPP_CLASS_ATTRIBUTES MessageSync_obj : public ::hx::Object
 		Dynamic contextHandler_dyn() { return contextHandler;}
 		 ::Dynamic errorHandler;
 		Dynamic errorHandler_dyn() { return errorHandler;}
+		::String startSortA;
+		 ::Dynamic startFilter;
 		::String sortA;
 		::String sortB;
+		Float startedAt;
 		 ::Dynamic lastPage;
 		int progress;
 		bool complete;
diff --git a/Sources/c_borogove/iinclude/borogove/ModerationAction.h b/Sources/c_borogove/iinclude/borogove/ModerationAction.h
index 67625f5..3ffa3a0 100644
--- a/Sources/c_borogove/iinclude/borogove/ModerationAction.h
+++ b/Sources/c_borogove/iinclude/borogove/ModerationAction.h
@@ -6,7 +6,7 @@
 #include <hxcpp.h>
 #endif
 
-HX_DECLARE_STACK_FRAME(_hx_pos_1331bd461281db0a_10_new)
+HX_DECLARE_STACK_FRAME(_hx_pos_1331bd461281db0a_11_new)
 HX_DECLARE_CLASS1(borogove,ModerationAction)
 
 namespace borogove{
@@ -22,28 +22,29 @@ class HXCPP_CLASS_ATTRIBUTES ModerationAction_obj : public ::hx::Object
 	public:
 		enum { _hx_ClassId = 0x67bec1fd };
 
-		void __construct(::String chatId,::String moderateServerId,::String timestamp,::String moderatorId,::String reason);
+		void __construct(::String chatId,::String moderateServerId,::String timeSent,::String timeReceived,::String moderatorId,::String reason);
 		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.ModerationAction")
 			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
 		inline void *operator new(size_t inSize, int extra)
 			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.ModerationAction"); }
 
-		inline static ::hx::ObjectPtr< ModerationAction_obj > __new(::String chatId,::String moderateServerId,::String timestamp,::String moderatorId,::String reason) {
+		inline static ::hx::ObjectPtr< ModerationAction_obj > __new(::String chatId,::String moderateServerId,::String timeSent,::String timeReceived,::String moderatorId,::String reason) {
 			::hx::ObjectPtr< ModerationAction_obj > __this = new ModerationAction_obj();
-			__this->__construct(chatId,moderateServerId,timestamp,moderatorId,reason);
+			__this->__construct(chatId,moderateServerId,timeSent,timeReceived,moderatorId,reason);
 			return __this;
 		}
 
-		inline static ::hx::ObjectPtr< ModerationAction_obj > __alloc(::hx::Ctx *_hx_ctx,::String chatId,::String moderateServerId,::String timestamp,::String moderatorId,::String reason) {
+		inline static ::hx::ObjectPtr< ModerationAction_obj > __alloc(::hx::Ctx *_hx_ctx,::String chatId,::String moderateServerId,::String timeSent,::String timeReceived,::String moderatorId,::String reason) {
 			ModerationAction_obj *__this = (ModerationAction_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(ModerationAction_obj), true, "borogove.ModerationAction"));
 			*(void **)__this = ModerationAction_obj::_hx_vtable;
 {
-            	HX_STACKFRAME(&_hx_pos_1331bd461281db0a_10_new)
-HXLINE(  11)		( ( ::borogove::ModerationAction)(__this) )->chatId = chatId;
-HXLINE(  12)		( ( ::borogove::ModerationAction)(__this) )->moderateServerId = moderateServerId;
-HXLINE(  13)		( ( ::borogove::ModerationAction)(__this) )->timestamp = timestamp;
-HXLINE(  14)		( ( ::borogove::ModerationAction)(__this) )->moderatorId = moderatorId;
-HXLINE(  15)		( ( ::borogove::ModerationAction)(__this) )->reason = reason;
+            	HX_STACKFRAME(&_hx_pos_1331bd461281db0a_11_new)
+HXLINE(  12)		( ( ::borogove::ModerationAction)(__this) )->chatId = chatId;
+HXLINE(  13)		( ( ::borogove::ModerationAction)(__this) )->moderateServerId = moderateServerId;
+HXLINE(  14)		( ( ::borogove::ModerationAction)(__this) )->timeSent = timeSent;
+HXLINE(  15)		( ( ::borogove::ModerationAction)(__this) )->timeReceived = timeReceived;
+HXLINE(  16)		( ( ::borogove::ModerationAction)(__this) )->moderatorId = moderatorId;
+HXLINE(  17)		( ( ::borogove::ModerationAction)(__this) )->reason = reason;
             	}
 		
 			return __this;
@@ -66,7 +67,8 @@ HXLINE(  15)		( ( ::borogove::ModerationAction)(__this) )->reason = reason;
 
 		::String chatId;
 		::String moderateServerId;
-		::String timestamp;
+		::String timeSent;
+		::String timeReceived;
 		::String moderatorId;
 		::String reason;
 };
diff --git a/Sources/c_borogove/iinclude/borogove/MucSettingsCommand.h b/Sources/c_borogove/iinclude/borogove/MucSettingsCommand.h
new file mode 100644
index 0000000..0de4783
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/MucSettingsCommand.h
@@ -0,0 +1,56 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_MucSettingsCommand
+#define INCLUDED_borogove_MucSettingsCommand
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+#ifndef INCLUDED_borogove_Command
+#include <borogove/Command.h>
+#endif
+HX_DECLARE_CLASS1(borogove,Client)
+HX_DECLARE_CLASS1(borogove,Command)
+HX_DECLARE_CLASS1(borogove,EventEmitter)
+HX_DECLARE_CLASS1(borogove,JID)
+HX_DECLARE_CLASS1(borogove,MucSettingsCommand)
+HX_DECLARE_CLASS1(thenshim,Thenable)
+
+namespace borogove{
+
+
+class HXCPP_CLASS_ATTRIBUTES MucSettingsCommand_obj : public  ::borogove::Command_obj
+{
+	public:
+		typedef  ::borogove::Command_obj super;
+		typedef MucSettingsCommand_obj OBJ_;
+		MucSettingsCommand_obj();
+
+	public:
+		enum { _hx_ClassId = 0x108c2af6 };
+
+		void __construct( ::borogove::Client client, ::borogove::JID jid);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.MucSettingsCommand")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.MucSettingsCommand"); }
+		static ::hx::ObjectPtr< MucSettingsCommand_obj > __new( ::borogove::Client client, ::borogove::JID jid);
+		static ::hx::ObjectPtr< MucSettingsCommand_obj > __alloc(::hx::Ctx *_hx_ctx, ::borogove::Client client, ::borogove::JID jid);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~MucSettingsCommand_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("MucSettingsCommand",0d,91,cd,45); }
+
+		::Dynamic execute();
+
+};
+
+} // end namespace borogove
+
+#endif /* INCLUDED_borogove_MucSettingsCommand */ 
diff --git a/Sources/c_borogove/iinclude/borogove/MucSettingsCommandSession.h b/Sources/c_borogove/iinclude/borogove/MucSettingsCommandSession.h
new file mode 100644
index 0000000..fb9109d
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/MucSettingsCommandSession.h
@@ -0,0 +1,58 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_MucSettingsCommandSession
+#define INCLUDED_borogove_MucSettingsCommandSession
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+#ifndef INCLUDED_borogove_CommandSession
+#include <borogove/CommandSession.h>
+#endif
+HX_DECLARE_CLASS1(borogove,Command)
+HX_DECLARE_CLASS1(borogove,CommandSession)
+HX_DECLARE_CLASS1(borogove,Form)
+HX_DECLARE_CLASS1(borogove,FormOption)
+HX_DECLARE_CLASS1(borogove,FormSection)
+HX_DECLARE_CLASS1(borogove,FormSubmitBuilder)
+HX_DECLARE_CLASS1(borogove,MucSettingsCommandSession)
+HX_DECLARE_CLASS1(thenshim,Thenable)
+
+namespace borogove{
+
+
+class HXCPP_CLASS_ATTRIBUTES MucSettingsCommandSession_obj : public  ::borogove::CommandSession_obj
+{
+	public:
+		typedef  ::borogove::CommandSession_obj super;
+		typedef MucSettingsCommandSession_obj OBJ_;
+		MucSettingsCommandSession_obj();
+
+	public:
+		enum { _hx_ClassId = 0x5a25f9e4 };
+
+		void __construct(::String status,::String sessionid,::Array< ::Dynamic> actions,::Array< ::Dynamic> forms, ::borogove::Command command);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.MucSettingsCommandSession")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.MucSettingsCommandSession"); }
+		static ::hx::ObjectPtr< MucSettingsCommandSession_obj > __new(::String status,::String sessionid,::Array< ::Dynamic> actions,::Array< ::Dynamic> forms, ::borogove::Command command);
+		static ::hx::ObjectPtr< MucSettingsCommandSession_obj > __alloc(::hx::Ctx *_hx_ctx,::String status,::String sessionid,::Array< ::Dynamic> actions,::Array< ::Dynamic> forms, ::borogove::Command command);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~MucSettingsCommandSession_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("MucSettingsCommandSession",c9,99,ef,98); }
+
+		::Dynamic execute(::String action, ::borogove::FormSubmitBuilder data,::hx::Null< int >  formIdx);
+
+};
+
+} // end namespace borogove
+
+#endif /* INCLUDED_borogove_MucSettingsCommandSession */ 
diff --git a/Sources/c_borogove/iinclude/borogove/Notification.h b/Sources/c_borogove/iinclude/borogove/Notification.h
index bbbbd6e..b41d85c 100644
--- a/Sources/c_borogove/iinclude/borogove/Notification.h
+++ b/Sources/c_borogove/iinclude/borogove/Notification.h
@@ -9,6 +9,7 @@
 HX_DECLARE_STACK_FRAME(_hx_pos_44a57d84c61de0e9_67_new)
 HX_DECLARE_CLASS1(borogove,ChatMessage)
 HX_DECLARE_CLASS1(borogove,Notification)
+HX_DECLARE_CLASS1(borogove,ReactionUpdate)
 HX_DECLARE_CLASS1(borogove,Stanza)
 
 namespace borogove{
@@ -79,6 +80,9 @@ HXLINE(  79)		( ( ::borogove::Notification)(__this) )->timestamp = timestamp;
 		static  ::borogove::Notification fromChatMessage( ::borogove::ChatMessage m);
 		static ::Dynamic fromChatMessage_dyn();
 
+		static  ::borogove::Notification fromReactionUpdate( ::borogove::ReactionUpdate m, ::borogove::Stanza stanza);
+		static ::Dynamic fromReactionUpdate_dyn();
+
 		static  ::borogove::Notification fromThinStanza( ::borogove::Stanza stanza);
 		static ::Dynamic fromThinStanza_dyn();
 
diff --git a/Sources/c_borogove/iinclude/borogove/Participant.h b/Sources/c_borogove/iinclude/borogove/Participant.h
deleted file mode 100644
index 534c86e..0000000
--- a/Sources/c_borogove/iinclude/borogove/Participant.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Generated by Haxe 4.3.3
-#ifndef INCLUDED_borogove_Participant
-#define INCLUDED_borogove_Participant
-
-#ifndef HXCPP_H
-#include <hxcpp.h>
-#endif
-
-HX_DECLARE_CLASS1(borogove,AvailableChat)
-HX_DECLARE_CLASS1(borogove,Client)
-HX_DECLARE_CLASS1(borogove,EventEmitter)
-HX_DECLARE_CLASS1(borogove,JID)
-HX_DECLARE_CLASS1(borogove,Participant)
-HX_DECLARE_CLASS1(borogove,Role)
-HX_DECLARE_CLASS1(thenshim,Thenable)
-
-namespace borogove{
-
-
-class HXCPP_CLASS_ATTRIBUTES Participant_obj : public ::hx::Object
-{
-	public:
-		typedef ::hx::Object super;
-		typedef Participant_obj OBJ_;
-		Participant_obj();
-
-	public:
-		enum { _hx_ClassId = 0x09ded66e };
-
-		void __construct(::String displayName,::String photoUri,::String placeholderUri,bool isSelf,::Array< ::Dynamic> roles, ::borogove::JID jid, ::borogove::AvailableChat chat);
-		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.Participant")
-			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
-		inline void *operator new(size_t inSize, int extra)
-			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.Participant"); }
-		static ::hx::ObjectPtr< Participant_obj > __new(::String displayName,::String photoUri,::String placeholderUri,bool isSelf,::Array< ::Dynamic> roles, ::borogove::JID jid, ::borogove::AvailableChat chat);
-		static ::hx::ObjectPtr< Participant_obj > __alloc(::hx::Ctx *_hx_ctx,::String displayName,::String photoUri,::String placeholderUri,bool isSelf,::Array< ::Dynamic> roles, ::borogove::JID jid, ::borogove::AvailableChat chat);
-		static void * _hx_vtable;
-		static Dynamic __CreateEmpty();
-		static Dynamic __Create(::hx::DynamicArray inArgs);
-		//~Participant_obj();
-
-		HX_DO_RTTI_ALL;
-		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
-		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
-		void __GetFields(Array< ::String> &outFields);
-		static void __register();
-		void __Mark(HX_MARK_PARAMS);
-		void __Visit(HX_VISIT_PARAMS);
-		bool _hx_isInstanceOf(int inClassId);
-		::String __ToString() const { return HX_("Participant",93,9f,1c,5f); }
-
-		static void __boot();
-		static  ::Dynamic __meta__;
-		::String displayName;
-		::String displayName__fromC();
-		::Dynamic displayName__fromC_dyn();
-
-		::String photoUri;
-		::String photoUri__fromC();
-		::Dynamic photoUri__fromC_dyn();
-
-		::String placeholderUri;
-		::String placeholderUri__fromC();
-		::Dynamic placeholderUri__fromC_dyn();
-
-		bool isSelf;
-		bool isSelf__fromC();
-		::Dynamic isSelf__fromC_dyn();
-
-		 ::borogove::AvailableChat chat;
-		 ::borogove::AvailableChat chat__fromC();
-		::Dynamic chat__fromC_dyn();
-
-		::Array< ::Dynamic> roles;
-		size_t roles__fromC(void*** outPtr);
-
-		 ::borogove::JID jid;
-		::Dynamic profile( ::borogove::Client client);
-		::Dynamic profile_dyn();
-
-		void profile__fromC( ::borogove::Client client,::cpp::Function< void  (void*,void*) > handler,void* handler__context);
-
-		::Dynamic status( ::borogove::Client client);
-		::Dynamic status_dyn();
-
-		void status__fromC( ::borogove::Client client,::cpp::Function< void  (void*,void*) > handler,void* handler__context);
-
-};
-
-} // end namespace borogove
-
-#endif /* INCLUDED_borogove_Participant */ 
diff --git a/Sources/c_borogove/iinclude/borogove/Persistence.h b/Sources/c_borogove/iinclude/borogove/Persistence.h
index d781a2e..a31ee73 100644
--- a/Sources/c_borogove/iinclude/borogove/Persistence.h
+++ b/Sources/c_borogove/iinclude/borogove/Persistence.h
@@ -10,11 +10,13 @@ HX_DECLARE_CLASS1(borogove,Caps)
 HX_DECLARE_CLASS1(borogove,Chat)
 HX_DECLARE_CLASS1(borogove,ChatMessage)
 HX_DECLARE_CLASS1(borogove,EventEmitter)
+HX_DECLARE_CLASS1(borogove,Hash)
 HX_DECLARE_CLASS1(borogove,Member)
 HX_DECLARE_CLASS1(borogove,MemberUpdate)
 HX_DECLARE_CLASS1(borogove,Persistence)
 HX_DECLARE_CLASS1(borogove,ReactionUpdate)
 HX_DECLARE_CLASS1(thenshim,Thenable)
+HX_DECLARE_CLASS2(tink,streams,StreamObject)
 
 namespace borogove{
 
@@ -57,6 +59,14 @@ class HXCPP_CLASS_ATTRIBUTES Persistence_obj {
 		static inline ::Dynamic getMemberDetails( ::Dynamic _hx_,::String accountId, ::borogove::Chat chat,::Array< ::String > ids) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_getMemberDetails)(accountId,chat,ids);
 		}
+		::Dynamic (::hx::Object :: *_hx_storeVoiceRequest)(::String accountId, ::borogove::Chat chat,::String jid,bool requesting); 
+		static inline ::Dynamic storeVoiceRequest( ::Dynamic _hx_,::String accountId, ::borogove::Chat chat,::String jid,bool requesting) {
+			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_storeVoiceRequest)(accountId,chat,jid,requesting);
+		}
+		::Dynamic (::hx::Object :: *_hx_listVoiceRequests)(::String accountId, ::borogove::Chat chat); 
+		static inline ::Dynamic listVoiceRequests( ::Dynamic _hx_,::String accountId, ::borogove::Chat chat) {
+			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_listVoiceRequests)(accountId,chat);
+		}
 		::Dynamic (::hx::Object :: *_hx_getChatsUnreadDetails)(::String accountId,::Array< ::Dynamic> chats); 
 		static inline ::Dynamic getChatsUnreadDetails( ::Dynamic _hx_,::String accountId,::Array< ::Dynamic> chats) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_getChatsUnreadDetails)(accountId,chats);
@@ -93,13 +103,17 @@ class HXCPP_CLASS_ATTRIBUTES Persistence_obj {
 		static inline ::Dynamic getMessagesAround( ::Dynamic _hx_,::String accountId, ::borogove::ChatMessage around) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_getMessagesAround)(accountId,around);
 		}
-		::Dynamic (::hx::Object :: *_hx_hasMedia)(::String hashAlgorithm,::Array< unsigned char > hash); 
-		static inline ::Dynamic hasMedia( ::Dynamic _hx_,::String hashAlgorithm,::Array< unsigned char > hash) {
-			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_hasMedia)(hashAlgorithm,hash);
+		::Dynamic (::hx::Object :: *_hx_getMessagesByStatus)(::String accountId,int status); 
+		static inline ::Dynamic getMessagesByStatus( ::Dynamic _hx_,::String accountId,int status) {
+			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_getMessagesByStatus)(accountId,status);
+		}
+		::Dynamic (::hx::Object :: *_hx_hasMedia)( ::borogove::Hash hash); 
+		static inline ::Dynamic hasMedia( ::Dynamic _hx_, ::borogove::Hash hash) {
+			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_hasMedia)(hash);
 		}
-		::Dynamic (::hx::Object :: *_hx_storeMedia)(::String mime,::Array< unsigned char > bytes); 
-		static inline ::Dynamic storeMedia( ::Dynamic _hx_,::String mime,::Array< unsigned char > bytes) {
-			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_storeMedia)(mime,bytes);
+		::Dynamic (::hx::Object :: *_hx_storeMedia)(::String mime,::Dynamic source); 
+		static inline ::Dynamic storeMedia( ::Dynamic _hx_,::String mime,::Dynamic source) {
+			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_storeMedia)(mime,source);
 		}
 		::Dynamic (::hx::Object :: *_hx_removeMedia)(::String hashAlgorithm,::Array< unsigned char > hash); 
 		static inline ::Dynamic removeMedia( ::Dynamic _hx_,::String hashAlgorithm,::Array< unsigned char > hash) {
@@ -113,9 +127,9 @@ class HXCPP_CLASS_ATTRIBUTES Persistence_obj {
 		static inline ::Dynamic getCaps( ::Dynamic _hx_,::String ver) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_getCaps)(ver);
 		}
-		::Dynamic (::hx::Object :: *_hx_storeLogin)(::String accountId,::String clientId,::String displayName,::String token); 
-		static inline ::Dynamic storeLogin( ::Dynamic _hx_,::String accountId,::String clientId,::String displayName,::String token) {
-			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_storeLogin)(accountId,clientId,displayName,token);
+		::Dynamic (::hx::Object :: *_hx_storeLogin)(::String accountId,::String clientId,::String displayName,::String rosterVer,::String token); 
+		static inline ::Dynamic storeLogin( ::Dynamic _hx_,::String accountId,::String clientId,::String displayName,::String rosterVer,::String token) {
+			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::Persistence_obj *>(_hx_.mPtr->_hx_getInterface(0xb8b304be)))->_hx_storeLogin)(accountId,clientId,displayName,rosterVer,token);
 		}
 		::Dynamic (::hx::Object :: *_hx_getLogin)(::String accountId); 
 		static inline ::Dynamic getLogin( ::Dynamic _hx_,::String accountId) {
diff --git a/Sources/c_borogove/iinclude/borogove/Persistence__Companion.h b/Sources/c_borogove/iinclude/borogove/Persistence__Companion.h
index e695a86..97636fd 100644
--- a/Sources/c_borogove/iinclude/borogove/Persistence__Companion.h
+++ b/Sources/c_borogove/iinclude/borogove/Persistence__Companion.h
@@ -7,8 +7,10 @@
 #endif
 
 HX_DECLARE_CLASS1(borogove,ChatMessage)
+HX_DECLARE_CLASS1(borogove,Hash)
 HX_DECLARE_CLASS1(borogove,Persistence)
 HX_DECLARE_CLASS1(borogove,Persistence__Companion)
+HX_DECLARE_CLASS2(tink,streams,StreamObject)
 
 namespace borogove{
 
@@ -74,13 +76,13 @@ class HXCPP_CLASS_ATTRIBUTES Persistence__Companion_obj : public ::hx::Object
 
 		static void getMessagesAround__fromC(::Dynamic self,::String accountId, ::borogove::ChatMessage around,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context);
 
-		static void hasMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
+		static void hasMedia__fromC(::Dynamic self, ::borogove::Hash hash,::cpp::Function< void  (const char*,void*) > handler,void* handler__context);
 
-		static void storeMedia__fromC(::Dynamic self,::String mime,::cpp::Pointer< unsigned char > bytes,size_t bytes__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
+		static void storeMedia__fromC(::Dynamic self,::String mime,::Dynamic source,::cpp::Function< void  (const char*,void*) > handler,void* handler__context);
 
 		static void removeMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
 
-		static void storeLogin__fromC(::Dynamic self,::String accountId,::String clientId,::String displayName,::String token,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
+		static void storeLogin__fromC(::Dynamic self,::String accountId,::String clientId,::String displayName,::String rosterVer,::String token,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
 
 		static void removeAccount__fromC(::Dynamic self,::String accountId,bool completely,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
 
diff --git a/Sources/c_borogove/iinclude/borogove/SerializedChat.h b/Sources/c_borogove/iinclude/borogove/SerializedChat.h
index 2a2c337..e300622 100644
--- a/Sources/c_borogove/iinclude/borogove/SerializedChat.h
+++ b/Sources/c_borogove/iinclude/borogove/SerializedChat.h
@@ -7,15 +7,16 @@
 #endif
 
 HX_DECLARE_CLASS1(borogove,Caps)
-HX_DECLARE_CLASS1(borogove,Chat)
 HX_DECLARE_CLASS1(borogove,Client)
 HX_DECLARE_CLASS1(borogove,EventEmitter)
 HX_DECLARE_CLASS1(borogove,GenericStream)
 HX_DECLARE_CLASS1(borogove,Persistence)
 HX_DECLARE_CLASS1(borogove,SerializedChat)
+HX_DECLARE_CLASS1(borogove,Stanza)
 HX_DECLARE_CLASS1(borogove,Status)
 HX_DECLARE_CLASS1(haxe,IMap)
 HX_DECLARE_CLASS2(haxe,ds,StringMap)
+HX_DECLARE_CLASS1(thenshim,Thenable)
 
 namespace borogove{
 
@@ -30,13 +31,13 @@ class HXCPP_CLASS_ATTRIBUTES SerializedChat_obj : public ::hx::Object
 	public:
 		enum { _hx_ClassId = 0x1b18ce3d };
 
-		void __construct(::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status,::String extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass);
+		void __construct(::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass);
 		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.SerializedChat")
 			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
 		inline void *operator new(size_t inSize, int extra)
 			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.SerializedChat"); }
-		static ::hx::ObjectPtr< SerializedChat_obj > __new(::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status,::String extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass);
-		static ::hx::ObjectPtr< SerializedChat_obj > __alloc(::hx::Ctx *_hx_ctx,::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status,::String extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass);
+		static ::hx::ObjectPtr< SerializedChat_obj > __new(::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass);
+		static ::hx::ObjectPtr< SerializedChat_obj > __alloc(::hx::Ctx *_hx_ctx,::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass);
 		static void * _hx_vtable;
 		static Dynamic __CreateEmpty();
 		static Dynamic __Create(::hx::DynamicArray inArgs);
@@ -62,7 +63,7 @@ class HXCPP_CLASS_ATTRIBUTES SerializedChat_obj : public ::hx::Object
 		int uiState;
 		bool isBlocked;
 		 ::borogove::Status status;
-		::String extensions;
+		 ::borogove::Stanza extensions;
 		::String readUpToId;
 		::String readUpToBy;
 		 ::haxe::ds::StringMap threads;
@@ -73,7 +74,7 @@ class HXCPP_CLASS_ATTRIBUTES SerializedChat_obj : public ::hx::Object
 		bool notifyMention;
 		bool notifyReply;
 		::String klass;
-		 ::borogove::Chat toChat( ::borogove::Client client, ::borogove::GenericStream stream,::Dynamic persistence);
+		::Dynamic toChat( ::borogove::Client client, ::borogove::GenericStream stream,::Dynamic persistence);
 		::Dynamic toChat_dyn();
 
 };
diff --git a/Sources/c_borogove/iinclude/borogove/Sha1.h b/Sources/c_borogove/iinclude/borogove/Sha1.h
new file mode 100644
index 0000000..b9790e7
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/Sha1.h
@@ -0,0 +1,74 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_Sha1
+#define INCLUDED_borogove_Sha1
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS1(borogove,Sha1)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace borogove{
+
+
+class HXCPP_CLASS_ATTRIBUTES Sha1_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef Sha1_obj OBJ_;
+		Sha1_obj();
+
+	public:
+		enum { _hx_ClassId = 0x3562e806 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.Sha1")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.Sha1"); }
+		static ::hx::ObjectPtr< Sha1_obj > __new();
+		static ::hx::ObjectPtr< Sha1_obj > __alloc(::hx::Ctx *_hx_ctx);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~Sha1_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("Sha1",a5,f4,2b,37); }
+
+		static  ::haxe::io::Bytes make( ::haxe::io::Bytes b);
+		static ::Dynamic make_dyn();
+
+		::Array< int > h;
+		 ::haxe::io::Bytes buffer;
+		int bufferLen;
+		::cpp::Int64 totalLen;
+		void update( ::haxe::io::Bytes b);
+		::Dynamic update_dyn();
+
+		 ::haxe::io::Bytes digest();
+		::Dynamic digest_dyn();
+
+		void processBlock();
+		::Dynamic processBlock_dyn();
+
+		int ft(int t,int b,int c,int d);
+		::Dynamic ft_dyn();
+
+		int kt(int t);
+		::Dynamic kt_dyn();
+
+};
+
+} // end namespace borogove
+
+#endif /* INCLUDED_borogove_Sha1 */ 
diff --git a/Sources/c_borogove/iinclude/borogove/Stanza.h b/Sources/c_borogove/iinclude/borogove/Stanza.h
index b34faa6..952977d 100644
--- a/Sources/c_borogove/iinclude/borogove/Stanza.h
+++ b/Sources/c_borogove/iinclude/borogove/Stanza.h
@@ -6,9 +6,12 @@
 #include <hxcpp.h>
 #endif
 
+HX_DECLARE_CLASS0(Xml)
 HX_DECLARE_CLASS1(borogove,Node)
 HX_DECLARE_CLASS1(borogove,Stanza)
 HX_DECLARE_CLASS1(borogove,StanzaError)
+HX_DECLARE_CLASS1(haxe,IMap)
+HX_DECLARE_CLASS2(haxe,ds,StringMap)
 
 namespace borogove{
 
@@ -23,13 +26,13 @@ class HXCPP_CLASS_ATTRIBUTES Stanza_obj : public ::hx::Object
 	public:
 		enum { _hx_ClassId = 0x6aef1fb6 };
 
-		void __construct(::String name, ::Dynamic attr);
+		void __construct(::String name, ::Dynamic attr, ::haxe::ds::StringMap attrMap);
 		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.Stanza")
 			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
 		inline void *operator new(size_t inSize, int extra)
 			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.Stanza"); }
-		static ::hx::ObjectPtr< Stanza_obj > __new(::String name, ::Dynamic attr);
-		static ::hx::ObjectPtr< Stanza_obj > __alloc(::hx::Ctx *_hx_ctx,::String name, ::Dynamic attr);
+		static ::hx::ObjectPtr< Stanza_obj > __new(::String name, ::Dynamic attr, ::haxe::ds::StringMap attrMap);
+		static ::hx::ObjectPtr< Stanza_obj > __alloc(::hx::Ctx *_hx_ctx,::String name, ::Dynamic attr, ::haxe::ds::StringMap attrMap);
 		static void * _hx_vtable;
 		static Dynamic __CreateEmpty();
 		static Dynamic __Create(::hx::DynamicArray inArgs);
@@ -49,11 +52,14 @@ class HXCPP_CLASS_ATTRIBUTES Stanza_obj : public ::hx::Object
 		static  ::borogove::Stanza parse(::String s);
 		static ::Dynamic parse_dyn();
 
+		static  ::borogove::Stanza fromXml( ::Xml el);
+		static ::Dynamic fromXml_dyn();
+
 		static bool parseXmlBool(::String x);
 		static ::Dynamic parseXmlBool_dyn();
 
 		::String name;
-		 ::Dynamic attr;
+		 ::haxe::ds::StringMap attr;
 		::Array< ::Dynamic> children;
 		 ::borogove::Stanza last_added;
 		::Array< ::Dynamic> last_added_stack;
@@ -64,15 +70,18 @@ class HXCPP_CLASS_ATTRIBUTES Stanza_obj : public ::hx::Object
 		virtual ::String toString();
 		::Dynamic toString_dyn();
 
-		 ::borogove::Stanza tag(::String name, ::Dynamic attr);
+		 ::borogove::Stanza tag(::String name, ::Dynamic attr, ::haxe::ds::StringMap attrMap);
 		::Dynamic tag_dyn();
 
 		 ::borogove::Stanza text(::String content);
 		::Dynamic text_dyn();
 
-		 ::borogove::Stanza textTag(::String tagName,::String textContent, ::Dynamic attr);
+		 ::borogove::Stanza textTag(::String tagName,::String textContent, ::Dynamic attr, ::haxe::ds::StringMap attrMap);
 		::Dynamic textTag_dyn();
 
+		bool atTop();
+		::Dynamic atTop_dyn();
+
 		 ::borogove::Stanza up();
 		::Dynamic up_dyn();
 
diff --git a/Sources/c_borogove/iinclude/borogove/StanzaError.h b/Sources/c_borogove/iinclude/borogove/StanzaError.h
index 9494a4a..16742c0 100644
--- a/Sources/c_borogove/iinclude/borogove/StanzaError.h
+++ b/Sources/c_borogove/iinclude/borogove/StanzaError.h
@@ -6,7 +6,7 @@
 #include <hxcpp.h>
 #endif
 
-HX_DECLARE_STACK_FRAME(_hx_pos_484813a5ad2c9a87_59_new)
+HX_DECLARE_STACK_FRAME(_hx_pos_484813a5ad2c9a87_57_new)
 HX_DECLARE_CLASS1(borogove,StanzaError)
 
 namespace borogove{
@@ -38,10 +38,10 @@ class HXCPP_CLASS_ATTRIBUTES StanzaError_obj : public ::hx::Object
 			StanzaError_obj *__this = (StanzaError_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(StanzaError_obj), true, "borogove.StanzaError"));
 			*(void **)__this = StanzaError_obj::_hx_vtable;
 {
-            	HX_STACKFRAME(&_hx_pos_484813a5ad2c9a87_59_new)
-HXLINE(  60)		( ( ::borogove::StanzaError)(__this) )->type = type_;
-HXLINE(  61)		( ( ::borogove::StanzaError)(__this) )->condition = condition_;
-HXLINE(  62)		( ( ::borogove::StanzaError)(__this) )->text = text_;
+            	HX_STACKFRAME(&_hx_pos_484813a5ad2c9a87_57_new)
+HXLINE(  58)		( ( ::borogove::StanzaError)(__this) )->type = type_;
+HXLINE(  59)		( ( ::borogove::StanzaError)(__this) )->condition = condition_;
+HXLINE(  60)		( ( ::borogove::StanzaError)(__this) )->text = text_;
             	}
 		
 			return __this;
diff --git a/Sources/c_borogove/iinclude/borogove/_Source/Source_Impl_.h b/Sources/c_borogove/iinclude/borogove/_Source/Source_Impl_.h
new file mode 100644
index 0000000..3a2c759
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/_Source/Source_Impl_.h
@@ -0,0 +1,66 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove__Source_Source_Impl_
+#define INCLUDED_borogove__Source_Source_Impl_
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(borogove,_Source,Source_Impl_)
+HX_DECLARE_CLASS2(tink,streams,StreamObject)
+
+namespace borogove{
+namespace _Source{
+
+
+class HXCPP_CLASS_ATTRIBUTES Source_Impl__obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef Source_Impl__obj OBJ_;
+		Source_Impl__obj();
+
+	public:
+		enum { _hx_ClassId = 0x16ab3ea4 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="borogove._Source.Source_Impl_")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"borogove._Source.Source_Impl_"); }
+
+		inline static ::hx::ObjectPtr< Source_Impl__obj > __new() {
+			::hx::ObjectPtr< Source_Impl__obj > __this = new Source_Impl__obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< Source_Impl__obj > __alloc(::hx::Ctx *_hx_ctx) {
+			Source_Impl__obj *__this = (Source_Impl__obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Source_Impl__obj), false, "borogove._Source.Source_Impl_"));
+			*(void **)__this = Source_Impl__obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~Source_Impl__obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("Source_Impl_",db,cf,0d,d6); }
+
+		static ::Dynamic _new(::Dynamic source);
+		static ::Dynamic _new_dyn();
+
+		static ::Dynamic ofTinkSource(::Dynamic source);
+		static ::Dynamic ofTinkSource_dyn();
+
+};
+
+} // end namespace borogove
+} // end namespace _Source
+
+#endif /* INCLUDED_borogove__Source_Source_Impl_ */ 
diff --git a/Sources/c_borogove/iinclude/borogove/_XEP0454/XEP0454_Fields_.h b/Sources/c_borogove/iinclude/borogove/_XEP0454/XEP0454_Fields_.h
new file mode 100644
index 0000000..67e4a61
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/_XEP0454/XEP0454_Fields_.h
@@ -0,0 +1,73 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove__XEP0454_XEP0454_Fields_
+#define INCLUDED_borogove__XEP0454_XEP0454_Fields_
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(borogove,_XEP0454,XEP0454_Fields_)
+HX_DECLARE_CLASS1(thenshim,Thenable)
+HX_DECLARE_CLASS2(tink,streams,StreamObject)
+
+namespace borogove{
+namespace _XEP0454{
+
+
+class HXCPP_CLASS_ATTRIBUTES XEP0454_Fields__obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef XEP0454_Fields__obj OBJ_;
+		XEP0454_Fields__obj();
+
+	public:
+		enum { _hx_ClassId = 0x2bbca83d };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="borogove._XEP0454.XEP0454_Fields_")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"borogove._XEP0454.XEP0454_Fields_"); }
+
+		inline static ::hx::ObjectPtr< XEP0454_Fields__obj > __new() {
+			::hx::ObjectPtr< XEP0454_Fields__obj > __this = new XEP0454_Fields__obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< XEP0454_Fields__obj > __alloc(::hx::Ctx *_hx_ctx) {
+			XEP0454_Fields__obj *__this = (XEP0454_Fields__obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(XEP0454_Fields__obj), false, "borogove._XEP0454.XEP0454_Fields_"));
+			*(void **)__this = XEP0454_Fields__obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~XEP0454_Fields__obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("XEP0454_Fields_",cd,b4,1b,a8); }
+
+		static ::Dynamic fetch( ::Dynamic aesgcm);
+		static ::Dynamic fetch_dyn();
+
+		static ::Dynamic put(::Dynamic source, ::Dynamic httpPut);
+		static ::Dynamic put_dyn();
+
+		static  ::Dynamic parse(::String uriStr);
+		static ::Dynamic parse_dyn();
+
+		static  ::Dynamic parseURI(::String uriStr);
+		static ::Dynamic parseURI_dyn();
+
+};
+
+} // end namespace borogove
+} // end namespace _XEP0454
+
+#endif /* INCLUDED_borogove__XEP0454_XEP0454_Fields_ */ 
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/Dummy.h b/Sources/c_borogove/iinclude/borogove/persistence/Dummy.h
index 19920b9..aca9397 100644
--- a/Sources/c_borogove/iinclude/borogove/persistence/Dummy.h
+++ b/Sources/c_borogove/iinclude/borogove/persistence/Dummy.h
@@ -13,12 +13,14 @@ HX_DECLARE_CLASS1(borogove,Caps)
 HX_DECLARE_CLASS1(borogove,Chat)
 HX_DECLARE_CLASS1(borogove,ChatMessage)
 HX_DECLARE_CLASS1(borogove,EventEmitter)
+HX_DECLARE_CLASS1(borogove,Hash)
 HX_DECLARE_CLASS1(borogove,Member)
 HX_DECLARE_CLASS1(borogove,MemberUpdate)
 HX_DECLARE_CLASS1(borogove,Persistence)
 HX_DECLARE_CLASS1(borogove,ReactionUpdate)
 HX_DECLARE_CLASS2(borogove,persistence,Dummy)
 HX_DECLARE_CLASS1(thenshim,Thenable)
+HX_DECLARE_CLASS2(tink,streams,StreamObject)
 
 namespace borogove{
 namespace persistence{
@@ -79,6 +81,12 @@ class HXCPP_CLASS_ATTRIBUTES Dummy_obj : public ::hx::Object
 		::Dynamic getMemberDetails(::String accountId, ::borogove::Chat chat,::Array< ::String > ids);
 		::Dynamic getMemberDetails_dyn();
 
+		::Dynamic storeVoiceRequest(::String accountId, ::borogove::Chat chat,::String jid,bool requesting);
+		::Dynamic storeVoiceRequest_dyn();
+
+		::Dynamic listVoiceRequests(::String accountId, ::borogove::Chat chat);
+		::Dynamic listVoiceRequests_dyn();
+
 		::Dynamic storeMessages(::String accountId,::Array< ::Dynamic> messages);
 		::Dynamic storeMessages_dyn();
 
@@ -97,6 +105,9 @@ class HXCPP_CLASS_ATTRIBUTES Dummy_obj : public ::hx::Object
 		::Dynamic getMessagesAround(::String accountId, ::borogove::ChatMessage around);
 		::Dynamic getMessagesAround_dyn();
 
+		::Dynamic getMessagesByStatus(::String accountId,int status);
+		::Dynamic getMessagesByStatus_dyn();
+
 		::Dynamic getChatsUnreadDetails(::String accountId,::Array< ::Dynamic> chats);
 		::Dynamic getChatsUnreadDetails_dyn();
 
@@ -106,10 +117,10 @@ class HXCPP_CLASS_ATTRIBUTES Dummy_obj : public ::hx::Object
 		::Dynamic updateMessageStatus(::String accountId,::String localId,int status,::String statusText);
 		::Dynamic updateMessageStatus_dyn();
 
-		::Dynamic hasMedia(::String hashAlgorithm,::Array< unsigned char > hash);
+		::Dynamic hasMedia( ::borogove::Hash hash);
 		::Dynamic hasMedia_dyn();
 
-		::Dynamic storeMedia(::String mime,::Array< unsigned char > bd);
+		::Dynamic storeMedia(::String mime,::Dynamic source);
 		::Dynamic storeMedia_dyn();
 
 		::Dynamic removeMedia(::String hashAlgorithm,::Array< unsigned char > hash);
@@ -121,7 +132,7 @@ class HXCPP_CLASS_ATTRIBUTES Dummy_obj : public ::hx::Object
 		::Dynamic getCaps(::String ver);
 		::Dynamic getCaps_dyn();
 
-		::Dynamic storeLogin(::String login,::String clientId,::String displayName,::String token);
+		::Dynamic storeLogin(::String login,::String clientId,::String displayName,::String rosterVer,::String token);
 		::Dynamic storeLogin_dyn();
 
 		::Dynamic getLogin(::String login);
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/MediaStore.h b/Sources/c_borogove/iinclude/borogove/persistence/MediaStore.h
index 6148605..7c0b929 100644
--- a/Sources/c_borogove/iinclude/borogove/persistence/MediaStore.h
+++ b/Sources/c_borogove/iinclude/borogove/persistence/MediaStore.h
@@ -6,9 +6,11 @@
 #include <hxcpp.h>
 #endif
 
+HX_DECLARE_CLASS1(borogove,Hash)
 HX_DECLARE_CLASS2(borogove,persistence,KeyValueStore)
 HX_DECLARE_CLASS2(borogove,persistence,MediaStore)
 HX_DECLARE_CLASS1(thenshim,Thenable)
+HX_DECLARE_CLASS2(tink,streams,StreamObject)
 
 namespace borogove{
 namespace persistence{
@@ -20,17 +22,17 @@ class HXCPP_CLASS_ATTRIBUTES MediaStore_obj {
 		HX_DO_INTERFACE_RTTI;
 
 		static void __boot();
-		::Dynamic (::hx::Object :: *_hx_hasMedia)(::String hashAlgorithm,::Array< unsigned char > hash); 
-		static inline ::Dynamic hasMedia( ::Dynamic _hx_,::String hashAlgorithm,::Array< unsigned char > hash) {
-			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::persistence::MediaStore_obj *>(_hx_.mPtr->_hx_getInterface(0xb3aaad1b)))->_hx_hasMedia)(hashAlgorithm,hash);
+		::Dynamic (::hx::Object :: *_hx_hasMedia)( ::borogove::Hash hash); 
+		static inline ::Dynamic hasMedia( ::Dynamic _hx_, ::borogove::Hash hash) {
+			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::persistence::MediaStore_obj *>(_hx_.mPtr->_hx_getInterface(0xb3aaad1b)))->_hx_hasMedia)(hash);
 		}
 		::Dynamic (::hx::Object :: *_hx_removeMedia)(::String hashAlgorithm,::Array< unsigned char > hash); 
 		static inline ::Dynamic removeMedia( ::Dynamic _hx_,::String hashAlgorithm,::Array< unsigned char > hash) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::persistence::MediaStore_obj *>(_hx_.mPtr->_hx_getInterface(0xb3aaad1b)))->_hx_removeMedia)(hashAlgorithm,hash);
 		}
-		::Dynamic (::hx::Object :: *_hx_storeMedia)(::String mime,::Array< unsigned char > bytes); 
-		static inline ::Dynamic storeMedia( ::Dynamic _hx_,::String mime,::Array< unsigned char > bytes) {
-			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::persistence::MediaStore_obj *>(_hx_.mPtr->_hx_getInterface(0xb3aaad1b)))->_hx_storeMedia)(mime,bytes);
+		::Dynamic (::hx::Object :: *_hx_storeMedia)(::String mime,::Dynamic source); 
+		static inline ::Dynamic storeMedia( ::Dynamic _hx_,::String mime,::Dynamic source) {
+			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::persistence::MediaStore_obj *>(_hx_.mPtr->_hx_getInterface(0xb3aaad1b)))->_hx_storeMedia)(mime,source);
 		}
 		void (::hx::Object :: *_hx_setKV)(::Dynamic kv); 
 		static inline void setKV( ::Dynamic _hx_,::Dynamic kv) {
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/MediaStoreFS.h b/Sources/c_borogove/iinclude/borogove/persistence/MediaStoreFS.h
index 25370f4..75fabbf 100644
--- a/Sources/c_borogove/iinclude/borogove/persistence/MediaStoreFS.h
+++ b/Sources/c_borogove/iinclude/borogove/persistence/MediaStoreFS.h
@@ -9,10 +9,12 @@
 #ifndef INCLUDED_borogove_persistence_MediaStore
 #include <borogove/persistence/MediaStore.h>
 #endif
+HX_DECLARE_CLASS1(borogove,Hash)
 HX_DECLARE_CLASS2(borogove,persistence,KeyValueStore)
 HX_DECLARE_CLASS2(borogove,persistence,MediaStore)
 HX_DECLARE_CLASS2(borogove,persistence,MediaStoreFS)
 HX_DECLARE_CLASS1(thenshim,Thenable)
+HX_DECLARE_CLASS2(tink,streams,StreamObject)
 
 namespace borogove{
 namespace persistence{
@@ -63,13 +65,13 @@ class HXCPP_CLASS_ATTRIBUTES MediaStoreFS_obj : public ::hx::Object
 
 		void getMediaPath__fromC(::String uri,::cpp::Function< void  (const char*,void*) > handler,void* handler__context);
 
-		::Dynamic hasMedia(::String hashAlgorithm,::Array< unsigned char > hash);
+		::Dynamic hasMedia( ::borogove::Hash hash);
 		::Dynamic hasMedia_dyn();
 
 		::Dynamic removeMedia(::String hashAlgorithm,::Array< unsigned char > hash);
 		::Dynamic removeMedia_dyn();
 
-		::Dynamic storeMedia(::String mime,::Array< unsigned char > bd);
+		::Dynamic storeMedia(::String mime,::Dynamic source);
 		::Dynamic storeMedia_dyn();
 
 		::Dynamic set(::String k,::String v);
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/MediaStore__Companion.h b/Sources/c_borogove/iinclude/borogove/persistence/MediaStore__Companion.h
index 2bddcc4..b6fa94f 100644
--- a/Sources/c_borogove/iinclude/borogove/persistence/MediaStore__Companion.h
+++ b/Sources/c_borogove/iinclude/borogove/persistence/MediaStore__Companion.h
@@ -6,8 +6,10 @@
 #include <hxcpp.h>
 #endif
 
+HX_DECLARE_CLASS1(borogove,Hash)
 HX_DECLARE_CLASS2(borogove,persistence,MediaStore)
 HX_DECLARE_CLASS2(borogove,persistence,MediaStore__Companion)
+HX_DECLARE_CLASS2(tink,streams,StreamObject)
 
 namespace borogove{
 namespace persistence{
@@ -53,11 +55,11 @@ class HXCPP_CLASS_ATTRIBUTES MediaStore__Companion_obj : public ::hx::Object
 
 		static void __boot();
 		static  ::Dynamic __meta__;
-		static void hasMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
+		static void hasMedia__fromC(::Dynamic self, ::borogove::Hash hash,::cpp::Function< void  (const char*,void*) > handler,void* handler__context);
 
 		static void removeMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
 
-		static void storeMedia__fromC(::Dynamic self,::String mime,::cpp::Pointer< unsigned char > bytes,size_t bytes__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
+		static void storeMedia__fromC(::Dynamic self,::String mime,::Dynamic source,::cpp::Function< void  (const char*,void*) > handler,void* handler__context);
 
 };
 
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/Sqlite.h b/Sources/c_borogove/iinclude/borogove/persistence/Sqlite.h
index aece3d6..06b90a4 100644
--- a/Sources/c_borogove/iinclude/borogove/persistence/Sqlite.h
+++ b/Sources/c_borogove/iinclude/borogove/persistence/Sqlite.h
@@ -16,7 +16,9 @@ HX_DECLARE_CLASS1(borogove,AsyncLock)
 HX_DECLARE_CLASS1(borogove,Caps)
 HX_DECLARE_CLASS1(borogove,Chat)
 HX_DECLARE_CLASS1(borogove,ChatMessage)
+HX_DECLARE_CLASS1(borogove,EncryptionInfo)
 HX_DECLARE_CLASS1(borogove,EventEmitter)
+HX_DECLARE_CLASS1(borogove,Hash)
 HX_DECLARE_CLASS1(borogove,Member)
 HX_DECLARE_CLASS1(borogove,MemberUpdate)
 HX_DECLARE_CLASS1(borogove,Persistence)
@@ -30,6 +32,7 @@ HX_DECLARE_CLASS1(haxe,Timer)
 HX_DECLARE_CLASS2(haxe,ds,ObjectMap)
 HX_DECLARE_CLASS2(haxe,ds,StringMap)
 HX_DECLARE_CLASS1(thenshim,Thenable)
+HX_DECLARE_CLASS2(tink,streams,StreamObject)
 
 namespace borogove{
 namespace persistence{
@@ -74,6 +77,21 @@ class HXCPP_CLASS_ATTRIBUTES Sqlite_obj : public ::hx::Object
 		static ::String prepare( ::Dynamic q);
 		static ::Dynamic prepare_dyn();
 
+		static  ::Dynamic col(::String name,::String sql);
+		static ::Dynamic col_dyn();
+
+		static ::String messageColumnsString(::Array< ::Dynamic> customColumns);
+		static ::Dynamic messageColumnsString_dyn();
+
+		static ::Array< ::String > messageColumns(::Array< ::Dynamic> customColumns);
+		static ::Dynamic messageColumns_dyn();
+
+		static  ::Dynamic insertCol(::String name, ::Dynamic value,::String valueSql);
+		static ::Dynamic insertCol_dyn();
+
+		static  ::borogove::ChatMessage originalMessage( ::borogove::ChatMessage message);
+		static ::Dynamic originalMessage_dyn();
+
 		 ::borogove::persistence::SqliteDriver db;
 		::Dynamic media;
 		 ::borogove::AsyncLock storeMessagesSerialized;
@@ -118,6 +136,12 @@ class HXCPP_CLASS_ATTRIBUTES Sqlite_obj : public ::hx::Object
 		::Dynamic getMemberDetails(::String accountId, ::borogove::Chat chat,::Array< ::String > ids);
 		::Dynamic getMemberDetails_dyn();
 
+		::Dynamic storeVoiceRequest(::String accountId, ::borogove::Chat chat,::String jid,bool requesting);
+		::Dynamic storeVoiceRequest_dyn();
+
+		::Dynamic listVoiceRequests(::String accountId, ::borogove::Chat chat);
+		::Dynamic listVoiceRequests_dyn();
+
 		::Dynamic searchMessages(::String accountId,::String chatId,::String q);
 		::Dynamic searchMessages_dyn();
 
@@ -150,6 +174,9 @@ class HXCPP_CLASS_ATTRIBUTES Sqlite_obj : public ::hx::Object
 		::Dynamic getMessagesAround(::String accountId, ::borogove::ChatMessage around);
 		::Dynamic getMessagesAround_dyn();
 
+		::Dynamic getMessagesByStatus(::String accountId,int status);
+		::Dynamic getMessagesByStatus_dyn();
+
 		::Dynamic getChatUnreadDetails(::String accountId, ::borogove::Chat chat);
 		::Dynamic getChatUnreadDetails_dyn();
 
@@ -162,13 +189,13 @@ class HXCPP_CLASS_ATTRIBUTES Sqlite_obj : public ::hx::Object
 		::Dynamic updateMessageStatus(::String accountId,::String localId,int status,::String statusText);
 		::Dynamic updateMessageStatus_dyn();
 
-		::Dynamic hasMedia(::String hashAlgorithm,::Array< unsigned char > hash);
+		::Dynamic hasMedia( ::borogove::Hash hash);
 		::Dynamic hasMedia_dyn();
 
 		::Dynamic removeMedia(::String hashAlgorithm,::Array< unsigned char > hash);
 		::Dynamic removeMedia_dyn();
 
-		::Dynamic storeMedia(::String mime,::Array< unsigned char > bd);
+		::Dynamic storeMedia(::String mime,::Dynamic source);
 		::Dynamic storeMedia_dyn();
 
 		void storeCaps( ::borogove::Caps caps);
@@ -180,7 +207,7 @@ class HXCPP_CLASS_ATTRIBUTES Sqlite_obj : public ::hx::Object
 		::Dynamic getCaps(::String ver);
 		::Dynamic getCaps_dyn();
 
-		::Dynamic storeLogin(::String accountId,::String clientId,::String displayName,::String token);
+		::Dynamic storeLogin(::String accountId,::String clientId,::String displayName,::String rosterVer,::String token);
 		::Dynamic storeLogin_dyn();
 
 		::Dynamic getLogin(::String accountId);
@@ -216,12 +243,25 @@ class HXCPP_CLASS_ATTRIBUTES Sqlite_obj : public ::hx::Object
 		::Dynamic hydrateReplyTo(::String accountId,::Array< ::Dynamic> messages,::Array< ::Dynamic> replyTos);
 		::Dynamic hydrateReplyTo_dyn();
 
+		 ::borogove::EncryptionInfo hydrateEncryption( ::Dynamic encryption);
+		::Dynamic hydrateEncryption_dyn();
+
+		::Dynamic hydrateMessagesAndLoadMeta(::String accountId, ::Dynamic rows);
+		::Dynamic hydrateMessagesAndLoadMeta_dyn();
+
+		::Dynamic messagesLoadMeta(::String accountId,::Array< ::Dynamic> messages);
+		::Dynamic messagesLoadMeta_dyn();
+
 		::Array< ::Dynamic> hydrateMessages(::String accountId, ::Dynamic rows);
 		::Dynamic hydrateMessages_dyn();
 
 		 ::borogove::Caps hydrateCaps( ::Dynamic o,::Array< unsigned char > ver);
 		::Dynamic hydrateCaps_dyn();
 
+		::String versionedMessageColumns;
+		::Dynamic insertMessages(::String accountId,::Array< ::Dynamic> messages);
+		::Dynamic insertMessages_dyn();
+
 };
 
 } // end namespace borogove
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/SqliteDriver.h b/Sources/c_borogove/iinclude/borogove/persistence/SqliteDriver.h
index 3c51890..cbd5e1c 100644
--- a/Sources/c_borogove/iinclude/borogove/persistence/SqliteDriver.h
+++ b/Sources/c_borogove/iinclude/borogove/persistence/SqliteDriver.h
@@ -54,6 +54,8 @@ class HXCPP_CLASS_ATTRIBUTES SqliteDriver_obj : public ::hx::Object
 		::Dynamic ready;
 		 ::Dynamic setReady;
 		Dynamic setReady_dyn() { return setReady;}
+		 ::Dynamic setFailed;
+		Dynamic setFailed_dyn() { return setFailed;}
 		::Dynamic execute(::Dynamic pool,::Array< ::Dynamic> qs);
 		::Dynamic execute_dyn();
 
diff --git a/Sources/c_borogove/iinclude/borogove/queries/HttpUploadSlot.h b/Sources/c_borogove/iinclude/borogove/queries/HttpUploadSlot.h
index e26e102..dafe56e 100644
--- a/Sources/c_borogove/iinclude/borogove/queries/HttpUploadSlot.h
+++ b/Sources/c_borogove/iinclude/borogove/queries/HttpUploadSlot.h
@@ -9,7 +9,6 @@
 #ifndef INCLUDED_borogove_queries_GenericQuery
 #include <borogove/queries/GenericQuery.h>
 #endif
-HX_DECLARE_CLASS1(borogove,Hash)
 HX_DECLARE_CLASS1(borogove,Stanza)
 HX_DECLARE_CLASS2(borogove,queries,GenericQuery)
 HX_DECLARE_CLASS2(borogove,queries,HttpUploadSlot)
@@ -28,13 +27,13 @@ class HXCPP_CLASS_ATTRIBUTES HttpUploadSlot_obj : public  ::borogove::queries::G
 	public:
 		enum { _hx_ClassId = 0x402263cc };
 
-		void __construct(::String to,::String filename,int size,::String mime,::Array< ::Dynamic> hashes);
+		void __construct(::String to,::String filename,int size,::String mime);
 		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.queries.HttpUploadSlot")
 			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
 		inline void *operator new(size_t inSize, int extra)
 			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.queries.HttpUploadSlot"); }
-		static ::hx::ObjectPtr< HttpUploadSlot_obj > __new(::String to,::String filename,int size,::String mime,::Array< ::Dynamic> hashes);
-		static ::hx::ObjectPtr< HttpUploadSlot_obj > __alloc(::hx::Ctx *_hx_ctx,::String to,::String filename,int size,::String mime,::Array< ::Dynamic> hashes);
+		static ::hx::ObjectPtr< HttpUploadSlot_obj > __new(::String to,::String filename,int size,::String mime);
+		static ::hx::ObjectPtr< HttpUploadSlot_obj > __alloc(::hx::Ctx *_hx_ctx,::String to,::String filename,int size,::String mime);
 		static void * _hx_vtable;
 		static Dynamic __CreateEmpty();
 		static Dynamic __Create(::hx::DynamicArray inArgs);
diff --git a/Sources/c_borogove/iinclude/borogove/queries/MucSettingsGet.h b/Sources/c_borogove/iinclude/borogove/queries/MucSettingsGet.h
new file mode 100644
index 0000000..5693038
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/queries/MucSettingsGet.h
@@ -0,0 +1,64 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_queries_MucSettingsGet
+#define INCLUDED_borogove_queries_MucSettingsGet
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+#ifndef INCLUDED_borogove_queries_GenericQuery
+#include <borogove/queries/GenericQuery.h>
+#endif
+HX_DECLARE_CLASS1(borogove,Stanza)
+HX_DECLARE_CLASS2(borogove,queries,GenericQuery)
+HX_DECLARE_CLASS2(borogove,queries,MucSettingsGet)
+
+namespace borogove{
+namespace queries{
+
+
+class HXCPP_CLASS_ATTRIBUTES MucSettingsGet_obj : public  ::borogove::queries::GenericQuery_obj
+{
+	public:
+		typedef  ::borogove::queries::GenericQuery_obj super;
+		typedef MucSettingsGet_obj OBJ_;
+		MucSettingsGet_obj();
+
+	public:
+		enum { _hx_ClassId = 0x7ebf24bd };
+
+		void __construct(::String to);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.queries.MucSettingsGet")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.queries.MucSettingsGet"); }
+		static ::hx::ObjectPtr< MucSettingsGet_obj > __new(::String to);
+		static ::hx::ObjectPtr< MucSettingsGet_obj > __alloc(::hx::Ctx *_hx_ctx,::String to);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~MucSettingsGet_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("MucSettingsGet",58,17,ef,a5); }
+
+		 ::borogove::Stanza responseStanza;
+		::String error;
+		void handleResponse( ::borogove::Stanza stanza);
+
+		 ::borogove::Stanza getResult();
+		::Dynamic getResult_dyn();
+
+};
+
+} // end namespace borogove
+} // end namespace queries
+
+#endif /* INCLUDED_borogove_queries_MucSettingsGet */ 
diff --git a/Sources/c_borogove/iinclude/borogove/queries/MucSettingsSubmit.h b/Sources/c_borogove/iinclude/borogove/queries/MucSettingsSubmit.h
new file mode 100644
index 0000000..1408ab8
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/queries/MucSettingsSubmit.h
@@ -0,0 +1,64 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_queries_MucSettingsSubmit
+#define INCLUDED_borogove_queries_MucSettingsSubmit
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+#ifndef INCLUDED_borogove_queries_GenericQuery
+#include <borogove/queries/GenericQuery.h>
+#endif
+HX_DECLARE_CLASS1(borogove,Stanza)
+HX_DECLARE_CLASS2(borogove,queries,GenericQuery)
+HX_DECLARE_CLASS2(borogove,queries,MucSettingsSubmit)
+
+namespace borogove{
+namespace queries{
+
+
+class HXCPP_CLASS_ATTRIBUTES MucSettingsSubmit_obj : public  ::borogove::queries::GenericQuery_obj
+{
+	public:
+		typedef  ::borogove::queries::GenericQuery_obj super;
+		typedef MucSettingsSubmit_obj OBJ_;
+		MucSettingsSubmit_obj();
+
+	public:
+		enum { _hx_ClassId = 0x425b8651 };
+
+		void __construct(::String to, ::borogove::Stanza submitForm);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="borogove.queries.MucSettingsSubmit")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"borogove.queries.MucSettingsSubmit"); }
+		static ::hx::ObjectPtr< MucSettingsSubmit_obj > __new(::String to, ::borogove::Stanza submitForm);
+		static ::hx::ObjectPtr< MucSettingsSubmit_obj > __alloc(::hx::Ctx *_hx_ctx,::String to, ::borogove::Stanza submitForm);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~MucSettingsSubmit_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("MucSettingsSubmit",96,e6,a2,de); }
+
+		 ::borogove::Stanza responseStanza;
+		::String error;
+		void handleResponse( ::borogove::Stanza stanza);
+
+		bool getResult();
+		::Dynamic getResult_dyn();
+
+};
+
+} // end namespace borogove
+} // end namespace queries
+
+#endif /* INCLUDED_borogove_queries_MucSettingsSubmit */ 
diff --git a/Sources/c_borogove/iinclude/borogove/streams/XmppStropheStream.h b/Sources/c_borogove/iinclude/borogove/streams/XmppStropheStream.h
index 2e7d4b5..0a0824e 100644
--- a/Sources/c_borogove/iinclude/borogove/streams/XmppStropheStream.h
+++ b/Sources/c_borogove/iinclude/borogove/streams/XmppStropheStream.h
@@ -19,6 +19,7 @@ HX_DECLARE_CLASS1(borogove,IqRequestType)
 HX_DECLARE_CLASS1(borogove,IqResult)
 HX_DECLARE_CLASS1(borogove,Stanza)
 HX_DECLARE_CLASS2(borogove,streams,XmppStropheStream)
+HX_DECLARE_CLASS2(cpp,vm,WeakRef)
 HX_DECLARE_CLASS1(haxe,IMap)
 HX_DECLARE_CLASS1(haxe,Timer)
 HX_DECLARE_CLASS2(haxe,ds,BalancedTree)
@@ -62,6 +63,9 @@ class HXCPP_CLASS_ATTRIBUTES XmppStropheStream_obj : public  ::borogove::Generic
 		bool _hx_isInstanceOf(int inClassId);
 		::String __ToString() const { return HX_("XmppStropheStream",da,d9,8d,8c); }
 
+		static void startHeartbeat( ::cpp::vm::WeakRef weakThis);
+		static ::Dynamic startHeartbeat_dyn();
+
 		static int strophe_certfail_handler( const xmpp_tlscert_t* cert,const char* err);
 
 		static void strophe_fast_token_handler( xmpp_conn_t* conn,const char* token,void* userdata);
diff --git a/Sources/c_borogove/iinclude/cpp/CppInt32__.h b/Sources/c_borogove/iinclude/cpp/CppInt32__.h
index bd856c0..ca43554 100644
--- a/Sources/c_borogove/iinclude/cpp/CppInt32__.h
+++ b/Sources/c_borogove/iinclude/cpp/CppInt32__.h
@@ -7,12 +7,12 @@ namespace cpp
 {
 
 #define HX_I32_DEF_FUNC1(Name) \
-   static inline Dynamic __##Name(const Dynamic &a) { return Name(a); } \
-   static inline Dynamic Name##_dyn() { return  hx::CreateStaticFunction1(#Name,&CppInt32__::__##Name); }
+   static inline ::Dynamic __##Name(const ::Dynamic &a) { return Name(a); } \
+   static inline ::Dynamic Name##_dyn() { return  ::hx::CreateStaticFunction1(#Name,&CppInt32__::__##Name); }
 
 #define HX_I32_DEF_FUNC2(Name) \
-   static inline Dynamic __##Name(const Dynamic &a, const Dynamic &b) { return Name(a,b); } \
-   static inline Dynamic Name##_dyn() { return  hx::CreateStaticFunction2(#Name,&CppInt32__::__##Name); }
+   static inline ::Dynamic __##Name(const ::Dynamic &a, const ::Dynamic &b) { return Name(a,b); } \
+   static inline ::Dynamic Name##_dyn() { return  ::hx::CreateStaticFunction2(#Name,&CppInt32__::__##Name); }
 
 class CppInt32__
 {
diff --git a/Sources/c_borogove/iinclude/cpp/FastIterator.h b/Sources/c_borogove/iinclude/cpp/FastIterator.h
index 37bcf66..d943d0a 100644
--- a/Sources/c_borogove/iinclude/cpp/FastIterator.h
+++ b/Sources/c_borogove/iinclude/cpp/FastIterator.h
@@ -7,13 +7,18 @@ namespace cpp
 class HXCPP_EXTERN_CLASS_ATTRIBUTES IteratorBase : public hx::Object
 {
 public:
-   hx::Val __Field(const String &inString ,hx::PropertyAccess inCallProp);
+   hx::Val __Field(const String &inString ,hx::PropertyAccess inCallProp) HXCPP_OVERRIDE;
    virtual bool hasNext() = 0;
    virtual Dynamic _dynamicNext() = 0;
 
-   Dynamic hasNext_dyn( );
-   Dynamic next_dyn( );
-   Dynamic _dynamicNext_dyn( );
+#if (HXCPP_API_LEVEL>=500)
+   ::hx::Callable<bool()> hasNext_dyn();
+   ::hx::Callable<::Dynamic()> next_dyn();
+#else
+   Dynamic hasNext_dyn();
+   Dynamic next_dyn();
+   Dynamic _dynamicNext_dyn();
+#endif
 };
 
 
@@ -21,10 +26,10 @@ template<typename T>
 class HXCPP_EXTERN_CLASS_ATTRIBUTES FastIterator_obj : public IteratorBase
 {
 public:
-   virtual bool hasNext() = 0;
+   bool hasNext() HXCPP_OVERRIDE = 0;
    virtual T next() = 0;
 
-   virtual Dynamic _dynamicNext() { return next(); }
+   Dynamic _dynamicNext() HXCPP_OVERRIDE { return next(); }
 };
 
 
@@ -79,15 +84,15 @@ public:
 
    StringIterator(const String &inValue) : value(inValue), pos(0) { }
 
-   bool hasNext() { return pos<value.length; }
-   void __Mark(hx::MarkContext *__inCtx)
+   bool hasNext() HXCPP_OVERRIDE { return pos<value.length; }
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE
    {
       cpp::FastIterator_obj<T>::__Mark(__inCtx);
       HX_MARK_MEMBER_NAME(value,"value");
    }
 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx)
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE
    {
       cpp::FastIterator_obj<T>::__Visit(__inCtx);
       HX_VISIT_MEMBER_NAME(value,"value");
diff --git a/Sources/c_borogove/iinclude/cpp/Pointer.h b/Sources/c_borogove/iinclude/cpp/Pointer.h
index 25c28b4..582947c 100644
--- a/Sources/c_borogove/iinclude/cpp/Pointer.h
+++ b/Sources/c_borogove/iinclude/cpp/Pointer.h
@@ -131,12 +131,15 @@ public:
    // This allows 'StaticCast' to be used from arrays
    typedef Dynamic Ptr;
 
-   inline Struct( ) {  }
+   inline Struct( ) : value() {  }
    inline Struct( const T &inRHS ) : value(inRHS) {  }
    inline Struct( const null &) { value = T(); }
    inline Struct( const Reference<T> &);
    inline Struct( const Dynamic &inRHS) { fromDynamic(inRHS.mPtr); }
 
+   template<class... TArgs>
+   Struct(TArgs... args) : value(std::forward<TArgs>(args)...) {}
+
    inline Struct<T,HANDLER> &operator=( const T &inRHS ) { value = inRHS; return *this; }
    inline Struct<T,HANDLER> &operator=( const null & ) { value = T(); return *this; }
    inline Struct<T,HANDLER> &operator=( const Dynamic &inRHS ) { return *this = Struct<T,HANDLER>(inRHS); }
@@ -212,6 +215,7 @@ public:
       hx::Object *obj = inVariant.asObject();
       ptr = obj  ? (T*)inVariant.valObject->__GetHandle() : 0;
    }
+   inline Pointer(const ::cpp::marshal::PointerReference<T>);
 
    template<typename O>
    inline Pointer( const O *inValue ) : ptr( (T*) inValue) { }
@@ -499,7 +503,7 @@ public:
    }
 
    template<typename T>
-	inline static AutoCast ofArray(::Array<T> array)  { return AutoCast(&array[0]); }
+	inline static AutoCast ofArray(::Array<T> array)  { return AutoCast(array->Pointer()); }
 	inline static AutoCast ofArray(Dynamic inVal)
    {
       if (inVal==null() || !inVal->__IsArray())
@@ -509,6 +513,11 @@ public:
    }
 
 
+    template<typename T>
+    inline static Pointer<T> addressOf(const ::cpp::marshal::ValueReference<T>&);
+
+    template<typename T>
+    inline static Pointer<T*> addressOf(const ::cpp::marshal::PointerReference<T>&);
 
    template<typename T>
 	inline static Pointer<T> addressOf(T &value)  { return Pointer<T>(&value); }
diff --git a/Sources/c_borogove/iinclude/cpp/Variant.h b/Sources/c_borogove/iinclude/cpp/Variant.h
index cf2352f..8ddb00d 100644
--- a/Sources/c_borogove/iinclude/cpp/Variant.h
+++ b/Sources/c_borogove/iinclude/cpp/Variant.h
@@ -1,5 +1,6 @@
 #ifndef CPP_VARIANT_TWICE_H
 
+#include <hx/OS.h>
 
 namespace cpp
 {
@@ -70,7 +71,9 @@ namespace cpp
 
       inline Variant(cpp::Int64 inValue) : type(typeInt64), valInt64(inValue) { }
       inline Variant(cpp::UInt64 inValue) : type(typeInt64), valInt64(inValue) { }
+      #if defined(NEKO_MAC) || defined(NEKO_BSD)
       inline Variant(unsigned long inValue) : type(typeInt64), valInt64(inValue) { }
+      #endif
       inline Variant(int inValue) : type(typeInt), valInt(inValue) { }
       inline Variant(cpp::UInt32 inValue) : type(typeInt), valInt(inValue) { }
       inline Variant(cpp::Int16 inValue) : type(typeInt), valInt(inValue) { }
@@ -103,16 +106,20 @@ namespace cpp
       inline operator double() const { return asDouble(); }
       inline operator int() const { return asInt(); }
       inline operator bool() const { return asInt(); }
-      inline operator float () const { return asDouble(); }
+      inline operator float () const { return (float)asDouble(); }
       inline operator unsigned int () const { return asInt(); }
       inline operator short () const { return asInt(); }
       inline operator unsigned short () const { return asInt(); }
       inline operator unsigned char () const { return asInt(); }
       inline operator char () const { return asInt(); }
       inline operator signed char () const { return asInt(); }
+      inline operator char16_t() const { return asInt(); }
+      inline operator char32_t() const { return asInt(); }
       inline operator cpp::Int64 () const { return asInt64(); }
       inline operator cpp::UInt64 () const { return asInt64(); }
+      #if defined(NEKO_MAC) || defined(NEKO_BSD)
       inline operator unsigned long () const { return asInt64(); }
+      #endif
       inline bool operator !() const { return !asInt(); }
 
       inline int Compare(hx::Object *inRHS) const;
@@ -151,12 +158,14 @@ namespace cpp
       inline bool operator!=(const Variant &inRHS) const { return !operator==(inRHS); }
       inline bool operator!=(const String &inRHS)  const;
 
-
       template<typename RETURN_>
       RETURN_ Cast() const { return RETURN_(*this); }
 
       void CheckFPtr();
+
+#if (HXCPP_API_LEVEL<500)
       HX_DECLARE_VARIANT_FUNCTIONS
+#endif
 
 
     // Operator + is different, since it must consider strings too...
@@ -171,6 +180,11 @@ namespace cpp
     inline double operator--() { return set(asDouble()-1); }
     inline double operator--(int) {double val = asDouble(); set(val-1); return val; }
 
+#if (HXCPP_API_LEVEL>=500)
+    template<class... TArgs>
+    inline Dynamic operator()(const TArgs&... args);
+#endif
+
     template<typename T>
     inline double operator / (const T &inRHS) const { return asDouble() / (double)inRHS; } \
 
@@ -199,8 +213,8 @@ namespace cpp
 
    #define HX_VARIANT_COMPARE_OP( op ) \
    inline bool operator op (double inRHS)  const { return isNumeric() && (asDouble() op inRHS); } \
-   inline bool operator op (cpp::Int64 inRHS)  const { return isNumeric() && (asInt64() op inRHS); } \
-   inline bool operator op (cpp::UInt64 inRHS)  const { return isNumeric() && ((cpp::UInt64)(asInt64()) op inRHS); } \
+   inline bool operator op (::cpp::Int64 inRHS)  const { return isNumeric() && (asInt64() op inRHS); } \
+   inline bool operator op (::cpp::UInt64 inRHS)  const { return isNumeric() && ((::cpp::UInt64)(asInt64()) op inRHS); } \
    inline bool operator op (float inRHS)  const { return isNumeric() && (asDouble() op inRHS); } \
    inline bool operator op (int inRHS)  const { return isNumeric() && (asDouble() op (double)inRHS); } \
    inline bool operator op (unsigned int inRHS)  const { return isNumeric() && (asDouble() op (double)inRHS); } \
@@ -208,12 +222,14 @@ namespace cpp
    inline bool operator op (unsigned short inRHS)  const { return isNumeric() && (asDouble() op (double)inRHS); } \
    inline bool operator op (signed char inRHS)  const { return isNumeric() && (asDouble() op (double)inRHS); } \
    inline bool operator op (unsigned char inRHS)  const { return isNumeric() && (asDouble() op (double)inRHS); } \
+   inline bool operator op (char16_t inRHS)  const { return isNumeric() && (asDouble() op (double)inRHS); } \
+   inline bool operator op (char32_t inRHS)  const { return isNumeric() && (asDouble() op (double)inRHS); } \
    inline bool operator op (bool inRHS)  const { return isBool() && (asDouble() op (double)inRHS); } \
-   inline bool operator op (const Dynamic &inRHS)  const { return Compare(inRHS) op 0; } \
+   inline bool operator op (const ::Dynamic &inRHS)  const { return Compare(inRHS) op 0; } \
 
    #define HX_VARIANT_COMPARE_OP_ALL( op ) \
-      inline bool operator op (const null &inRHS)  const { return false; } \
-      inline bool operator op (const cpp::Variant &inRHS)  const { return Compare(inRHS) op 0; } \
+      inline bool operator op (const ::null &inRHS)  const { return false; } \
+      inline bool operator op (const ::cpp::Variant &inRHS)  const { return Compare(inRHS) op 0; } \
       HX_VARIANT_COMPARE_OP(op)
 
    HX_VARIANT_COMPARE_OP( == )
@@ -274,16 +290,18 @@ namespace cpp
 
 
 #define HX_ARITH_VARIANT( op ) \
-   inline double operator op (const double &inLHS,const cpp::Variant &inRHS) { return inLHS op (double)inRHS;} \
-   inline double operator op (const float &inLHS,const cpp::Variant &inRHS) { return inLHS op (double)inRHS;} \
-   inline double operator op (const int &inLHS,const cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const unsigned int &inLHS,const cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const signed char &inLHS,const cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const unsigned char &inLHS,const cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const signed short &inLHS,const cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const unsigned short &inLHS,const cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const cpp::Int64 &inLHS,const cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
-   inline double operator op (const cpp::UInt64 &inLHS,const cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const double &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS;} \
+   inline double operator op (const float &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS;} \
+   inline double operator op (const int &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const unsigned int &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const signed char &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const unsigned char &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const char16_t &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const char32_t &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const signed short &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const unsigned short &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const ::cpp::Int64 &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
+   inline double operator op (const ::cpp::UInt64 &inLHS,const ::cpp::Variant &inRHS) { return inLHS op (double)inRHS; } \
 
    HX_ARITH_VARIANT( - )
    HX_ARITH_VARIANT( + )
@@ -323,8 +341,9 @@ namespace cpp
       if (isNull())  Dynamic::ThrowBadFunctionError();
    }
 
+#if (HXCPP_API_LEVEL<500)
    HX_IMPLEMENT_INLINE_VARIANT_FUNCTIONS
-
+#endif
 
    int Variant::asInt() const
    {
@@ -333,7 +352,7 @@ namespace cpp
 
       switch(type)
       {
-         case typeDouble: return valDouble;
+         case typeDouble: return (int)valDouble;
          case typeInt64: return (int)valInt64;
          case typeBool: return valBool;
          case typeObject: return valObject ? valObject->__ToInt() : 0;
@@ -351,7 +370,7 @@ namespace cpp
 
       switch(type)
       {
-         case typeDouble: return valDouble;
+         case typeDouble: return (cpp::Int64)valDouble;
          case typeInt: return valInt;
          case typeBool: return valBool;
          case typeObject: return valObject ? valObject->__ToInt64() : 0;
@@ -369,7 +388,7 @@ namespace cpp
       else if (type==typeBool)
          return valBool ? 1.0 : 0.0;
       else if (type==typeInt64)
-         return valInt64;
+         return (double)valInt64;
       else if (type==typeObject)
          return valObject ? valObject->__ToDouble() : 0.0;
       return 0.0;
@@ -587,13 +606,13 @@ namespace cpp
 
 
 #define HX_VARIANT_OP_ISEQ(T) \
-inline bool operator == (const T &inLHS,const cpp::Variant &inRHS) { return inRHS==inLHS; } \
-inline bool operator != (const T &inLHS,const cpp::Variant &inRHS) { return inRHS!=inLHS; }
+inline bool operator == (const T &inLHS,const ::cpp::Variant &inRHS) { return inRHS==inLHS; } \
+inline bool operator != (const T &inLHS,const ::cpp::Variant &inRHS) { return inRHS!=inLHS; }
 
 
 #define HX_VARIANT_OP_ISEQ(T) \
-inline bool operator == (const T &inLHS,const cpp::Variant &inRHS) { return inRHS==inLHS; } \
-inline bool operator != (const T &inLHS,const cpp::Variant &inRHS) { return inRHS!=inLHS; }
+inline bool operator == (const T &inLHS,const ::cpp::Variant &inRHS) { return inRHS==inLHS; } \
+inline bool operator != (const T &inLHS,const ::cpp::Variant &inRHS) { return inRHS!=inLHS; }
 
 HX_VARIANT_OP_ISEQ(String)
 HX_VARIANT_OP_ISEQ(double)
@@ -606,6 +625,8 @@ HX_VARIANT_OP_ISEQ(short)
 HX_VARIANT_OP_ISEQ(unsigned short)
 HX_VARIANT_OP_ISEQ(signed char)
 HX_VARIANT_OP_ISEQ(unsigned char)
+HX_VARIANT_OP_ISEQ(char16_t)
+HX_VARIANT_OP_ISEQ(char32_t)
 HX_VARIANT_OP_ISEQ(bool)
 
 inline bool operator < (bool inLHS,const cpp::Variant &inRHS) { return false; }
@@ -619,9 +640,9 @@ inline bool operator > (bool inLHS,const cpp::Variant &inRHS) { return false; }
       { return inRHS.isNumeric() && (inLHS op (double)inRHS); } \
    inline bool operator op (float inLHS,const ::cpp::Variant &inRHS) \
       { return inRHS.isNumeric() && ((double)inLHS op (double)inRHS); } \
-   inline bool operator op (cpp::Int64 inLHS,const ::cpp::Variant &inRHS) \
+   inline bool operator op (::cpp::Int64 inLHS,const ::cpp::Variant &inRHS) \
       { return inRHS.isNumeric() && (inLHS op (double)inRHS); } \
-   inline bool operator op (cpp::UInt64 inLHS,const ::cpp::Variant &inRHS) \
+   inline bool operator op (::cpp::UInt64 inLHS,const ::cpp::Variant &inRHS) \
       { return inRHS.isNumeric() && (inLHS op (double)inRHS); } \
    inline bool operator op (int inLHS,const ::cpp::Variant &inRHS) \
       { return inRHS.isNumeric() && (inLHS op (double)inRHS); } \
@@ -635,7 +656,11 @@ inline bool operator > (bool inLHS,const cpp::Variant &inRHS) { return false; }
       { return inRHS.isNumeric() && (inLHS op (double)inRHS); } \
    inline bool operator op (unsigned char inLHS,const ::cpp::Variant &inRHS) \
       { return inRHS.isNumeric() && (inLHS op (double)inRHS); } \
-   inline bool operator op (const null &,const ::cpp::Variant &inRHS) \
+   inline bool operator op (char16_t inLHS,const ::cpp::Variant &inRHS) \
+      { return inRHS.isNumeric() && (inLHS op (double)inRHS); } \
+   inline bool operator op (char32_t inLHS,const ::cpp::Variant &inRHS) \
+      { return inRHS.isNumeric() && (inLHS op (double)inRHS); } \
+   inline bool operator op (const ::null &,const ::cpp::Variant &inRHS) \
       { return false; } \
 
 HX_COMPARE_VARIANT_OP( < )
diff --git a/Sources/c_borogove/iinclude/cpp/VirtualArray.h b/Sources/c_borogove/iinclude/cpp/VirtualArray.h
index a95f65f..af8dee0 100644
--- a/Sources/c_borogove/iinclude/cpp/VirtualArray.h
+++ b/Sources/c_borogove/iinclude/cpp/VirtualArray.h
@@ -79,7 +79,7 @@ public:
       store = inStore;
    }
 
-   hx::Object *__GetRealObject() { return base?(hx::Object *)base:(hx::Object *)this; }
+   hx::Object *__GetRealObject() HXCPP_OVERRIDE { return base?(hx::Object *)base:(hx::Object *)this; }
 
    inline static VirtualArray __new(int inSize=0,int inReserve=0)
    {
@@ -91,7 +91,7 @@ public:
       return result;
    }
 
-   int __Compare(const hx::Object *inRHS) const;
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE;
 
    inline int get_length() const
    {
@@ -316,12 +316,12 @@ public:
    void EnsureArrayStorage(ArrayStore inValue);
    void EnsureArrayStorage(VirtualArray inValue);
 
-   void __Mark(hx::MarkContext *__inCtx)
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_MARK_OBJECT(base);
    }
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx)
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE
    {
       if (base)
         __inCtx->visitObject( (hx::Object **)&base);
@@ -333,24 +333,24 @@ public:
    inline int getElementSize() const { return base ? base->GetElementSize() : 0; }
    inline int getByteCount() const { return base ? base->getByteCount() : 0; }
    inline char * getBase() const { return base ? base->GetBase() : 0; }
-   hx::Val __SetField(const String &inString,const hx::Val &inValue ,hx::PropertyAccess inCallProp) { return null(); }
+   hx::Val __SetField(const String &inString,const hx::Val &inValue ,hx::PropertyAccess inCallProp) HXCPP_OVERRIDE { return null(); }
 
    static hx::Class &__SGetClass() { return hx::ArrayBase::__mClass; }
-   hx::Class __GetClass() const;
-   String toString();
-   String __ToString() const { return const_cast<VirtualArray_obj *>(this)->toString(); }
+   hx::Class __GetClass() const HXCPP_OVERRIDE;
+   String toString() HXCPP_OVERRIDE;
+   String __ToString() const HXCPP_OVERRIDE { return const_cast<VirtualArray_obj *>(this)->toString(); }
 
    void setData(void *inData, int inElements) { EnsureBase(); base->setData(inData, inElements); }
    void setUnmanagedData(void *inData, int inElements) { EnsureBase(); base->setUnmanagedData(inData, inElements); }
 
-   int __GetType() const { return vtArray; }
+   int __GetType() const HXCPP_OVERRIDE { return vtArray; }
 
    inline size_t size() const { checkBase(); return store==hx::arrayEmpty ? 0 : base->length; }
-   inline int __length() const { checkBase(); return store==hx::arrayEmpty ? 0 : (int)base->length; }
+   inline int __length() const HXCPP_OVERRIDE { checkBase(); return store==hx::arrayEmpty ? 0 : (int)base->length; }
 
    String ItemString(int inI) { checkBase(); return store==hx::arrayEmpty ? null() : base->ItemString(inI); }
 
-   const char * __CStr() const { return store==hx::arrayEmpty ? "[]" : store==hx::arrayNull ? "null" : base->__CStr(); }
+   const char * __CStr() const HXCPP_OVERRIDE { return store==hx::arrayEmpty ? "[]" : store==hx::arrayNull ? "null" : base->__CStr(); }
    inline const char *GetBase() const { return base ? base->GetBase() : 0; }
    inline char *GetBase() { return base ? base->GetBase() : 0; }
 
@@ -387,14 +387,14 @@ public:
       return this;
    }
 
-   void safeSort(Dynamic sorter, bool isString) { checkBase(); if (store!=hx::arrayEmpty) base->safeSort(sorter,isString); }
+   void safeSort(ArrayBase::DynamicSorterFunc sorter, bool isString) { checkBase(); if (store!=hx::arrayEmpty) base->safeSort(sorter,isString); }
 
    inline void __unsafeStringReference(String inString) { if (base) base->__unsafeStringReference(inString); }
 
 
-   Dynamic __GetItem(int inIndex) const;
-   Dynamic __SetItem(int inIndex,Dynamic inValue);
-   hx::Val __Field(const String &inString, hx::PropertyAccess inCallProp);
+   Dynamic __GetItem(int inIndex) const HXCPP_OVERRIDE;
+   Dynamic __SetItem(int inIndex,Dynamic inValue) HXCPP_OVERRIDE;
+   hx::Val __Field(const String &inString, hx::PropertyAccess inCallProp) HXCPP_OVERRIDE;
 
    template<typename T>
    inline const T &set(int inIdx, const T &inVal)
@@ -492,8 +492,8 @@ public:
       return new VirtualArray_obj(base->__slice(inPos,end), store==hx::arrayFixed);
    }
    VirtualArray splice(int inPos, int len);
-   VirtualArray map(Dynamic inFunc);
-   VirtualArray filter(Dynamic inFunc);
+   VirtualArray map(ArrayBase::DynamicMappingFunc inFunc);
+   VirtualArray filter(ArrayBase::DynamicFilterFunc inFunc);
 
    template<typename T>
    inline VirtualArray init(int inIndex, const T &inVal)
@@ -530,9 +530,9 @@ public:
 
    inline void reverse() { checkBase(); if (store!=hx::arrayEmpty) base->__reverse(); }
 
-   inline void qsort(Dynamic inSorter) { checkBase(); if (base) base->__qsort(inSorter); }
+   inline void qsort(ArrayBase::DynamicSorterFunc inSorter) { checkBase(); if (base) base->__qsort(inSorter); }
 
-   inline void sort(Dynamic inSorter) { checkBase(); if (base) base->__sort(inSorter); }
+   inline void sort(ArrayBase::DynamicSorterFunc inSorter) { checkBase(); if (base) base->__sort(inSorter); }
 
    Dynamic iterator() { checkBase(); return  !base ? getEmptyIterator() :  base->__iterator(); }
    static Dynamic getEmptyIterator();
@@ -563,6 +563,57 @@ public:
 
    Dynamic __get(int inIndex) const { checkBase(); if (store==hx::arrayEmpty) return null(); return base->__GetItem(inIndex); }
 
+#if (HXCPP_API_LEVEL>=500)
+   ::hx::Callable<::cpp::VirtualArray(::cpp::VirtualArray)> concat_dyn();
+   ::hx::Callable<::cpp::VirtualArray()> copy_dyn();
+   ::hx::Callable<void(int, ::Dynamic)> insert_dyn();
+   ::hx::Callable<::Dynamic()> iterator_dyn();
+   ::hx::Callable<::Dynamic()> keyValueIterator_dyn();
+   ::hx::Callable<::String(::String)> join_dyn();
+   ::hx::Callable<::Dynamic()> pop_dyn();
+   template<typename T>
+   ::hx::Callable<int(T)> push_dyn()
+   {
+       struct _hx_virtualarray_push : public ::hx::AutoCallable_obj<int(T)>
+       {
+           ::cpp::VirtualArray mThis;
+
+           _hx_virtualarray_push(::cpp::VirtualArray inThis) : mThis(inThis)
+           {
+               HX_OBJ_WB_NEW_MARKED_OBJECT(this);
+           }
+
+           int _hx_run(T in) override
+           {
+               return mThis->push(in);
+           }
+       };
+
+       return new _hx_virtualarray_push(this);
+   }
+   ::hx::Callable<bool(::Dynamic)> contains_dyn();
+   ::hx::Callable<bool(::Dynamic)> remove_dyn();
+   ::hx::Callable<bool(int)> removeAt_dyn();
+   ::hx::Callable<int(::Dynamic, ::Dynamic)> indexOf_dyn();
+   ::hx::Callable<int(::Dynamic, ::Dynamic)> lastIndexOf_dyn();
+   ::hx::Callable<void()> reverse_dyn();
+   ::hx::Callable<::Dynamic()> shift_dyn();
+   ::hx::Callable<::cpp::VirtualArray(int, ::Dynamic)> slice_dyn();
+   ::hx::Callable<::cpp::VirtualArray(int, int)> splice_dyn();
+   ::hx::Callable<void(ArrayBase::DynamicSorterFunc)> sort_dyn();
+   ::hx::Callable<::String()> toString_dyn();
+   ::hx::Callable<void(::Dynamic)> unshift_dyn();
+   ::hx::Callable<::cpp::VirtualArray(ArrayBase::DynamicMappingFunc)> map_dyn();
+   ::hx::Callable<::cpp::VirtualArray(ArrayBase::DynamicFilterFunc)> filter_dyn();
+   ::hx::Callable<void(int)> __SetSize_dyn();
+   ::hx::Callable<void(int)> __SetSizeExact_dyn();
+   ::hx::Callable<::Dynamic(::Dynamic)> __unsafe_get_dyn();
+   ::hx::Callable<::Dynamic(::Dynamic, ::Dynamic)> __unsafe_set_dyn();
+   ::hx::Callable<void(int, ::cpp::VirtualArray, int, int)> blit_dyn();
+   ::hx::Callable<void(::Dynamic, ::Dynamic)> zero_dyn();
+   ::hx::Callable<void(::cpp::VirtualArray)> memcmp_dyn();
+   ::hx::Callable<void(int)> resize_dyn();
+#else
    Dynamic concat_dyn();
    Dynamic copy_dyn();
    Dynamic insert_dyn();
@@ -593,6 +644,7 @@ public:
    Dynamic zero_dyn();
    Dynamic memcmp_dyn();
    Dynamic resize_dyn();
+#endif
 };
 
 
diff --git a/Sources/c_borogove/iinclude/cpp/encoding/Ascii.hpp b/Sources/c_borogove/iinclude/cpp/encoding/Ascii.hpp
new file mode 100644
index 0000000..0d89fa6
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/encoding/Ascii.hpp
@@ -0,0 +1,24 @@
+#pragma once
+
+namespace cpp
+{
+	namespace encoding
+	{
+        struct Ascii final
+        {
+            static bool isEncoded(const String& string);
+
+            /// <summary>
+            /// Encode the provided string to ASCII bytes and write them to the buffer.
+            /// If the provided string is UTF16 encoded an exception is raised and nothing is written to the buffer.
+            /// </summary>
+            /// <returns>Number of chars written to the buffer.</returns>
+            static int64_t encode(const String& string, cpp::marshal::View<uint8_t> buffer);
+
+            /// <summary>
+            /// Create a string from the provided ASCII bytes.
+            /// </summary>
+            static String decode(cpp::marshal::View<uint8_t> string);
+        };
+	}
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/cpp/encoding/Utf16.hpp b/Sources/c_borogove/iinclude/cpp/encoding/Utf16.hpp
new file mode 100644
index 0000000..6d851e1
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/encoding/Utf16.hpp
@@ -0,0 +1,27 @@
+#pragma once
+
+namespace cpp
+{
+	namespace encoding
+	{
+        struct Utf16 final
+        {
+            static bool isEncoded(const String& string);
+
+            static int getByteCount(const null&);
+            static int getByteCount(char32_t codepoint);
+            static int64_t getByteCount(const String& string);
+
+            static int getCharCount(const null&);
+            static int getCharCount(char32_t codepoint);
+            static int64_t getCharCount(const String& string);
+
+            static int encode(const null&, const cpp::marshal::View<uint8_t>& buffer);
+            static int encode(char32_t codepoint, const cpp::marshal::View<uint8_t>& buffer);
+            static int64_t encode(const String& string, const cpp::marshal::View<uint8_t>& buffer);
+
+            static char32_t codepoint(const cpp::marshal::View<uint8_t>& buffer);
+            static String decode(const cpp::marshal::View<uint8_t>& buffer);
+        };
+	}
+}
diff --git a/Sources/c_borogove/iinclude/cpp/encoding/Utf8.hpp b/Sources/c_borogove/iinclude/cpp/encoding/Utf8.hpp
new file mode 100644
index 0000000..3ff12ba
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/encoding/Utf8.hpp
@@ -0,0 +1,26 @@
+#pragma once
+
+namespace cpp
+{
+	namespace encoding
+	{
+        struct Utf8 final
+        {
+            static int getByteCount(const null&);
+            static int getByteCount(char32_t codepoint);
+            static int64_t getByteCount(const String& string);
+
+            static int getCharCount(const null&);
+            static int getCharCount(char32_t codepoint);
+            static int64_t getCharCount(const String& string);
+
+            static int encode(const null&, const cpp::marshal::View<uint8_t>& buffer);
+            static int encode(char32_t codepoint, const cpp::marshal::View<uint8_t>& buffer);
+            static int64_t encode(const String& string, const cpp::marshal::View<uint8_t>& buffer);
+            static Array<uint8_t> encode(const String& string);
+
+            static char32_t codepoint(const cpp::marshal::View<uint8_t>& buffer);
+            static String decode(const cpp::marshal::View<uint8_t>& buffer);
+        };
+	}
+}
diff --git a/Sources/c_borogove/iinclude/cpp/marshal/Boxed.hpp b/Sources/c_borogove/iinclude/cpp/marshal/Boxed.hpp
new file mode 100644
index 0000000..b925566
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/marshal/Boxed.hpp
@@ -0,0 +1,39 @@
+#pragma once
+
+#include "Definitions.inc"
+
+template<class T>
+inline void cpp::marshal::Boxed_obj<T>::finalise(::hx::Object* obj)
+{
+    auto ptr = reinterpret_cast<Boxed_obj<T>*>(obj);
+
+    ptr->value.~T();
+}
+
+template<class T>
+inline void cpp::marshal::Boxed_obj<T>::setFinaliser(std::true_type)
+{
+    ::hx::GCSetFinalizer(this, finalise);
+}
+
+template<class T>
+inline void cpp::marshal::Boxed_obj<T>::setFinaliser(std::false_type) {}
+
+template<class T>
+inline cpp::marshal::Boxed_obj<T>::Boxed_obj() : value()
+{
+    setFinaliser(std::is_destructible<T>{});
+}
+
+template<class T>
+inline cpp::marshal::Boxed_obj<T>::Boxed_obj(T* ptr) : value(*ptr)
+{
+    setFinaliser(std::is_destructible<T>{});
+}
+
+template<class T>
+template<class ...TArgs>
+inline cpp::marshal::Boxed_obj<T>::Boxed_obj(TArgs... args) : value(std::forward<TArgs>(args)...)
+{
+    setFinaliser(std::is_destructible<T>{});
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/cpp/marshal/Definitions.inc b/Sources/c_borogove/iinclude/cpp/marshal/Definitions.inc
new file mode 100644
index 0000000..ffd5f14
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/marshal/Definitions.inc
@@ -0,0 +1,330 @@
+#pragma once
+
+#include <type_traits>
+
+namespace cpp
+{
+    namespace marshal
+    {
+        /// <summary>
+        /// Templated class to hold a non GC object on the heap.
+        /// If T has a destructor a finaliser is added so it is called when this object is collected.
+        /// </summary>
+        template<class T>
+        class Boxed_obj final : public ::hx::Object
+        {
+            static void finalise(::hx::Object* obj);
+
+            void setFinaliser(std::true_type);
+            void setFinaliser(std::false_type);
+
+        public:
+            T value;
+
+            Boxed_obj();
+
+            Boxed_obj(T* ptr);
+
+            template<class... TArgs>
+            Boxed_obj(TArgs... args);
+        };
+
+        template<class T>
+        class ValueType final
+        {
+            static T FromReference(const ValueReference<T>& inRHS);
+            static T FromBoxed(const Boxed<T>& inRHS);
+            static T FromDynamic(const Dynamic& inRHS);
+
+        public:
+            T value;
+
+            // This allows 'StaticCast' to be used from arrays
+            using Ptr = Dynamic;
+
+            ValueType();
+            ValueType(const ValueReference<T>& inRHS);
+            ValueType(const null& inRHS);
+            ValueType(const Boxed<T>& inRHS);
+            ValueType(const Variant& inRHS);
+            ValueType(const Dynamic& inRHS);
+
+            template<class... TArgs>
+            ValueType(TArgs... args);
+
+            ValueType<T>& operator=(const ValueReference<T>& inRHS);
+            ValueType<T>& operator=(const null& inRHS);
+        };
+
+        template<class T>
+        class PointerType final
+        {
+        public:
+            using TPtr = T*;
+
+        private:
+            static TPtr FromReference(const PointerReference<T>& inRHS);
+            static TPtr FromBoxed(const Boxed<TPtr>& inRHS);
+            static TPtr FromDynamic(const Dynamic& inRHS);
+
+        public:
+            // This allows 'StaticCast' to be used from arrays
+            using Ptr = Dynamic;
+
+            TPtr value;
+
+            PointerType();
+            PointerType(TPtr inRHS);
+            PointerType(const PointerReference<T>& inRHS);
+            PointerType(const null& inRHS);
+            PointerType(const Boxed<TPtr>& inRHS);
+            PointerType(const Variant& inRHS);
+            PointerType(const Dynamic& inRHS);
+
+            PointerType<T>& operator=(const PointerReference<T>& inRHS);
+            PointerType<T>& operator=(const null& inRHS);
+        };
+
+        template<class T>
+        class ValueReference final : public ::cpp::Reference<T>
+        {
+            using Super = ::cpp::Reference<T>;
+
+            template<class O>
+            static O* FromDynamic(const Dynamic& inRHS);
+            template<class O>
+            static O* FromBoxed(const Boxed<O>& inRHS);
+            Boxed<T> ToBoxed() const;
+
+        public:
+            // This allows 'StaticCast' to be used from arrays
+            using Ptr = Dynamic;
+
+            ValueReference();
+            ValueReference(const null& inRHS);
+            ValueReference(const ValueType<T>& inRHS);
+            ValueReference(const Boxed<T>& inRHS);
+            ValueReference(const T& inRHS);
+            ValueReference(T& inRHS);
+            ValueReference(const T* inRHS);
+
+            template<class O>
+            ValueReference(const ValueReference<O>& inRHS);
+            template<class O>
+            ValueReference(const ValueType<O>& inRHS);
+            template<class O>
+            ValueReference(const Boxed<O>& inRHS);
+
+            ValueReference(const Variant& inRHS);
+            ValueReference(const Dynamic& inRHS);
+
+            operator Dynamic() const;
+            operator Variant() const;
+            operator Boxed<T>() const;
+
+            T* operator->() const;
+            T operator*() const;
+
+            bool operator==(const ValueReference<T>& inRHS) const;
+            bool operator!=(const ValueReference<T>& inRHS) const;
+
+            template<class K>
+            K get(int64_t index);
+
+            template<class K>
+            void set(int64_t index, K value);
+        };
+
+        template<class T>
+        class PointerReference final : public ::cpp::Reference<T*>
+        {
+        public:
+            using TPtr = T*;
+
+        private:
+            using Super = ::cpp::Reference<TPtr>;
+
+            template<class O>
+            static O* FromDynamic(const Dynamic& inRHS);
+
+            template<class O>
+            static O* FromBoxed(const Boxed<O>& inRHS);
+
+            Boxed<TPtr> ToBoxed() const;
+
+        public:
+            PointerReference(const null& inRHS);
+            PointerReference(const PointerType<T>& inRHS);
+            PointerReference(const Boxed<TPtr>& inRHS);
+
+            template<class O>
+            PointerReference(const PointerReference<O>& inRHS);
+            template<class O>
+            PointerReference(const PointerType<O>& inRHS);
+            template<class O>
+            PointerReference(const Boxed<O>& inRHS);
+
+            PointerReference(const TPtr& inRHS);
+            PointerReference(TPtr& inRHS);
+            PointerReference(const TPtr* inRHS);
+            PointerReference(const Variant& inRHS);
+            PointerReference(const Dynamic& inRHS);
+
+            operator Dynamic() const;
+            operator Variant() const;
+            operator Boxed<TPtr>() const;
+            operator Pointer<T>() const;
+
+            operator TPtr&();
+            operator TPtr*();
+            operator void*();
+            operator void**();
+
+            TPtr operator->() const;
+
+            template<class K>
+            K get(int64_t index);
+
+            template<class K>
+            void set(int64_t index, K value);
+        };
+
+        template<class T>
+        struct View final
+        {
+            ::cpp::Pointer<T> ptr;
+            int64_t length;
+
+            View(::cpp::Pointer<T> _ptr, int64_t _length);
+
+            void clear() const;
+            void fill(T value) const;
+            bool isEmpty() const;
+            View<T> slice(int64_t index) const;
+            View<T> slice(int64_t index, int64_t length) const;
+            void copyTo(const View<T>& destination) const;
+            bool tryCopyTo(const View<T>& destination) const;
+            template<class K> View<K> reinterpret() const;
+            int compare(const View<T>& inRHS) const;
+
+            bool operator==(const View<T>& inRHS) const;
+            bool operator!=(const View<T>& inRHS) const;
+
+            T& operator[] (int64_t index) const;
+        };
+
+        class RootHandle
+        {
+            ::hx::Object** object;
+
+            RootHandle(hx::Object** obj);
+
+        public:
+            static RootHandle create(Dynamic obj);
+            static RootHandle fromVoidPointer(::cpp::Pointer<void> ptr);
+
+            ::cpp::Pointer<void> toVoidPointer();
+            Dynamic getObject();
+            void close();
+        };
+
+        struct Marshal final
+        {
+#ifdef HXCPP_BIG_ENDIAN
+            static const bool isBigEndian = true;
+#else
+            static const bool isBigEndian = false;
+#endif
+
+            static View<char> asCharView(const ::String& string);
+            static View<char16_t> asWideCharView(const ::String& string);
+
+            template<class T> static T read(const View<uint8_t>& view);
+            template<class T> static ::cpp::Pointer<T> readPointer(const View<uint8_t>& view);
+            static int8_t readInt8(const View<uint8_t>& view);
+            static int16_t readInt16(const View<uint8_t>& view);
+            static int32_t readInt32(const View<uint8_t>& view);
+            static int64_t readInt64(const View<uint8_t>& view);
+            static uint8_t readUInt8(const View<uint8_t>& view);
+            static uint16_t readUInt16(const View<uint8_t>& view);
+            static uint32_t readUInt32(const View<uint8_t>& view);
+            static uint64_t readUInt64(const View<uint8_t>& view);
+            static float readFloat32(const View<uint8_t>& view);
+            static double readFloat64(const View<uint8_t>& view);
+
+            template<class T> static ::cpp::Pointer<T> readLittleEndianPointer(const View<uint8_t>& view);
+            static int16_t readLittleEndianInt16(const View<uint8_t>& view);
+            static int32_t readLittleEndianInt32(const View<uint8_t>& view);
+            static int64_t readLittleEndianInt64(const View<uint8_t>& view);
+            static uint16_t readLittleEndianUInt16(const View<uint8_t>& view);
+            static uint32_t readLittleEndianUInt32(const View<uint8_t>& view);
+            static uint64_t readLittleEndianUInt64(const View<uint8_t>& view);
+            static float readLittleEndianFloat32(const View<uint8_t>& view);
+            static double readLittleEndianFloat64(const View<uint8_t>& view);
+
+            template<class T> static ::cpp::Pointer<T> readBigEndianPointer(const View<uint8_t>& view);
+            static int16_t readBigEndianInt16(const View<uint8_t>& view);
+            static int32_t readBigEndianInt32(const View<uint8_t>& view);
+            static int64_t readBigEndianInt64(const View<uint8_t>& view);
+            static uint16_t readBigEndianUInt16(const View<uint8_t>& view);
+            static uint32_t readBigEndianUInt32(const View<uint8_t>& view);
+            static uint64_t readBigEndianUInt64(const View<uint8_t>& view);
+            static float readBigEndianFloat32(const View<uint8_t>& view);
+            static double readBigEndianFloat64(const View<uint8_t>& view);
+
+            template<class T> static void write(const View<uint8_t>& view, const T& value);
+            template<class T> static void writePointer(const View<uint8_t>& view, const Pointer<T>& value);
+            static void writeInt8(const View<uint8_t>& view, const int8_t& value);
+            static void writeInt16(const View<uint8_t>& view, const int16_t& value);
+            static void writeInt32(const View<uint8_t>& view, const int32_t& value);
+            static void writeInt64(const View<uint8_t>& view, const int64_t& value);
+            static void writeUInt8(const View<uint8_t>& view, const uint8_t& value);
+            static void writeUInt16(const View<uint8_t>& view, const uint16_t& value);
+            static void writeUInt32(const View<uint8_t>& view, const uint32_t& value);
+            static void writeUInt64(const View<uint8_t>& view, const uint64_t& value);
+            static void writeFloat32(const View<uint8_t>& view, const float& value);
+            static void writeFloat64(const View<uint8_t>& view, const double& value);
+
+            template<class T> static void writeLittleEndianPointer(const View<uint8_t>& view, const Pointer<T>& value);
+            static void writeLittleEndianInt16(const View<uint8_t>& view, const int16_t& value);
+            static void writeLittleEndianInt32(const View<uint8_t>& view, const int32_t& value);
+            static void writeLittleEndianInt64(const View<uint8_t>& view, const int64_t& value);
+            static void writeLittleEndianUInt16(const View<uint8_t>& view, const uint16_t& value);
+            static void writeLittleEndianUInt32(const View<uint8_t>& view, const uint32_t& value);
+            static void writeLittleEndianUInt64(const View<uint8_t>& view, const uint64_t& value);
+            static void writeLittleEndianFloat32(const View<uint8_t>& view, const float& value);
+            static void writeLittleEndianFloat64(const View<uint8_t>& view, const double& value);
+
+            template<class T> static void writeBigEndianPointer(const View<uint8_t>& view, const Pointer<T>& value);
+            static void writeBigEndianInt16(const View<uint8_t>& view, const int16_t& value);
+            static void writeBigEndianInt32(const View<uint8_t>& view, const int32_t& value);
+            static void writeBigEndianInt64(const View<uint8_t>& view, const int64_t& value);
+            static void writeBigEndianUInt16(const View<uint8_t>& view, const uint16_t& value);
+            static void writeBigEndianUInt32(const View<uint8_t>& view, const uint32_t& value);
+            static void writeBigEndianUInt64(const View<uint8_t>& view, const uint64_t& value);
+            static void writeBigEndianFloat32(const View<uint8_t>& view, const float& value);
+            static void writeBigEndianFloat64(const View<uint8_t>& view, const double& value);
+        };
+    }
+}
+
+// Implement some pointer helpers here
+
+template<typename T>
+inline cpp::Pointer<T> cpp::Pointer_obj::addressOf(const ::cpp::marshal::ValueReference<T>& ref)
+{
+    return Pointer<T>(ref.ptr);
+}
+
+template<typename T>
+inline cpp::Pointer<T*> cpp::Pointer_obj::addressOf(const ::cpp::marshal::PointerReference<T>& ref)
+{
+    return Pointer<T*>(ref.ptr);
+}
+
+// I'm not sure why I need this pointer ctor overload, I'm sure it was working without it at some point
+template<typename T>
+inline cpp::Pointer<T>::Pointer(const ::cpp::marshal::PointerReference<T> ref)
+{
+    ptr = *ref.ptr;
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/cpp/marshal/Marshal.hpp b/Sources/c_borogove/iinclude/cpp/marshal/Marshal.hpp
new file mode 100644
index 0000000..6b69796
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/marshal/Marshal.hpp
@@ -0,0 +1,521 @@
+#pragma once
+
+#include "Definitions.inc"
+#include <cstring>
+#include <string>
+#include <algorithm>
+
+namespace
+{
+    template <class T>
+    T reverse(T val)
+    {
+        auto view = cpp::marshal::View<uint8_t>(reinterpret_cast<uint8_t*>(&val), sizeof(T));
+
+        std::reverse(view.ptr.ptr, view.ptr.ptr + view.length);
+
+        return val;
+    }
+}
+
+inline cpp::marshal::View<char> cpp::marshal::Marshal::asCharView(const ::String& string)
+{
+    if (null() == string)
+    {
+        hx::NullReference("string", false);
+    }
+
+    if (false == string.isAsciiEncoded())
+    {
+        hx::Throw(HX_CSTRING("String is not ASCII encoded"));
+    }
+
+    return View<char>(const_cast<char*>(string.raw_ptr()), string.length);
+}
+
+inline cpp::marshal::View<char16_t> cpp::marshal::Marshal::asWideCharView(const ::String& string)
+{
+#if defined(HX_SMART_STRINGS)
+    if (null() == string)
+    {
+        hx::NullReference("string", false);
+    }
+
+    if (false == string.isUTF16Encoded())
+    {
+        hx::Throw(HX_CSTRING("String is not ASCII encoded"));
+    }
+
+    return View<char16_t>(const_cast<char16_t*>(string.raw_wptr()), string.length);
+#else
+    hx::Throw(HX_CSTRING("HX_SMART_STRINGS not defined"));
+
+    return View<char16_t>(cpp::Pointer<char16_t>(null()), 0);
+#endif
+}
+
+template<class T>
+inline T cpp::marshal::Marshal::read(const View<uint8_t>& view)
+{
+    if (view.length < sizeof(T))
+    {
+        hx::Throw(HX_CSTRING("View too small"));
+    }
+
+    T output{};
+
+    std::memcpy(&output, view.ptr.ptr, sizeof(T));
+
+    return output;
+}
+
+template<class T>
+inline ::cpp::Pointer<T> cpp::marshal::Marshal::readPointer(const View<uint8_t>& view)
+{
+    return read<T*>(view);
+}
+
+inline int8_t cpp::marshal::Marshal::readInt8(const View<uint8_t>& view)
+{
+    return read<int8_t>(view);
+}
+
+inline int16_t cpp::marshal::Marshal::readInt16(const View<uint8_t>& view)
+{
+    return read<int16_t>(view);
+}
+
+inline int32_t cpp::marshal::Marshal::readInt32(const View<uint8_t>& view)
+{
+    return read<int32_t>(view);
+}
+
+inline int64_t cpp::marshal::Marshal::readInt64(const View<uint8_t>& view)
+{
+    return read<int64_t>(view);
+}
+
+inline uint8_t cpp::marshal::Marshal::readUInt8(const View<uint8_t>& view)
+{
+    return read<uint8_t>(view);
+}
+
+inline uint16_t cpp::marshal::Marshal::readUInt16(const View<uint8_t>& view)
+{
+    return read<uint16_t>(view);
+}
+
+inline uint32_t cpp::marshal::Marshal::readUInt32(const View<uint8_t>& view)
+{
+    return read<uint32_t>(view);
+}
+
+inline uint64_t cpp::marshal::Marshal::readUInt64(const View<uint8_t>& view)
+{
+    return read<uint64_t>(view);
+}
+
+inline float cpp::marshal::Marshal::readFloat32(const View<uint8_t>& view)
+{
+    return read<float>(view);
+}
+
+inline double cpp::marshal::Marshal::readFloat64(const View<uint8_t>& view)
+{
+    return read<double>(view);
+}
+
+template<class T>
+inline void cpp::marshal::Marshal::write(const View<uint8_t>& view, const T& value)
+{
+    if (view.length < sizeof(T))
+    {
+        hx::Throw(HX_CSTRING("View too small"));
+    }
+
+    std::memcpy(view.ptr.ptr, reinterpret_cast<const uint8_t*>(&value), sizeof(T));
+}
+
+template<class T>
+inline void cpp::marshal::Marshal::writePointer(const View<uint8_t>& view, const ::cpp::Pointer<T>& value)
+{
+    write<T*>(view, value.ptr);
+}
+
+inline void cpp::marshal::Marshal::writeInt8(const View<uint8_t>& view, const int8_t& value)
+{
+    write<int8_t>(view, value);
+}
+
+inline void cpp::marshal::Marshal::writeInt16(const View<uint8_t>& view, const int16_t& value)
+{
+    write<int16_t>(view, value);
+}
+
+inline void cpp::marshal::Marshal::writeInt32(const View<uint8_t>& view, const int32_t& value)
+{
+    write<int32_t>(view, value);
+}
+
+inline void cpp::marshal::Marshal::writeInt64(const View<uint8_t>& view, const int64_t& value)
+{
+    write<int64_t>(view, value);
+}
+
+inline void cpp::marshal::Marshal::writeUInt8(const View<uint8_t>& view, const uint8_t& value)
+{
+    write<uint8_t>(view, value);
+}
+
+inline void cpp::marshal::Marshal::writeUInt16(const View<uint8_t>& view, const uint16_t& value)
+{
+    write<uint16_t>(view, value);
+}
+
+inline void cpp::marshal::Marshal::writeUInt32(const View<uint8_t>& view, const uint32_t& value)
+{
+    write<uint32_t>(view, value);
+}
+
+inline void cpp::marshal::Marshal::writeUInt64(const View<uint8_t>& view, const uint64_t& value)
+{
+    write<uint64_t>(view, value);
+}
+
+inline void cpp::marshal::Marshal::writeFloat32(const View<uint8_t>& view, const float& value)
+{
+    write<float>(view, value);
+}
+
+inline void cpp::marshal::Marshal::writeFloat64(const View<uint8_t>& view, const double& value)
+{
+    write<double>(view, value);
+}
+
+template<class T>
+inline ::cpp::Pointer<T> cpp::marshal::Marshal::readBigEndianPointer(const View<uint8_t>& view)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    return readPointer<T*>(view);
+#else
+    return reverse(readPointer<T*>(view));
+#endif
+}
+
+inline int16_t cpp::marshal::Marshal::readBigEndianInt16(const View<uint8_t>& view)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    return readInt16(view);
+#else
+    return reverse(readInt16(view));
+#endif
+}
+
+inline int32_t cpp::marshal::Marshal::readBigEndianInt32(const View<uint8_t>& view)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    return readInt32(view);
+#else
+    return reverse(readInt32(view));
+#endif
+}
+
+inline int64_t cpp::marshal::Marshal::readBigEndianInt64(const View<uint8_t>& view)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    return readInt64(view);
+#else
+    return reverse(readInt64(view));
+#endif
+}
+
+inline uint16_t cpp::marshal::Marshal::readBigEndianUInt16(const View<uint8_t>& view)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    return readUInt16(view);
+#else
+    return reverse(readUInt16(view));
+#endif
+}
+
+inline uint32_t cpp::marshal::Marshal::readBigEndianUInt32(const View<uint8_t>& view)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    return readUInt32(view);
+#else
+    return reverse(readUInt32(view));
+#endif
+}
+
+inline uint64_t cpp::marshal::Marshal::readBigEndianUInt64(const View<uint8_t>& view)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    return readInt64(view);
+#else
+    return reverse(readUInt64(view));
+#endif
+}
+
+inline float cpp::marshal::Marshal::readBigEndianFloat32(const View<uint8_t>& view)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    return readFloat32(view);
+#else
+    return reverse(readFloat32(view));
+#endif
+}
+
+inline double cpp::marshal::Marshal::readBigEndianFloat64(const View<uint8_t>& view)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    return readFloat64(view);
+#else
+    return reverse(readFloat64(view));
+#endif
+}
+
+template<class T>
+inline ::cpp::Pointer<T> cpp::marshal::Marshal::readLittleEndianPointer(const View<uint8_t>& view)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    return readPointer<T*>(view);
+#else
+    return reverse(readPointer<T*>(view));
+#endif
+}
+
+inline int16_t cpp::marshal::Marshal::readLittleEndianInt16(const View<uint8_t>& view)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    return readInt16(view);
+#else
+    return reverse(readInt16(view));
+#endif
+}
+
+inline int32_t cpp::marshal::Marshal::readLittleEndianInt32(const View<uint8_t>& view)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    return readInt32(view);
+#else
+    return reverse(readInt32(view));
+#endif
+}
+
+inline int64_t cpp::marshal::Marshal::readLittleEndianInt64(const View<uint8_t>& view)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    return readInt64(view);
+#else
+    return reverse(readInt64(view));
+#endif
+}
+
+inline uint16_t cpp::marshal::Marshal::readLittleEndianUInt16(const View<uint8_t>& view)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    return readUInt16(view);
+#else
+    return reverse(readUInt16(view));
+#endif
+}
+
+inline uint32_t cpp::marshal::Marshal::readLittleEndianUInt32(const View<uint8_t>& view)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    return readUInt32(view);
+#else
+    return reverse(readUInt32(view));
+#endif
+}
+
+inline uint64_t cpp::marshal::Marshal::readLittleEndianUInt64(const View<uint8_t>& view)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    return readInt64(view);
+#else
+    return reverse(readUInt64(view));
+#endif
+}
+
+inline float cpp::marshal::Marshal::readLittleEndianFloat32(const View<uint8_t>& view)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    return readFloat32(view);
+#else
+    return reverse(readFloat32(view));
+#endif
+}
+
+inline double cpp::marshal::Marshal::readLittleEndianFloat64(const View<uint8_t>& view)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    return readFloat64(view);
+#else
+    return reverse(readFloat64(view));
+#endif
+}
+
+template<class T>
+inline void cpp::marshal::Marshal::writeLittleEndianPointer(const View<uint8_t>& view, const ::cpp::Pointer<T>& value)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    write<T*>(view, reverse(value.ptr));
+#else
+    write<T*>(view, value.ptr);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeLittleEndianInt16(const View<uint8_t>& view, const int16_t& value)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    writeInt16(view, reverse(value));
+#else
+    writeInt16(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeLittleEndianInt32(const View<uint8_t>& view, const int32_t& value)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    writeInt32(view, reverse(value));
+#else
+    writeInt32(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeLittleEndianInt64(const View<uint8_t>& view, const int64_t& value)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    writeInt64(view, reverse(value));
+#else
+    writeInt64(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeLittleEndianUInt16(const View<uint8_t>& view, const uint16_t& value)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    writeUInt16(view, reverse(value));
+#else
+    writeUInt16(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeLittleEndianUInt32(const View<uint8_t>& view, const uint32_t& value)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    writeUInt32(view, reverse(value));
+#else
+    writeUInt32(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeLittleEndianUInt64(const View<uint8_t>& view, const uint64_t& value)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    writeUInt64(view, reverse(value));
+#else
+    writeUInt64(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeLittleEndianFloat32(const View<uint8_t>& view, const float& value)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    writeFloat32(view, reverse(value));
+#else
+    writeFloat32(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeLittleEndianFloat64(const View<uint8_t>& view, const double& value)
+{
+#ifdef HXCPP_BIG_ENDIAN
+    writeFloat64(view, reverse(value));
+#else
+    writeFloat64(view, value);
+#endif
+}
+
+template<class T>
+inline void cpp::marshal::Marshal::writeBigEndianPointer(const View<uint8_t>& view, const ::cpp::Pointer<T>& value)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    write<T*>(view, reverse(value.ptr));
+#else
+    write<T*>(view, value.ptr);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeBigEndianInt16(const View<uint8_t>& view, const int16_t& value)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    writeInt16(view, reverse(value));
+#else
+    writeInt16(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeBigEndianInt32(const View<uint8_t>& view, const int32_t& value)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    writeInt32(view, reverse(value));
+#else
+    writeInt32(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeBigEndianInt64(const View<uint8_t>& view, const int64_t& value)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    writeInt64(view, reverse(value));
+#else
+    writeInt64(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeBigEndianUInt16(const View<uint8_t>& view, const uint16_t& value)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    writeUInt16(view, reverse(value));
+#else
+    writeUInt16(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeBigEndianUInt32(const View<uint8_t>& view, const uint32_t& value)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    writeUInt32(view, reverse(value));
+#else
+    writeUInt32(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeBigEndianUInt64(const View<uint8_t>& view, const uint64_t& value)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    writeUInt64(view, reverse(value));
+#else
+    writeUInt64(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeBigEndianFloat32(const View<uint8_t>& view, const float& value)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    writeFloat32(view, reverse(value));
+#else
+    writeFloat32(view, value);
+#endif
+}
+
+inline void cpp::marshal::Marshal::writeBigEndianFloat64(const View<uint8_t>& view, const double& value)
+{
+#ifndef HXCPP_BIG_ENDIAN
+    writeFloat64(view, reverse(value));
+#else
+    writeFloat64(view, value);
+#endif
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/cpp/marshal/PointerReference.hpp b/Sources/c_borogove/iinclude/cpp/marshal/PointerReference.hpp
new file mode 100644
index 0000000..f007aba
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/marshal/PointerReference.hpp
@@ -0,0 +1,170 @@
+#pragma once
+
+#include "Definitions.inc"
+
+template<class T>
+inline cpp::marshal::Boxed<T*> cpp::marshal::PointerReference<T>::ToBoxed() const
+{
+    if (nullptr == Super::ptr)
+    {
+        return new Boxed_obj<TPtr>();
+    }
+    else
+    {
+        return new Boxed_obj<TPtr>(Super::ptr);
+    }
+}
+
+template<class T>
+template<class O>
+inline O* cpp::marshal::PointerReference<T>::FromBoxed(const Boxed<O>& inRHS)
+{
+    if (nullptr == inRHS.mPtr)
+    {
+        return nullptr;
+    }
+
+    return const_cast<O*>(&inRHS->value);
+}
+
+template<class T>
+template<class O>
+inline O* cpp::marshal::PointerReference<T>::FromDynamic(const Dynamic& inRHS)
+{
+    return FromBoxed(inRHS.StaticCast<Boxed<O>>());
+}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::PointerReference(const null& inRHS) : Super(inRHS) {}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::PointerReference(const PointerType<T>& inRHS) : Super(const_cast<TPtr*>(&inRHS.value)) {}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::PointerReference(const Boxed<TPtr>& inRHS) : Super(FromBoxed<TPtr>(inRHS)) {}
+
+template<class T>
+template<class O>
+inline cpp::marshal::PointerReference<T>::PointerReference(const PointerReference<O>& inRHS) : Super(reinterpret_cast<TPtr*>(const_cast<O**>(inRHS.ptr))) {}
+
+template<class T>
+template<class O>
+inline cpp::marshal::PointerReference<T>::PointerReference(const PointerType<O>& inRHS) : Super(reinterpret_cast<TPtr*>(const_cast<O**>(&inRHS.value))) {}
+
+template<class T>
+template<class O>
+inline cpp::marshal::PointerReference<T>::PointerReference(const Boxed<O>& inRHS) : Super(reinterpret_cast<TPtr*>(FromBoxed<O>(inRHS))) {}
+
+template<class T>
+template<class K>
+inline K cpp::marshal::PointerReference<T>::get(int64_t index)
+{
+    return (*Super::ptr)[index];
+}
+
+template<class T>
+template<class K>
+inline void cpp::marshal::PointerReference<T>::set(int64_t index, K value)
+{
+    (*Super::ptr)[index] = value;
+}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::PointerReference(const TPtr& inRHS) : Super(inRHS) {}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::PointerReference(TPtr& inRHS)
+{
+    if (nullptr != inRHS)
+    {
+        Super::ptr = &inRHS;
+    }
+}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::PointerReference(const TPtr* inRHS) : Super(inRHS) {}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::PointerReference(const Variant& inRHS) : Super(FromDynamic<TPtr>(inRHS)) {}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::PointerReference(const Dynamic& inRHS) : Super(FromDynamic<TPtr>(inRHS)) {}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::operator ::Dynamic() const
+{
+    return ToBoxed();
+}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::operator ::cpp::Variant() const
+{
+    return ToBoxed();
+}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::operator ::cpp::marshal::Boxed<T*>() const
+{
+    return ToBoxed();
+}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::operator ::cpp::Pointer<T>() const
+{
+    if (nullptr == Super::ptr)
+    {
+        ::hx::NullReference("ValueType", true);
+    }
+
+    return ::cpp::Pointer<T>(*Super::ptr);
+}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::operator TPtr& ()
+{
+    if (nullptr == Super::ptr)
+    {
+        ::hx::NullReference("ValueType", true);
+    }
+
+    return *Super::ptr;
+}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::operator TPtr* ()
+{
+    return Super::ptr;
+}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::operator void* ()
+{
+    if (nullptr == Super::ptr)
+    {
+        ::hx::NullReference("ValueType", true);
+    }
+
+    return *Super::ptr;
+}
+
+template<class T>
+inline cpp::marshal::PointerReference<T>::operator void** ()
+{
+    return reinterpret_cast<void**>(Super::ptr);
+}
+
+template<class T>
+inline T* cpp::marshal::PointerReference<T>::operator->() const
+{
+    if (nullptr == Super::ptr)
+    {
+        ::hx::NullReference("ValueType", true);
+    }
+
+    if (nullptr == *Super::ptr)
+    {
+        ::hx::NullReference("ValueType", true);
+    }
+
+    return *Super::ptr;
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/cpp/marshal/PointerType.hpp b/Sources/c_borogove/iinclude/cpp/marshal/PointerType.hpp
new file mode 100644
index 0000000..e2bd26a
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/marshal/PointerType.hpp
@@ -0,0 +1,68 @@
+#pragma once
+
+#include "Definitions.inc"
+
+template<class T>
+inline T* cpp::marshal::PointerType<T>::FromDynamic(const Dynamic& inRHS)
+{
+    return FromBoxed(inRHS.StaticCast<Boxed<T>>());
+}
+
+template<class T>
+inline T* cpp::marshal::PointerType<T>::FromBoxed(const Boxed<TPtr>& inRHS)
+{
+    if (nullptr == inRHS.mPtr)
+    {
+        return nullptr;
+    }
+
+    return inRHS->value;
+}
+
+template<class T>
+inline T* cpp::marshal::PointerType<T>::FromReference(const PointerReference<T>& inRHS)
+{
+    if (nullptr == inRHS.ptr)
+    {
+        return nullptr;
+    }
+
+    return *inRHS.ptr;
+}
+
+template<class T>
+inline cpp::marshal::PointerType<T>::PointerType() : value(nullptr) {}
+
+template<class T>
+inline cpp::marshal::PointerType<T>::PointerType(TPtr inRHS) : value(inRHS) {}
+
+template<class T>
+inline cpp::marshal::PointerType<T>::PointerType(const PointerReference<T>& inRHS) : value(FromReference(inRHS.ptr)) {}
+
+template<class T>
+inline cpp::marshal::PointerType<T>::PointerType(const null&) : value(nullptr) {}
+
+template<class T>
+inline cpp::marshal::PointerType<T>::PointerType(const Boxed<TPtr>& inRHS) : value(FromBoxed(inRHS)) {}
+
+template<class T>
+inline cpp::marshal::PointerType<T>::PointerType(const Variant& inRHS) : value(FromDynamic(inRHS)) {}
+
+template<class T>
+inline cpp::marshal::PointerType<T>::PointerType(const Dynamic& inRHS) : value(FromDynamic(inRHS)) {}
+
+template<class T>
+inline cpp::marshal::PointerType<T>& cpp::marshal::PointerType<T>::operator=(const PointerReference<T>& inRHS)
+{
+    value = *inRHS.ptr;
+
+    return *this;
+}
+
+template<class T>
+inline cpp::marshal::PointerType<T>& cpp::marshal::PointerType<T>::operator=(const null& inRHS)
+{
+    value = nullptr;
+
+    return *this;
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/cpp/marshal/RootHandle.hpp b/Sources/c_borogove/iinclude/cpp/marshal/RootHandle.hpp
new file mode 100644
index 0000000..fcdeb83
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/marshal/RootHandle.hpp
@@ -0,0 +1,46 @@
+#pragma once
+
+#include "Definitions.inc"
+
+inline cpp::marshal::RootHandle::RootHandle(::hx::Object** obj) : object(obj) {}
+
+inline cpp::marshal::RootHandle cpp::marshal::RootHandle::create(::Dynamic obj)
+{
+	if (null() == obj)
+	{
+		hx::NullReference("Dynamic", false);
+	}
+
+	auto root = new hx::Object* { obj.mPtr };
+
+	hx::GCAddRoot(root);
+
+	return RootHandle(root);
+}
+
+inline cpp::marshal::RootHandle cpp::marshal::RootHandle::fromVoidPointer(cpp::Pointer<void> ptr)
+{
+	if (nullptr == ptr.ptr)
+	{
+		hx::NullReference("Dynamic", false);
+	}
+
+	return RootHandle(static_cast<hx::Object**>(ptr.ptr));
+}
+
+inline void cpp::marshal::RootHandle::close()
+{
+	hx::GCRemoveRoot(object);
+
+	delete object;
+}
+
+inline ::Dynamic cpp::marshal::RootHandle::getObject()
+{
+	return ::Dynamic{ *object };
+}
+
+inline cpp::Pointer<void> cpp::marshal::RootHandle::toVoidPointer()
+{
+	return object;
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/cpp/marshal/ValueReference.hpp b/Sources/c_borogove/iinclude/cpp/marshal/ValueReference.hpp
new file mode 100644
index 0000000..53c2cf3
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/marshal/ValueReference.hpp
@@ -0,0 +1,140 @@
+#pragma once
+
+#include "Definitions.inc"
+
+template<class T>
+template<class O>
+inline O* cpp::marshal::ValueReference<T>::FromDynamic(const Dynamic& inRHS)
+{
+    return FromBoxed(inRHS.StaticCast<Boxed<O>>());
+}
+
+template<class T>
+template<class O>
+inline O* cpp::marshal::ValueReference<T>::FromBoxed(const Boxed<O>& inRHS)
+{
+    if (nullptr == inRHS.mPtr)
+    {
+        return nullptr;
+    }
+
+    return const_cast<O*>(&inRHS->value);
+}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::ValueReference() : Super(nullptr) {}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::ValueReference(const null& inRHS) : Super(inRHS) {}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::ValueReference(const ValueType<T>& inRHS) : Super(inRHS.value) {}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::ValueReference(const Boxed<T>& inRHS) : Super(FromBoxed<T>(inRHS)) {}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::ValueReference(const T& inRHS) : Super(inRHS) {}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::ValueReference(T& inRHS) : Super(inRHS) {}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::ValueReference(const T* inRHS) : Super(inRHS) {}
+
+template<class T>
+template<class O>
+inline cpp::marshal::ValueReference<T>::ValueReference(const ValueReference<O>& inRHS) : Super(reinterpret_cast<T*>(const_cast<O*>(inRHS.ptr))) {}
+
+template<class T>
+template<class O>
+inline cpp::marshal::ValueReference<T>::ValueReference(const ValueType<O>& inRHS) : Super(reinterpret_cast<T*>(const_cast<O*>(&inRHS.value))) {}
+
+template<class T>
+template<class O>
+inline cpp::marshal::ValueReference<T>::ValueReference(const Boxed<O>& inRHS) : Super(reinterpret_cast<T*>(FromBoxed<O>(inRHS))) {}
+
+template<class T>
+template<class K>
+inline K cpp::marshal::ValueReference<T>::get(int64_t index)
+{
+    return (*Super::ptr)[index];
+}
+
+template<class T>
+template<class K>
+inline void cpp::marshal::ValueReference<T>::set(int64_t index, K value)
+{
+    (*Super::ptr)[index] = value;
+}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::ValueReference(const Variant& inRHS) : Super(FromDynamic<T>(inRHS)) {}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::ValueReference(const Dynamic& inRHS) : Super(FromDynamic<T>(inRHS)) {}
+
+template<class T>
+inline cpp::marshal::Boxed<T> cpp::marshal::ValueReference<T>::ToBoxed() const
+{
+    if (Super::ptr)
+    {
+        return Boxed<T>(new Boxed_obj<T>(Super::ptr));
+    }
+    else
+    {
+        return Boxed<T>();
+    }
+}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::operator ::Dynamic() const
+{
+    return ToBoxed();
+}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::operator ::cpp::Variant() const
+{
+    return ToBoxed();
+}
+
+template<class T>
+inline cpp::marshal::ValueReference<T>::operator ::cpp::marshal::Boxed<T>() const
+{
+    return ToBoxed();
+}
+
+template<class T>
+inline T* cpp::marshal::ValueReference<T>::operator ->() const
+{
+    if (nullptr == Super::ptr)
+    {
+        ::hx::NullReference("ValueType", true);
+    }
+
+    return Super::ptr;
+}
+
+template<class T>
+inline bool cpp::marshal::ValueReference<T>::operator==(const ValueReference<T>& inRHS) const
+{
+    return (*Super::ptr) == (*inRHS.ptr);
+}
+
+template<class T>
+inline bool cpp::marshal::ValueReference<T>::operator!=(const ValueReference<T>& inRHS) const
+{
+    return (*Super::ptr) != (*inRHS.ptr);
+}
+
+template<class T>
+inline T cpp::marshal::ValueReference<T>::operator*() const
+{
+    if (nullptr == Super::ptr)
+    {
+        ::hx::NullReference("ValueType", true);
+    }
+
+    return *Super::ptr;
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/cpp/marshal/ValueType.hpp b/Sources/c_borogove/iinclude/cpp/marshal/ValueType.hpp
new file mode 100644
index 0000000..70e5309
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/marshal/ValueType.hpp
@@ -0,0 +1,74 @@
+#pragma once
+
+#include "Definitions.inc"
+
+template<class T>
+inline T cpp::marshal::ValueType<T>::FromDynamic(const Dynamic& inRHS)
+{
+    return FromBoxed(inRHS.StaticCast<Boxed<T>>());
+}
+
+template<class T>
+inline T cpp::marshal::ValueType<T>::FromBoxed(const Boxed<T>& inRHS)
+{
+    if (nullptr == inRHS.mPtr)
+    {
+        ::hx::NullReference("ValueType", true);
+    }
+
+    return inRHS->value;
+}
+
+template<class T>
+inline T cpp::marshal::ValueType<T>::FromReference(const ValueReference<T>& inRHS)
+{
+    if (nullptr == inRHS.ptr)
+    {
+        ::hx::NullReference("ValueType", true);
+    }
+
+    return *inRHS.ptr;
+}
+
+template<class T>
+inline cpp::marshal::ValueType<T>::ValueType() : value() {}
+
+template<class T>
+inline cpp::marshal::ValueType<T>::ValueType(const ValueReference<T>& inRHS) : value(FromReference(inRHS.ptr)) {}
+
+template<class T>
+inline cpp::marshal::ValueType<T>::ValueType(const null& inRHS) : ValueType<T>(::cpp::marshal::ValueReference<T>(inRHS)) {}
+
+template<class T>
+inline cpp::marshal::ValueType<T>::ValueType(const Boxed<T>& inRHS) : ValueType<T>(::cpp::marshal::ValueReference<T>(FromBoxed(inRHS))) {}
+
+template<class T>
+inline cpp::marshal::ValueType<T>::ValueType(const Variant& inRHS) : ValueType<T>(::cpp::marshal::ValueReference<T>(FromDynamic(inRHS.asDynamic()))) {}
+
+template<class T>
+inline cpp::marshal::ValueType<T>::ValueType(const Dynamic& inRHS) : ValueType<T>(::cpp::marshal::ValueReference<T>(FromDynamic(inRHS))) {}
+
+template<class T>
+template<class ...TArgs>
+inline cpp::marshal::ValueType<T>::ValueType(TArgs... args) : value(std::forward<TArgs>(args)...) {}
+
+template<class T>
+inline cpp::marshal::ValueType<T>& cpp::marshal::ValueType<T>::operator=(const ValueReference<T>& inRHS)
+{
+    if (nullptr == inRHS.ptr)
+    {
+        ::hx::NullReference("ValueType", true);
+    }
+
+    value = *inRHS.ptr;
+
+    return *this;
+}
+
+template<class T>
+inline cpp::marshal::ValueType<T>& cpp::marshal::ValueType<T>::operator=(const null& inRHS)
+{
+    ::hx::NullReference("ValueType", true);
+
+    return *this;
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/cpp/marshal/View.hpp b/Sources/c_borogove/iinclude/cpp/marshal/View.hpp
new file mode 100644
index 0000000..d60fd58
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/marshal/View.hpp
@@ -0,0 +1,136 @@
+#pragma once
+
+#include "Definitions.inc"
+#include <cstring>
+#include <cmath>
+
+template<class T>
+inline cpp::marshal::View<T>::View(::cpp::Pointer<T> _ptr, int64_t _length) : ptr(_ptr), length(_length) {}
+
+template<class T>
+inline bool cpp::marshal::View<T>::tryCopyTo(const View<T>& destination) const
+{
+    if (destination.length < length)
+    {
+        return false;
+    }
+
+    if (ptr.ptr + length < destination.ptr.ptr || destination.ptr.ptr + length < ptr.ptr)
+        std::memcpy(destination.ptr.ptr, ptr.ptr, sizeof(T) * length);
+    else
+        std::memmove(destination.ptr.ptr, ptr.ptr, sizeof(T) * length);
+
+    return true;
+}
+
+template<class T>
+inline void cpp::marshal::View<T>::copyTo(const View<T>& destination) const
+{
+    if (tryCopyTo(destination) == false)
+    {
+        hx::Throw(HX_CSTRING("View OOB"));
+    }
+}
+
+template<class T>
+inline void cpp::marshal::View<T>::clear() const
+{
+    std::memset(ptr.ptr, 0, sizeof(T) * length);
+}
+
+template<class T>
+inline void cpp::marshal::View<T>::fill(T value) const
+{
+    for (auto i = 0; i < length; i++)
+    {
+        ptr.ptr[i] = value;
+    }
+}
+
+template<class T>
+inline bool cpp::marshal::View<T>::isEmpty() const
+{
+    return length == 0;
+}
+
+template<class T>
+inline cpp::marshal::View<T> cpp::marshal::View<T>::slice(int64_t index) const
+{
+    if (index < 0 || index > length)
+    {
+        hx::Throw(HX_CSTRING("View OOB"));
+    }
+
+    return View<T>(ptr.ptr + index, length - index);
+}
+
+template<class T>
+inline cpp::marshal::View<T> cpp::marshal::View<T>::slice(int64_t inIndex, int64_t inLength) const
+{
+    if (inIndex < 0 || inLength < 0 || inIndex > length || inIndex + inLength > length)
+    {
+        hx::Throw(HX_CSTRING("View OOB"));
+    }
+
+    return View<T>(ptr.ptr + inIndex, inLength);
+}
+
+template<class T>
+template<class K>
+inline cpp::marshal::View<K> cpp::marshal::View<T>::reinterpret() const
+{
+    auto newPtr   = ::cpp::Pointer<K>(reinterpret_cast<K*>(ptr.ptr));
+    auto fromSize = sizeof(T);
+    auto toSize   = sizeof(K);
+
+    if (toSize == fromSize)
+    {
+        return cpp::marshal::View<K>(newPtr, length);
+    }
+    if (toSize < fromSize)
+    {
+        return cpp::marshal::View<K>(newPtr, length * (fromSize / toSize));
+    }
+
+    auto shrink    = static_cast<double>(fromSize) / toSize;
+    auto newLength = static_cast<int>(std::floor(length * shrink));
+
+    return cpp::marshal::View<K>(newPtr, newLength);
+}
+
+template<class T>
+inline int cpp::marshal::View<T>::compare(const View<T>& inRHS) const
+{
+    auto common = length < inRHS.length ? length : inRHS.length;
+    auto result = std::memcmp(ptr.ptr, inRHS.ptr.ptr, sizeof(T) * common);
+
+    if (result)
+    {
+        return result;
+    }
+
+    return length - inRHS.length;
+}
+
+template<class T>
+inline bool cpp::marshal::View<T>::operator==(const View<T>& inRHS) const
+{
+    return length == inRHS.length && ptr.ptr == inRHS.ptr.ptr;
+}
+
+template<class T>
+inline bool cpp::marshal::View<T>::operator!=(const View<T>& inRHS) const
+{
+    return length != inRHS.length || ptr.ptr != inRHS.ptr.ptr;
+}
+
+template<class T>
+inline T& cpp::marshal::View<T>::operator[](int64_t index) const
+{
+    if (index < 0 || index >= length)
+    {
+        hx::Throw(HX_CSTRING("View OOB"));
+    }
+
+    return ptr.ptr[index];
+}
diff --git a/Sources/c_borogove/iinclude/cpp/vm/Gc.h b/Sources/c_borogove/iinclude/cpp/vm/Gc.h
new file mode 100644
index 0000000..5f2e1c6
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/vm/Gc.h
@@ -0,0 +1,62 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_cpp_vm_Gc
+#define INCLUDED_cpp_vm_Gc
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(cpp,vm,Gc)
+
+namespace cpp{
+namespace vm{
+
+
+class HXCPP_CLASS_ATTRIBUTES Gc_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef Gc_obj OBJ_;
+		Gc_obj();
+
+	public:
+		enum { _hx_ClassId = 0x6bc853d6 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="cpp.vm.Gc")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"cpp.vm.Gc"); }
+
+		inline static ::hx::ObjectPtr< Gc_obj > __new() {
+			::hx::ObjectPtr< Gc_obj > __this = new Gc_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< Gc_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			Gc_obj *__this = (Gc_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Gc_obj), false, "cpp.vm.Gc"));
+			*(void **)__this = Gc_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~Gc_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("Gc",3c,3e,00,00); }
+
+		static int trace(::hx::Class sought,::hx::Null< bool >  printInstances);
+		static ::Dynamic trace_dyn();
+
+};
+
+} // end namespace cpp
+} // end namespace vm
+
+#endif /* INCLUDED_cpp_vm_Gc */ 
diff --git a/Sources/c_borogove/iinclude/cpp/vm/WeakRef.h b/Sources/c_borogove/iinclude/cpp/vm/WeakRef.h
new file mode 100644
index 0000000..4747909
--- /dev/null
+++ b/Sources/c_borogove/iinclude/cpp/vm/WeakRef.h
@@ -0,0 +1,81 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_cpp_vm_WeakRef
+#define INCLUDED_cpp_vm_WeakRef
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_STACK_FRAME(_hx_pos_5d77fc6d6289cb3b_29_new)
+HX_DECLARE_CLASS2(cpp,vm,WeakRef)
+
+namespace cpp{
+namespace vm{
+
+
+class HXCPP_CLASS_ATTRIBUTES WeakRef_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef WeakRef_obj OBJ_;
+		WeakRef_obj();
+
+	public:
+		enum { _hx_ClassId = 0x79de7951 };
+
+		void __construct( ::Dynamic inObject,::hx::Null< bool >  __o_inHard);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="cpp.vm.WeakRef")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"cpp.vm.WeakRef"); }
+
+		inline static ::hx::ObjectPtr< WeakRef_obj > __new( ::Dynamic inObject,::hx::Null< bool >  __o_inHard) {
+			::hx::ObjectPtr< WeakRef_obj > __this = new WeakRef_obj();
+			__this->__construct(inObject,__o_inHard);
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< WeakRef_obj > __alloc(::hx::Ctx *_hx_ctx, ::Dynamic inObject,::hx::Null< bool >  __o_inHard) {
+			WeakRef_obj *__this = (WeakRef_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(WeakRef_obj), true, "cpp.vm.WeakRef"));
+			*(void **)__this = WeakRef_obj::_hx_vtable;
+{
+            		bool inHard = __o_inHard.Default(false);
+            	HX_STACKFRAME(&_hx_pos_5d77fc6d6289cb3b_29_new)
+HXLINE(  30)		( ( ::cpp::vm::WeakRef)(__this) )->hardRef = inHard;
+HXLINE(  31)		if (( ( ::cpp::vm::WeakRef)(__this) )->hardRef) {
+HXLINE(  32)			( ( ::cpp::vm::WeakRef)(__this) )->ref = inObject;
+            		}
+            		else {
+HXLINE(  34)			( ( ::cpp::vm::WeakRef)(__this) )->ref =  ::__hxcpp_weak_ref_create(inObject);
+            		}
+            	}
+		
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~WeakRef_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("WeakRef",9b,77,ad,a4); }
+
+		 ::Dynamic ref;
+		bool hardRef;
+		 ::Dynamic get();
+		::Dynamic get_dyn();
+
+};
+
+} // end namespace cpp
+} // end namespace vm
+
+#endif /* INCLUDED_cpp_vm_WeakRef */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/Aes.h b/Sources/c_borogove/iinclude/haxe/crypto/Aes.h
new file mode 100644
index 0000000..db6558a
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/Aes.h
@@ -0,0 +1,107 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_Aes
+#define INCLUDED_haxe_crypto_Aes
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(haxe,crypto,Aes)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+
+
+class HXCPP_CLASS_ATTRIBUTES Aes_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef Aes_obj OBJ_;
+		Aes_obj();
+
+	public:
+		enum { _hx_ClassId = 0x49ad9de8 };
+
+		void __construct( ::haxe::io::Bytes key, ::haxe::io::Bytes iv);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="haxe.crypto.Aes")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"haxe.crypto.Aes"); }
+		static ::hx::ObjectPtr< Aes_obj > __new( ::haxe::io::Bytes key, ::haxe::io::Bytes iv);
+		static ::hx::ObjectPtr< Aes_obj > __alloc(::hx::Ctx *_hx_ctx, ::haxe::io::Bytes key, ::haxe::io::Bytes iv);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~Aes_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		static bool __SetStatic(const ::String &inString, Dynamic &ioValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("Aes",ef,aa,31,00); }
+
+		static ::Array< int > SBOX;
+		static ::Array< int > RSBOX;
+		static ::Array< int > SUB_BYTES_MIX_COLUMN_0;
+		static ::Array< int > SUB_BYTES_MIX_COLUMN_1;
+		static ::Array< int > SUB_BYTES_MIX_COLUMN_2;
+		static ::Array< int > SUB_BYTES_MIX_COLUMN_3;
+		static ::Array< int > RSUB_BYTES_MIX_COLUMN_0;
+		static ::Array< int > RSUB_BYTES_MIX_COLUMN_1;
+		static ::Array< int > RSUB_BYTES_MIX_COLUMN_2;
+		static ::Array< int > RSUB_BYTES_MIX_COLUMN_3;
+		static ::Array< int > RCON;
+		static void initTable();
+		static ::Dynamic initTable_dyn();
+
+		int Nk;
+		int Nr;
+		::Array< int > roundKey;
+		::Array< int > rRoundKey;
+		int keyRows;
+		::Array< int > state;
+		 ::haxe::io::Bytes key;
+		 ::haxe::io::Bytes iv;
+		 ::haxe::io::Bytes set_iv( ::haxe::io::Bytes vector);
+		::Dynamic set_iv_dyn();
+
+		void init( ::haxe::io::Bytes key, ::haxe::io::Bytes iv);
+		::Dynamic init_dyn();
+
+		void keyExpansion( ::haxe::io::Bytes key);
+		::Dynamic keyExpansion_dyn();
+
+		 ::haxe::io::Bytes encrypt(::String cipherMode, ::haxe::io::Bytes data,::String padding, ::haxe::io::Bytes aad, ::Dynamic tagLen,::Array< ::Dynamic> aadCollection);
+		::Dynamic encrypt_dyn();
+
+		 ::haxe::io::Bytes decrypt(::String cipherMode, ::haxe::io::Bytes data,::String padding, ::haxe::io::Bytes aad, ::Dynamic tagLen,::Array< ::Dynamic> aadCollection);
+		::Dynamic decrypt_dyn();
+
+		void encryptBlock( ::haxe::io::Bytes src,int srcIndex, ::haxe::io::Bytes dst,int dstIndex);
+		::Dynamic encryptBlock_dyn();
+
+		void decryptBlock( ::haxe::io::Bytes src,int srcIndex, ::haxe::io::Bytes dst,::hx::Null< int >  dstIndex);
+		::Dynamic decryptBlock_dyn();
+
+		void generateBlock(::Array< int > keySchedule,::Array< int > SUB_MIX_0,::Array< int > SUB_MIX_1,::Array< int > SUB_MIX_2,::Array< int > SUB_MIX_3,::Array< int > SBOX);
+		::Dynamic generateBlock_dyn();
+
+		int bytesToInt32( ::haxe::io::Bytes bs,int off);
+		::Dynamic bytesToInt32_dyn();
+
+		void int32ToBytes(int n, ::haxe::io::Bytes bs,int off);
+		::Dynamic int32ToBytes_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+
+#endif /* INCLUDED_haxe_crypto_Aes */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/CBC.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/CBC.h
new file mode 100644
index 0000000..aca564a
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/CBC.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_CBC
+#define INCLUDED_haxe_crypto_mode_CBC
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,CBC)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES CBC_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef CBC_obj OBJ_;
+		CBC_obj();
+
+	public:
+		enum { _hx_ClassId = 0x1013da96 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.CBC")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.CBC"); }
+
+		inline static ::hx::ObjectPtr< CBC_obj > __new() {
+			::hx::ObjectPtr< CBC_obj > __this = new CBC_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< CBC_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			CBC_obj *__this = (CBC_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(CBC_obj), false, "haxe.crypto.mode.CBC"));
+			*(void **)__this = CBC_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~CBC_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("CBC",c4,10,33,00); }
+
+		static void encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic encrypt_dyn();
+
+		static void decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic decryptBlock);
+		static ::Dynamic decrypt_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_CBC */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/CCM.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/CCM.h
new file mode 100644
index 0000000..d6c7f3b
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/CCM.h
@@ -0,0 +1,86 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_CCM
+#define INCLUDED_haxe_crypto_mode_CCM
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,CCM)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES CCM_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef CCM_obj OBJ_;
+		CCM_obj();
+
+	public:
+		enum { _hx_ClassId = 0x1013db7f };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.CCM")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.CCM"); }
+
+		inline static ::hx::ObjectPtr< CCM_obj > __new() {
+			::hx::ObjectPtr< CCM_obj > __this = new CCM_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< CCM_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			CCM_obj *__this = (CCM_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(CCM_obj), false, "haxe.crypto.mode.CCM"));
+			*(void **)__this = CCM_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~CCM_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("CCM",ad,11,33,00); }
+
+		static  ::haxe::io::Bytes encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes nonce, ::haxe::io::Bytes aad,int tagLen,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic encrypt_dyn();
+
+		static  ::haxe::io::Bytes decrypt( ::haxe::io::Bytes ciphertextWithTag, ::haxe::io::Bytes nonce, ::haxe::io::Bytes aad,int tagLen,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic decrypt_dyn();
+
+		static ::Array< ::Dynamic> createAuthBlocks( ::haxe::io::Bytes B0, ::haxe::io::Bytes aad, ::haxe::io::Bytes message,int blockSize);
+		static ::Dynamic createAuthBlocks_dyn();
+
+		static  ::haxe::io::Bytes computeCBCMac(::Array< ::Dynamic> blocks,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic computeCBCMac_dyn();
+
+		static  ::haxe::io::Bytes formatAuthData( ::haxe::io::Bytes aad);
+		static ::Dynamic formatAuthData_dyn();
+
+		static  ::haxe::io::Bytes encryptCTR( ::haxe::io::Bytes nonce, ::haxe::io::Bytes message,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic encryptCTR_dyn();
+
+		static  ::haxe::io::Bytes encryptTag( ::haxe::io::Bytes nonce, ::haxe::io::Bytes tag,int tagLen,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic encryptTag_dyn();
+
+		static bool constantTimeCompare( ::haxe::io::Bytes a, ::haxe::io::Bytes b);
+		static ::Dynamic constantTimeCompare_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_CCM */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/CFB.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/CFB.h
new file mode 100644
index 0000000..6ca9b18
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/CFB.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_CFB
+#define INCLUDED_haxe_crypto_mode_CFB
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,CFB)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES CFB_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef CFB_obj OBJ_;
+		CFB_obj();
+
+	public:
+		enum { _hx_ClassId = 0x1013de11 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.CFB")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.CFB"); }
+
+		inline static ::hx::ObjectPtr< CFB_obj > __new() {
+			::hx::ObjectPtr< CFB_obj > __this = new CFB_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< CFB_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			CFB_obj *__this = (CFB_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(CFB_obj), false, "haxe.crypto.mode.CFB"));
+			*(void **)__this = CFB_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~CFB_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("CFB",3f,14,33,00); }
+
+		static void encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic encrypt_dyn();
+
+		static void decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic decryptBlock);
+		static ::Dynamic decrypt_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_CFB */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/CMAC.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/CMAC.h
new file mode 100644
index 0000000..10a993b
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/CMAC.h
@@ -0,0 +1,71 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_CMAC
+#define INCLUDED_haxe_crypto_mode_CMAC
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,CMAC)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES CMAC_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef CMAC_obj OBJ_;
+		CMAC_obj();
+
+	public:
+		enum { _hx_ClassId = 0x0153bffa };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.CMAC")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.CMAC"); }
+
+		inline static ::hx::ObjectPtr< CMAC_obj > __new() {
+			::hx::ObjectPtr< CMAC_obj > __this = new CMAC_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< CMAC_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			CMAC_obj *__this = (CMAC_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(CMAC_obj), false, "haxe.crypto.mode.CMAC"));
+			*(void **)__this = CMAC_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~CMAC_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("CMAC",0c,f2,83,2c); }
+
+		static  ::haxe::io::Bytes generate( ::haxe::io::Bytes message, ::haxe::io::Bytes key,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic generate_dyn();
+
+		static  ::Dynamic generateSubkeys( ::haxe::io::Bytes key,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic generateSubkeys_dyn();
+
+		static  ::haxe::io::Bytes leftShiftOnebit( ::haxe::io::Bytes input);
+		static ::Dynamic leftShiftOnebit_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_CMAC */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/CTR.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/CTR.h
new file mode 100644
index 0000000..d20ac9b
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/CTR.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_CTR
+#define INCLUDED_haxe_crypto_mode_CTR
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,CTR)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES CTR_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef CTR_obj OBJ_;
+		CTR_obj();
+
+	public:
+		enum { _hx_ClassId = 0x1013ea53 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.CTR")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.CTR"); }
+
+		inline static ::hx::ObjectPtr< CTR_obj > __new() {
+			::hx::ObjectPtr< CTR_obj > __this = new CTR_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< CTR_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			CTR_obj *__this = (CTR_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(CTR_obj), false, "haxe.crypto.mode.CTR"));
+			*(void **)__this = CTR_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~CTR_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("CTR",81,20,33,00); }
+
+		static void encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic encrypt_dyn();
+
+		static void decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic decryptBlock);
+		static ::Dynamic decrypt_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_CTR */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/EAX.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/EAX.h
new file mode 100644
index 0000000..410f995
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/EAX.h
@@ -0,0 +1,74 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_EAX
+#define INCLUDED_haxe_crypto_mode_EAX
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,EAX)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES EAX_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef EAX_obj OBJ_;
+		EAX_obj();
+
+	public:
+		enum { _hx_ClassId = 0x10155e4e };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.EAX")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.EAX"); }
+
+		inline static ::hx::ObjectPtr< EAX_obj > __new() {
+			::hx::ObjectPtr< EAX_obj > __this = new EAX_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< EAX_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			EAX_obj *__this = (EAX_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(EAX_obj), false, "haxe.crypto.mode.EAX"));
+			*(void **)__this = EAX_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~EAX_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("EAX",7c,94,34,00); }
+
+		static  ::haxe::io::Bytes encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes key, ::haxe::io::Bytes iv, ::Dynamic encryptBlock,::Array< ::Dynamic> aad);
+		static ::Dynamic encrypt_dyn();
+
+		static  ::haxe::io::Bytes decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes key, ::haxe::io::Bytes iv, ::Dynamic encryptBlock,::Array< ::Dynamic> aad);
+		static ::Dynamic decrypt_dyn();
+
+		static  ::haxe::io::Bytes omac(int t, ::haxe::io::Bytes message, ::haxe::io::Bytes key, ::Dynamic encryptBlock);
+		static ::Dynamic omac_dyn();
+
+		static bool constantTimeEquals( ::haxe::io::Bytes a, ::haxe::io::Bytes b);
+		static ::Dynamic constantTimeEquals_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_EAX */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/ECB.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/ECB.h
new file mode 100644
index 0000000..a75d785
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/ECB.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_ECB
+#define INCLUDED_haxe_crypto_mode_ECB
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,ECB)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES ECB_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef ECB_obj OBJ_;
+		ECB_obj();
+
+	public:
+		enum { _hx_ClassId = 0x10155ff6 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.ECB")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.ECB"); }
+
+		inline static ::hx::ObjectPtr< ECB_obj > __new() {
+			::hx::ObjectPtr< ECB_obj > __this = new ECB_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< ECB_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			ECB_obj *__this = (ECB_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(ECB_obj), false, "haxe.crypto.mode.ECB"));
+			*(void **)__this = ECB_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~ECB_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("ECB",24,96,34,00); }
+
+		static void encrypt( ::haxe::io::Bytes src,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic encrypt_dyn();
+
+		static void decrypt( ::haxe::io::Bytes src,int blockSize, ::Dynamic decryptBlock);
+		static ::Dynamic decrypt_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_ECB */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/GCM.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/GCM.h
new file mode 100644
index 0000000..116fb9a
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/GCM.h
@@ -0,0 +1,89 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_GCM
+#define INCLUDED_haxe_crypto_mode_GCM
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,GCM)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES GCM_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef GCM_obj OBJ_;
+		GCM_obj();
+
+	public:
+		enum { _hx_ClassId = 0x1016e483 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.GCM")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.GCM"); }
+
+		inline static ::hx::ObjectPtr< GCM_obj > __new() {
+			::hx::ObjectPtr< GCM_obj > __this = new GCM_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< GCM_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			GCM_obj *__this = (GCM_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(GCM_obj), false, "haxe.crypto.mode.GCM"));
+			*(void **)__this = GCM_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~GCM_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("GCM",b1,1a,36,00); }
+
+		static  ::haxe::io::Bytes encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv, ::haxe::io::Bytes aad,int tagLen,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic encrypt_dyn();
+
+		static  ::haxe::io::Bytes decrypt( ::haxe::io::Bytes ciphertextWithTag, ::haxe::io::Bytes iv, ::haxe::io::Bytes aad,int tagLen,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic decrypt_dyn();
+
+		static  ::haxe::io::Bytes calculateJ0( ::haxe::io::Bytes H, ::haxe::io::Bytes iv);
+		static ::Dynamic calculateJ0_dyn();
+
+		static  ::haxe::io::Bytes incrementCounter( ::haxe::io::Bytes counter);
+		static ::Dynamic incrementCounter_dyn();
+
+		static  ::haxe::io::Bytes calculateTag( ::haxe::io::Bytes H, ::haxe::io::Bytes aad, ::haxe::io::Bytes ciphertext, ::haxe::io::Bytes J0, ::Dynamic encryptBlock);
+		static ::Dynamic calculateTag_dyn();
+
+		static  ::haxe::io::Bytes ghash( ::haxe::io::Bytes H, ::haxe::io::Bytes aad, ::haxe::io::Bytes ciphertext);
+		static ::Dynamic ghash_dyn();
+
+		static  ::haxe::io::Bytes ghashUpdate( ::haxe::io::Bytes H, ::haxe::io::Bytes state, ::haxe::io::Bytes data);
+		static ::Dynamic ghashUpdate_dyn();
+
+		static  ::haxe::io::Bytes gmult( ::haxe::io::Bytes X, ::haxe::io::Bytes Y);
+		static ::Dynamic gmult_dyn();
+
+		static bool constantTimeCompare( ::haxe::io::Bytes a, ::haxe::io::Bytes b);
+		static ::Dynamic constantTimeCompare_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_GCM */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/GCMSIV.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/GCMSIV.h
new file mode 100644
index 0000000..09ac765
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/GCMSIV.h
@@ -0,0 +1,92 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_GCMSIV
+#define INCLUDED_haxe_crypto_mode_GCMSIV
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,GCMSIV)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES GCMSIV_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef GCMSIV_obj OBJ_;
+		GCMSIV_obj();
+
+	public:
+		enum { _hx_ClassId = 0x5dcabbf9 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.GCMSIV")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.GCMSIV"); }
+
+		inline static ::hx::ObjectPtr< GCMSIV_obj > __new() {
+			::hx::ObjectPtr< GCMSIV_obj > __this = new GCMSIV_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< GCMSIV_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			GCMSIV_obj *__this = (GCMSIV_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(GCMSIV_obj), false, "haxe.crypto.mode.GCMSIV"));
+			*(void **)__this = GCMSIV_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~GCMSIV_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static bool __SetStatic(const ::String &inString, Dynamic &ioValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("GCMSIV",ef,24,54,2a); }
+
+		static void __boot();
+		static int AES_BLOCK_SIZE;
+		static int NONCE_SIZE;
+		static ::cpp::Int64 E;
+		static ::cpp::Int64 h0;
+		static ::cpp::Int64 h1;
+		static ::cpp::Int64 s0;
+		static ::cpp::Int64 s1;
+		static  ::haxe::io::Bytes encrypt( ::haxe::io::Bytes key, ::haxe::io::Bytes nonce, ::haxe::io::Bytes plaintext, ::haxe::io::Bytes aad, ::Dynamic encryptBlock, ::Dynamic initKey);
+		static ::Dynamic encrypt_dyn();
+
+		static  ::haxe::io::Bytes decrypt( ::haxe::io::Bytes key, ::haxe::io::Bytes nonce, ::haxe::io::Bytes ciphertext, ::haxe::io::Bytes aad, ::Dynamic encryptBlock, ::Dynamic initKey);
+		static ::Dynamic decrypt_dyn();
+
+		static  ::haxe::io::Bytes subKey(int ctrStart,int ctrEnd, ::haxe::io::Bytes nonce, ::Dynamic encryptBlock);
+		static ::Dynamic subKey_dyn();
+
+		static  ::haxe::io::Bytes hash( ::haxe::io::Bytes encKey, ::haxe::io::Bytes authKey, ::haxe::io::Bytes nonce, ::haxe::io::Bytes plaintext, ::haxe::io::Bytes aad, ::Dynamic encryptBlock);
+		static ::Dynamic hash_dyn();
+
+		static void initPolyval( ::haxe::io::Bytes authKey);
+		static ::Dynamic initPolyval_dyn();
+
+		static void updateBlockPolyval( ::haxe::io::Bytes b,int offset);
+		static ::Dynamic updateBlockPolyval_dyn();
+
+		static void aesCTR( ::haxe::io::Bytes key, ::haxe::io::Bytes tag, ::haxe::io::Bytes input, ::haxe::io::Bytes output, ::Dynamic encryptBlock);
+		static ::Dynamic aesCTR_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_GCMSIV */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/OFB.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/OFB.h
new file mode 100644
index 0000000..1788e13
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/OFB.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_OFB
+#define INCLUDED_haxe_crypto_mode_OFB
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,OFB)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES OFB_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef OFB_obj OBJ_;
+		OFB_obj();
+
+	public:
+		enum { _hx_ClassId = 0x101cf91d };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.OFB")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.OFB"); }
+
+		inline static ::hx::ObjectPtr< OFB_obj > __new() {
+			::hx::ObjectPtr< OFB_obj > __this = new OFB_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< OFB_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			OFB_obj *__this = (OFB_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(OFB_obj), false, "haxe.crypto.mode.OFB"));
+			*(void **)__this = OFB_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~OFB_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("OFB",4b,2f,3c,00); }
+
+		static void encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic encrypt_dyn();
+
+		static void decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic decryptBlock);
+		static ::Dynamic decrypt_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_OFB */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/PCBC.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/PCBC.h
new file mode 100644
index 0000000..6b8469a
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/PCBC.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_PCBC
+#define INCLUDED_haxe_crypto_mode_PCBC
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,PCBC)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES PCBC_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef PCBC_obj OBJ_;
+		PCBC_obj();
+
+	public:
+		enum { _hx_ClassId = 0x09e3f062 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.PCBC")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.PCBC"); }
+
+		inline static ::hx::ObjectPtr< PCBC_obj > __new() {
+			::hx::ObjectPtr< PCBC_obj > __this = new PCBC_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< PCBC_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			PCBC_obj *__this = (PCBC_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(PCBC_obj), false, "haxe.crypto.mode.PCBC"));
+			*(void **)__this = PCBC_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~PCBC_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("PCBC",74,22,14,35); }
+
+		static void encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic encryptBlock);
+		static ::Dynamic encrypt_dyn();
+
+		static void decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic decryptBlock);
+		static ::Dynamic decrypt_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_PCBC */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/mode/SIV.h b/Sources/c_borogove/iinclude/haxe/crypto/mode/SIV.h
new file mode 100644
index 0000000..c2fd964
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/mode/SIV.h
@@ -0,0 +1,86 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_mode_SIV
+#define INCLUDED_haxe_crypto_mode_SIV
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,mode,SIV)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+
+class HXCPP_CLASS_ATTRIBUTES SIV_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef SIV_obj OBJ_;
+		SIV_obj();
+
+	public:
+		enum { _hx_ClassId = 0x102004d2 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.mode.SIV")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.mode.SIV"); }
+
+		inline static ::hx::ObjectPtr< SIV_obj > __new() {
+			::hx::ObjectPtr< SIV_obj > __this = new SIV_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< SIV_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			SIV_obj *__this = (SIV_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(SIV_obj), false, "haxe.crypto.mode.SIV"));
+			*(void **)__this = SIV_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~SIV_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("SIV",00,3b,3f,00); }
+
+		static  ::haxe::io::Bytes encrypt( ::haxe::io::Bytes key, ::haxe::io::Bytes plaintext, ::haxe::io::Bytes nonce,::Array< ::Dynamic> associatedData, ::Dynamic encryptBlock, ::Dynamic initKey);
+		static ::Dynamic encrypt_dyn();
+
+		static  ::haxe::io::Bytes decrypt( ::haxe::io::Bytes combinedKey, ::haxe::io::Bytes ciphertext, ::haxe::io::Bytes nonce,::Array< ::Dynamic> associatedData, ::Dynamic encryptBlock, ::Dynamic initKey);
+		static ::Dynamic decrypt_dyn();
+
+		static  ::haxe::io::Bytes computeCtr( ::haxe::io::Bytes input, ::haxe::io::Bytes key, ::haxe::io::Bytes iv, ::Dynamic encryptBlock, ::Dynamic initKey);
+		static ::Dynamic computeCtr_dyn();
+
+		static  ::haxe::io::Bytes s2v( ::haxe::io::Bytes macKey, ::haxe::io::Bytes plaintext,::Array< ::Dynamic> associatedData, ::haxe::io::Bytes nonce, ::Dynamic encryptBlock, ::Dynamic initKey);
+		static ::Dynamic s2v_dyn();
+
+		static int shiftLeft( ::haxe::io::Bytes block, ::haxe::io::Bytes output);
+		static ::Dynamic shiftLeft_dyn();
+
+		static  ::haxe::io::Bytes dbl( ::haxe::io::Bytes input);
+		static ::Dynamic dbl_dyn();
+
+		static  ::haxe::io::Bytes _hx_xor( ::haxe::io::Bytes in1, ::haxe::io::Bytes in2);
+		static ::Dynamic _hx_xor_dyn();
+
+		static  ::haxe::io::Bytes xorend( ::haxe::io::Bytes in1, ::haxe::io::Bytes in2);
+		static ::Dynamic xorend_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
+
+#endif /* INCLUDED_haxe_crypto_mode_SIV */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/padding/AnsiX923.h b/Sources/c_borogove/iinclude/haxe/crypto/padding/AnsiX923.h
new file mode 100644
index 0000000..11ae283
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/padding/AnsiX923.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_padding_AnsiX923
+#define INCLUDED_haxe_crypto_padding_AnsiX923
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,padding,AnsiX923)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+
+class HXCPP_CLASS_ATTRIBUTES AnsiX923_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef AnsiX923_obj OBJ_;
+		AnsiX923_obj();
+
+	public:
+		enum { _hx_ClassId = 0x16ad6123 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.padding.AnsiX923")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.padding.AnsiX923"); }
+
+		inline static ::hx::ObjectPtr< AnsiX923_obj > __new() {
+			::hx::ObjectPtr< AnsiX923_obj > __this = new AnsiX923_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< AnsiX923_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			AnsiX923_obj *__this = (AnsiX923_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(AnsiX923_obj), false, "haxe.crypto.padding.AnsiX923"));
+			*(void **)__this = AnsiX923_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~AnsiX923_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("AnsiX923",45,9b,7b,0e); }
+
+		static  ::haxe::io::Bytes pad( ::haxe::io::Bytes ciphertext,int blockSize);
+		static ::Dynamic pad_dyn();
+
+		static  ::haxe::io::Bytes unpad( ::haxe::io::Bytes encrypt);
+		static ::Dynamic unpad_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
+
+#endif /* INCLUDED_haxe_crypto_padding_AnsiX923 */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/padding/BitPadding.h b/Sources/c_borogove/iinclude/haxe/crypto/padding/BitPadding.h
new file mode 100644
index 0000000..987b953
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/padding/BitPadding.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_padding_BitPadding
+#define INCLUDED_haxe_crypto_padding_BitPadding
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,padding,BitPadding)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+
+class HXCPP_CLASS_ATTRIBUTES BitPadding_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef BitPadding_obj OBJ_;
+		BitPadding_obj();
+
+	public:
+		enum { _hx_ClassId = 0x317f63e6 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.padding.BitPadding")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.padding.BitPadding"); }
+
+		inline static ::hx::ObjectPtr< BitPadding_obj > __new() {
+			::hx::ObjectPtr< BitPadding_obj > __this = new BitPadding_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< BitPadding_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			BitPadding_obj *__this = (BitPadding_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(BitPadding_obj), false, "haxe.crypto.padding.BitPadding"));
+			*(void **)__this = BitPadding_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~BitPadding_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("BitPadding",a4,30,e1,a0); }
+
+		static  ::haxe::io::Bytes pad( ::haxe::io::Bytes ciphertext,int blockSize);
+		static ::Dynamic pad_dyn();
+
+		static  ::haxe::io::Bytes unpad( ::haxe::io::Bytes encrypt);
+		static ::Dynamic unpad_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
+
+#endif /* INCLUDED_haxe_crypto_padding_BitPadding */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/padding/ISO10126.h b/Sources/c_borogove/iinclude/haxe/crypto/padding/ISO10126.h
new file mode 100644
index 0000000..9c2282b
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/padding/ISO10126.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_padding_ISO10126
+#define INCLUDED_haxe_crypto_padding_ISO10126
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,padding,ISO10126)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+
+class HXCPP_CLASS_ATTRIBUTES ISO10126_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef ISO10126_obj OBJ_;
+		ISO10126_obj();
+
+	public:
+		enum { _hx_ClassId = 0x5b3681fb };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.padding.ISO10126")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.padding.ISO10126"); }
+
+		inline static ::hx::ObjectPtr< ISO10126_obj > __new() {
+			::hx::ObjectPtr< ISO10126_obj > __this = new ISO10126_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< ISO10126_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			ISO10126_obj *__this = (ISO10126_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(ISO10126_obj), false, "haxe.crypto.padding.ISO10126"));
+			*(void **)__this = ISO10126_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~ISO10126_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("ISO10126",71,91,8b,b7); }
+
+		static  ::haxe::io::Bytes pad( ::haxe::io::Bytes ciphertext,int blockSize);
+		static ::Dynamic pad_dyn();
+
+		static  ::haxe::io::Bytes unpad( ::haxe::io::Bytes encrypt);
+		static ::Dynamic unpad_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
+
+#endif /* INCLUDED_haxe_crypto_padding_ISO10126 */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/padding/NoPadding.h b/Sources/c_borogove/iinclude/haxe/crypto/padding/NoPadding.h
new file mode 100644
index 0000000..a00f40e
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/padding/NoPadding.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_padding_NoPadding
+#define INCLUDED_haxe_crypto_padding_NoPadding
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,padding,NoPadding)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+
+class HXCPP_CLASS_ATTRIBUTES NoPadding_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef NoPadding_obj OBJ_;
+		NoPadding_obj();
+
+	public:
+		enum { _hx_ClassId = 0x422383a6 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.padding.NoPadding")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.padding.NoPadding"); }
+
+		inline static ::hx::ObjectPtr< NoPadding_obj > __new() {
+			::hx::ObjectPtr< NoPadding_obj > __this = new NoPadding_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< NoPadding_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			NoPadding_obj *__this = (NoPadding_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(NoPadding_obj), false, "haxe.crypto.padding.NoPadding"));
+			*(void **)__this = NoPadding_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~NoPadding_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("NoPadding",70,fb,3b,b0); }
+
+		static  ::haxe::io::Bytes pad( ::haxe::io::Bytes ciphertext,int blockSize);
+		static ::Dynamic pad_dyn();
+
+		static  ::haxe::io::Bytes unpad( ::haxe::io::Bytes encrypt);
+		static ::Dynamic unpad_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
+
+#endif /* INCLUDED_haxe_crypto_padding_NoPadding */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/padding/NullPadding.h b/Sources/c_borogove/iinclude/haxe/crypto/padding/NullPadding.h
new file mode 100644
index 0000000..363249e
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/padding/NullPadding.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_padding_NullPadding
+#define INCLUDED_haxe_crypto_padding_NullPadding
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,padding,NullPadding)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+
+class HXCPP_CLASS_ATTRIBUTES NullPadding_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef NullPadding_obj OBJ_;
+		NullPadding_obj();
+
+	public:
+		enum { _hx_ClassId = 0x63beeba0 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.padding.NullPadding")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.padding.NullPadding"); }
+
+		inline static ::hx::ObjectPtr< NullPadding_obj > __new() {
+			::hx::ObjectPtr< NullPadding_obj > __this = new NullPadding_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< NullPadding_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			NullPadding_obj *__this = (NullPadding_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(NullPadding_obj), false, "haxe.crypto.padding.NullPadding"));
+			*(void **)__this = NullPadding_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~NullPadding_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("NullPadding",ea,69,bc,e2); }
+
+		static  ::haxe::io::Bytes pad( ::haxe::io::Bytes ciphertext,int blockSize);
+		static ::Dynamic pad_dyn();
+
+		static  ::haxe::io::Bytes unpad( ::haxe::io::Bytes encrypt);
+		static ::Dynamic unpad_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
+
+#endif /* INCLUDED_haxe_crypto_padding_NullPadding */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/padding/PKCS7.h b/Sources/c_borogove/iinclude/haxe/crypto/padding/PKCS7.h
new file mode 100644
index 0000000..2118cda
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/padding/PKCS7.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_padding_PKCS7
+#define INCLUDED_haxe_crypto_padding_PKCS7
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,padding,PKCS7)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+
+class HXCPP_CLASS_ATTRIBUTES PKCS7_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef PKCS7_obj OBJ_;
+		PKCS7_obj();
+
+	public:
+		enum { _hx_ClassId = 0x15a0ad06 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.padding.PKCS7")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.padding.PKCS7"); }
+
+		inline static ::hx::ObjectPtr< PKCS7_obj > __new() {
+			::hx::ObjectPtr< PKCS7_obj > __this = new PKCS7_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< PKCS7_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			PKCS7_obj *__this = (PKCS7_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(PKCS7_obj), false, "haxe.crypto.padding.PKCS7"));
+			*(void **)__this = PKCS7_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~PKCS7_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("PKCS7",6c,88,d4,41); }
+
+		static  ::haxe::io::Bytes pad( ::haxe::io::Bytes ciphertext,int blockSize);
+		static ::Dynamic pad_dyn();
+
+		static  ::haxe::io::Bytes unpad( ::haxe::io::Bytes encrypt);
+		static ::Dynamic unpad_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
+
+#endif /* INCLUDED_haxe_crypto_padding_PKCS7 */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/padding/SpacePadding.h b/Sources/c_borogove/iinclude/haxe/crypto/padding/SpacePadding.h
new file mode 100644
index 0000000..0d2a9b5
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/padding/SpacePadding.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_padding_SpacePadding
+#define INCLUDED_haxe_crypto_padding_SpacePadding
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,padding,SpacePadding)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+
+class HXCPP_CLASS_ATTRIBUTES SpacePadding_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef SpacePadding_obj OBJ_;
+		SpacePadding_obj();
+
+	public:
+		enum { _hx_ClassId = 0x4ec10871 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.padding.SpacePadding")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.padding.SpacePadding"); }
+
+		inline static ::hx::ObjectPtr< SpacePadding_obj > __new() {
+			::hx::ObjectPtr< SpacePadding_obj > __this = new SpacePadding_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< SpacePadding_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			SpacePadding_obj *__this = (SpacePadding_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(SpacePadding_obj), false, "haxe.crypto.padding.SpacePadding"));
+			*(void **)__this = SpacePadding_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~SpacePadding_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("SpacePadding",cb,05,a8,50); }
+
+		static  ::haxe::io::Bytes pad( ::haxe::io::Bytes ciphertext,int blockSize);
+		static ::Dynamic pad_dyn();
+
+		static  ::haxe::io::Bytes unpad( ::haxe::io::Bytes encrypt);
+		static ::Dynamic unpad_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
+
+#endif /* INCLUDED_haxe_crypto_padding_SpacePadding */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/padding/TBC.h b/Sources/c_borogove/iinclude/haxe/crypto/padding/TBC.h
new file mode 100644
index 0000000..101c55a
--- /dev/null
+++ b/Sources/c_borogove/iinclude/haxe/crypto/padding/TBC.h
@@ -0,0 +1,68 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_haxe_crypto_padding_TBC
+#define INCLUDED_haxe_crypto_padding_TBC
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(haxe,crypto,padding,TBC)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+
+class HXCPP_CLASS_ATTRIBUTES TBC_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef TBC_obj OBJ_;
+		TBC_obj();
+
+	public:
+		enum { _hx_ClassId = 0x1629e12f };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="haxe.crypto.padding.TBC")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"haxe.crypto.padding.TBC"); }
+
+		inline static ::hx::ObjectPtr< TBC_obj > __new() {
+			::hx::ObjectPtr< TBC_obj > __this = new TBC_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< TBC_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			TBC_obj *__this = (TBC_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(TBC_obj), false, "haxe.crypto.padding.TBC"));
+			*(void **)__this = TBC_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~TBC_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("TBC",15,f7,3f,00); }
+
+		static  ::haxe::io::Bytes pad( ::haxe::io::Bytes ciphertext,int blockSize);
+		static ::Dynamic pad_dyn();
+
+		static  ::haxe::io::Bytes unpad( ::haxe::io::Bytes encrypt);
+		static ::Dynamic unpad_dyn();
+
+};
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
+
+#endif /* INCLUDED_haxe_crypto_padding_TBC */ 
diff --git a/Sources/c_borogove/iinclude/haxe/crypto/random/SecureRandom.h b/Sources/c_borogove/iinclude/haxe/crypto/random/SecureRandom.h
index ee9a36a..1217348 100644
--- a/Sources/c_borogove/iinclude/haxe/crypto/random/SecureRandom.h
+++ b/Sources/c_borogove/iinclude/haxe/crypto/random/SecureRandom.h
@@ -7,6 +7,7 @@
 #endif
 
 HX_DECLARE_CLASS3(haxe,crypto,random,SecureRandom)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
 
 namespace haxe{
 namespace crypto{
@@ -61,12 +62,21 @@ class HXCPP_CLASS_ATTRIBUTES SecureRandom_obj : public ::hx::Object
 		static int _hx_int();
 		static ::Dynamic _hx_int_dyn();
 
+		static  ::haxe::io::Bytes bytes(int length);
+		static ::Dynamic bytes_dyn();
+
 		static int sysInt();
 		static ::Dynamic sysInt_dyn();
 
+		static  ::haxe::io::Bytes sysBytes(int length);
+		static ::Dynamic sysBytes_dyn();
+
 		static int winInt();
 		static ::Dynamic winInt_dyn();
 
+		static  ::haxe::io::Bytes winBytes(int length);
+		static ::Dynamic winBytes_dyn();
+
 };
 
 } // end namespace haxe
diff --git a/Sources/c_borogove/iinclude/haxe/io/Input.h b/Sources/c_borogove/iinclude/haxe/io/Input.h
index 8e88cce..1348faa 100644
--- a/Sources/c_borogove/iinclude/haxe/io/Input.h
+++ b/Sources/c_borogove/iinclude/haxe/io/Input.h
@@ -70,6 +70,9 @@ class HXCPP_CLASS_ATTRIBUTES Input_obj : public ::hx::Object
 		 ::haxe::io::Bytes readAll( ::Dynamic bufsize);
 		::Dynamic readAll_dyn();
 
+		 ::haxe::io::Bytes read(int nbytes);
+		::Dynamic read_dyn();
+
 		int readInt32();
 		::Dynamic readInt32_dyn();
 
diff --git a/Sources/c_borogove/iinclude/haxe/io/Output.h b/Sources/c_borogove/iinclude/haxe/io/Output.h
index 7fc6dc3..b3ae8e6 100644
--- a/Sources/c_borogove/iinclude/haxe/io/Output.h
+++ b/Sources/c_borogove/iinclude/haxe/io/Output.h
@@ -62,9 +62,6 @@ class HXCPP_CLASS_ATTRIBUTES Output_obj : public ::hx::Object
 		virtual void close();
 		::Dynamic close_dyn();
 
-		void write( ::haxe::io::Bytes s);
-		::Dynamic write_dyn();
-
 		void writeFullBytes( ::haxe::io::Bytes s,int pos,int len);
 		::Dynamic writeFullBytes_dyn();
 
diff --git a/Sources/c_borogove/iinclude/haxe/io/Path.h b/Sources/c_borogove/iinclude/haxe/io/Path.h
index c3b75d8..275f648 100644
--- a/Sources/c_borogove/iinclude/haxe/io/Path.h
+++ b/Sources/c_borogove/iinclude/haxe/io/Path.h
@@ -48,6 +48,9 @@ class HXCPP_CLASS_ATTRIBUTES Path_obj : public ::hx::Object
 		static ::String withoutDirectory(::String path);
 		static ::Dynamic withoutDirectory_dyn();
 
+		static ::String extension(::String path);
+		static ::Dynamic extension_dyn();
+
 		static ::String join(::Array< ::String > paths);
 		static ::Dynamic join_dyn();
 
diff --git a/Sources/c_borogove/iinclude/hx/Anon.h b/Sources/c_borogove/iinclude/hx/Anon.h
index f41e2ee..7de5544 100644
--- a/Sources/c_borogove/iinclude/hx/Anon.h
+++ b/Sources/c_borogove/iinclude/hx/Anon.h
@@ -114,26 +114,26 @@ public:
    void operator delete( void *, int) { }
 
 
-   hx::Val __Field(const String &inString ,hx::PropertyAccess inCallProp);
-   bool __HasField(const String &inString);
-   hx::Val __SetField(const String &inString,const hx::Val &inValue ,hx::PropertyAccess inCallProp);
-   virtual void __GetFields(Array<String> &outFields);
-   Dynamic *__GetFieldMap() { return &mFields; }
+   hx::Val __Field(const String &inString ,hx::PropertyAccess inCallProp) HXCPP_OVERRIDE;
+   bool __HasField(const String &inString) HXCPP_OVERRIDE;
+   hx::Val __SetField(const String &inString,const hx::Val &inValue ,hx::PropertyAccess inCallProp) HXCPP_OVERRIDE;
+   void __GetFields(Array<String> &outFields) HXCPP_OVERRIDE;
+   Dynamic *__GetFieldMap() HXCPP_OVERRIDE { return &mFields; }
 
-   virtual int __GetType() const { return vtObject; }
+   int __GetType() const HXCPP_OVERRIDE { return vtObject; }
 
    hx::Anon_obj *Add(const String &inName,const Dynamic &inValue,bool inSetThisPointer=true);
-   void __Mark(hx::MarkContext *__inCtx);
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE;
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx);
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE;
    #endif
 
-   String __ToString() const;
-   String toString();
+   String __ToString() const HXCPP_OVERRIDE;
+   String toString() HXCPP_OVERRIDE;
 
    static hx::ObjectPtr<hx::Class_obj> __mClass; \
    static hx::ObjectPtr<hx::Class_obj> &__SGetClass() { return __mClass; }
-   hx::ObjectPtr<hx::Class_obj > __GetClass() const { return __mClass; }
+   hx::ObjectPtr<hx::Class_obj > __GetClass() const HXCPP_OVERRIDE { return __mClass; }
 
    bool __Remove(String inKey);
 };
@@ -227,7 +227,7 @@ public:
       }
       return result;
    }
-   hx::Val __Field(const String &inField, hx::PropertyAccess)
+   hx::Val __Field(const String &inField, hx::PropertyAccess) HXCPP_OVERRIDE
    {
       if (inField.__s==name0.__s) return t0;
       if (inField.__s==name1.__s) return t1;
@@ -241,7 +241,7 @@ public:
       if (HX_QSTR_EQ_AE(inField,name1)) return t1;
       return null();
    }
-   hx::Val __SetField(const String &inField,const hx::Val &inValue, hx::PropertyAccess inCallProp)
+   hx::Val __SetField(const String &inField,const hx::Val &inValue, hx::PropertyAccess inCallProp) HXCPP_OVERRIDE
    {
       if (inField.__s==name0.__s) {
         t0 = inValue.Cast< _hx_T0 >();
@@ -276,26 +276,26 @@ public:
       return inValue;
    }
 
-   void __Mark(hx::MarkContext *__inCtx)
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_MARK_MEMBER(t0);
       HX_MARK_MEMBER(t1);
    }
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx)
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_VISIT_MEMBER(t0);
       HX_VISIT_MEMBER(t1);
    }
    #endif
 
-    void __GetFields(Array<String> &outFields)
+    void __GetFields(Array<String> &outFields) HXCPP_OVERRIDE
     {
        outFields->push(name0);
        outFields->push(name1);
     }
 
-   String toString() { return StringFromAnonFields(this); }
+   String toString() HXCPP_OVERRIDE { return StringFromAnonFields(this); }
 
 };
 
@@ -330,7 +330,7 @@ public:
       }
       return result;
    }
-   hx::Val __Field(const String &inField, hx::PropertyAccess)
+   hx::Val __Field(const String &inField, hx::PropertyAccess) HXCPP_OVERRIDE
    {
       if (inField.__s==name0.__s) return t0;
       if (inField.__s==name1.__s) return t1;
@@ -344,7 +344,7 @@ public:
       if (HX_QSTR_EQ_AE(inField,name2)) return t2;
       return null();
    }
-   hx::Val __SetField(const String &inField,const hx::Val &inValue, hx::PropertyAccess inCallProp)
+   hx::Val __SetField(const String &inField,const hx::Val &inValue, hx::PropertyAccess inCallProp) HXCPP_OVERRIDE
    {
       if (inField.__s==name0.__s) {
         t0 = inValue.Cast< _hx_T0 >();
@@ -394,14 +394,14 @@ public:
       return inValue;
    }
 
-   void __Mark(hx::MarkContext *__inCtx)
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_MARK_MEMBER(t0);
       HX_MARK_MEMBER(t1);
       HX_MARK_MEMBER(t2);
    }
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx)
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_VISIT_MEMBER(t0);
       HX_VISIT_MEMBER(t1);
@@ -409,14 +409,14 @@ public:
    }
    #endif
 
-    void __GetFields(Array<String> &outFields)
+    void __GetFields(Array<String> &outFields) HXCPP_OVERRIDE
     {
        outFields->push(name0);
        outFields->push(name1);
        outFields->push(name2);
     }
 
-   String toString() { return StringFromAnonFields(this); }
+   String toString() HXCPP_OVERRIDE { return StringFromAnonFields(this); }
 };
 
 
@@ -516,7 +516,7 @@ public:
         t1 = inValue.Cast< _hx_T1 >();
         if (hx::ContainsPointers<_hx_T1>()) {
           HX_OBJ_WB_GET(this, hx::PointerOf(t1));
-        }  
+        }
         return inValue;
       }
       if (HX_QSTR_EQ(inField,name2)) {
diff --git a/Sources/c_borogove/iinclude/hx/CFFILoader.h b/Sources/c_borogove/iinclude/hx/CFFILoader.h
index ed95f1f..eca1e0a 100644
--- a/Sources/c_borogove/iinclude/hx/CFFILoader.h
+++ b/Sources/c_borogove/iinclude/hx/CFFILoader.h
@@ -127,7 +127,7 @@ extern "C" ret name def_args;
    struct DynAlloc : public hx::IStringAlloc
    {
       #define WANT_DYNALLOC_ALLOC_BYTES
-      void *allocBytes(size_t n);
+      void *allocBytes(size_t n) HXCPP_OVERRIDE;
    };
 
 
diff --git a/Sources/c_borogove/iinclude/hx/CFFIPrime.h b/Sources/c_borogove/iinclude/hx/CFFIPrime.h
index 2e597fd..88481f8 100644
--- a/Sources/c_borogove/iinclude/hx/CFFIPrime.h
+++ b/Sources/c_borogove/iinclude/hx/CFFIPrime.h
@@ -542,247 +542,252 @@ struct AutoValue
 
 #elif defined(STATIC_LINK)
 
+#if defined(HXCPP_STATIC_CFFI) || defined(HXCPP_NO_PRIME_EXPORT)
+#define PRIME_EXPORT
+#else
+#define PRIME_EXPORT EXPORT
+#endif
 
 #define DEFINE_PRIME0(func) extern "C" { \
-  EXPORT value func##__prime(const char *inSig) { \
+  PRIME_EXPORT value func##__prime(const char *inSig) { \
      if (!cffi::CheckSig0(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap() { return cffi::ToValue( func() ); } \
-  EXPORT void *func##__0() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__0() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__0",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME0v(func) extern "C" { \
-  EXPORT value func##__prime(const char *inSig) { \
+  PRIME_EXPORT value func##__prime(const char *inSig) { \
      if (!cffi::CheckSig0(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap() { func(); return alloc_null(); } \
-  EXPORT void *func##__0() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__0() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__0",(void *)(&func##__wrap)); \
 }
 
 
 #define DEFINE_PRIME1(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig1(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(PRIME_ARG_DECL1) { return cffi::ToValue( func(PRIME_ARG_LIST1) ); } \
-  EXPORT void *func##__1() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__1() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__1",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME1v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig1(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(PRIME_ARG_DECL1) { func(PRIME_ARG_LIST1); return alloc_null(); } \
-  EXPORT void *func##__1() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__1() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__1",(void *)(&func##__wrap)); \
 }
 
 
 #define DEFINE_PRIME2(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig2(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(PRIME_ARG_DECL2) { return cffi::ToValue( func(PRIME_ARG_LIST2) ); } \
-  EXPORT void *func##__2() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__2() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__2",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME2v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig2(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(PRIME_ARG_DECL2) { func(PRIME_ARG_LIST2); return alloc_null(); } \
-  EXPORT void *func##__2() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__2() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__2",(void *)(&func##__wrap)); \
 }
 
 
 #define DEFINE_PRIME3(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig3(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(PRIME_ARG_DECL3) { return cffi::ToValue( func(PRIME_ARG_LIST3) ); } \
-  EXPORT void *func##__3() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__3() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__3",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME3v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig3(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(PRIME_ARG_DECL3) { func(PRIME_ARG_LIST3); return alloc_null(); } \
-  EXPORT void *func##__3() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__3() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__3",(void *)(&func##__wrap)); \
 }
 
 
 #define DEFINE_PRIME4(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig4(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(PRIME_ARG_DECL4) { return cffi::ToValue( func(PRIME_ARG_LIST4) ); } \
-  EXPORT void *func##__4() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__4() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__4",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME4v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig4(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(PRIME_ARG_DECL4) { func(PRIME_ARG_LIST4); return alloc_null(); } \
-  EXPORT void *func##__4() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__4() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__4",(void *)(&func##__wrap)); \
 }
 
 
 #define DEFINE_PRIME5(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig5(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(PRIME_ARG_DECL5) { return cffi::ToValue( func(PRIME_ARG_LIST5) ); } \
-  EXPORT void *func##__5() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__5() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__5",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME5v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig5(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(PRIME_ARG_DECL5) { func(PRIME_ARG_LIST5); return alloc_null(); } \
-  EXPORT void *func##__5() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__5() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__5",(void *)(&func##__wrap)); \
 }
 
 
 #define DEFINE_PRIME6(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig6(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg,int) { return cffi::ToValue( func(PRIME_ARG_LIST6) ); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME6v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig6(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg, int) { func(PRIME_ARG_LIST6); return alloc_null(); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 
 #define DEFINE_PRIME7(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig7(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg,int) { return cffi::ToValue( func(PRIME_ARG_LIST7) ); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME7v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig7(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg, int) { func(PRIME_ARG_LIST7); return alloc_null(); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME8(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig8(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg,int) { return cffi::ToValue( func(PRIME_ARG_LIST8) ); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME8v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig8(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg, int) { func(PRIME_ARG_LIST8); return alloc_null(); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 
 #define DEFINE_PRIME9(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig9(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg,int) { return cffi::ToValue( func(PRIME_ARG_LIST9) ); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME9v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig9(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg, int) { func(PRIME_ARG_LIST9); return alloc_null(); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME10(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig10(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg,int) { return cffi::ToValue( func(PRIME_ARG_LIST10) ); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME10v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig10(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg, int) { func(PRIME_ARG_LIST10); return alloc_null(); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 
 #define DEFINE_PRIME11(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig11(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg,int) { return cffi::ToValue( func(PRIME_ARG_LIST11) ); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME11v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig11(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg, int) { func(PRIME_ARG_LIST11); return alloc_null(); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 
 #define DEFINE_PRIME12(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig12(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg,int) { return cffi::ToValue( func(PRIME_ARG_LIST12) ); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME12v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig12(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg, int) { func(PRIME_ARG_LIST12); return alloc_null(); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
@@ -790,38 +795,38 @@ struct AutoValue
 
 
 #define DEFINE_PRIME13(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig13(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg,int) { return cffi::ToValue( func(PRIME_ARG_LIST13) ); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME13v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig13(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg, int) { func(PRIME_ARG_LIST13); return alloc_null(); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 
 #define DEFINE_PRIME14(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig14(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg,int) { return cffi::ToValue( func(PRIME_ARG_LIST14) ); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME14v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig14(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg, int) { func(PRIME_ARG_LIST14); return alloc_null(); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
@@ -829,19 +834,19 @@ struct AutoValue
 
 
 #define DEFINE_PRIME15(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig15(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg,int) { return cffi::ToValue( func(PRIME_ARG_LIST15) ); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
 
 #define DEFINE_PRIME15v(func) extern "C" { \
-  EXPORT void *func##__prime(const char *inSig) { \
+  PRIME_EXPORT void *func##__prime(const char *inSig) { \
      if (!cffi::CheckSig15(func,inSig)) return 0; return cffi::alloc_pointer((void*)&func); } \
   value func##__wrap(cffi::AutoValue  *arg, int) { func(PRIME_ARG_LIST15); return alloc_null(); } \
-  EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
+  PRIME_EXPORT void *func##__MULT() { return (void*)(&func##__wrap); } \
   int __reg_##func##__prime = hx_register_prim(#func "__prime",(void *)(&func##__prime)); \
   int __reg_##func = hx_register_prim(#func "__MULT",(void *)(&func##__wrap)); \
 }
diff --git a/Sources/c_borogove/iinclude/hx/Class.h b/Sources/c_borogove/iinclude/hx/Class.h
index adaed2e..1514fcc 100644
--- a/Sources/c_borogove/iinclude/hx/Class.h
+++ b/Sources/c_borogove/iinclude/hx/Class.h
@@ -125,7 +125,7 @@ public:
              #endif
              );
 
-   String __ToString() const;
+   String __ToString() const HXCPP_OVERRIDE;
 
    void MarkStatics(hx::MarkContext *__inCtx);
 
@@ -136,22 +136,22 @@ public:
    static ::Array< ::String > dupFunctions(String inStatics[]);
 
    // the "Class class"
-   hx::Class              __GetClass() const;
+   hx::Class              __GetClass() const HXCPP_OVERRIDE;
    static hx::Class      & __SGetClass();
 	static void       __boot();
 
-   hx::Val __Field(const String &inString ,hx::PropertyAccess inCallProp);
+   hx::Val __Field(const String &inString,hx::PropertyAccess inCallProp) HXCPP_OVERRIDE;
 
-   hx::Val __SetField(const String &inString,const hx::Val &inValue ,hx::PropertyAccess inCallProp);
+   hx::Val __SetField(const String &inString,const hx::Val &inValue ,hx::PropertyAccess inCallProp) HXCPP_OVERRIDE;
 
-   bool __HasField(const String &inString);
+   bool __HasField(const String &inString) HXCPP_OVERRIDE;
 
    virtual Dynamic ConstructEmpty();
    virtual Dynamic ConstructArgs(hx::DynamicArray inArgs);
    virtual Dynamic ConstructEnum(String inName,hx::DynamicArray inArgs);
    virtual bool VCanCast(hx::Object *inPtr) { return false; }
 
-   int __GetType() const { return vtObject; }
+   int __GetType() const HXCPP_OVERRIDE { return vtObject; }
 
    virtual bool __IsEnum();
 
@@ -283,7 +283,7 @@ HXCPP_EXTERN_CLASS_ATTRIBUTES void RegisterVTableOffset(int inOffset);
 { \
    CLASS *dummy = (CLASS *)0; \
    INTERFACE *intf = dummy; \
-   hx::RegisterVTableOffset( (int)( (size_t)((char *)intf - (char *)dummy)) ); \
+   ::hx::RegisterVTableOffset( (int)( (size_t)((char *)intf - (char *)dummy)) ); \
 }
 
 
diff --git a/Sources/c_borogove/iinclude/hx/Debug.h b/Sources/c_borogove/iinclude/hx/Debug.h
index 1e0ee22..903468f 100644
--- a/Sources/c_borogove/iinclude/hx/Debug.h
+++ b/Sources/c_borogove/iinclude/hx/Debug.h
@@ -216,6 +216,11 @@ private:
     bool (*mTestFunction)(Dynamic e);
 };
 
+#if defined(HXCPP_SCRIPTABLE) && (HXCPP_API_LEVEL >= 500)
+// This is the function to call when a new script has been loaded.
+// Signature: Void -> Void
+extern Dynamic g_onScriptLoadedFunction;
+#endif
 
 
 #endif // HXCPP_DEBUGGER
@@ -298,6 +303,9 @@ void __hxcpp_dbg_setNewStackFrameFunction(Dynamic function);
 void __hxcpp_dbg_setNewThreadInfoFunction(Dynamic function);
 void __hxcpp_dbg_setAddParameterToStackFrameFunction(Dynamic function);
 void __hxcpp_dbg_setAddStackFrameToThreadInfoFunction(Dynamic function);
+#if defined(HXCPP_SCRIPTABLE) && (HXCPP_API_LEVEL >= 500)
+void __hxcpp_dbg_setOnScriptLoadedFunction(Dynamic function);
+#endif
 
 bool __hxcpp_dbg_fix_critical_error(String inErr);
 
@@ -351,6 +359,9 @@ inline void __hxcpp_dbg_setNewStackFrameFunction(Dynamic) { }
 inline void __hxcpp_dbg_setNewThreadInfoFunction(Dynamic) { }
 inline void __hxcpp_dbg_setAddParameterToStackFrameFunction(Dynamic) { }
 inline void __hxcpp_dbg_setAddStackFrameToThreadInfoFunction(Dynamic) { }
+#if defined(HXCPP_SCRIPTABLE) && (HXCPP_API_LEVEL >= 500)
+inline void __hxcpp_dbg_setOnScriptLoadedFunction(Dynamic) { }
+#endif
 
 // The following functions are called by Thread.cpp to notify of thread
 // created and terminated
diff --git a/Sources/c_borogove/iinclude/hx/DynamicImpl.h b/Sources/c_borogove/iinclude/hx/DynamicImpl.h
index 7661253..b10f40f 100644
--- a/Sources/c_borogove/iinclude/hx/DynamicImpl.h
+++ b/Sources/c_borogove/iinclude/hx/DynamicImpl.h
@@ -26,7 +26,7 @@ struct CMemberFunction0 : public hx::Object
       mThis = inObj;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CMemberFunction0 *other = dynamic_cast<const CMemberFunction0 *>(inRHS);
       if (!other)
@@ -34,26 +34,28 @@ struct CMemberFunction0 : public hx::Object
       return (mName==other->mName && mFunction==other->mFunction && mThis.GetPtr()==other->mThis.GetPtr())? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 0; } 
-   ::String __ToString() const{ return String(mName); } 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction0.this"); } 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 0; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction0.this"); } 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mThis); } 
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(mThis); } 
    #endif
-   void *__GetHandle() const { return mThis.GetPtr(); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   void *__GetHandle() const HXCPP_OVERRIDE { return mThis.GetPtr(); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr());
       
    } 
-   Dynamic __run() 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run() HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr());
       
    } 
+#endif
 }; 
 
 
@@ -71,7 +73,7 @@ struct CStaticFunction0 : public hx::Object
       mName = inName;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CStaticFunction0 *other = dynamic_cast<const CStaticFunction0 *>(inRHS);
       if (!other)
@@ -79,17 +81,19 @@ struct CStaticFunction0 : public hx::Object
       return mName==other->mName && mFunction==other->mFunction && mName==other->mName ? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 0; } 
-   ::String __ToString() const{ return String(mName); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 0; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       return mFunction();
    } 
-   Dynamic __run() 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run() HXCPP_OVERRIDE
    { 
       return mFunction();
    } 
+#endif
 }; 
 
 
@@ -123,7 +127,7 @@ struct CMemberFunction1 : public hx::Object
       mThis = inObj;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CMemberFunction1 *other = dynamic_cast<const CMemberFunction1 *>(inRHS);
       if (!other)
@@ -131,26 +135,28 @@ struct CMemberFunction1 : public hx::Object
       return (mName==other->mName && mFunction==other->mFunction && mThis.GetPtr()==other->mThis.GetPtr())? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 1; } 
-   ::String __ToString() const{ return String(mName); } 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction1.this"); } 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 1; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction1.this"); } 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mThis); } 
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(mThis); } 
    #endif
-   void *__GetHandle() const { return mThis.GetPtr(); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   void *__GetHandle() const HXCPP_OVERRIDE { return mThis.GetPtr(); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr(), inArgs[0]);
       
    } 
-   Dynamic __run(const Dynamic &inArg0) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(const ::Dynamic &inArg0) HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr(), inArg0);
       
    } 
+#endif
 }; 
 
 
@@ -168,7 +174,7 @@ struct CStaticFunction1 : public hx::Object
       mName = inName;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CStaticFunction1 *other = dynamic_cast<const CStaticFunction1 *>(inRHS);
       if (!other)
@@ -176,17 +182,19 @@ struct CStaticFunction1 : public hx::Object
       return mName==other->mName && mFunction==other->mFunction && mName==other->mName ? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 1; } 
-   ::String __ToString() const{ return String(mName); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 1; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       return mFunction(inArgs[0]);
    } 
-   Dynamic __run(const Dynamic &inArg0) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(const ::Dynamic &inArg0) HXCPP_OVERRIDE
    { 
       return mFunction(inArg0);
    } 
+#endif
 }; 
 
 
@@ -220,7 +228,7 @@ struct CMemberFunction2 : public hx::Object
       mThis = inObj;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CMemberFunction2 *other = dynamic_cast<const CMemberFunction2 *>(inRHS);
       if (!other)
@@ -228,26 +236,28 @@ struct CMemberFunction2 : public hx::Object
       return (mName==other->mName && mFunction==other->mFunction && mThis.GetPtr()==other->mThis.GetPtr())? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 2; } 
-   ::String __ToString() const{ return String(mName); } 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction2.this"); } 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 2; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction2.this"); } 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mThis); } 
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(mThis); } 
    #endif
-   void *__GetHandle() const { return mThis.GetPtr(); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   void *__GetHandle() const HXCPP_OVERRIDE { return mThis.GetPtr(); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr(), inArgs[0],inArgs[1]);
       
    } 
-   Dynamic __run(const Dynamic &inArg0,const Dynamic &inArg1) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(const ::Dynamic &inArg0,const ::Dynamic &inArg1) HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr(), inArg0,inArg1);
       
    } 
+#endif
 }; 
 
 
@@ -265,7 +275,7 @@ struct CStaticFunction2 : public hx::Object
       mName = inName;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CStaticFunction2 *other = dynamic_cast<const CStaticFunction2 *>(inRHS);
       if (!other)
@@ -273,17 +283,19 @@ struct CStaticFunction2 : public hx::Object
       return mName==other->mName && mFunction==other->mFunction && mName==other->mName ? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 2; } 
-   ::String __ToString() const{ return String(mName); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 2; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       return mFunction(inArgs[0],inArgs[1]);
    } 
-   Dynamic __run(const Dynamic &inArg0,const Dynamic &inArg1) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(const ::Dynamic &inArg0,const ::Dynamic &inArg1) HXCPP_OVERRIDE
    { 
       return mFunction(inArg0,inArg1);
    } 
+#endif
 }; 
 
 
@@ -317,7 +329,7 @@ struct CMemberFunction3 : public hx::Object
       mThis = inObj;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CMemberFunction3 *other = dynamic_cast<const CMemberFunction3 *>(inRHS);
       if (!other)
@@ -325,26 +337,28 @@ struct CMemberFunction3 : public hx::Object
       return (mName==other->mName && mFunction==other->mFunction && mThis.GetPtr()==other->mThis.GetPtr())? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 3; } 
-   ::String __ToString() const{ return String(mName); } 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction3.this"); } 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 3; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction3.this"); } 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mThis); } 
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(mThis); } 
    #endif
-   void *__GetHandle() const { return mThis.GetPtr(); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   void *__GetHandle() const HXCPP_OVERRIDE { return mThis.GetPtr(); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr(), inArgs[0],inArgs[1],inArgs[2]);
       
    } 
-   Dynamic __run(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2) HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr(), inArg0,inArg1,inArg2);
       
    } 
+#endif
 }; 
 
 
@@ -362,7 +376,7 @@ struct CStaticFunction3 : public hx::Object
       mName = inName;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CStaticFunction3 *other = dynamic_cast<const CStaticFunction3 *>(inRHS);
       if (!other)
@@ -370,17 +384,19 @@ struct CStaticFunction3 : public hx::Object
       return mName==other->mName && mFunction==other->mFunction && mName==other->mName ? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 3; } 
-   ::String __ToString() const{ return String(mName); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 3; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       return mFunction(inArgs[0],inArgs[1],inArgs[2]);
    } 
-   Dynamic __run(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2) HXCPP_OVERRIDE
    { 
       return mFunction(inArg0,inArg1,inArg2);
    } 
+#endif
 }; 
 
 
@@ -414,7 +430,7 @@ struct CMemberFunction4 : public hx::Object
       mThis = inObj;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CMemberFunction4 *other = dynamic_cast<const CMemberFunction4 *>(inRHS);
       if (!other)
@@ -422,26 +438,28 @@ struct CMemberFunction4 : public hx::Object
       return (mName==other->mName && mFunction==other->mFunction && mThis.GetPtr()==other->mThis.GetPtr())? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 4; } 
-   ::String __ToString() const{ return String(mName); } 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction4.this"); } 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 4; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction4.this"); } 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mThis); } 
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(mThis); } 
    #endif
-   void *__GetHandle() const { return mThis.GetPtr(); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   void *__GetHandle() const HXCPP_OVERRIDE { return mThis.GetPtr(); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr(), inArgs[0],inArgs[1],inArgs[2],inArgs[3]);
       
    } 
-   Dynamic __run(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3) HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr(), inArg0,inArg1,inArg2,inArg3);
       
    } 
+#endif
 }; 
 
 
@@ -459,7 +477,7 @@ struct CStaticFunction4 : public hx::Object
       mName = inName;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CStaticFunction4 *other = dynamic_cast<const CStaticFunction4 *>(inRHS);
       if (!other)
@@ -467,17 +485,19 @@ struct CStaticFunction4 : public hx::Object
       return mName==other->mName && mFunction==other->mFunction && mName==other->mName ? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 4; } 
-   ::String __ToString() const{ return String(mName); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 4; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       return mFunction(inArgs[0],inArgs[1],inArgs[2],inArgs[3]);
    } 
-   Dynamic __run(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3) HXCPP_OVERRIDE
    { 
       return mFunction(inArg0,inArg1,inArg2,inArg3);
    } 
+#endif
 }; 
 
 
@@ -511,7 +531,7 @@ struct CMemberFunction5 : public hx::Object
       mThis = inObj;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CMemberFunction5 *other = dynamic_cast<const CMemberFunction5 *>(inRHS);
       if (!other)
@@ -519,26 +539,28 @@ struct CMemberFunction5 : public hx::Object
       return (mName==other->mName && mFunction==other->mFunction && mThis.GetPtr()==other->mThis.GetPtr())? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 5; } 
-   ::String __ToString() const{ return String(mName); } 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction5.this"); } 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 5; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction5.this"); } 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mThis); } 
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(mThis); } 
    #endif
-   void *__GetHandle() const { return mThis.GetPtr(); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   void *__GetHandle() const HXCPP_OVERRIDE { return mThis.GetPtr(); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr(), inArgs[0],inArgs[1],inArgs[2],inArgs[3],inArgs[4]);
       
    } 
-   Dynamic __run(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4) HXCPP_OVERRIDE
    { 
       
       return mFunction(mThis.GetPtr(), inArg0,inArg1,inArg2,inArg3,inArg4);
       
    } 
+#endif
 }; 
 
 
@@ -556,7 +578,7 @@ struct CStaticFunction5 : public hx::Object
       mName = inName;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CStaticFunction5 *other = dynamic_cast<const CStaticFunction5 *>(inRHS);
       if (!other)
@@ -564,17 +586,19 @@ struct CStaticFunction5 : public hx::Object
       return mName==other->mName && mFunction==other->mFunction && mName==other->mName ? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return 5; } 
-   ::String __ToString() const{ return String(mName); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return 5; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       return mFunction(inArgs[0],inArgs[1],inArgs[2],inArgs[3],inArgs[4]);
    } 
-   Dynamic __run(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4) HXCPP_OVERRIDE
    { 
       return mFunction(inArg0,inArg1,inArg2,inArg3,inArg4);
    } 
+#endif
 }; 
 
 
@@ -590,7 +614,9 @@ Dynamic CreateStaticFunction5(const char *inName,StaticFunction5 inFunc)
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(6)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5));
@@ -598,17 +624,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(6)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(7)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6));
@@ -616,17 +645,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(7)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(8)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7));
@@ -634,17 +666,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(8)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(9)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8));
@@ -652,17 +687,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(9)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(10)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9));
@@ -670,17 +708,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(10)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(11)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10));
@@ -688,17 +729,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(11)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(12)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11));
@@ -706,17 +750,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(12)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(13)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12));
@@ -724,17 +771,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(13)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(14)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13));
@@ -742,17 +792,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(14)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(15)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14));
@@ -760,17 +813,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(15)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(16)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15));
@@ -778,17 +834,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(16)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(17)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16));
@@ -796,17 +855,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(17)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(18)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17));
@@ -814,17 +876,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(18)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(19)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18));
@@ -832,17 +897,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(19)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(20)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19));
@@ -850,17 +918,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(20)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(21)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20));
@@ -868,17 +939,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(21)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(22)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20)->init(21,inArg21));
@@ -886,17 +960,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(22)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20)->init(21,inArg21));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(23)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20)->init(21,inArg21)->init(22,inArg22));
@@ -904,17 +981,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(23)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20)->init(21,inArg21)->init(22,inArg22));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(24)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20)->init(21,inArg21)->init(22,inArg22)->init(23,inArg23));
@@ -922,17 +1002,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(24)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20)->init(21,inArg21)->init(22,inArg22)->init(23,inArg23));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23,const Dynamic &inArg24)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23,const ::Dynamic &inArg24)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(25)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20)->init(21,inArg21)->init(22,inArg22)->init(23,inArg23)->init(24,inArg24));
@@ -940,17 +1023,20 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23,const Dynamic &inArg24)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23,const ::Dynamic &inArg24)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(25)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20)->init(21,inArg21)->init(22,inArg22)->init(23,inArg23)->init(24,inArg24));
 }
 }
 
+#endif
 
 
  
-Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23,const Dynamic &inArg24,const Dynamic &inArg25)
+
+#if (HXCPP_API_LEVEL<500)
+Dynamic Dynamic::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23,const ::Dynamic &inArg24,const ::Dynamic &inArg25)
 {
    CheckFPtr();
    return mPtr->__Run(Array_obj<Dynamic>::__new(26)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20)->init(21,inArg21)->init(22,inArg22)->init(23,inArg23)->init(24,inArg24)->init(25,inArg25));
@@ -958,13 +1044,14 @@ Dynamic Dynamic::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dy
 
 namespace cpp
 {
-::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23,const Dynamic &inArg24,const Dynamic &inArg25)
+::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23,const ::Dynamic &inArg24,const ::Dynamic &inArg25)
 {
    if (isNull()) Dynamic::ThrowBadFunctionError();
    return valObject->__Run(Array_obj<Dynamic>::__new(26)->init(0,inArg0)->init(1,inArg1)->init(2,inArg2)->init(3,inArg3)->init(4,inArg4)->init(5,inArg5)->init(6,inArg6)->init(7,inArg7)->init(8,inArg8)->init(9,inArg9)->init(10,inArg10)->init(11,inArg11)->init(12,inArg12)->init(13,inArg13)->init(14,inArg14)->init(15,inArg15)->init(16,inArg16)->init(17,inArg17)->init(18,inArg18)->init(19,inArg19)->init(20,inArg20)->init(21,inArg21)->init(22,inArg22)->init(23,inArg23)->init(24,inArg24)->init(25,inArg25));
 }
 }
 
+#endif
 
 
 
@@ -991,7 +1078,7 @@ struct CMemberFunctionVar : public hx::Object
       mName = inName;
       N = inN;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CMemberFunctionVar *other = dynamic_cast<const CMemberFunctionVar *>(inRHS);
       if (!other)
@@ -1000,15 +1087,15 @@ struct CMemberFunctionVar : public hx::Object
    }
 
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return N; } 
-   ::String __ToString() const{ return String(mName); } 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER_NAME(mThis,"CMemberFunctionVar.this"); } 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return N; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER_NAME(mThis,"CMemberFunctionVar.this"); } 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mThis); } 
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(mThis); } 
    #endif
-   void *__GetHandle() const { return mThis.GetPtr(); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   void *__GetHandle() const HXCPP_OVERRIDE { return mThis.GetPtr(); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       return mFunction(mThis.GetPtr(), inArgs);
    } 
@@ -1030,7 +1117,7 @@ struct CStaticFunctionVar : public hx::Object
       mName = inName;
       N = inN;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CStaticFunctionVar *other = dynamic_cast<const CStaticFunctionVar *>(inRHS);
       if (!other)
@@ -1039,10 +1126,10 @@ struct CStaticFunctionVar : public hx::Object
    }
 
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return N; } 
-   ::String __ToString() const { return String(mName); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return N; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       return mFunction(inArgs);
    } 
diff --git a/Sources/c_borogove/iinclude/hx/DynamicImpl.tpl b/Sources/c_borogove/iinclude/hx/DynamicImpl.tpl
index ae0e380..c2f07a3 100644
--- a/Sources/c_borogove/iinclude/hx/DynamicImpl.tpl
+++ b/Sources/c_borogove/iinclude/hx/DynamicImpl.tpl
@@ -1,5 +1,7 @@
 
 ::foreach PARAMS:: ::if (ARG>=6)::
+
+#if (HXCPP_API_LEVEL<500)
 Dynamic Dynamic::NS::operator()(::DYNAMIC_ARG_LIST::)
 {
    CheckFPtr();
@@ -15,6 +17,7 @@ namespace cpp
 }
 }
 
+#endif
 
 ::else::
 
@@ -35,7 +38,7 @@ struct CMemberFunction::ARG:: : public hx::Object
       mThis = inObj;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CMemberFunction::ARG:: *other = dynamic_cast<const CMemberFunction::ARG:: *>(inRHS);
       if (!other)
@@ -43,15 +46,15 @@ struct CMemberFunction::ARG:: : public hx::Object
       return (mName==other->mName && mFunction==other->mFunction && mThis.GetPtr()==other->mThis.GetPtr())? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return ::ARG::; } 
-   ::String __ToString() const{ return String(mName); } 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction::ARG::.this"); } 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return ::ARG::; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER_NAME(mThis,"CMemberFunction::ARG::.this"); } 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mThis); } 
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(mThis); } 
    #endif
-   void *__GetHandle() const { return mThis.GetPtr(); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   void *__GetHandle() const HXCPP_OVERRIDE { return mThis.GetPtr(); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       ::if (ARG>0)::
       return mFunction(mThis.GetPtr(), ::ARR_LIST::);
@@ -59,7 +62,8 @@ struct CMemberFunction::ARG:: : public hx::Object
       return mFunction(mThis.GetPtr());
       ::end::
    } 
-   Dynamic __run(::DYNAMIC_ARG_LIST::) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(::DYNAMIC_ARG_LIST::) HXCPP_OVERRIDE
    { 
       ::if (ARG>0)::
       return mFunction(mThis.GetPtr(), ::ARG_LIST::);
@@ -67,6 +71,7 @@ struct CMemberFunction::ARG:: : public hx::Object
       return mFunction(mThis.GetPtr());
       ::end::
    } 
+#endif
 }; 
 
 
@@ -84,7 +89,7 @@ struct CStaticFunction::ARG:: : public hx::Object
       mName = inName;
       mFunction = inFunction;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CStaticFunction::ARG:: *other = dynamic_cast<const CStaticFunction::ARG:: *>(inRHS);
       if (!other)
@@ -92,17 +97,19 @@ struct CStaticFunction::ARG:: : public hx::Object
       return mName==other->mName && mFunction==other->mFunction && mName==other->mName ? 0 : -1;
    }
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return ::ARG::; } 
-   ::String __ToString() const{ return String(mName); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return ::ARG::; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       return mFunction(::ARR_LIST::);
    } 
-   Dynamic __run(::DYNAMIC_ARG_LIST::) 
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run(::DYNAMIC_ARG_LIST::) HXCPP_OVERRIDE
    { 
       return mFunction(::ARG_LIST::);
    } 
+#endif
 }; 
 
 
@@ -141,7 +148,7 @@ struct CMemberFunctionVar : public hx::Object
       mName = inName;
       N = inN;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CMemberFunctionVar *other = dynamic_cast<const CMemberFunctionVar *>(inRHS);
       if (!other)
@@ -150,15 +157,15 @@ struct CMemberFunctionVar : public hx::Object
    }
 
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return N; } 
-   ::String __ToString() const{ return String(mName); } 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER_NAME(mThis,"CMemberFunctionVar.this"); } 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return N; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER_NAME(mThis,"CMemberFunctionVar.this"); } 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mThis); } 
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(mThis); } 
    #endif
-   void *__GetHandle() const { return mThis.GetPtr(); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   void *__GetHandle() const HXCPP_OVERRIDE { return mThis.GetPtr(); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       return mFunction(mThis.GetPtr(), inArgs);
    } 
@@ -180,7 +187,7 @@ struct CStaticFunctionVar : public hx::Object
       mName = inName;
       N = inN;
    }
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const CStaticFunctionVar *other = dynamic_cast<const CStaticFunctionVar *>(inRHS);
       if (!other)
@@ -189,10 +196,10 @@ struct CStaticFunctionVar : public hx::Object
    }
 
 
-   int __GetType() const { return vtFunction; } 
-   int __ArgCount() const { return N; } 
-   ::String __ToString() const { return String(mName); } 
-   Dynamic __Run(const Array<Dynamic> &inArgs) 
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } 
+   int __ArgCount() const HXCPP_OVERRIDE { return N; } 
+   ::String __ToString() const HXCPP_OVERRIDE { return String(mName); } 
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE
    { 
       return mFunction(inArgs);
    } 
diff --git a/Sources/c_borogove/iinclude/hx/ErrorCodes.h b/Sources/c_borogove/iinclude/hx/ErrorCodes.h
index fd7ca45..2c3ec7e 100644
--- a/Sources/c_borogove/iinclude/hx/ErrorCodes.h
+++ b/Sources/c_borogove/iinclude/hx/ErrorCodes.h
@@ -2,20 +2,20 @@
 #define HX_ERROR_CODES
 
 // --- Exteral constants, used inline
-#define HX_INVALID_CAST          Dynamic(HX_CSTRING("Invalid Cast"))
-#define HX_INVALID_INTERFACE     Dynamic(HX_CSTRING("Object does not implement interface"))
-#define HX_INDEX_OUT_OF_BOUNDS   Dynamic(HX_CSTRING("Index Out of Bounds"))
-#define HX_INVALID_CONSTRUCTOR   Dynamic(HX_CSTRING("Invalid constructor"))
+#define HX_INVALID_CAST          ::Dynamic(HX_CSTRING("Invalid Cast"))
+#define HX_INVALID_INTERFACE     ::Dynamic(HX_CSTRING("Object does not implement interface"))
+#define HX_INDEX_OUT_OF_BOUNDS   ::Dynamic(HX_CSTRING("Index Out of Bounds"))
+#define HX_INVALID_CONSTRUCTOR   ::Dynamic(HX_CSTRING("Invalid constructor"))
 #define HX_INVALID_ENUM_CONSTRUCTOR(_enum_name, _constructor_name)      \
-    Dynamic(HX_CSTRING("Invalid enum constructor for ") +               \
+    ::Dynamic(HX_CSTRING("Invalid enum constructor for ") +             \
             HX_CSTRING(_enum_name) +                                    \
             HX_CSTRING(": ") +                                          \
             _constructor_name)
-#define HX_INVALID_OBJECT        Dynamic(HX_CSTRING("Invalid object"))
-#define HX_INVALID_ARG_COUNT     Dynamic(HX_CSTRING("Invalid Arg Count"))
-#define HX_NULL_FUNCTION_POINTER Dynamic(HX_CSTRING("Null Function Pointer"))
+#define HX_INVALID_OBJECT        ::Dynamic(HX_CSTRING("Invalid object"))
+#define HX_INVALID_ARG_COUNT     ::Dynamic(HX_CSTRING("Invalid Arg Count"))
+#define HX_NULL_FUNCTION_POINTER ::Dynamic(HX_CSTRING("Null Function Pointer"))
 #define HX_INVALID_ENUM_ARG_COUNT(_enum_name, _constructor_name, _count, _expected) \
-    Dynamic(HX_CSTRING("Invalid enum arg count for ") +                 \
+    ::Dynamic(HX_CSTRING("Invalid enum arg count for ") +               \
             HX_CSTRING(_enum_name) +                                    \
             HX_CSTRING(".") +                                           \
             _constructor_name +                                         \
diff --git a/Sources/c_borogove/iinclude/hx/FieldRef.h b/Sources/c_borogove/iinclude/hx/FieldRef.h
index 3ba1fdc..4bdef96 100644
--- a/Sources/c_borogove/iinclude/hx/FieldRef.h
+++ b/Sources/c_borogove/iinclude/hx/FieldRef.h
@@ -22,14 +22,14 @@ namespace hx
 
 #define HX_FIELD_REF_MEM_OP(op,ret) \
 inline ret operator op (const FieldRef &inA) \
-  { return this->operator Dynamic() op inA.operator Dynamic(); } \
+  { return this->operator ::Dynamic() op inA.operator ::Dynamic(); } \
 inline ret operator op (const IndexRef &inA); \
 template<typename T> inline ret operator op (const T& inA) \
-   { return this->operator Dynamic() op inA; }
+   { return this->operator ::Dynamic() op inA; }
 
 #define HX_FIELD_REF_IMPL_MEM_OP(op,ret) \
-inline ret hx::FieldRef::operator op (const IndexRef &inA) \
-    { return this->operator Dynamic() op inA.operator Dynamic(); } \
+inline ret FieldRef::operator op (const IndexRef &inA) \
+    { return this->operator ::Dynamic() op inA.operator ::Dynamic(); } \
 
 class FieldRef
 {
@@ -118,7 +118,7 @@ inline FieldRef ObjectPtr<T>::FieldRef(const String &inString)
 
 #define HX_FIELD_REF_OP(op,ret) \
 template<typename T> inline ret operator op (T &inT, const FieldRef &inA) \
-   { return inT op ( inA.operator Dynamic()); }
+   { return inT op ( inA.operator ::Dynamic()); }
 
 HX_FIELD_REF_OP(==,bool)
 HX_FIELD_REF_OP(!=,bool)
@@ -142,11 +142,11 @@ HX_FIELD_REF_OP(%,double)
 
 #define HX_INDEX_REF_MEM_OP(op,ret) \
 inline ret operator op (const IndexRef &inA) \
-    { return this->operator Dynamic() op inA.operator Dynamic(); } \
+    { return this->operator ::Dynamic() op inA.operator ::Dynamic(); } \
 inline ret operator op (const FieldRef &inA) \
-    { return this->operator Dynamic() op inA.operator Dynamic(); } \
+    { return this->operator ::Dynamic() op inA.operator ::Dynamic(); } \
 template<typename T> inline ret operator op (const T& inA) \
-   { return this->operator Dynamic() op inA; }
+   { return this->operator ::Dynamic() op inA; }
 
 
 class IndexRef
@@ -227,7 +227,7 @@ inline IndexRef ObjectPtr<T>::IndexRef(int inIndex)
 
 #define HX_INDEX_REF_OP(op,ret) \
 template<typename T> inline ret operator op (T &inT, const IndexRef &inA) \
-   { return inT op ( inA. operator Dynamic()); }
+   { return inT op ( inA. operator ::Dynamic()); }
 
 HX_INDEX_REF_OP(==,bool)
 HX_INDEX_REF_OP(!=,bool)
@@ -260,8 +260,8 @@ HX_FIELD_REF_IMPL_MEM_OP(%,double)
 // Disambiguate Dynamic operators...
 
 #define HX_INDEX_REF_OP_DYNAMIC(op,ret) \
-inline ret operator op (const Dynamic &inT, const IndexRef &inA) \
-   { return inT op ( inA.operator Dynamic()); }
+inline ret operator op (const ::Dynamic &inT, const IndexRef &inA) \
+   { return inT op ( inA.operator ::Dynamic()); }
 
 HX_INDEX_REF_OP_DYNAMIC(==,bool)
 HX_INDEX_REF_OP_DYNAMIC(!=,bool)
diff --git a/Sources/c_borogove/iinclude/hx/Functions.h b/Sources/c_borogove/iinclude/hx/Functions.h
index a27180e..32c1b39 100644
--- a/Sources/c_borogove/iinclude/hx/Functions.h
+++ b/Sources/c_borogove/iinclude/hx/Functions.h
@@ -1,12 +1,13 @@
 #ifndef HX_FUNCTIONS_H
 #define HX_FUNCTIONS_H
-#include <hxcpp.h>
+
+#include <typeindex>
 
 namespace hx
 {
    struct HXCPP_EXTERN_CLASS_ATTRIBUTES LocalFunc : public hx::Object
    {
-      int __GetType() const { return vtFunction; }
+      int __GetType() const HXCPP_OVERRIDE { return vtFunction; }
       inline void DoMarkThis(hx::MarkContext *__inCtx) { }
 #ifdef HXCPP_VISIT_ALLOCS
       inline void DoVisitThis(hx::VisitContext *__inCtx) { }
@@ -16,13 +17,410 @@ namespace hx
    struct HXCPP_EXTERN_CLASS_ATTRIBUTES LocalThisFunc : public LocalFunc
    {
       Dynamic __this;
-		void __SetThis(Dynamic inThis) { __this = inThis; }
+      void __SetThis(Dynamic inThis) HXCPP_OVERRIDE { __this = inThis; }
       inline void DoMarkThis(hx::MarkContext *__inCtx) { HX_MARK_MEMBER(__this); }
 #ifdef HXCPP_VISIT_ALLOCS
       inline void DoVisitThis(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(__this); }
 #endif
    };
 
+#if (HXCPP_API_LEVEL>=500)
+
+    template<typename T1>
+    bool IsNotNull(const T1& v1);
+
+    struct HXCPP_EXTERN_CLASS_ATTRIBUTES ErasedCallable_obj : public hx::Object
+    {
+        virtual std::type_index callableId() const = 0;
+    };
+
+    template<class TReturn, class... TArgs>
+    class HXCPP_EXTERN_CLASS_ATTRIBUTES Callable_obj;
+
+    template<class TReturn, class... TArgs>
+    class HXCPP_EXTERN_CLASS_ATTRIBUTES Callable_obj<TReturn(TArgs...)> : public ErasedCallable_obj
+    {
+    public:
+        HX_IS_INSTANCE_OF enum { _hx_ClassId = ::hx::clsIdClosure };
+
+        int __GetType() const override final
+        {
+            return vtFunction;
+        }
+
+        int __ArgCount() const override final
+        {
+            return sizeof...(TArgs);
+        }
+
+        Dynamic __Run(const Array<Dynamic>& inArgs) override = 0;
+
+        virtual TReturn HX_LOCAL_RUN(TArgs... args) = 0;
+
+        std::type_index callableId() const override
+        {
+            return std::type_index{ typeid(Callable_obj<TReturn(TArgs...)>) };
+        }
+
+        int __Compare(const ::hx::Object* other) const override
+        {
+            auto otherCallable = dynamic_cast<const ErasedCallable_obj*>(other);
+            if (nullptr == otherCallable)
+            {
+                return -1;
+            }
+
+            return callableId() == otherCallable->callableId() ? 0 : -1;
+        }
+    };
+
+    template<class TReturn, class... TArgs>
+    class HXCPP_EXTERN_CLASS_ATTRIBUTES AutoCallable_obj;
+
+    template<class TReturn, class... TArgs>
+    class HXCPP_EXTERN_CLASS_ATTRIBUTES AutoCallable_obj<TReturn(TArgs...)> : public ::hx::Callable_obj<TReturn(TArgs...)>
+    {
+        Dynamic __Run(const Array<Dynamic>& inArgs) override final;
+    };
+
+    // ::hx::ObjectPtr overloads
+
+    template<class TReturn, class... TArgs>
+    class HXCPP_EXTERN_CLASS_ATTRIBUTES Callable;
+
+    template<class TReturn, class... TArgs>
+    class Callable<TReturn(TArgs...)> : public ObjectPtr<Callable_obj<TReturn(TArgs...)>>
+    {
+    public:
+        using super = hx::ObjectPtr< Callable_obj<TReturn(TArgs...)> >;
+        using OBJ_  = Callable_obj<TReturn(TArgs...)>;
+        using Ptr   = Callable_obj<TReturn(TArgs...)>*;
+
+        Callable()
+            : super(nullptr) {}
+
+        Callable(const null& inNull)
+            : super(nullptr) {}
+
+        Callable(Ptr inPtr) : super(inPtr) {}
+
+        Callable(const hx::ObjectPtr<OBJ_>& inCallable)
+            : super(inCallable) {}
+
+        Callable(const Callable<TReturn(TArgs...)>& inCallable)
+            : super(inCallable.GetPtr()) {}
+
+        Callable(const ::cpp::Variant& inVariant)
+            : Callable(Dynamic(inVariant.asObject())) {}
+
+        Callable(::cpp::Function<TReturn(TArgs...)> inFunction)
+            : super(nullptr)
+        {
+            struct FunctionCallable final : public AutoCallable_obj<TReturn(TArgs...)>
+            {
+                ::cpp::Function<TReturn(TArgs...)> func;
+
+                FunctionCallable(::cpp::Function<TReturn(TArgs...)> inFunc) : func(inFunc)
+                {
+                   HX_OBJ_WB_NEW_MARKED_OBJECT(this);
+                }
+
+                TReturn HX_LOCAL_RUN(TArgs... args) override
+                {
+                    return func(args...);
+                }
+            };
+
+            super::mPtr = new FunctionCallable(inFunction);
+        }
+
+        template<class TOtherReturn, class... TOtherArgs>
+        Callable(const Callable<TOtherReturn(TOtherArgs...)>& inCallable)
+            : super(nullptr)
+        {
+            struct AdapterCallable final : public AutoCallable_obj<TReturn(TArgs...)>
+            {
+                Callable<TOtherReturn(TOtherArgs...)> wrapped;
+
+                AdapterCallable(Callable<TOtherReturn(TOtherArgs...)> _wrapped) : wrapped(_wrapped)
+                {
+                   HX_OBJ_WB_NEW_MARKED_OBJECT(this);
+                }
+
+                TReturn HX_LOCAL_RUN(TArgs... args) override
+                {
+                    return wrapped(args...);
+                }
+
+                void* __GetHandle() const override
+                {
+                    return wrapped.GetPtr();
+                }
+
+                std::type_index callableId() const override
+                {
+                    return wrapped->callableId();
+                }
+
+                inline void __Mark(hx::MarkContext* __inCtx) override
+                {
+                    HX_MARK_MEMBER(wrapped);
+                }
+#ifdef HXCPP_VISIT_ALLOCS
+                inline void __Visit(hx::VisitContext* __inCtx) override
+                {
+                    HX_VISIT_MEMBER(wrapped);
+                }
+#endif
+            };
+
+            super::mPtr = new AdapterCallable(inCallable);
+        }
+
+        template<class... TOtherArgs>
+        Callable(const Callable<void(TOtherArgs...)>& inCallable)
+            : super(nullptr)
+        {
+            struct AdapterCallable final : public AutoCallable_obj<TReturn(TArgs...)>
+            {
+                Callable<void(TOtherArgs...)> wrapped;
+
+                AdapterCallable(Callable<void(TOtherArgs...)> _wrapped) : wrapped(_wrapped)
+                {
+                   HX_OBJ_WB_NEW_MARKED_OBJECT(this);
+                }
+
+                TReturn HX_LOCAL_RUN(TArgs... args) override
+                {
+                    wrapped(args...);
+
+                    return null();
+                }
+
+                void* __GetHandle() const override
+                {
+                    return wrapped.GetPtr();
+                }
+
+                inline void __Mark(hx::MarkContext* __inCtx) override
+                {
+                    HX_MARK_MEMBER(wrapped);
+                }
+#ifdef HXCPP_VISIT_ALLOCS
+                inline void __Visit(hx::VisitContext* __inCtx) override
+                {
+                    HX_VISIT_MEMBER(wrapped);
+                }
+#endif
+            };
+
+            super::mPtr = new AdapterCallable(inCallable);
+        }
+
+        Callable(const Dynamic& inDynamic)
+            : super(nullptr)
+        {
+            auto casted = dynamic_cast<Ptr>(inDynamic.GetPtr());
+            if (nullptr != casted)
+            {
+                super::mPtr = casted;
+            }
+            else
+            {
+                if (::hx::IsNotNull(inDynamic) && inDynamic->__GetType() == vtFunction)
+                {
+                    struct DynamicCallable final : public AutoCallable_obj<TReturn(TArgs...)>
+                    {
+                        Dynamic wrapped;
+
+                        DynamicCallable(Dynamic _wrapped) : wrapped(_wrapped)
+                        {
+                           HX_OBJ_WB_NEW_MARKED_OBJECT(this);
+                        }
+
+                        TReturn HX_LOCAL_RUN(TArgs... args) override
+                        {
+                            return wrapped(args...);
+                        }
+
+                        void* __GetHandle() const override
+                        {
+                            return wrapped.GetPtr();
+                        }
+
+                        inline void __Mark(hx::MarkContext* __inCtx) override
+                        {
+                            HX_MARK_MEMBER(wrapped);
+                        }
+#ifdef HXCPP_VISIT_ALLOCS
+                        inline void __Visit(hx::VisitContext* __inCtx) override
+                        {
+                            HX_VISIT_MEMBER(wrapped);
+                        }
+#endif
+                    };
+
+                    super::mPtr = new DynamicCallable(inDynamic);
+                }
+            }
+        }
+
+        TReturn operator ()(TArgs... args)
+        {
+            if (nullptr == super::mPtr)
+            {
+                ::Dynamic::ThrowBadFunctionError();
+            }
+
+            return super::mPtr->_hx_run(args...);
+        }
+    };
+
+    template<class... TArgs>
+    class Callable<void(TArgs...)> : public ObjectPtr<Callable_obj<void(TArgs...)>>
+    {
+    public:
+        using super = hx::ObjectPtr< Callable_obj<void(TArgs...)> >;
+        using OBJ_ = Callable_obj<void(TArgs...)>;
+        using Ptr = Callable_obj<void(TArgs...)>*;
+
+        Callable()
+            : super(nullptr) {}
+
+        Callable(const null& inNull)
+            : super(nullptr) {}
+
+        Callable(Ptr inPtr) : super(inPtr) {}
+
+        Callable(const hx::ObjectPtr<OBJ_>& inCallable)
+            : super(inCallable) {}
+
+        Callable(const Callable<void(TArgs...)>& inCallable)
+            : super(inCallable.GetPtr()) {}
+
+        Callable(const ::cpp::Variant& inVariant)
+            : Callable(Dynamic(inVariant.asObject())) {}
+
+        Callable(::cpp::Function<void(TArgs...)> inFunction)
+            : super(nullptr)
+        {
+            struct FunctionCallable final : public AutoCallable_obj<void(TArgs... )>
+            {
+                ::cpp::Function<void(TArgs...)> func;
+
+                FunctionCallable(::cpp::Function<void(TArgs...)> inFunc) : func(inFunc) {}
+
+                void HX_LOCAL_RUN(TArgs... args) override
+                {
+                    func(args...);
+                }
+            };
+
+            super::mPtr = new FunctionCallable(inFunction);
+        }
+
+        template<class TOtherReturn, class... TOtherArgs>
+        Callable(const Callable<TOtherReturn(TOtherArgs...)>& inCallable)
+            : super(nullptr)
+        {
+            struct AdapterCallable final : public AutoCallable_obj<void(TArgs...)>
+            {
+                Callable<TOtherReturn(TOtherArgs...)> wrapped;
+
+                AdapterCallable(Callable<TOtherReturn(TOtherArgs...)> _wrapped) : wrapped(_wrapped)
+                {
+                   HX_OBJ_WB_NEW_MARKED_OBJECT(this);
+                }
+
+                void HX_LOCAL_RUN(TArgs... args) override
+                {
+                    wrapped(args...);
+                }
+
+                void* __GetHandle() const override
+                {
+                    return wrapped.GetPtr();
+                }
+
+                std::type_index callableId() const override
+                {
+                    return wrapped->callableId();
+                }
+
+                inline void __Mark(hx::MarkContext* __inCtx) override
+                {
+                    HX_MARK_MEMBER(wrapped);
+                }
+#ifdef HXCPP_VISIT_ALLOCS
+                inline void __Visit(hx::VisitContext* __inCtx) override
+                {
+                    HX_VISIT_MEMBER(wrapped);
+                }
+#endif
+            };
+
+            super::mPtr = new AdapterCallable(inCallable);
+        }
+
+        Callable(const Dynamic& inDynamic)
+            : super(nullptr)
+        {
+            auto casted = dynamic_cast<Ptr>(inDynamic.GetPtr());
+            if (nullptr != casted)
+            {
+                super::mPtr = casted;
+            }
+            else
+            {
+                if (::hx::IsNotNull(inDynamic) && inDynamic->__GetType() == vtFunction)
+                {
+                    struct DynamicCallable final : public AutoCallable_obj<void(TArgs...)>
+                    {
+                        Dynamic wrapped;
+
+                        DynamicCallable(Dynamic _wrapped) : wrapped(_wrapped)
+                        {
+                           HX_OBJ_WB_NEW_MARKED_OBJECT(this);
+                        }
+
+                        void HX_LOCAL_RUN(TArgs... args) override
+                        {
+                            wrapped(args...);
+                        }
+
+                        void* __GetHandle() const override
+                        {
+                            return wrapped.GetPtr();
+                        }
+
+                        inline void __Mark(hx::MarkContext* __inCtx) override
+                        {
+                            HX_MARK_MEMBER(wrapped);
+                        }
+#ifdef HXCPP_VISIT_ALLOCS
+                        inline void __Visit(hx::VisitContext* __inCtx) override
+                        {
+                            HX_VISIT_MEMBER(wrapped);
+                        }
+#endif
+                    };
+
+                    super::mPtr = new DynamicCallable(inDynamic);
+                }
+            }
+        }
+
+        void operator ()(TArgs... args)
+        {
+            if (nullptr == super::mPtr)
+            {
+                ::Dynamic::ThrowBadFunctionError();
+            }
+
+            super::mPtr->_hx_run(args...);
+        }
+    };
+#endif
 }
 
 #endif
diff --git a/Sources/c_borogove/iinclude/hx/GC.h b/Sources/c_borogove/iinclude/hx/GC.h
index 95b65c2..39480c2 100644
--- a/Sources/c_borogove/iinclude/hx/GC.h
+++ b/Sources/c_borogove/iinclude/hx/GC.h
@@ -287,7 +287,7 @@ namespace hx
 
 #define HX_USE_INLINE_IMMIX_OPERATOR_NEW
 
-//#define HX_STACK_CTX ::hx::ImmixAllocator *_hx_stack_ctx =  hx::gMultiThreadMode ? hx::tlsImmixAllocator : hx::gMainThreadAlloc;
+//#define HX_STACK_CTX ::hx::ImmixAllocator *_hx_stack_ctx =  ::hx::gMultiThreadMode ? ::hx::tlsImmixAllocator : ::hx::gMainThreadAlloc;
 
 
 // Each line ast 128 bytes (2^7)
@@ -322,14 +322,14 @@ namespace hx
 
 // The gPauseForCollect bits will turn spaceEnd negative, and so force the slow path
 #ifndef HXCPP_SINGLE_THREADED_APP
-   #define WITH_PAUSE_FOR_COLLECT_FLAG | hx::gPauseForCollect
+   #define WITH_PAUSE_FOR_COLLECT_FLAG | ::hx::gPauseForCollect
 #else
    #define WITH_PAUSE_FOR_COLLECT_FLAG
 #endif
 
 
 
-class StackContext;
+struct StackContext;
 
 EXTERN_FAST_TLS_DATA(StackContext, tlsStackContext);
 
@@ -360,7 +360,7 @@ public:
 
 
 
-   // These allocate the function using the garbage-colleced malloc
+   // These allocate the function using the garbage-collected malloc
    inline static void *alloc(ImmixAllocator *alloc, size_t inSize, bool inContainer, const char *inName )
    {
       #ifdef HXCPP_GC_NURSERY
@@ -406,7 +406,7 @@ public:
             // Ensure odd alignment in 8 bytes
             start += 4 - (start & 4);
          #endif
-         int end = start + sizeof(int) + inSize;
+         int end = start + (int)(sizeof(int) + inSize);
 
          if ( end <= alloc->spaceEnd )
          {
@@ -420,11 +420,11 @@ public:
 
             if (inContainer)
                *buffer++ =  (( (end+(IMMIX_LINE_LEN-1))>>IMMIX_LINE_BITS) -startRow) |
-                            (inSize<<IMMIX_ALLOC_SIZE_SHIFT) |
+                            ((int)inSize<<IMMIX_ALLOC_SIZE_SHIFT) |
                             hx::gMarkIDWithContainer;
             else
                *buffer++ =  (( (end+(IMMIX_LINE_LEN-1))>>IMMIX_LINE_BITS) -startRow) |
-                            (inSize<<IMMIX_ALLOC_SIZE_SHIFT) |
+                            ((int)inSize<<IMMIX_ALLOC_SIZE_SHIFT) |
                             hx::gMarkID;
 
             #if defined(HXCPP_GC_CHECK_POINTER) && defined(HXCPP_GC_DEBUG_ALWAYS_MOVE)
@@ -439,7 +439,7 @@ public:
          }
 
          // Fall back to external method
-         void *result = alloc->CallAlloc(inSize, inContainer ? IMMIX_ALLOC_IS_CONTAINER : 0);
+         void *result = alloc->CallAlloc((int)inSize, inContainer ? IMMIX_ALLOC_IS_CONTAINER : 0);
 
          #ifdef HXCPP_TELEMETRY
             __hxt_gc_new((hx::StackContext *)alloc,result, inSize, inName);
@@ -457,19 +457,19 @@ typedef ImmixAllocator Ctx;
 #ifdef HXCPP_GC_GENERATIONAL
   #define HX_OBJ_WB_CTX(obj,value,ctx) { \
         unsigned char &mark =  ((unsigned char *)(obj))[ HX_ENDIAN_MARK_ID_BYTE]; \
-        if (mark == hx::gByteMarkID && value && !((unsigned char *)(value))[ HX_ENDIAN_MARK_ID_BYTE  ] ) { \
+        if (mark == ::hx::gByteMarkID && value && !((unsigned char *)(value))[ HX_ENDIAN_MARK_ID_BYTE  ] ) { \
             mark|=HX_GC_REMEMBERED; \
             ctx->pushReferrer(obj); \
      } }
   #define HX_OBJ_WB_PESSIMISTIC_CTX(obj,ctx) { \
      unsigned char &mark =  ((unsigned char *)(obj))[ HX_ENDIAN_MARK_ID_BYTE]; \
-     if (mark == hx::gByteMarkID)  { \
+     if (mark == ::hx::gByteMarkID)  { \
         mark|=HX_GC_REMEMBERED; \
         ctx->pushReferrer(obj); \
      } }
   // I'm not sure if this will ever trigger...
   #define HX_OBJ_WB_NEW_MARKED_OBJECT(obj) { \
-     if (((unsigned char *)(obj))[ HX_ENDIAN_MARK_ID_BYTE]==hx::gByteMarkID) hx::NewMarkedObject(obj); \
+     if (((unsigned char *)(obj))[ HX_ENDIAN_MARK_ID_BYTE]==::hx::gByteMarkID) ::hx::NewMarkedObject(obj); \
   }
 #else
   #define HX_OBJ_WB_CTX(obj,value,ctx)
@@ -523,12 +523,12 @@ inline void MarkObjectAlloc(hx::Object *inPtr ,hx::MarkContext *__inCtx)
 
 #define HX_MARK_ARG __inCtx
 //#define HX_MARK_ADD_ARG ,__inCtx
-#define HX_MARK_PARAMS hx::MarkContext *__inCtx
-//#define HX_MARK_ADD_PARAMS ,hx::MarkContext *__inCtx
+#define HX_MARK_PARAMS ::hx::MarkContext *__inCtx
+//#define HX_MARK_ADD_PARAMS ,::hx::MarkContext *__inCtx
 
 #ifdef HXCPP_VISIT_ALLOCS
 #define HX_VISIT_ARG __inCtx
-#define HX_VISIT_PARAMS hx::VisitContext *__inCtx
+#define HX_VISIT_PARAMS ::hx::VisitContext *__inCtx
 #else
 #define HX_VISIT_ARG
 #define HX_VISIT_PARAMS
@@ -544,40 +544,40 @@ inline void MarkObjectAlloc(hx::Object *inPtr ,hx::MarkContext *__inCtx)
 
 #ifdef HXCPP_DEBUG
 
-#define HX_MARK_MEMBER_NAME(x,name) { hx::MarkSetMember(name, __inCtx); hx::MarkMember(x, __inCtx ); }
-#define HX_MARK_BEGIN_CLASS(x) hx::MarkPushClass(#x, __inCtx );
-#define HX_MARK_END_CLASS() hx::MarkPopClass(__inCtx );
-#define HX_MARK_MEMBER(x) { hx::MarkSetMember(0, __inCtx); hx::MarkMember(x, __inCtx ); }
-#define HX_MARK_MEMBER_ARRAY(x,len) { hx::MarkSetMember(0, __inCtx); hx::MarkMemberArray(x, len, __inCtx ); }
+#define HX_MARK_MEMBER_NAME(x,name) { ::hx::MarkSetMember(name, __inCtx); ::hx::MarkMember(x, __inCtx ); }
+#define HX_MARK_BEGIN_CLASS(x) ::hx::MarkPushClass(#x, __inCtx );
+#define HX_MARK_END_CLASS() ::hx::MarkPopClass(__inCtx );
+#define HX_MARK_MEMBER(x) { ::hx::MarkSetMember(0, __inCtx); ::hx::MarkMember(x, __inCtx ); }
+#define HX_MARK_MEMBER_ARRAY(x,len) { ::hx::MarkSetMember(0, __inCtx); ::hx::MarkMemberArray(x, len, __inCtx ); }
 
 #else
 
-#define HX_MARK_MEMBER_NAME(x,name) hx::MarkMember(x, __inCtx )
+#define HX_MARK_MEMBER_NAME(x,name) ::hx::MarkMember(x, __inCtx )
 #define HX_MARK_BEGIN_CLASS(x)
 #define HX_MARK_END_CLASS()
-#define HX_MARK_MEMBER(x) hx::MarkMember(x, __inCtx )
-#define HX_MARK_MEMBER_ARRAY(x,len) hx::MarkMemberArray(x, len, __inCtx )
+#define HX_MARK_MEMBER(x) ::hx::MarkMember(x, __inCtx )
+#define HX_MARK_MEMBER_ARRAY(x,len) ::hx::MarkMemberArray(x, len, __inCtx )
 
 #endif
 
-#define HX_MARK_OBJECT(ioPtr) if (ioPtr) hx::MarkObjectAlloc(ioPtr, __inCtx );
+#define HX_MARK_OBJECT(ioPtr) if (ioPtr) ::hx::MarkObjectAlloc(ioPtr, __inCtx );
 
 
 
 
 #define HX_MARK_STRING(ioPtr) \
-   if (ioPtr) hx::MarkAlloc((void *)ioPtr, __inCtx );
+   if (ioPtr) ::hx::MarkAlloc((void *)ioPtr, __inCtx );
 
-#define HX_MARK_ARRAY(ioPtr) { if (ioPtr) hx::MarkAlloc((void *)ioPtr, __inCtx ); }
+#define HX_MARK_ARRAY(ioPtr) { if (ioPtr) ::hx::MarkAlloc((void *)ioPtr, __inCtx ); }
 
 
 
 
-#define HX_VISIT_MEMBER_NAME(x,name) hx::VisitMember(x, __inCtx )
-#define HX_VISIT_MEMBER(x) hx::VisitMember(x, __inCtx )
+#define HX_VISIT_MEMBER_NAME(x,name) ::hx::VisitMember(x, __inCtx )
+#define HX_VISIT_MEMBER(x) ::hx::VisitMember(x, __inCtx )
 
 #define HX_VISIT_OBJECT(ioPtr) \
-  { if (ioPtr && !(((unsigned char *)ioPtr)[HX_GC_CONST_ALLOC_MARK_OFFSET] & HX_GC_CONST_ALLOC_MARK_BIT) ) __inCtx->visitObject( (hx::Object **)&ioPtr); }
+  { if (ioPtr && !(((unsigned char *)ioPtr)[HX_GC_CONST_ALLOC_MARK_OFFSET] & HX_GC_CONST_ALLOC_MARK_BIT) ) __inCtx->visitObject( (::hx::Object **)&ioPtr); }
 
 #define HX_VISIT_STRING(ioPtr) \
    if (ioPtr && !(((unsigned char *)ioPtr)[HX_GC_CONST_ALLOC_MARK_OFFSET] & HX_GC_CONST_ALLOC_MARK_BIT) ) __inCtx->visitAlloc((void **)&ioPtr);
diff --git a/Sources/c_borogove/iinclude/hx/GcTypeInference.h b/Sources/c_borogove/iinclude/hx/GcTypeInference.h
index b1f186e..e0500a5 100644
--- a/Sources/c_borogove/iinclude/hx/GcTypeInference.h
+++ b/Sources/c_borogove/iinclude/hx/GcTypeInference.h
@@ -23,6 +23,10 @@ template<typename T> inline void MarkMember(Array<T> &outT,hx::MarkContext *__in
 {
    HX_MARK_OBJECT(outT.mPtr);
 }
+template<typename TReturn, typename... TArgs> inline void MarkMember(Callable<TReturn(TArgs...)>& outT, hx::MarkContext* __inCtx)
+{
+    HX_MARK_OBJECT(outT.mPtr);
+}
 template<> inline void MarkMember<hx::Object *>(hx::Object *&outT,hx::MarkContext *__inCtx)
 {
    HX_MARK_OBJECT(outT);
@@ -114,6 +118,10 @@ template<typename T> inline void VisitMember(Array<T> &outT,hx::VisitContext *__
 {
    HX_VISIT_OBJECT(outT.mPtr);
 }
+template<typename TReturn, typename... TArgs> inline void VisitMember(Callable<TReturn(TArgs...)>& outT, hx::VisitContext* __inCtx)
+{
+    HX_VISIT_OBJECT(outT.mPtr);
+}
 template<> inline void VisitMember(cpp::Variant &outT,hx::VisitContext *__inCtx)
 {
    outT.visit(__inCtx);
diff --git a/Sources/c_borogove/iinclude/hx/GenMacro.hx b/Sources/c_borogove/iinclude/hx/GenMacro.hx
index 17e21f0..900d1e6 100644
--- a/Sources/c_borogove/iinclude/hx/GenMacro.hx
+++ b/Sources/c_borogove/iinclude/hx/GenMacro.hx
@@ -13,6 +13,8 @@ import neko.io.File;
 import neko.io.FileOutput;
 #end
 
+using StringTools;
+
 class GenMacro
 {
    static var warning =
@@ -40,7 +42,7 @@ class GenMacro
          {
             arr_list.push( "inArgs[" + (arg-1) + "]");
             arg_list.push( "inArg" + (arg-1));
-            dynamic_arg_list.push("const Dynamic &inArg" + (arg-1) );
+            dynamic_arg_list.push("const ::Dynamic &inArg" + (arg-1) );
             dynamic_adds.push( "->init(" + (arg-1) + ",inArg" + (arg-1) + ")" );
          }
 
@@ -96,9 +98,9 @@ class GenMacro
       Reflect.setField(context, "hxNS", " ::hx::");
 
       var fixed = File.getContent("MacrosFixed.h");
-      fixed = fixed.split("
").join("");
+      fixed = fixed.replace("\r", "");
       var fileContents:String = File.getContent("Macros.tpl");
-      fileContents = fileContents.split("
").join("");
+      fileContents = fileContents.replace("\r", "");
 
       var template:Template = new Template(fileContents);
       var result:String = template.execute(context);
@@ -109,7 +111,7 @@ class GenMacro
       fileOutput.close();
 
       var fileContents:String = File.getContent("MacrosJumbo.tpl");
-      fileContents = fileContents.split("
").join("");
+      fileContents = fileContents.replace("\r", "");
       var template:Template = new Template(fileContents);
       Reflect.setField(context, "LOCALS", jumboLocals);
       var result:String = template.execute(context);
@@ -121,7 +123,7 @@ class GenMacro
 
 
       var fileContents:String = File.getContent("DynamicImpl.tpl");
-      fileContents = fileContents.split("
").join("");
+      fileContents = fileContents.replace("\r", "");
       var template:Template = new Template(fileContents);
       var result:String = template.execute(context);
       var fileOutput:FileOutput = File.write("DynamicImpl.h", true);
diff --git a/Sources/c_borogove/iinclude/hx/HxcppMain.h b/Sources/c_borogove/iinclude/hx/HxcppMain.h
index ad09f30..309e9e9 100644
--- a/Sources/c_borogove/iinclude/hx/HxcppMain.h
+++ b/Sources/c_borogove/iinclude/hx/HxcppMain.h
@@ -94,13 +94,22 @@
       }
       catch (Dynamic e)
       {
-         __hx_dump_stack();
-         #ifdef HX_WIN_MAIN
-         MessageBoxA(0,  e==null() ? "null" : e->toString().__CStr(), "Error", 0);
-         #else
-         printf("Error : %s\n",e==null() ? "null" : e->toString().__CStr());
-         #endif
-         return -1;
+          auto customStack = e->__Field(HX_CSTRING("_hx_customStack"), HX_PROP_DYNAMIC).asString();
+          if (::hx::IsNotNull(customStack))
+          {
+              printf("%s\n", customStack.utf8_str());
+          }
+          else
+          {
+              __hx_dump_stack();
+          }
+
+#ifdef HX_WIN_MAIN
+          MessageBoxA(0, e == null() ? "null" : e->toString().__CStr(), "Error", 0);
+#else
+          printf("Error : %s\n", e == null() ? "null" : e->toString().__CStr());
+#endif
+          return -1;
       }
       return 0;
    }
diff --git a/Sources/c_borogove/iinclude/hx/Invoker.h b/Sources/c_borogove/iinclude/hx/Invoker.h
new file mode 100644
index 0000000..c9593d4
--- /dev/null
+++ b/Sources/c_borogove/iinclude/hx/Invoker.h
@@ -0,0 +1,193 @@
+#ifndef HX_CLOSURE_H
+#define HX_CLOSURE_H
+#include <hxcpp.h>
+#include <type_traits>
+
+namespace hx
+{
+	namespace invoker
+	{
+		namespace index
+		{
+            struct Helper
+            {
+                template<typename T, T... Ints>
+                struct integer_sequence
+                {
+                    typedef T value_type;
+                    static constexpr std::size_t size() { return sizeof...(Ints); }
+                };
+
+                template<std::size_t... Ints>
+                using index_sequence = integer_sequence<std::size_t, Ints...>;
+
+                template<typename T, std::size_t N, T... Is>
+                struct make_integer_sequence : make_integer_sequence<T, N - 1, N - 1, Is...> {};
+
+                template<typename T, T... Is>
+                struct make_integer_sequence<T, 0, Is...> : integer_sequence<T, Is...> {};
+
+                template<std::size_t N>
+                using make_index_sequence = make_integer_sequence<std::size_t, N>;
+
+                template<typename... T>
+                using index_sequence_for = make_index_sequence<sizeof...(T)>;
+            };
+		}
+
+        template<class T>
+        struct ConversionTrait
+        {
+            inline static Dynamic _hx_struct(T value, std::true_type)
+            {
+                return Dynamic{ value };
+            }
+            inline static Dynamic _hx_struct(T value, std::false_type)
+            {
+                return ::cpp::Struct<T>(value);
+            }
+
+            inline static Dynamic toDynamic(T v) { return _hx_struct(v, std::is_constructible<Dynamic, T>{}); }
+            inline static T fromDynamic(Dynamic d) { return T{ d }; }
+        };
+
+        template<class T>
+        struct ConversionTrait<T*>
+        {
+            inline static Dynamic toDynamic(T* v) { return Dynamic{ ::cpp::Pointer<T>(v)}; }
+            inline static T* fromDynamic(Dynamic d) { return ::cpp::Pointer<T>(d).ptr; }
+        };
+
+        template<class T>
+        struct ConversionTrait<::cpp::Pointer<T>>
+        {
+            inline static Dynamic toDynamic(::cpp::Pointer<T> v) { return v; }
+            inline static ::cpp::Pointer<T> fromDynamic(Dynamic d) { return cpp::Pointer<T>(d); }
+        };
+
+        template<class T>
+        struct ConversionTrait<::cpp::Struct<T>>
+        {
+            inline static Dynamic toDynamic(::cpp::Struct<T> v) { return v; }
+            inline static ::cpp::Struct<T> fromDynamic(Dynamic d) { return cpp::Struct<T>(d); }
+        };
+
+        template<class T>
+        struct ConversionTrait<::cpp::marshal::ValueReference<T>>
+        {
+            inline static Dynamic toDynamic(::cpp::marshal::ValueReference<T> v) { return v; }
+            inline static ::cpp::marshal::ValueReference<T> fromDynamic(Dynamic d) { return ::cpp::marshal::ValueReference<T>{ ::cpp::marshal::ValueType<T>{ d } }; }
+        };
+
+        template<class T>
+        struct ConversionTrait<::cpp::marshal::ValueType<T>>
+        {
+            inline static Dynamic toDynamic(::cpp::marshal::ValueType<T> v) { return ::cpp::marshal::ValueReference<T>{ v }; }
+            inline static ::cpp::marshal::ValueType<T> fromDynamic(Dynamic d) { return ::cpp::marshal::ValueType<T>{ d }; }
+        };
+
+        template<class T>
+        struct ConversionTrait<::cpp::marshal::PointerReference<T>>
+        {
+            inline static Dynamic toDynamic(::cpp::marshal::PointerReference<T> v) { return v; }
+            inline static ::cpp::marshal::PointerReference<T> fromDynamic(Dynamic d) { return ::cpp::marshal::PointerReference<T>{ ::cpp::marshal::PointerType<T>{ d } }; }
+        };
+
+        template<class T>
+        struct ConversionTrait<::cpp::marshal::PointerType<T>>
+        {
+            inline static Dynamic toDynamic(::cpp::marshal::PointerType<T> v) { return ::cpp::marshal::PointerReference<T>{ v }; }
+            inline static ::cpp::marshal::PointerType<T> fromDynamic(Dynamic d) { return ::cpp::marshal::PointerType<T>{ d }; }
+        };
+
+        namespace unwrap
+        {
+            template<typename T>
+            T fromDynamic(Dynamic value)
+            {
+                using traits = ConversionTrait<T>;
+
+                return traits::fromDynamic(value);
+            }
+        }
+
+        namespace wrap
+        {
+            template<typename T>
+            Dynamic toDynamic(T value)
+            {
+                using traits = ConversionTrait<T>;
+
+                return traits::toDynamic(value);
+            }
+        }
+
+        template<bool void_return, class TReturn, class... TArgs>
+        struct Invoker;
+
+        template<class TReturn, class... TArgs>
+        struct Invoker<true, TReturn, TArgs...>
+        {
+            template<size_t... I>
+            static Dynamic call(hx::Callable<TReturn(TArgs...)> callable, const Array<Dynamic>& inArgs, index::Helper::index_sequence<I...>)
+            {
+                callable(invoker::unwrap::fromDynamic<TArgs>(inArgs[I]) ...);
+
+                return null();
+            }
+        };
+
+        template<class TReturn, class... TArgs>
+        struct Invoker<false, TReturn, TArgs...>
+        {
+            template<size_t... I>
+            static Dynamic call(hx::Callable<TReturn(TArgs...)> callable, const Array<Dynamic>& inArgs, index::Helper::index_sequence<I...>)
+            {
+                return invoker::wrap::toDynamic(callable(invoker::unwrap::fromDynamic<TArgs>(inArgs[I]) ...));
+            }
+        };
+
+        inline Dynamic invoke(hx::Object* obj)
+        {
+            return obj->__Run(Array_obj<::Dynamic>::__new(0, 0));
+        }
+
+        template<class ...TArgs>
+        inline Dynamic invoke(hx::Object* obj, const TArgs & ...args)
+        {
+            using unused = int[];
+
+            auto arr = Array_obj<::Dynamic>::__new(0, sizeof...(args));
+
+            (void)unused {
+                0, (arr->push(invoker::wrap::toDynamic(args)), 0)...
+            };
+
+            return obj->__Run(arr);
+        }
+	}
+}
+
+template<class ...TArgs>
+::Dynamic Dynamic::operator()(const TArgs & ...args)
+{
+    CheckFPtr();
+
+    return hx::invoker::invoke(mPtr, args...);
+}
+
+template<class ...TArgs>
+::Dynamic cpp::Variant::operator()(const TArgs & ...args)
+{
+    CheckFPtr();
+
+    return hx::invoker::invoke(valObject, args...);
+}
+
+template<class TReturn, class... TArgs>
+::Dynamic hx::AutoCallable_obj<TReturn(TArgs...)>::__Run(const Array<Dynamic>& inArgs)
+{
+    return invoker::Invoker<std::is_void<TReturn>::value, TReturn, TArgs...>::call(this, inArgs, invoker::index::Helper::index_sequence_for<TArgs...>());
+}
+
+#endif
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/hx/LessThanEq.h b/Sources/c_borogove/iinclude/hx/LessThanEq.h
index e87ebb0..209f69b 100644
--- a/Sources/c_borogove/iinclude/hx/LessThanEq.h
+++ b/Sources/c_borogove/iinclude/hx/LessThanEq.h
@@ -103,9 +103,9 @@ struct CompareTraits<double>
 {
    enum { type = (int)CompareAsDouble };
 
-   inline static int toInt(double inValue) { return inValue; }
+   inline static int toInt(double inValue) { return (int)inValue; }
    inline static double toDouble(double inValue) { return inValue; }
-   inline static cpp::Int64 toInt64(double inValue) { return inValue; }
+   inline static cpp::Int64 toInt64(double inValue) { return (cpp::Int64)inValue; }
    inline static String toString(double inValue) { return String(); }
    inline static hx::Object *toObject(double inValue) { return 0; }
 
@@ -122,7 +122,7 @@ struct CompareTraits<cpp::Int64>
    enum { type = (int)CompareAsInt64 };
 
    inline static int toInt(cpp::Int64 inValue) { return (int)inValue; }
-   inline static double toDouble(cpp::Int64 inValue) { return inValue; }
+   inline static double toDouble(cpp::Int64 inValue) { return (double)inValue; }
    inline static cpp::Int64 toInt64(cpp::Int64 inValue) { return inValue; }
    inline static String toString(cpp::Int64 inValue) { return String(); }
    inline static hx::Object *toObject(cpp::Int64 inValue) { return 0; }
@@ -137,7 +137,7 @@ struct CompareTraits<cpp::UInt64>
    enum { type = (int)CompareAsInt64 };
 
    inline static int toInt(cpp::UInt64 inValue) { return (int)inValue; }
-   inline static double toDouble(cpp::UInt64 inValue) { return inValue; }
+   inline static double toDouble(cpp::UInt64 inValue) { return (double)inValue; }
    // Return value is unsigned ...
    inline static cpp::UInt64 toInt64(cpp::UInt64 inValue) { return inValue; }
    inline static String toString(cpp::UInt64 inValue) { return String(); }
@@ -246,6 +246,33 @@ struct CompareTraits< T * >
    inline static bool isNull(T *inValue) { return !inValue; }
 };
 
+template <typename T>
+struct CompareTraits< cpp::marshal::ValueReference<T> >
+{
+    enum { type = (int)CompareAsDynamic };
+
+    inline static int toInt(Dynamic inValue) { return inValue; }
+    inline static double toDouble(Dynamic inValue) { return inValue; }
+    inline static cpp::Int64 toInt64(Dynamic inValue) { return inValue; }
+    inline static String toString(Dynamic inValue) { return inValue; }
+    inline static hx::Object* toObject(Dynamic inValue) { return inValue.mPtr; }
+    inline static int getDynamicCompareType(const ::Dynamic&) { return type; }
+    inline static bool isNull(const ::cpp::marshal::ValueReference<T>& ref) { return nullptr == ref.ptr; }
+};
+
+template <typename T>
+struct CompareTraits< cpp::marshal::PointerReference<T> >
+{
+    enum { type = (int)CompareAsDynamic };
+
+    inline static int toInt(Dynamic inValue) { return inValue; }
+    inline static double toDouble(Dynamic inValue) { return inValue; }
+    inline static cpp::Int64 toInt64(Dynamic inValue) { return inValue; }
+    inline static String toString(Dynamic inValue) { return inValue; }
+    inline static hx::Object* toObject(Dynamic inValue) { return inValue.mPtr; }
+    inline static int getDynamicCompareType(const ::Dynamic&) { return type; }
+    inline static bool isNull(const ::cpp::marshal::PointerReference<T>& ref) { return nullptr == ref.ptr || nullptr == *ref.ptr; }
+};
 
 template<typename T1>
 hx::Object *GetExistingObject(const T1 &v1)
@@ -410,9 +437,37 @@ inline bool TestLessEq(const T1 &v1, const T2 &v2)
 template<typename T1, typename T2>
 bool IsEq(const T1 &v1, const T2 &v2) { return TestLessEq<false,true,T1,T2>(v1,v2); }
 
+template<typename T1, typename T2>
+bool IsEq(const ::cpp::marshal::ValueReference<T1>& v1, const ::cpp::marshal::ValueReference<T2>& v2) { return v1 == v2; }
+
+template<typename T1, typename T2>
+bool IsEq(const ::cpp::marshal::PointerReference<T1>& v1, const ::cpp::marshal::PointerReference<T2>& v2)
+{
+    if (nullptr == v1.ptr && nullptr == v2.ptr)
+    {
+        return true;
+    }
+    if (nullptr == v1.ptr && nullptr != v2.ptr)
+    {
+        return nullptr == *v2.ptr;
+    }
+    if (nullptr == v2.ptr && nullptr != v1.ptr)
+    {
+        return nullptr == *v1.ptr;
+    }
+
+    return *v1.ptr == *v2.ptr;
+}
+
 template<typename T1, typename T2>
 bool IsNotEq(const T1 &v1, const T2 &v2) { return TestLessEq<false,false,T1,T2>(v1,v2); }
 
+template<typename T1, typename T2>
+bool IsNotEq(const ::cpp::marshal::ValueReference<T1>& v1, const ::cpp::marshal::ValueReference<T2>& v2) { return v1 != v2; }
+
+template<typename T1, typename T2>
+bool IsNotEq(const ::cpp::marshal::PointerReference<T1>& v1, const ::cpp::marshal::PointerReference<T2>& v2) { return IsEq(v1, v2) == false; }
+
 template<typename T1, typename T2>
 bool IsLess(const T1 &v1, const T2 &v2) { return TestLessEq<true,false,T1,T2>(v1,v2); }
 
diff --git a/Sources/c_borogove/iinclude/hx/Macros.h b/Sources/c_borogove/iinclude/hx/Macros.h
index ac4e050..2bab4e7 100644
--- a/Sources/c_borogove/iinclude/hx/Macros.h
+++ b/Sources/c_borogove/iinclude/hx/Macros.h
@@ -52,19 +52,19 @@ static  ::Dynamic Create##enum_obj(::String inName,::hx::DynamicArray inArgs) \
 
 // ---- Fields ----------------------
 
-#define HX_IS_INSTANCE_OF bool _hx_isInstanceOf(int inClassId) { return inClassId==1 || inClassId==(int)_hx_ClassId; }
+#define HX_IS_INSTANCE_OF bool _hx_isInstanceOf(int inClassId) HXCPP_OVERRIDE { return inClassId==1 || inClassId==(int)_hx_ClassId; }
 
 #define HX_DO_RTTI_ALL \
    static ::hx::ObjectPtr< ::hx::Class_obj> __mClass; \
-   ::hx::ObjectPtr< ::hx::Class_obj > __GetClass() const { return __mClass; } \
+   ::hx::ObjectPtr< ::hx::Class_obj > __GetClass() const HXCPP_OVERRIDE { return __mClass; } \
    inline static ::hx::ObjectPtr< ::hx::Class_obj> &__SGetClass() { return __mClass; } \
    inline operator super *() { return this; }
 
 #define HX_DO_RTTI \
    HX_DO_RTTI_ALL \
-    ::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp); \
-    ::hx::Val __SetField(const ::String &inString,const  ::hx::Val &inValue, ::hx::PropertyAccess inCallProp); \
-   void __GetFields(Array< ::String> &outFields);
+    ::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp) HXCPP_OVERRIDE; \
+    ::hx::Val __SetField(const ::String &inString,const  ::hx::Val &inValue, ::hx::PropertyAccess inCallProp) HXCPP_OVERRIDE; \
+   void __GetFields(::Array< ::String> &outFields) HXCPP_OVERRIDE;
 
 #define HX_DO_INTERFACE_RTTI \
    static ::hx::ObjectPtr< ::hx::Class_obj> __mClass; \
@@ -72,20 +72,20 @@ static  ::Dynamic Create##enum_obj(::String inName,::hx::DynamicArray inArgs) \
 	static void __register();
 
 #define HX_DO_ENUM_RTTI_INTERNAL \
-    ::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp); \
+    ::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp) HXCPP_OVERRIDE; \
    static int __FindIndex(::String inName); \
    static int __FindArgCount(::String inName);
 
 #define HX_DO_ENUM_RTTI \
    HX_DO_ENUM_RTTI_INTERNAL \
    static ::hx::ObjectPtr< ::hx::Class_obj> __mClass; \
-   ::hx::ObjectPtr< ::hx::Class_obj > __GetClass() const { return __mClass; } \
+   ::hx::ObjectPtr< ::hx::Class_obj > __GetClass() const HXCPP_OVERRIDE { return __mClass; } \
    static ::hx::ObjectPtr< ::hx::Class_obj> &__SGetClass() { return __mClass; }
 
 
 #define HX_DECLARE_IMPLEMENT_DYNAMIC   ::Dynamic __mDynamicFields; \
      ::Dynamic *__GetFieldMap() { return &__mDynamicFields; } \
-    bool __HasField(const String &inString) \
+    bool __HasField(const ::String &inString) \
       { return ::hx::FieldMapHas(&__mDynamicFields,inString) || super::__HasField(inString); }
 
 
@@ -362,32 +362,32 @@ void __hxcpp_lib_main() \
 
 
 #define HX_DYNAMIC_ARG_LIST0 
-#define HX_DYNAMIC_ARG_LIST1 const Dynamic &inArg0
-#define HX_DYNAMIC_ARG_LIST2 const Dynamic &inArg0,const Dynamic &inArg1
-#define HX_DYNAMIC_ARG_LIST3 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2
-#define HX_DYNAMIC_ARG_LIST4 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3
-#define HX_DYNAMIC_ARG_LIST5 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4
-#define HX_DYNAMIC_ARG_LIST6 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5
-#define HX_DYNAMIC_ARG_LIST7 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6
-#define HX_DYNAMIC_ARG_LIST8 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7
-#define HX_DYNAMIC_ARG_LIST9 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8
-#define HX_DYNAMIC_ARG_LIST10 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9
-#define HX_DYNAMIC_ARG_LIST11 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10
-#define HX_DYNAMIC_ARG_LIST12 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11
-#define HX_DYNAMIC_ARG_LIST13 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12
-#define HX_DYNAMIC_ARG_LIST14 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13
-#define HX_DYNAMIC_ARG_LIST15 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14
-#define HX_DYNAMIC_ARG_LIST16 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15
-#define HX_DYNAMIC_ARG_LIST17 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16
-#define HX_DYNAMIC_ARG_LIST18 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17
-#define HX_DYNAMIC_ARG_LIST19 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18
-#define HX_DYNAMIC_ARG_LIST20 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19
-#define HX_DYNAMIC_ARG_LIST21 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20
-#define HX_DYNAMIC_ARG_LIST22 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21
-#define HX_DYNAMIC_ARG_LIST23 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22
-#define HX_DYNAMIC_ARG_LIST24 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23
-#define HX_DYNAMIC_ARG_LIST25 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23,const Dynamic &inArg24
-#define HX_DYNAMIC_ARG_LIST26 const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23,const Dynamic &inArg24,const Dynamic &inArg25
+#define HX_DYNAMIC_ARG_LIST1 const ::Dynamic &inArg0
+#define HX_DYNAMIC_ARG_LIST2 const ::Dynamic &inArg0,const ::Dynamic &inArg1
+#define HX_DYNAMIC_ARG_LIST3 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2
+#define HX_DYNAMIC_ARG_LIST4 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3
+#define HX_DYNAMIC_ARG_LIST5 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4
+#define HX_DYNAMIC_ARG_LIST6 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5
+#define HX_DYNAMIC_ARG_LIST7 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6
+#define HX_DYNAMIC_ARG_LIST8 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7
+#define HX_DYNAMIC_ARG_LIST9 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8
+#define HX_DYNAMIC_ARG_LIST10 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9
+#define HX_DYNAMIC_ARG_LIST11 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10
+#define HX_DYNAMIC_ARG_LIST12 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11
+#define HX_DYNAMIC_ARG_LIST13 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12
+#define HX_DYNAMIC_ARG_LIST14 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13
+#define HX_DYNAMIC_ARG_LIST15 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14
+#define HX_DYNAMIC_ARG_LIST16 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15
+#define HX_DYNAMIC_ARG_LIST17 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16
+#define HX_DYNAMIC_ARG_LIST18 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17
+#define HX_DYNAMIC_ARG_LIST19 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18
+#define HX_DYNAMIC_ARG_LIST20 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19
+#define HX_DYNAMIC_ARG_LIST21 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20
+#define HX_DYNAMIC_ARG_LIST22 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21
+#define HX_DYNAMIC_ARG_LIST23 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22
+#define HX_DYNAMIC_ARG_LIST24 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23
+#define HX_DYNAMIC_ARG_LIST25 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23,const ::Dynamic &inArg24
+#define HX_DYNAMIC_ARG_LIST26 const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23,const ::Dynamic &inArg24,const ::Dynamic &inArg25
 
 
 #define HX_ARG_LIST0 
@@ -441,7 +441,7 @@ static ::Dynamic __##class##func( ::hx::Object *inObj, dynamic_arg_list) \
 
 
 #define HX_DEFINE_DYNAMIC_FUNC_EXTRA(class,N,func,ret,array_list,dynamic_arg_list,arg_list) \
-static ::Dynamic __##class##func( ::hx::Object *inObj, const Array< ::Dynamic> &inArgs) \
+static ::Dynamic __##class##func( ::hx::Object *inObj, const ::Array< ::Dynamic> &inArgs) \
 { \
       ret reinterpret_cast<class *>(inObj)->func(array_list); return  ::Dynamic(); \
 }; \
@@ -625,7 +625,7 @@ static ::Dynamic __##class##func(dynamic_arg_list) \
 
 
 #define STATIC_HX_DEFINE_DYNAMIC_FUNC_EXTRA(class,N,func,ret,array_list,dynamic_arg_list,arg_list) \
-static ::Dynamic __##class##func(const Array< ::Dynamic> &inArgs) \
+static ::Dynamic __##class##func(const ::Array< ::Dynamic> &inArgs) \
 { \
       ret class::func(array_list); return  ::Dynamic(); \
 }; \
@@ -769,10 +769,13 @@ static ::Dynamic __##class##func(const Array< ::Dynamic> &inArgs) \
 
 
 
-
-#define HX_DYNAMIC_CALL(ret,func,array_args,dyn_arg_list,arg_list) \
-    ::Dynamic __Run(const Array< ::Dynamic> &inArgs) { ret func( array_args ); return null();} \
-    ::Dynamic __run(dyn_arg_list) { ret func( arg_list ); return null();}
+#if (HXCPP_API_LEVEL>=500)
+    #define HX_DYNAMIC_CALL(ret,func,array_args,dyn_arg_list,arg_list)
+#else
+    #define HX_DYNAMIC_CALL(ret,func,array_args,dyn_arg_list,arg_list) \
+        ::Dynamic __Run(const ::Array< ::Dynamic> &inArgs) HXCPP_OVERRIDE { ret func( array_args ); return ::null();} \
+        ::Dynamic __run(dyn_arg_list) HXCPP_OVERRIDE { ret func( arg_list ); return ::null();}
+#endif
 
 
 #define HX_DYNAMIC_CALL0(ret,func) HX_DYNAMIC_CALL(ret,func,HX_ARR_LIST0,HX_DYNAMIC_ARG_LIST0,HX_ARG_LIST0)
@@ -803,162 +806,293 @@ static ::Dynamic __##class##func(const Array< ::Dynamic> &inArgs) \
 #define HX_DYNAMIC_CALL25(ret,func) HX_DYNAMIC_CALL(ret,func,HX_ARR_LIST25,HX_DYNAMIC_ARG_LIST25,HX_ARG_LIST25)
 #define HX_DYNAMIC_CALL26(ret,func) HX_DYNAMIC_CALL(ret,func,HX_ARR_LIST26,HX_DYNAMIC_ARG_LIST26,HX_ARG_LIST26)
 
-#define HX_BEGIN_DEFAULT_FUNC(name,t0) \
-	namespace { \
-   struct name : public  ::hx::Object { int __GetType() const { return vtFunction; } \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-    ::hx::ObjectPtr<t0> __this; \
-   name( ::hx::ObjectPtr<t0> __0 = null()) : __this(__0) {} \
-   void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(__this); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(__this); }
-
+#if (HXCPP_API_LEVEL>=500)
+    #define HX_BEGIN_DEFAULT_FUNC(name,t0) \
+	    namespace { \
+       struct name : public  ::hx::Object { \
+        ::hx::ObjectPtr<t0> __this; \
+       name( ::hx::ObjectPtr<t0> __0 = ::null()) : __this(__0) {} \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER(__this); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(__this); }
+#else
+    #define HX_BEGIN_DEFAULT_FUNC(name,t0) \
+	    namespace { \
+       struct name : public  ::hx::Object { int __GetType() const HXCPP_OVERRIDE { return vtFunction; } \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+        ::hx::ObjectPtr<t0> __this; \
+       name( ::hx::ObjectPtr<t0> __0 = ::null()) : __this(__0) {} \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER(__this); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(__this); }
+#endif
 
 #define HX_END_DEFAULT_FUNC \
 }
 
-#define HXARGC(x) int __ArgCount() const { return x; }
-
-#define HX_BEGIN_LOCAL_FUNC_S0(SUPER,name) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); } \
-   name() {}
-
-
-#define HX_BEGIN_LOCAL_FUNC_S1(SUPER,name,t0,v0) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); } \
-   name(t0 __0) : v0(__0) {}
-#define HX_BEGIN_LOCAL_FUNC_S2(SUPER,name,t0,v0,t1,v1) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); } \
-   name(t0 __0,t1 __1) : v0(__0),v1(__1) {}
-#define HX_BEGIN_LOCAL_FUNC_S3(SUPER,name,t0,v0,t1,v1,t2,v2) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); } \
-   name(t0 __0,t1 __1,t2 __2) : v0(__0),v1(__1),v2(__2) {}
-#define HX_BEGIN_LOCAL_FUNC_S4(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3) : v0(__0),v1(__1),v2(__2),v3(__3) {}
-#define HX_BEGIN_LOCAL_FUNC_S5(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4) {}
-#define HX_BEGIN_LOCAL_FUNC_S6(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5) {}
-#define HX_BEGIN_LOCAL_FUNC_S7(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6) {}
-#define HX_BEGIN_LOCAL_FUNC_S8(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7) {}
-#define HX_BEGIN_LOCAL_FUNC_S9(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8) {}
-#define HX_BEGIN_LOCAL_FUNC_S10(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9) {}
-#define HX_BEGIN_LOCAL_FUNC_S11(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10) {}
-#define HX_BEGIN_LOCAL_FUNC_S12(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11) {}
-#define HX_BEGIN_LOCAL_FUNC_S13(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12) {}
-#define HX_BEGIN_LOCAL_FUNC_S14(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13) {}
-#define HX_BEGIN_LOCAL_FUNC_S15(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14) {}
-#define HX_BEGIN_LOCAL_FUNC_S16(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15) {}
-#define HX_BEGIN_LOCAL_FUNC_S17(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16) {}
-#define HX_BEGIN_LOCAL_FUNC_S18(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17) {}
-#define HX_BEGIN_LOCAL_FUNC_S19(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18; \
-   void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); } \
-   void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18) {}
+#define HXARGC(x) int __ArgCount() const HXCPP_OVERRIDE { return x; }
+
+#if (HXCPP_API_LEVEL>=500)
+    #define HX_BEGIN_LOCAL_FUNC_S0(SUPER,name) \
+       struct name : public SUPER { \
+       name() {}
+
+    
+    #define HX_BEGIN_LOCAL_FUNC_S1(SUPER,name,t0,v0) \
+       struct name : public SUPER { \
+       t0 v0; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); } \
+       name(t0 __0) : v0(__0) {}
+    #define HX_BEGIN_LOCAL_FUNC_S2(SUPER,name,t0,v0,t1,v1) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); } \
+       name(t0 __0,t1 __1) : v0(__0),v1(__1) {}
+    #define HX_BEGIN_LOCAL_FUNC_S3(SUPER,name,t0,v0,t1,v1,t2,v2) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); } \
+       name(t0 __0,t1 __1,t2 __2) : v0(__0),v1(__1),v2(__2) {}
+    #define HX_BEGIN_LOCAL_FUNC_S4(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3) : v0(__0),v1(__1),v2(__2),v3(__3) {}
+    #define HX_BEGIN_LOCAL_FUNC_S5(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4) {}
+    #define HX_BEGIN_LOCAL_FUNC_S6(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5) {}
+    #define HX_BEGIN_LOCAL_FUNC_S7(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6) {}
+    #define HX_BEGIN_LOCAL_FUNC_S8(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7) {}
+    #define HX_BEGIN_LOCAL_FUNC_S9(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8) {}
+    #define HX_BEGIN_LOCAL_FUNC_S10(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9) {}
+    #define HX_BEGIN_LOCAL_FUNC_S11(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10) {}
+    #define HX_BEGIN_LOCAL_FUNC_S12(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11) {}
+    #define HX_BEGIN_LOCAL_FUNC_S13(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12) {}
+    #define HX_BEGIN_LOCAL_FUNC_S14(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13) {}
+    #define HX_BEGIN_LOCAL_FUNC_S15(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14) {}
+    #define HX_BEGIN_LOCAL_FUNC_S16(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15) {}
+    #define HX_BEGIN_LOCAL_FUNC_S17(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16) {}
+    #define HX_BEGIN_LOCAL_FUNC_S18(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17) {}
+    #define HX_BEGIN_LOCAL_FUNC_S19(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18; \
+       void __Mark( ::hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); } \
+       void __Visit( ::hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18) {}
+#else
+    #define HX_BEGIN_LOCAL_FUNC_S0(SUPER,name) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); } \
+       name() {}
+
+    
+    #define HX_BEGIN_LOCAL_FUNC_S1(SUPER,name,t0,v0) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); } \
+       name(t0 __0) : v0(__0) {}
+    #define HX_BEGIN_LOCAL_FUNC_S2(SUPER,name,t0,v0,t1,v1) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); } \
+       name(t0 __0,t1 __1) : v0(__0),v1(__1) {}
+    #define HX_BEGIN_LOCAL_FUNC_S3(SUPER,name,t0,v0,t1,v1,t2,v2) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); } \
+       name(t0 __0,t1 __1,t2 __2) : v0(__0),v1(__1),v2(__2) {}
+    #define HX_BEGIN_LOCAL_FUNC_S4(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3) : v0(__0),v1(__1),v2(__2),v3(__3) {}
+    #define HX_BEGIN_LOCAL_FUNC_S5(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4) {}
+    #define HX_BEGIN_LOCAL_FUNC_S6(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5) {}
+    #define HX_BEGIN_LOCAL_FUNC_S7(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6) {}
+    #define HX_BEGIN_LOCAL_FUNC_S8(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7) {}
+    #define HX_BEGIN_LOCAL_FUNC_S9(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8) {}
+    #define HX_BEGIN_LOCAL_FUNC_S10(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9) {}
+    #define HX_BEGIN_LOCAL_FUNC_S11(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10) {}
+    #define HX_BEGIN_LOCAL_FUNC_S12(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11) {}
+    #define HX_BEGIN_LOCAL_FUNC_S13(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12) {}
+    #define HX_BEGIN_LOCAL_FUNC_S14(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13) {}
+    #define HX_BEGIN_LOCAL_FUNC_S15(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14) {}
+    #define HX_BEGIN_LOCAL_FUNC_S16(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15) {}
+    #define HX_BEGIN_LOCAL_FUNC_S17(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16) {}
+    #define HX_BEGIN_LOCAL_FUNC_S18(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17) {}
+    #define HX_BEGIN_LOCAL_FUNC_S19(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId =  ::hx::clsIdClosure }; \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18; \
+       void __Mark( ::hx::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); } \
+       void __Visit( ::hx::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18) {}
+#endif
 
 #define HX_LOCAL_RUN _hx_run
 
@@ -1029,68 +1163,68 @@ static ::Dynamic __##class##func(const Array< ::Dynamic> &inArgs) \
 
 
 #define HX_DECLARE_DYNAMIC_FUNCTIONS \
-               ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23,const Dynamic &inArg24); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23,const Dynamic &inArg24,const Dynamic &inArg25); \
+               ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23,const ::Dynamic &inArg24); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23,const ::Dynamic &inArg24,const ::Dynamic &inArg25); \
  
 
 
 #define HX_DECLARE_VARIANT_FUNCTIONS \
   inline  ::Dynamic operator()(); \
-   inline  ::Dynamic operator()(const Dynamic &inArg0); \
-   inline  ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1); \
-   inline  ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2); \
-   inline  ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3); \
-   inline  ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23,const Dynamic &inArg24); \
-    ::Dynamic operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4,const Dynamic &inArg5,const Dynamic &inArg6,const Dynamic &inArg7,const Dynamic &inArg8,const Dynamic &inArg9,const Dynamic &inArg10,const Dynamic &inArg11,const Dynamic &inArg12,const Dynamic &inArg13,const Dynamic &inArg14,const Dynamic &inArg15,const Dynamic &inArg16,const Dynamic &inArg17,const Dynamic &inArg18,const Dynamic &inArg19,const Dynamic &inArg20,const Dynamic &inArg21,const Dynamic &inArg22,const Dynamic &inArg23,const Dynamic &inArg24,const Dynamic &inArg25); \
+   inline  ::Dynamic operator()(const ::Dynamic &inArg0); \
+   inline  ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1); \
+   inline  ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2); \
+   inline  ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3); \
+   inline  ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23,const ::Dynamic &inArg24); \
+    ::Dynamic operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4,const ::Dynamic &inArg5,const ::Dynamic &inArg6,const ::Dynamic &inArg7,const ::Dynamic &inArg8,const ::Dynamic &inArg9,const ::Dynamic &inArg10,const ::Dynamic &inArg11,const ::Dynamic &inArg12,const ::Dynamic &inArg13,const ::Dynamic &inArg14,const ::Dynamic &inArg15,const ::Dynamic &inArg16,const ::Dynamic &inArg17,const ::Dynamic &inArg18,const ::Dynamic &inArg19,const ::Dynamic &inArg20,const ::Dynamic &inArg21,const ::Dynamic &inArg22,const ::Dynamic &inArg23,const ::Dynamic &inArg24,const ::Dynamic &inArg25); \
  
 
 
 #define HX_IMPLEMENT_INLINE_VARIANT_FUNCTIONS \
   ::Dynamic Variant::operator()() { CheckFPtr(); return valObject->__run(); } \
-   ::Dynamic Variant::operator()(const Dynamic &inArg0) { CheckFPtr(); return valObject->__run(inArg0); } \
-   ::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1) { CheckFPtr(); return valObject->__run(inArg0,inArg1); } \
-   ::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2) { CheckFPtr(); return valObject->__run(inArg0,inArg1,inArg2); } \
-   ::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3) { CheckFPtr(); return valObject->__run(inArg0,inArg1,inArg2,inArg3); } \
-   ::Dynamic Variant::operator()(const Dynamic &inArg0,const Dynamic &inArg1,const Dynamic &inArg2,const Dynamic &inArg3,const Dynamic &inArg4) { CheckFPtr(); return valObject->__run(inArg0,inArg1,inArg2,inArg3,inArg4); } \
+   ::Dynamic Variant::operator()(const ::Dynamic &inArg0) { CheckFPtr(); return valObject->__run(inArg0); } \
+   ::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1) { CheckFPtr(); return valObject->__run(inArg0,inArg1); } \
+   ::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2) { CheckFPtr(); return valObject->__run(inArg0,inArg1,inArg2); } \
+   ::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3) { CheckFPtr(); return valObject->__run(inArg0,inArg1,inArg2,inArg3); } \
+   ::Dynamic Variant::operator()(const ::Dynamic &inArg0,const ::Dynamic &inArg1,const ::Dynamic &inArg2,const ::Dynamic &inArg3,const ::Dynamic &inArg4) { CheckFPtr(); return valObject->__run(inArg0,inArg1,inArg2,inArg3,inArg4); } \
                                            
 
 
diff --git a/Sources/c_borogove/iinclude/hx/Macros.tpl b/Sources/c_borogove/iinclude/hx/Macros.tpl
index bae9abf..5f75bde 100644
--- a/Sources/c_borogove/iinclude/hx/Macros.tpl
+++ b/Sources/c_borogove/iinclude/hx/Macros.tpl
@@ -35,7 +35,7 @@ static ::NS::Dynamic __##class##func(::hxNS::Object *inObj, dynamic_arg_list) \
 
 
 #define HX_DEFINE_DYNAMIC_FUNC_EXTRA(class,N,func,ret,array_list,dynamic_arg_list,arg_list) \
-static ::NS::Dynamic __##class##func(::hxNS::Object *inObj, const Array< ::NS::Dynamic> &inArgs) \
+static ::NS::Dynamic __##class##func(::hxNS::Object *inObj, const ::NS::Array< ::NS::Dynamic> &inArgs) \
 { \
       ret reinterpret_cast<class *>(inObj)->func(array_list); return  ::NS::Dynamic(); \
 }; \
@@ -96,7 +96,7 @@ static ::NS::Dynamic __##class##func(dynamic_arg_list) \
 
 
 #define STATIC_HX_DEFINE_DYNAMIC_FUNC_EXTRA(class,N,func,ret,array_list,dynamic_arg_list,arg_list) \
-static ::NS::Dynamic __##class##func(const Array< ::NS::Dynamic> &inArgs) \
+static ::NS::Dynamic __##class##func(const ::NS::Array< ::NS::Dynamic> &inArgs) \
 { \
       ret class::func(array_list); return  ::NS::Dynamic(); \
 }; \
@@ -117,44 +117,70 @@ static ::NS::Dynamic __##class##func(const Array< ::NS::Dynamic> &inArgs) \
 ::end::
 ::end::::end::
 
-
-#define HX_DYNAMIC_CALL(ret,func,array_args,dyn_arg_list,arg_list) \
-    ::NS::Dynamic __Run(const Array< ::NS::Dynamic> &inArgs) { ret func( array_args ); return null();} \
-    ::NS::Dynamic __run(dyn_arg_list) { ret func( arg_list ); return null();}
+#if (HXCPP_API_LEVEL>=500)
+    #define HX_DYNAMIC_CALL(ret,func,array_args,dyn_arg_list,arg_list)
+#else
+    #define HX_DYNAMIC_CALL(ret,func,array_args,dyn_arg_list,arg_list) \
+        ::NS::Dynamic __Run(const ::NS::Array< ::NS::Dynamic> &inArgs) HXCPP_OVERRIDE { ret func( array_args ); return ::NS::null();} \
+        ::NS::Dynamic __run(dyn_arg_list) HXCPP_OVERRIDE { ret func( arg_list ); return ::NS::null();}
+#endif
 
 ::foreach PARAMS::
 #define HX_DYNAMIC_CALL::ARG::(ret,func) HX_DYNAMIC_CALL(ret,func,HX_ARR_LIST::ARG::,HX_DYNAMIC_ARG_LIST::ARG::,HX_ARG_LIST::ARG::)::end::
 
-#define HX_BEGIN_DEFAULT_FUNC(name,t0) \
-	namespace { \
-   struct name : public ::hxNS::Object { int __GetType() const { return vtFunction; } \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId = ::hxNS::clsIdClosure }; \
-   ::hxNS::ObjectPtr<t0> __this; \
-   name(::hxNS::ObjectPtr<t0> __0 = null()) : __this(__0) {} \
-   void __Mark(::hxNS::MarkContext *__inCtx) { HX_MARK_MEMBER(__this); } \
-   void __Visit(::hxNS::VisitContext *__inCtx) { HX_VISIT_MEMBER(__this); }
-
+#if (HXCPP_API_LEVEL>=500)
+    #define HX_BEGIN_DEFAULT_FUNC(name,t0) \
+	    namespace { \
+       struct name : public ::hxNS::Object { \
+       ::hxNS::ObjectPtr<t0> __this; \
+       name(::hxNS::ObjectPtr<t0> __0 = ::NS::null()) : __this(__0) {} \
+       void __Mark(::hxNS::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER(__this); } \
+       void __Visit(::hxNS::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(__this); }
+#else
+    #define HX_BEGIN_DEFAULT_FUNC(name,t0) \
+	    namespace { \
+       struct name : public ::hxNS::Object { int __GetType() const HXCPP_OVERRIDE { return vtFunction; } \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId = ::hxNS::clsIdClosure }; \
+       ::hxNS::ObjectPtr<t0> __this; \
+       name(::hxNS::ObjectPtr<t0> __0 = ::NS::null()) : __this(__0) {} \
+       void __Mark(::hxNS::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER(__this); } \
+       void __Visit(::hxNS::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(__this); }
+#endif
 
 #define HX_END_DEFAULT_FUNC \
 }
 
-#define HXARGC(x) int __ArgCount() const { return x; }
-
-#define HX_BEGIN_LOCAL_FUNC_S0(SUPER,name) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId = ::hxNS::clsIdClosure }; \
-   void __Mark(::hxNS::MarkContext *__inCtx) { DoMarkThis(__inCtx); } \
-   void __Visit(::hxNS::VisitContext *__inCtx) { DoVisitThis(__inCtx); } \
-   name() {}
-
-::foreach LOCALS::
-#define HX_BEGIN_LOCAL_FUNC_S::ARG::(SUPER,name,::TYPE_ARGS::) \
-   struct name : public SUPER { \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId = ::hxNS::clsIdClosure }; \
-   ::TYPE_DECL::; \
-   void __Mark(::hxNS::MarkContext *__inCtx) { DoMarkThis(__inCtx); ::MARKS:: } \
-   void __Visit(::hxNS::VisitContext *__inCtx) { DoVisitThis(__inCtx); ::VISITS:: } \
-   name(::CONSTRUCT_ARGS::) : ::CONSTRUCT_VARS:: {}::end::
+#define HXARGC(x) int __ArgCount() const HXCPP_OVERRIDE { return x; }
+
+#if (HXCPP_API_LEVEL>=500)
+    #define HX_BEGIN_LOCAL_FUNC_S0(SUPER,name) \
+       struct name : public SUPER { \
+       name() {}
+
+    ::foreach LOCALS::
+    #define HX_BEGIN_LOCAL_FUNC_S::ARG::(SUPER,name,::TYPE_ARGS::) \
+       struct name : public SUPER { \
+       ::TYPE_DECL::; \
+       void __Mark(::hxNS::MarkContext *__inCtx) override { ::MARKS:: } \
+       void __Visit(::hxNS::VisitContext *__inCtx) override { ::VISITS:: } \
+       name(::CONSTRUCT_ARGS::) : ::CONSTRUCT_VARS:: {}::end::
+#else
+    #define HX_BEGIN_LOCAL_FUNC_S0(SUPER,name) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId = ::hxNS::clsIdClosure }; \
+       void __Mark(::hxNS::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); } \
+       void __Visit(::hxNS::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); } \
+       name() {}
+
+    ::foreach LOCALS::
+    #define HX_BEGIN_LOCAL_FUNC_S::ARG::(SUPER,name,::TYPE_ARGS::) \
+       struct name : public SUPER { \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId = ::hxNS::clsIdClosure }; \
+       ::TYPE_DECL::; \
+       void __Mark(::hxNS::MarkContext *__inCtx) HXCPP_OVERRIDE { DoMarkThis(__inCtx); ::MARKS:: } \
+       void __Visit(::hxNS::VisitContext *__inCtx) HXCPP_OVERRIDE { DoVisitThis(__inCtx); ::VISITS:: } \
+       name(::CONSTRUCT_ARGS::) : ::CONSTRUCT_VARS:: {}::end::
+#endif
 
 #define HX_LOCAL_RUN _hx_run
 
diff --git a/Sources/c_borogove/iinclude/hx/MacrosFixed.h b/Sources/c_borogove/iinclude/hx/MacrosFixed.h
index d3c194a..0396e88 100644
--- a/Sources/c_borogove/iinclude/hx/MacrosFixed.h
+++ b/Sources/c_borogove/iinclude/hx/MacrosFixed.h
@@ -44,19 +44,19 @@ static  ::Dynamic Create##enum_obj(::String inName,::hx::DynamicArray inArgs) \
 
 // ---- Fields ----------------------
 
-#define HX_IS_INSTANCE_OF bool _hx_isInstanceOf(int inClassId) { return inClassId==1 || inClassId==(int)_hx_ClassId; }
+#define HX_IS_INSTANCE_OF bool _hx_isInstanceOf(int inClassId) HXCPP_OVERRIDE { return inClassId==1 || inClassId==(int)_hx_ClassId; }
 
 #define HX_DO_RTTI_ALL \
    static ::hx::ObjectPtr< ::hx::Class_obj> __mClass; \
-   ::hx::ObjectPtr< ::hx::Class_obj > __GetClass() const { return __mClass; } \
+   ::hx::ObjectPtr< ::hx::Class_obj > __GetClass() const HXCPP_OVERRIDE { return __mClass; } \
    inline static ::hx::ObjectPtr< ::hx::Class_obj> &__SGetClass() { return __mClass; } \
    inline operator super *() { return this; }
 
 #define HX_DO_RTTI \
    HX_DO_RTTI_ALL \
-    ::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp); \
-    ::hx::Val __SetField(const ::String &inString,const  ::hx::Val &inValue, ::hx::PropertyAccess inCallProp); \
-   void __GetFields(Array< ::String> &outFields);
+    ::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp) HXCPP_OVERRIDE; \
+    ::hx::Val __SetField(const ::String &inString,const  ::hx::Val &inValue, ::hx::PropertyAccess inCallProp) HXCPP_OVERRIDE; \
+   void __GetFields(::Array< ::String> &outFields) HXCPP_OVERRIDE;
 
 #define HX_DO_INTERFACE_RTTI \
    static ::hx::ObjectPtr< ::hx::Class_obj> __mClass; \
@@ -64,20 +64,20 @@ static  ::Dynamic Create##enum_obj(::String inName,::hx::DynamicArray inArgs) \
 	static void __register();
 
 #define HX_DO_ENUM_RTTI_INTERNAL \
-    ::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp); \
+    ::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp) HXCPP_OVERRIDE; \
    static int __FindIndex(::String inName); \
    static int __FindArgCount(::String inName);
 
 #define HX_DO_ENUM_RTTI \
    HX_DO_ENUM_RTTI_INTERNAL \
    static ::hx::ObjectPtr< ::hx::Class_obj> __mClass; \
-   ::hx::ObjectPtr< ::hx::Class_obj > __GetClass() const { return __mClass; } \
+   ::hx::ObjectPtr< ::hx::Class_obj > __GetClass() const HXCPP_OVERRIDE { return __mClass; } \
    static ::hx::ObjectPtr< ::hx::Class_obj> &__SGetClass() { return __mClass; }
 
 
 #define HX_DECLARE_IMPLEMENT_DYNAMIC   ::Dynamic __mDynamicFields; \
      ::Dynamic *__GetFieldMap() { return &__mDynamicFields; } \
-    bool __HasField(const String &inString) \
+    bool __HasField(const ::String &inString) \
       { return ::hx::FieldMapHas(&__mDynamicFields,inString) || super::__HasField(inString); }
 
 
diff --git a/Sources/c_borogove/iinclude/hx/MacrosJumbo.h b/Sources/c_borogove/iinclude/hx/MacrosJumbo.h
index 52b6d93..285c627 100644
--- a/Sources/c_borogove/iinclude/hx/MacrosJumbo.h
+++ b/Sources/c_borogove/iinclude/hx/MacrosJumbo.h
@@ -9,259 +9,515 @@
 #ifndef HX_MACROS_JUMBO_H
 #define HX_MACROS_JUMBO_H
 
-
-#define HX_BEGIN_LOCAL_FUNC_S20(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19) {}
-#define HX_BEGIN_LOCAL_FUNC_S21(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20) {}
-#define HX_BEGIN_LOCAL_FUNC_S22(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21) {}
-#define HX_BEGIN_LOCAL_FUNC_S23(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22) {}
-#define HX_BEGIN_LOCAL_FUNC_S24(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23) {}
-#define HX_BEGIN_LOCAL_FUNC_S25(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24) {}
-#define HX_BEGIN_LOCAL_FUNC_S26(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25) {}
-#define HX_BEGIN_LOCAL_FUNC_S27(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26) {}
-#define HX_BEGIN_LOCAL_FUNC_S28(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27) {}
-#define HX_BEGIN_LOCAL_FUNC_S29(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28) {}
-#define HX_BEGIN_LOCAL_FUNC_S30(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29) {}
-#define HX_BEGIN_LOCAL_FUNC_S31(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30) {}
-#define HX_BEGIN_LOCAL_FUNC_S32(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31) {}
-#define HX_BEGIN_LOCAL_FUNC_S33(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32) {}
-#define HX_BEGIN_LOCAL_FUNC_S34(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33) {}
-#define HX_BEGIN_LOCAL_FUNC_S35(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34) {}
-#define HX_BEGIN_LOCAL_FUNC_S36(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35) {}
-#define HX_BEGIN_LOCAL_FUNC_S37(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36) {}
-#define HX_BEGIN_LOCAL_FUNC_S38(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37) {}
-#define HX_BEGIN_LOCAL_FUNC_S39(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38) {}
-#define HX_BEGIN_LOCAL_FUNC_S40(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39) {}
-#define HX_BEGIN_LOCAL_FUNC_S41(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40) {}
-#define HX_BEGIN_LOCAL_FUNC_S42(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41) {}
-#define HX_BEGIN_LOCAL_FUNC_S43(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42) {}
-#define HX_BEGIN_LOCAL_FUNC_S44(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43) {}
-#define HX_BEGIN_LOCAL_FUNC_S45(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44) {}
-#define HX_BEGIN_LOCAL_FUNC_S46(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45) {}
-#define HX_BEGIN_LOCAL_FUNC_S47(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46) {}
-#define HX_BEGIN_LOCAL_FUNC_S48(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47) {}
-#define HX_BEGIN_LOCAL_FUNC_S49(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48) {}
-#define HX_BEGIN_LOCAL_FUNC_S50(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49) {}
-#define HX_BEGIN_LOCAL_FUNC_S51(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50) {}
-#define HX_BEGIN_LOCAL_FUNC_S52(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51) {}
-#define HX_BEGIN_LOCAL_FUNC_S53(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52) {}
-#define HX_BEGIN_LOCAL_FUNC_S54(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53) {}
-#define HX_BEGIN_LOCAL_FUNC_S55(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54) {}
-#define HX_BEGIN_LOCAL_FUNC_S56(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55) {}
-#define HX_BEGIN_LOCAL_FUNC_S57(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56) {}
-#define HX_BEGIN_LOCAL_FUNC_S58(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57) {}
-#define HX_BEGIN_LOCAL_FUNC_S59(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57;t58 v58; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); HX_MARK_MEMBER(v58); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); HX_VISIT_MEMBER(v58); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57,t58 __58) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57),v58(__58) {}
-#define HX_BEGIN_LOCAL_FUNC_S60(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57;t58 v58;t59 v59; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); HX_MARK_MEMBER(v58); HX_MARK_MEMBER(v59); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); HX_VISIT_MEMBER(v58); HX_VISIT_MEMBER(v59); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57,t58 __58,t59 __59) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57),v58(__58),v59(__59) {}
-#define HX_BEGIN_LOCAL_FUNC_S61(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59,t60,v60) \
-   struct name : public SUPER { \
-   t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57;t58 v58;t59 v59;t60 v60; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); HX_MARK_MEMBER(v58); HX_MARK_MEMBER(v59); HX_MARK_MEMBER(v60); } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); HX_VISIT_MEMBER(v58); HX_VISIT_MEMBER(v59); HX_VISIT_MEMBER(v60); } \
-   name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57,t58 __58,t59 __59,t60 __60) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57),v58(__58),v59(__59),v60(__60) {}
+#if (HXCPP_API_LEVEL>=500)
+    
+    #define HX_BEGIN_LOCAL_FUNC_S20(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19) {}
+    #define HX_BEGIN_LOCAL_FUNC_S21(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20) {}
+    #define HX_BEGIN_LOCAL_FUNC_S22(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21) {}
+    #define HX_BEGIN_LOCAL_FUNC_S23(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22) {}
+    #define HX_BEGIN_LOCAL_FUNC_S24(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23) {}
+    #define HX_BEGIN_LOCAL_FUNC_S25(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24) {}
+    #define HX_BEGIN_LOCAL_FUNC_S26(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25) {}
+    #define HX_BEGIN_LOCAL_FUNC_S27(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26) {}
+    #define HX_BEGIN_LOCAL_FUNC_S28(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27) {}
+    #define HX_BEGIN_LOCAL_FUNC_S29(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28) {}
+    #define HX_BEGIN_LOCAL_FUNC_S30(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29) {}
+    #define HX_BEGIN_LOCAL_FUNC_S31(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30) {}
+    #define HX_BEGIN_LOCAL_FUNC_S32(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31) {}
+    #define HX_BEGIN_LOCAL_FUNC_S33(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32) {}
+    #define HX_BEGIN_LOCAL_FUNC_S34(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33) {}
+    #define HX_BEGIN_LOCAL_FUNC_S35(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34) {}
+    #define HX_BEGIN_LOCAL_FUNC_S36(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35) {}
+    #define HX_BEGIN_LOCAL_FUNC_S37(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36) {}
+    #define HX_BEGIN_LOCAL_FUNC_S38(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37) {}
+    #define HX_BEGIN_LOCAL_FUNC_S39(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38) {}
+    #define HX_BEGIN_LOCAL_FUNC_S40(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39) {}
+    #define HX_BEGIN_LOCAL_FUNC_S41(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40) {}
+    #define HX_BEGIN_LOCAL_FUNC_S42(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41) {}
+    #define HX_BEGIN_LOCAL_FUNC_S43(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42) {}
+    #define HX_BEGIN_LOCAL_FUNC_S44(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43) {}
+    #define HX_BEGIN_LOCAL_FUNC_S45(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44) {}
+    #define HX_BEGIN_LOCAL_FUNC_S46(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45) {}
+    #define HX_BEGIN_LOCAL_FUNC_S47(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46) {}
+    #define HX_BEGIN_LOCAL_FUNC_S48(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47) {}
+    #define HX_BEGIN_LOCAL_FUNC_S49(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48) {}
+    #define HX_BEGIN_LOCAL_FUNC_S50(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49) {}
+    #define HX_BEGIN_LOCAL_FUNC_S51(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50) {}
+    #define HX_BEGIN_LOCAL_FUNC_S52(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51) {}
+    #define HX_BEGIN_LOCAL_FUNC_S53(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52) {}
+    #define HX_BEGIN_LOCAL_FUNC_S54(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53) {}
+    #define HX_BEGIN_LOCAL_FUNC_S55(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54) {}
+    #define HX_BEGIN_LOCAL_FUNC_S56(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55) {}
+    #define HX_BEGIN_LOCAL_FUNC_S57(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56) {}
+    #define HX_BEGIN_LOCAL_FUNC_S58(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57) {}
+    #define HX_BEGIN_LOCAL_FUNC_S59(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57;t58 v58; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); HX_MARK_MEMBER(v58); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); HX_VISIT_MEMBER(v58); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57,t58 __58) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57),v58(__58) {}
+    #define HX_BEGIN_LOCAL_FUNC_S60(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57;t58 v58;t59 v59; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); HX_MARK_MEMBER(v58); HX_MARK_MEMBER(v59); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); HX_VISIT_MEMBER(v58); HX_VISIT_MEMBER(v59); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57,t58 __58,t59 __59) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57),v58(__58),v59(__59) {}
+    #define HX_BEGIN_LOCAL_FUNC_S61(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59,t60,v60) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57;t58 v58;t59 v59;t60 v60; \
+       void __Mark( ::hx::MarkContext *__inCtx) { HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); HX_MARK_MEMBER(v58); HX_MARK_MEMBER(v59); HX_MARK_MEMBER(v60); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); HX_VISIT_MEMBER(v58); HX_VISIT_MEMBER(v59); HX_VISIT_MEMBER(v60); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57,t58 __58,t59 __59,t60 __60) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57),v58(__58),v59(__59),v60(__60) {}
+#else
+    
+    #define HX_BEGIN_LOCAL_FUNC_S20(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19) {}
+    #define HX_BEGIN_LOCAL_FUNC_S21(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20) {}
+    #define HX_BEGIN_LOCAL_FUNC_S22(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21) {}
+    #define HX_BEGIN_LOCAL_FUNC_S23(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22) {}
+    #define HX_BEGIN_LOCAL_FUNC_S24(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23) {}
+    #define HX_BEGIN_LOCAL_FUNC_S25(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24) {}
+    #define HX_BEGIN_LOCAL_FUNC_S26(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25) {}
+    #define HX_BEGIN_LOCAL_FUNC_S27(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26) {}
+    #define HX_BEGIN_LOCAL_FUNC_S28(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27) {}
+    #define HX_BEGIN_LOCAL_FUNC_S29(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28) {}
+    #define HX_BEGIN_LOCAL_FUNC_S30(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29) {}
+    #define HX_BEGIN_LOCAL_FUNC_S31(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30) {}
+    #define HX_BEGIN_LOCAL_FUNC_S32(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31) {}
+    #define HX_BEGIN_LOCAL_FUNC_S33(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32) {}
+    #define HX_BEGIN_LOCAL_FUNC_S34(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33) {}
+    #define HX_BEGIN_LOCAL_FUNC_S35(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34) {}
+    #define HX_BEGIN_LOCAL_FUNC_S36(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35) {}
+    #define HX_BEGIN_LOCAL_FUNC_S37(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36) {}
+    #define HX_BEGIN_LOCAL_FUNC_S38(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37) {}
+    #define HX_BEGIN_LOCAL_FUNC_S39(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38) {}
+    #define HX_BEGIN_LOCAL_FUNC_S40(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39) {}
+    #define HX_BEGIN_LOCAL_FUNC_S41(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40) {}
+    #define HX_BEGIN_LOCAL_FUNC_S42(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41) {}
+    #define HX_BEGIN_LOCAL_FUNC_S43(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42) {}
+    #define HX_BEGIN_LOCAL_FUNC_S44(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43) {}
+    #define HX_BEGIN_LOCAL_FUNC_S45(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44) {}
+    #define HX_BEGIN_LOCAL_FUNC_S46(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45) {}
+    #define HX_BEGIN_LOCAL_FUNC_S47(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46) {}
+    #define HX_BEGIN_LOCAL_FUNC_S48(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47) {}
+    #define HX_BEGIN_LOCAL_FUNC_S49(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48) {}
+    #define HX_BEGIN_LOCAL_FUNC_S50(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49) {}
+    #define HX_BEGIN_LOCAL_FUNC_S51(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50) {}
+    #define HX_BEGIN_LOCAL_FUNC_S52(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51) {}
+    #define HX_BEGIN_LOCAL_FUNC_S53(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52) {}
+    #define HX_BEGIN_LOCAL_FUNC_S54(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53) {}
+    #define HX_BEGIN_LOCAL_FUNC_S55(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54) {}
+    #define HX_BEGIN_LOCAL_FUNC_S56(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55) {}
+    #define HX_BEGIN_LOCAL_FUNC_S57(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56) {}
+    #define HX_BEGIN_LOCAL_FUNC_S58(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57) {}
+    #define HX_BEGIN_LOCAL_FUNC_S59(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57;t58 v58; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); HX_MARK_MEMBER(v58); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); HX_VISIT_MEMBER(v58); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57,t58 __58) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57),v58(__58) {}
+    #define HX_BEGIN_LOCAL_FUNC_S60(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57;t58 v58;t59 v59; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); HX_MARK_MEMBER(v58); HX_MARK_MEMBER(v59); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); HX_VISIT_MEMBER(v58); HX_VISIT_MEMBER(v59); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57,t58 __58,t59 __59) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57),v58(__58),v59(__59) {}
+    #define HX_BEGIN_LOCAL_FUNC_S61(SUPER,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59,t60,v60) \
+       struct name : public SUPER { \
+       t0 v0;t1 v1;t2 v2;t3 v3;t4 v4;t5 v5;t6 v6;t7 v7;t8 v8;t9 v9;t10 v10;t11 v11;t12 v12;t13 v13;t14 v14;t15 v15;t16 v16;t17 v17;t18 v18;t19 v19;t20 v20;t21 v21;t22 v22;t23 v23;t24 v24;t25 v25;t26 v26;t27 v27;t28 v28;t29 v29;t30 v30;t31 v31;t32 v32;t33 v33;t34 v34;t35 v35;t36 v36;t37 v37;t38 v38;t39 v39;t40 v40;t41 v41;t42 v42;t43 v43;t44 v44;t45 v45;t46 v46;t47 v47;t48 v48;t49 v49;t50 v50;t51 v51;t52 v52;t53 v53;t54 v54;t55 v55;t56 v56;t57 v57;t58 v58;t59 v59;t60 v60; \
+       void __Mark( ::hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); HX_MARK_MEMBER(v0); HX_MARK_MEMBER(v1); HX_MARK_MEMBER(v2); HX_MARK_MEMBER(v3); HX_MARK_MEMBER(v4); HX_MARK_MEMBER(v5); HX_MARK_MEMBER(v6); HX_MARK_MEMBER(v7); HX_MARK_MEMBER(v8); HX_MARK_MEMBER(v9); HX_MARK_MEMBER(v10); HX_MARK_MEMBER(v11); HX_MARK_MEMBER(v12); HX_MARK_MEMBER(v13); HX_MARK_MEMBER(v14); HX_MARK_MEMBER(v15); HX_MARK_MEMBER(v16); HX_MARK_MEMBER(v17); HX_MARK_MEMBER(v18); HX_MARK_MEMBER(v19); HX_MARK_MEMBER(v20); HX_MARK_MEMBER(v21); HX_MARK_MEMBER(v22); HX_MARK_MEMBER(v23); HX_MARK_MEMBER(v24); HX_MARK_MEMBER(v25); HX_MARK_MEMBER(v26); HX_MARK_MEMBER(v27); HX_MARK_MEMBER(v28); HX_MARK_MEMBER(v29); HX_MARK_MEMBER(v30); HX_MARK_MEMBER(v31); HX_MARK_MEMBER(v32); HX_MARK_MEMBER(v33); HX_MARK_MEMBER(v34); HX_MARK_MEMBER(v35); HX_MARK_MEMBER(v36); HX_MARK_MEMBER(v37); HX_MARK_MEMBER(v38); HX_MARK_MEMBER(v39); HX_MARK_MEMBER(v40); HX_MARK_MEMBER(v41); HX_MARK_MEMBER(v42); HX_MARK_MEMBER(v43); HX_MARK_MEMBER(v44); HX_MARK_MEMBER(v45); HX_MARK_MEMBER(v46); HX_MARK_MEMBER(v47); HX_MARK_MEMBER(v48); HX_MARK_MEMBER(v49); HX_MARK_MEMBER(v50); HX_MARK_MEMBER(v51); HX_MARK_MEMBER(v52); HX_MARK_MEMBER(v53); HX_MARK_MEMBER(v54); HX_MARK_MEMBER(v55); HX_MARK_MEMBER(v56); HX_MARK_MEMBER(v57); HX_MARK_MEMBER(v58); HX_MARK_MEMBER(v59); HX_MARK_MEMBER(v60); } \
+       void __Visit( ::hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); HX_VISIT_MEMBER(v0); HX_VISIT_MEMBER(v1); HX_VISIT_MEMBER(v2); HX_VISIT_MEMBER(v3); HX_VISIT_MEMBER(v4); HX_VISIT_MEMBER(v5); HX_VISIT_MEMBER(v6); HX_VISIT_MEMBER(v7); HX_VISIT_MEMBER(v8); HX_VISIT_MEMBER(v9); HX_VISIT_MEMBER(v10); HX_VISIT_MEMBER(v11); HX_VISIT_MEMBER(v12); HX_VISIT_MEMBER(v13); HX_VISIT_MEMBER(v14); HX_VISIT_MEMBER(v15); HX_VISIT_MEMBER(v16); HX_VISIT_MEMBER(v17); HX_VISIT_MEMBER(v18); HX_VISIT_MEMBER(v19); HX_VISIT_MEMBER(v20); HX_VISIT_MEMBER(v21); HX_VISIT_MEMBER(v22); HX_VISIT_MEMBER(v23); HX_VISIT_MEMBER(v24); HX_VISIT_MEMBER(v25); HX_VISIT_MEMBER(v26); HX_VISIT_MEMBER(v27); HX_VISIT_MEMBER(v28); HX_VISIT_MEMBER(v29); HX_VISIT_MEMBER(v30); HX_VISIT_MEMBER(v31); HX_VISIT_MEMBER(v32); HX_VISIT_MEMBER(v33); HX_VISIT_MEMBER(v34); HX_VISIT_MEMBER(v35); HX_VISIT_MEMBER(v36); HX_VISIT_MEMBER(v37); HX_VISIT_MEMBER(v38); HX_VISIT_MEMBER(v39); HX_VISIT_MEMBER(v40); HX_VISIT_MEMBER(v41); HX_VISIT_MEMBER(v42); HX_VISIT_MEMBER(v43); HX_VISIT_MEMBER(v44); HX_VISIT_MEMBER(v45); HX_VISIT_MEMBER(v46); HX_VISIT_MEMBER(v47); HX_VISIT_MEMBER(v48); HX_VISIT_MEMBER(v49); HX_VISIT_MEMBER(v50); HX_VISIT_MEMBER(v51); HX_VISIT_MEMBER(v52); HX_VISIT_MEMBER(v53); HX_VISIT_MEMBER(v54); HX_VISIT_MEMBER(v55); HX_VISIT_MEMBER(v56); HX_VISIT_MEMBER(v57); HX_VISIT_MEMBER(v58); HX_VISIT_MEMBER(v59); HX_VISIT_MEMBER(v60); } \
+       name(t0 __0,t1 __1,t2 __2,t3 __3,t4 __4,t5 __5,t6 __6,t7 __7,t8 __8,t9 __9,t10 __10,t11 __11,t12 __12,t13 __13,t14 __14,t15 __15,t16 __16,t17 __17,t18 __18,t19 __19,t20 __20,t21 __21,t22 __22,t23 __23,t24 __24,t25 __25,t26 __26,t27 __27,t28 __28,t29 __29,t30 __30,t31 __31,t32 __32,t33 __33,t34 __34,t35 __35,t36 __36,t37 __37,t38 __38,t39 __39,t40 __40,t41 __41,t42 __42,t43 __43,t44 __44,t45 __45,t46 __46,t47 __47,t48 __48,t49 __49,t50 __50,t51 __51,t52 __52,t53 __53,t54 __54,t55 __55,t56 __56,t57 __57,t58 __58,t59 __59,t60 __60) : v0(__0),v1(__1),v2(__2),v3(__3),v4(__4),v5(__5),v6(__6),v7(__7),v8(__8),v9(__9),v10(__10),v11(__11),v12(__12),v13(__13),v14(__14),v15(__15),v16(__16),v17(__17),v18(__18),v19(__19),v20(__20),v21(__21),v22(__22),v23(__23),v24(__24),v25(__25),v26(__26),v27(__27),v28(__28),v29(__29),v30(__30),v31(__31),v32(__32),v33(__33),v34(__34),v35(__35),v36(__36),v37(__37),v38(__38),v39(__39),v40(__40),v41(__41),v42(__42),v43(__43),v44(__44),v45(__45),v46(__46),v47(__47),v48(__48),v49(__49),v50(__50),v51(__51),v52(__52),v53(__53),v54(__54),v55(__55),v56(__56),v57(__57),v58(__58),v59(__59),v60(__60) {}
+#endif
 
 #define HX_LOCAL_RUN _hx_run
 
@@ -312,89 +568,89 @@
 // For compatibility until next version of haxe is released
 
 #define HX_BEGIN_LOCAL_FUNC20(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19) \
-      HX_BEGIN_LOCAL_FUNC_S20(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19)
+      HX_BEGIN_LOCAL_FUNC_S20( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19)
 #define HX_BEGIN_LOCAL_FUNC21(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20) \
-      HX_BEGIN_LOCAL_FUNC_S21(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20)
+      HX_BEGIN_LOCAL_FUNC_S21( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20)
 #define HX_BEGIN_LOCAL_FUNC22(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21) \
-      HX_BEGIN_LOCAL_FUNC_S22(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21)
+      HX_BEGIN_LOCAL_FUNC_S22( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21)
 #define HX_BEGIN_LOCAL_FUNC23(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22) \
-      HX_BEGIN_LOCAL_FUNC_S23(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22)
+      HX_BEGIN_LOCAL_FUNC_S23( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22)
 #define HX_BEGIN_LOCAL_FUNC24(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23) \
-      HX_BEGIN_LOCAL_FUNC_S24(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23)
+      HX_BEGIN_LOCAL_FUNC_S24( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23)
 #define HX_BEGIN_LOCAL_FUNC25(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24) \
-      HX_BEGIN_LOCAL_FUNC_S25(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24)
+      HX_BEGIN_LOCAL_FUNC_S25( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24)
 #define HX_BEGIN_LOCAL_FUNC26(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25) \
-      HX_BEGIN_LOCAL_FUNC_S26(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25)
+      HX_BEGIN_LOCAL_FUNC_S26( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25)
 #define HX_BEGIN_LOCAL_FUNC27(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26) \
-      HX_BEGIN_LOCAL_FUNC_S27(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26)
+      HX_BEGIN_LOCAL_FUNC_S27( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26)
 #define HX_BEGIN_LOCAL_FUNC28(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27) \
-      HX_BEGIN_LOCAL_FUNC_S28(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27)
+      HX_BEGIN_LOCAL_FUNC_S28( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27)
 #define HX_BEGIN_LOCAL_FUNC29(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28) \
-      HX_BEGIN_LOCAL_FUNC_S29(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28)
+      HX_BEGIN_LOCAL_FUNC_S29( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28)
 #define HX_BEGIN_LOCAL_FUNC30(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29) \
-      HX_BEGIN_LOCAL_FUNC_S30(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29)
+      HX_BEGIN_LOCAL_FUNC_S30( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29)
 #define HX_BEGIN_LOCAL_FUNC31(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30) \
-      HX_BEGIN_LOCAL_FUNC_S31(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30)
+      HX_BEGIN_LOCAL_FUNC_S31( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30)
 #define HX_BEGIN_LOCAL_FUNC32(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31) \
-      HX_BEGIN_LOCAL_FUNC_S32(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31)
+      HX_BEGIN_LOCAL_FUNC_S32( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31)
 #define HX_BEGIN_LOCAL_FUNC33(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32) \
-      HX_BEGIN_LOCAL_FUNC_S33(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32)
+      HX_BEGIN_LOCAL_FUNC_S33( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32)
 #define HX_BEGIN_LOCAL_FUNC34(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33) \
-      HX_BEGIN_LOCAL_FUNC_S34(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33)
+      HX_BEGIN_LOCAL_FUNC_S34( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33)
 #define HX_BEGIN_LOCAL_FUNC35(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34) \
-      HX_BEGIN_LOCAL_FUNC_S35(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34)
+      HX_BEGIN_LOCAL_FUNC_S35( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34)
 #define HX_BEGIN_LOCAL_FUNC36(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35) \
-      HX_BEGIN_LOCAL_FUNC_S36(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35)
+      HX_BEGIN_LOCAL_FUNC_S36( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35)
 #define HX_BEGIN_LOCAL_FUNC37(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36) \
-      HX_BEGIN_LOCAL_FUNC_S37(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36)
+      HX_BEGIN_LOCAL_FUNC_S37( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36)
 #define HX_BEGIN_LOCAL_FUNC38(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37) \
-      HX_BEGIN_LOCAL_FUNC_S38(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37)
+      HX_BEGIN_LOCAL_FUNC_S38( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37)
 #define HX_BEGIN_LOCAL_FUNC39(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38) \
-      HX_BEGIN_LOCAL_FUNC_S39(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38)
+      HX_BEGIN_LOCAL_FUNC_S39( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38)
 #define HX_BEGIN_LOCAL_FUNC40(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39) \
-      HX_BEGIN_LOCAL_FUNC_S40(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39)
+      HX_BEGIN_LOCAL_FUNC_S40( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39)
 #define HX_BEGIN_LOCAL_FUNC41(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40) \
-      HX_BEGIN_LOCAL_FUNC_S41(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40)
+      HX_BEGIN_LOCAL_FUNC_S41( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40)
 #define HX_BEGIN_LOCAL_FUNC42(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41) \
-      HX_BEGIN_LOCAL_FUNC_S42(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41)
+      HX_BEGIN_LOCAL_FUNC_S42( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41)
 #define HX_BEGIN_LOCAL_FUNC43(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42) \
-      HX_BEGIN_LOCAL_FUNC_S43(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42)
+      HX_BEGIN_LOCAL_FUNC_S43( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42)
 #define HX_BEGIN_LOCAL_FUNC44(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43) \
-      HX_BEGIN_LOCAL_FUNC_S44(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43)
+      HX_BEGIN_LOCAL_FUNC_S44( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43)
 #define HX_BEGIN_LOCAL_FUNC45(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44) \
-      HX_BEGIN_LOCAL_FUNC_S45(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44)
+      HX_BEGIN_LOCAL_FUNC_S45( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44)
 #define HX_BEGIN_LOCAL_FUNC46(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45) \
-      HX_BEGIN_LOCAL_FUNC_S46(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45)
+      HX_BEGIN_LOCAL_FUNC_S46( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45)
 #define HX_BEGIN_LOCAL_FUNC47(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46) \
-      HX_BEGIN_LOCAL_FUNC_S47(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46)
+      HX_BEGIN_LOCAL_FUNC_S47( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46)
 #define HX_BEGIN_LOCAL_FUNC48(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47) \
-      HX_BEGIN_LOCAL_FUNC_S48(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47)
+      HX_BEGIN_LOCAL_FUNC_S48( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47)
 #define HX_BEGIN_LOCAL_FUNC49(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48) \
-      HX_BEGIN_LOCAL_FUNC_S49(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48)
+      HX_BEGIN_LOCAL_FUNC_S49( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48)
 #define HX_BEGIN_LOCAL_FUNC50(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49) \
-      HX_BEGIN_LOCAL_FUNC_S50(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49)
+      HX_BEGIN_LOCAL_FUNC_S50( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49)
 #define HX_BEGIN_LOCAL_FUNC51(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50) \
-      HX_BEGIN_LOCAL_FUNC_S51(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50)
+      HX_BEGIN_LOCAL_FUNC_S51( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50)
 #define HX_BEGIN_LOCAL_FUNC52(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51) \
-      HX_BEGIN_LOCAL_FUNC_S52(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51)
+      HX_BEGIN_LOCAL_FUNC_S52( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51)
 #define HX_BEGIN_LOCAL_FUNC53(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52) \
-      HX_BEGIN_LOCAL_FUNC_S53(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52)
+      HX_BEGIN_LOCAL_FUNC_S53( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52)
 #define HX_BEGIN_LOCAL_FUNC54(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53) \
-      HX_BEGIN_LOCAL_FUNC_S54(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53)
+      HX_BEGIN_LOCAL_FUNC_S54( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53)
 #define HX_BEGIN_LOCAL_FUNC55(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54) \
-      HX_BEGIN_LOCAL_FUNC_S55(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54)
+      HX_BEGIN_LOCAL_FUNC_S55( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54)
 #define HX_BEGIN_LOCAL_FUNC56(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55) \
-      HX_BEGIN_LOCAL_FUNC_S56(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55)
+      HX_BEGIN_LOCAL_FUNC_S56( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55)
 #define HX_BEGIN_LOCAL_FUNC57(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56) \
-      HX_BEGIN_LOCAL_FUNC_S57(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56)
+      HX_BEGIN_LOCAL_FUNC_S57( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56)
 #define HX_BEGIN_LOCAL_FUNC58(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57) \
-      HX_BEGIN_LOCAL_FUNC_S58(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57)
+      HX_BEGIN_LOCAL_FUNC_S58( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57)
 #define HX_BEGIN_LOCAL_FUNC59(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58) \
-      HX_BEGIN_LOCAL_FUNC_S59(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58)
+      HX_BEGIN_LOCAL_FUNC_S59( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58)
 #define HX_BEGIN_LOCAL_FUNC60(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59) \
-      HX_BEGIN_LOCAL_FUNC_S60(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59)
+      HX_BEGIN_LOCAL_FUNC_S60( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59)
 #define HX_BEGIN_LOCAL_FUNC61(name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59,t60,v60) \
-      HX_BEGIN_LOCAL_FUNC_S61(hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59,t60,v60)
+      HX_BEGIN_LOCAL_FUNC_S61( ::hx::LocalFunc,name,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7,t8,v8,t9,v9,t10,v10,t11,v11,t12,v12,t13,v13,t14,v14,t15,v15,t16,v16,t17,v17,t18,v18,t19,v19,t20,v20,t21,v21,t22,v22,t23,v23,t24,v24,t25,v25,t26,v26,t27,v27,t28,v28,t29,v29,t30,v30,t31,v31,t32,v32,t33,v33,t34,v34,t35,v35,t36,v36,t37,v37,t38,v38,t39,v39,t40,v40,t41,v41,t42,v42,t43,v43,t44,v44,t45,v45,t46,v46,t47,v47,t48,v48,t49,v49,t50,v50,t51,v51,t52,v52,t53,v53,t54,v54,t55,v55,t56,v56,t57,v57,t58,v58,t59,v59,t60,v60)
 
 
 #endif
diff --git a/Sources/c_borogove/iinclude/hx/MacrosJumbo.tpl b/Sources/c_borogove/iinclude/hx/MacrosJumbo.tpl
index 213b272..6fdc62f 100644
--- a/Sources/c_borogove/iinclude/hx/MacrosJumbo.tpl
+++ b/Sources/c_borogove/iinclude/hx/MacrosJumbo.tpl
@@ -1,13 +1,23 @@
 #ifndef HX_MACROS_JUMBO_H
 #define HX_MACROS_JUMBO_H
 
-::foreach LOCALS::
-#define HX_BEGIN_LOCAL_FUNC_S::ARG::(SUPER,name,::TYPE_ARGS::) \
-   struct name : public SUPER { \
-   ::TYPE_DECL::; \
-   void __Mark(hx::MarkContext *__inCtx) { DoMarkThis(__inCtx); ::MARKS:: } \
-   void __Visit(hx::VisitContext *__inCtx) { DoVisitThis(__inCtx); ::VISITS:: } \
-   name(::CONSTRUCT_ARGS::) : ::CONSTRUCT_VARS:: {}::end::
+#if (HXCPP_API_LEVEL>=500)
+    ::foreach LOCALS::
+    #define HX_BEGIN_LOCAL_FUNC_S::ARG::(SUPER,name,::TYPE_ARGS::) \
+       struct name : public SUPER { \
+       ::TYPE_DECL::; \
+       void __Mark(::hxNS::MarkContext *__inCtx) { ::MARKS:: } \
+       void __Visit(::hxNS::VisitContext *__inCtx) { ::VISITS:: } \
+       name(::CONSTRUCT_ARGS::) : ::CONSTRUCT_VARS:: {}::end::
+#else
+    ::foreach LOCALS::
+    #define HX_BEGIN_LOCAL_FUNC_S::ARG::(SUPER,name,::TYPE_ARGS::) \
+       struct name : public SUPER { \
+       ::TYPE_DECL::; \
+       void __Mark(::hxNS::MarkContext *__inCtx) { DoMarkThis(__inCtx); ::MARKS:: } \
+       void __Visit(::hxNS::VisitContext *__inCtx) { DoVisitThis(__inCtx); ::VISITS:: } \
+       name(::CONSTRUCT_ARGS::) : ::CONSTRUCT_VARS:: {}::end::
+#endif
 
 #define HX_LOCAL_RUN _hx_run
 
@@ -17,7 +27,7 @@
 // For compatibility until next version of haxe is released
 ::foreach LOCALS::
 #define HX_BEGIN_LOCAL_FUNC::ARG::(name,::TYPE_ARGS::) \
-      HX_BEGIN_LOCAL_FUNC_S::ARG::(hx::LocalFunc,name,::TYPE_ARGS::)::end::
+      HX_BEGIN_LOCAL_FUNC_S::ARG::(::hxNS::LocalFunc,name,::TYPE_ARGS::)::end::
 
 
 #endif
diff --git a/Sources/c_borogove/iinclude/hx/Native.h b/Sources/c_borogove/iinclude/hx/Native.h
index 4b68982..7d8bea5 100644
--- a/Sources/c_borogove/iinclude/hx/Native.h
+++ b/Sources/c_borogove/iinclude/hx/Native.h
@@ -175,8 +175,8 @@ namespace hx
       T operator->() { return ptr; }
    };
 
-   #define HX_NATIVE_IMPLEMENTATION hx::Object *__GetRealObject() { return this; }
-   #define HX_EXTERN_NATIVE_IMPLEMENTATION hx::Object *__GetRealObject() { return 0; }
+   #define HX_NATIVE_IMPLEMENTATION ::hx::Object *__GetRealObject() { return this; }
+   #define HX_EXTERN_NATIVE_IMPLEMENTATION ::hx::Object *__GetRealObject() { return 0; }
 }
 
 #endif
diff --git a/Sources/c_borogove/iinclude/hx/ObjcHelpers.h b/Sources/c_borogove/iinclude/hx/ObjcHelpers.h
index 90ef857..393705a 100644
--- a/Sources/c_borogove/iinclude/hx/ObjcHelpers.h
+++ b/Sources/c_borogove/iinclude/hx/ObjcHelpers.h
@@ -36,7 +36,7 @@ struct TObjcBlockVoidVoid
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^ {
-         wrapper->haxeObject->__run();
+         wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(0));
       };
       return wrap;
    }
@@ -52,7 +52,7 @@ struct TObjcBlockRetVoid
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^() {
-         return (Ret) wrapper->haxeObject->__run();
+         return (Ret) wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(0));
       };
       return wrap;
    }
@@ -69,7 +69,7 @@ struct TObjcBlockVoidArgs1
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^(Arg0 a0) {
-         wrapper->haxeObject->__run(a0);
+         wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(1)->init(0, a0));
       };
       return wrap;
    }
@@ -83,7 +83,7 @@ struct TObjcBlockRetArgs1
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^(Arg0 a0) {
-         return (Ret) wrapper->haxeObject->__run(a0);
+         return (Ret) wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(1)->init(0, a0));
       } ;
    }
 };
@@ -100,7 +100,7 @@ struct TObjcBlockVoidArgs2
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^(Arg0 a0, Arg1 a1) {
-         wrapper->haxeObject->__run(a0,a1);
+         wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(2)->init(0, a0)->init(1, a1));
       };
       return wrap;
    }
@@ -114,7 +114,7 @@ struct TObjcBlockRetArgs2
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^(Arg0 a0, Arg1 a1) {
-         return (Ret) wrapper->haxeObject->__run(a0,a1);
+         return (Ret) wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(2)->init(0, a0)->init(1, a1));
       } ;
    }
 };
@@ -130,7 +130,7 @@ struct TObjcBlockVoidArgs3
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2) {
-         wrapper->haxeObject->__run(a0,a1,a2);
+         wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(3)->init(0, a0)->init(1, a1)->init(2, a2));
       };
       return wrap;
    }
@@ -144,7 +144,7 @@ struct TObjcBlockRetArgs3
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2) {
-         return (Ret) wrapper->haxeObject->__run(a0,a1,a2);
+         return (Ret) wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(3)->init(0, a0)->init(1, a1)->init(2, a2));
       } ;
    }
 };
@@ -160,7 +160,7 @@ struct TObjcBlockVoidArgs4
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3) {
-         wrapper->haxeObject->__run(a0,a1,a2,a3);
+         wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(4)->init(0, a0)->init(1, a1)->init(2, a2)->init(3, a3));
       };
       return wrap;
    }
@@ -174,7 +174,7 @@ struct TObjcBlockRetArgs4
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3) {
-         return (Ret) wrapper->haxeObject->__run(a0,a1,a2,a3);
+         return (Ret) wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(4)->init(0, a0)->init(1, a1)->init(2, a2)->init(3, a3));
       } ;
    }
 };
@@ -190,7 +190,7 @@ struct TObjcBlockVoidArgs5
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) {
-         wrapper->haxeObject->__run(a0,a1,a2,a3,a4);
+         wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(5)->init(0, a0)->init(1, a1)->init(2, a2)->init(3, a3)->init(4, a4));
       };
       return wrap;
    }
@@ -204,7 +204,7 @@ struct TObjcBlockRetArgs5
    {
       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr];
       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) {
-         return (Ret) wrapper->haxeObject->__run(a0,a1,a2,a3,a4);
+         return (Ret) wrapper->haxeObject->__Run(Array_obj<Dynamic>::__new(5)->init(0, a0)->init(1, a1)->init(2, a2)->init(3, a3)->init(4, a4));
       } ;
    }
 };
diff --git a/Sources/c_borogove/iinclude/hx/Object.h b/Sources/c_borogove/iinclude/hx/Object.h
index 8cf2fa8..f2fe42a 100644
--- a/Sources/c_borogove/iinclude/hx/Object.h
+++ b/Sources/c_borogove/iinclude/hx/Object.h
@@ -27,7 +27,6 @@ enum hxObjectType
    vtAbstractBase = 0x100,
 };
 
-
 namespace hx
 {
 
@@ -43,7 +42,7 @@ HXCPP_EXTERN_CLASS_ATTRIBUTES null BadCast();
 // CPPIA_CALL = fastcall on x86(32), nothing otherwise
 #if (defined(_WIN32) && !defined(_M_X64) && !defined(__x86_64__) && !defined(_ARM_) ) || \
    defined(HXCPP_X86) || defined(__i386__) || defined(__i386) || \
-   (!defined(_WIN32) && !defined(_ARM_) && !defined(__arm__) && !defined(__x86_64__) )
+   (!defined(_WIN32) && !defined(_ARM_) && !defined(__arm__) && !defined(__aarch64__) && !defined(__x86_64__) )
 
    #if defined(__GNUC__) && !defined(__APPLE__) && !defined(EMSCRIPTEN)
       #define CPPIA_CALL __attribute__ ((fastcall))
@@ -240,7 +239,7 @@ public:
    virtual Dynamic __GetItem(int inIndex) const;
    virtual Dynamic __SetItem(int inIndex,Dynamic inValue);
 
-
+#if (HXCPP_API_LEVEL<500)
    typedef const Dynamic &D;
    virtual Dynamic __run();
    virtual Dynamic __run(D a);
@@ -248,6 +247,7 @@ public:
    virtual Dynamic __run(D a,D b,D c);
    virtual Dynamic __run(D a,D b,D c,D d);
    virtual Dynamic __run(D a,D b,D c,D d,D e);
+#endif
 
    virtual int __ArgCount() const { return -1; }
 
@@ -322,7 +322,13 @@ public:
    inline ObjectPtr(const SOURCE_ *inPtr,bool inCheckCast=true)
    {
       if (!SetPtr(const_cast<SOURCE_ *>(inPtr)))
-         CastPtr(const_cast<SOURCE_ *>(inPtr),inCheckCast);
+         CastPtr(
+#if (HXCPP_API_LEVEL>=500)
+             reinterpret_cast<::hx::Object*>(const_cast<SOURCE_ *>(inPtr))
+#else
+             const_cast<SOURCE_*>(inPtr)
+#endif
+             ,inCheckCast);
    }
 
    inline ObjectPtr &operator=(const null &inNull) { mPtr = 0; return *this; }
@@ -403,5 +409,4 @@ public:
 } // end namespace hx
 
 
-
 #endif
diff --git a/Sources/c_borogove/iinclude/hx/Operators.h b/Sources/c_borogove/iinclude/hx/Operators.h
index 862a5da..333c09c 100644
--- a/Sources/c_borogove/iinclude/hx/Operators.h
+++ b/Sources/c_borogove/iinclude/hx/Operators.h
@@ -8,6 +8,8 @@ template<typename T> inline bool null::operator != (const hx::ObjectPtr<T> &O) c
 
 template<typename T> inline bool null::operator == (const Array<T> &O) const { return !O.mPtr; }
 template<typename T> inline bool null::operator != (const Array<T> &O) const { return O.mPtr; }
+template<class TReturn, class... TArgs> inline bool null::operator==(const ::hx::Callable<TReturn(TArgs...)>& O) const { return !O.mPtr; }
+template<class TReturn, class... TArgs> inline bool null::operator!=(const ::hx::Callable<TReturn(TArgs...)>& O) const { return O.mPtr; }
 inline bool null::operator == (const hx::FieldRef &O) const { return !O.HasPointer(); }
 inline bool null::operator != (const hx::FieldRef &O) const { return O.HasPointer(); }
 inline bool null::operator == (const hx::IndexRef &O) const { return !O.HasPointer(); }
@@ -80,8 +82,8 @@ template<> inline double ToDouble(double inValue) { return inValue; }
 template<> inline double ToDouble(int inValue) { return inValue; }
 template<> inline double ToDouble(bool inValue) { return inValue; }
 template<> inline double ToDouble(float inValue) { return inValue; }
-template<> inline double ToDouble(cpp::UInt64 inValue) { return inValue; }
-template<> inline double ToDouble(cpp::Int64 inValue) { return inValue; }
+template<> inline double ToDouble(cpp::UInt64 inValue) { return (double)inValue; }
+template<> inline double ToDouble(cpp::Int64 inValue) { return (double)inValue; }
 template<> inline double ToDouble(null inValue) { return 0; }
 
 
@@ -259,7 +261,7 @@ template<> inline float TCastObject<float>(hx::Object *inObj)
 {
    if (!inObj || (inObj->__GetType()!=::vtFloat && inObj->__GetType()!=::vtInt64 && inObj->__GetType()!=::vtInt))
       return hx::BadCast();
-   return inObj->__ToDouble();
+   return (float)inObj->__ToDouble();
 }
 
 template<> inline String TCastObject<String>(hx::Object *inObj)
@@ -343,6 +345,17 @@ template<> struct DynamicConvertType< Array_obj< ::String> * > { enum { Convert
 template<typename T> struct DynamicConvertType< Array_obj<T> * > { enum { Convert = sizeof(T) }; };
 template<> struct DynamicConvertType< cpp::VirtualArray_obj * > { enum { Convert = aciVirtualArray }; };
 
+#if (HXCPP_API_LEVEL>=500 && defined(HXCPP_SCRIPTABLE))
+
+// We need to specify callables getting a formal conversion due to an unfortunate edge case involving cppia.
+// Generics are type erased with Dynamic so the parameter is lost at runtime, this means that if a cppia script were
+// to push a closure into a array of Void->Void functions in the host it would not be pushing a callable since cppia
+// does not use them internally.
+// Later when the host perform a static cast on those elements to get a callable it will cause a memory error.
+template<typename T> struct DynamicConvertType< ::hx::Callable_obj<T>* > { enum { Convert = aciAlwaysConvert }; };
+
+#endif
+
 }
 
 
@@ -393,7 +406,7 @@ class HXCPP_EXTERN_CLASS_ATTRIBUTES StringValueIterator : public cpp::StringIter
 public:
    StringValueIterator(const String &inValue) : StringIterator(inValue) { }
 
-   int next() { return value.cca(pos++); }
+   int next() HXCPP_OVERRIDE { return value.cca(pos++); }
 };
 
 class HXCPP_EXTERN_CLASS_ATTRIBUTES StringKeyValueIterator : public cpp::StringIterator<Dynamic>
@@ -401,7 +414,7 @@ class HXCPP_EXTERN_CLASS_ATTRIBUTES StringKeyValueIterator : public cpp::StringI
 public:
    StringKeyValueIterator(const String &inValue) : StringIterator(inValue) { }
 
-   Dynamic next() {
+   Dynamic next() HXCPP_OVERRIDE {
       int p = pos;
       return
         hx::AnonStruct2_obj< int,int >::Create(HX_("key",9f,89,51,00),p,
diff --git a/Sources/c_borogove/iinclude/hx/Scriptable.h b/Sources/c_borogove/iinclude/hx/Scriptable.h
index db66f25..7a605dc 100644
--- a/Sources/c_borogove/iinclude/hx/Scriptable.h
+++ b/Sources/c_borogove/iinclude/hx/Scriptable.h
@@ -19,11 +19,19 @@ struct ScriptNamedFunction : public ScriptFunction
 {
    ScriptNamedFunction(const ScriptFunction &s) : ScriptFunction(s), name(0), isStatic(false), superExecute(0) { }
 
+#if (HXCPP_API_LEVEL >= 500)
+   ScriptNamedFunction(const char *inName=0,StackExecute inExe=0,const char *inSig=0, bool inIsStatic=false, StackExecute superExecute=0, bool inIsOverride=false)
+      : ScriptFunction(inExe, inSig), name(inName), isStatic(inIsStatic), isOverride(inIsOverride), superExecute(superExecute)  { }
+#else
    ScriptNamedFunction(const char *inName=0,StackExecute inExe=0,const char *inSig=0, bool inIsStatic=false, StackExecute superExecute=0)
       : ScriptFunction(inExe, inSig), name(inName), isStatic(inIsStatic), superExecute(superExecute)  { }
+#endif
 
    const char *name;
    bool isStatic;
+#if (HXCPP_API_LEVEL >= 500)
+   bool isOverride;
+#endif
    StackExecute superExecute;
 };
 
@@ -198,15 +206,15 @@ void __scriptable_load_neko_bytes(Array<unsigned char> inBytes);
 void __scriptable_load_abc(Array<unsigned char> inBytes);
 
 #define HX_SCRIPTABLE_REGISTER_INTERFACE(name,class) \
-    hx::ScriptableRegisterInterface( HX_CSTRING(name), __scriptableFunctions, & class##_scriptable )
+   ::hx::ScriptableRegisterInterface( HX_CSTRING(name), __scriptableFunctions, & class##_scriptable )
 
 #define HX_SCRIPTABLE_REGISTER_CLASS(name,class) \
-   hx::ScriptableRegisterClass( HX_CSTRING(name), (int)offsetof(class##__scriptable,__scriptVTable) + sizeof(void *), __scriptableFunctions, class##__scriptable::__script_create, class##__scriptable::__script_construct )
+   ::hx::ScriptableRegisterClass( HX_CSTRING(name), (int)offsetof(class##__scriptable,__scriptVTable) + sizeof(void *), __scriptableFunctions, class##__scriptable::__script_create, class##__scriptable::__script_construct )
 
 
 #ifdef HXCPP_VISIT_ALLOCS
 #define SCRIPTABLE_VISIT_FUNCTION \
-void __Visit(HX_VISIT_PARAMS) { super::__Visit(HX_VISIT_ARG); hx::ScriptableVisit(__scriptVTable[-1],this,HX_VISIT_ARG); }
+void __Visit(HX_VISIT_PARAMS) HXCPP_OVERRIDE { super::__Visit(HX_VISIT_ARG); ::hx::ScriptableVisit(__scriptVTable[-1],this,HX_VISIT_ARG); }
 #else
 #define SCRIPTABLE_VISIT_FUNCTION
 #endif
@@ -215,35 +223,35 @@ void __Visit(HX_VISIT_PARAMS) { super::__Visit(HX_VISIT_ARG); hx::ScriptableVisi
 #define HX_DEFINE_SCRIPTABLE(ARG_LIST) \
    inline void *operator new( size_t inSize, int inExtraDataSize ) \
    { \
-      return hx::InternalNew(inSize + inExtraDataSize,true); \
+      return ::hx::InternalNew(inSize + inExtraDataSize,true); \
    } \
    inline void operator delete(void *,int) {} \
    public: \
    void **__scriptVTable; \
-   static hx::Object *__script_create(void **inVTable, int inExtra) { \
+   static ::hx::Object *__script_create(void **inVTable, int inExtra) { \
     __ME *result = new (inExtra) __ME(); \
     result->__scriptVTable = inVTable; \
    return result; } \
-   void ** __GetScriptVTable() { return __scriptVTable; } \
-   ::String toString() {  if (__scriptVTable[0] ) \
-     { hx::CppiaCtx *ctx = hx::CppiaCtx::getCurrent(); hx::AutoStack a(ctx); ctx->pushObject(this); return ctx->runString(__scriptVTable[0]); } \
+   void ** __GetScriptVTable() HXCPP_OVERRIDE { return __scriptVTable; } \
+   ::String toString() HXCPP_OVERRIDE {  if (__scriptVTable[0] ) \
+     { ::hx::CppiaCtx *ctx = ::hx::CppiaCtx::getCurrent(); ::hx::AutoStack a(ctx); ctx->pushObject(this); return ctx->runString(__scriptVTable[0]); } \
       else return __superString::toString(); } \
-   ::String __ToString() const { return hx::ScriptableToString(__scriptVTable[-1]); } \
-   hx::Class __GetClass() const { return hx::ScriptableGetClass(__scriptVTable[-1]); } \
-   int __GetType() const { return hx::ScriptableGetType(__scriptVTable[-1]); } \
-   void __Mark(HX_MARK_PARAMS) { super::__Mark(HX_MARK_ARG); hx::ScriptableMark(__scriptVTable[-1],this,HX_MARK_ARG); } \
+   ::String __ToString() const HXCPP_OVERRIDE { return ::hx::ScriptableToString(__scriptVTable[-1]); } \
+   ::hx::Class __GetClass() const HXCPP_OVERRIDE { return ::hx::ScriptableGetClass(__scriptVTable[-1]); } \
+   int __GetType() const HXCPP_OVERRIDE { return ::hx::ScriptableGetType(__scriptVTable[-1]); } \
+   void __Mark(HX_MARK_PARAMS) HXCPP_OVERRIDE { super::__Mark(HX_MARK_ARG); ::hx::ScriptableMark(__scriptVTable[-1],this,HX_MARK_ARG); } \
    SCRIPTABLE_VISIT_FUNCTION
 
 
 
 #define HX_DEFINE_SCRIPTABLE_INTERFACE \
    void **__scriptVTable; \
-   Dynamic mDelegate; \
-   hx::Object *__GetRealObject() { return mDelegate.mPtr; } \
+   ::Dynamic mDelegate; \
+   ::hx::Object *__GetRealObject() { return mDelegate.mPtr; } \
    SCRIPTABLE_VISIT_FUNCTION \
    void ** __GetScriptVTable() { return __scriptVTable; } \
    public: \
-   static hx::Object *__script_create(void **inVTable,hx::Object *inDelegate) { \
+   static ::hx::Object *__script_create(void **inVTable,::hx::Object *inDelegate) { \
     __ME *result = new __ME(); \
     result->__scriptVTable = inVTable; \
     result->mDelegate = inDelegate; \
@@ -253,21 +261,21 @@ void __Visit(HX_VISIT_PARAMS) { super::__Visit(HX_VISIT_ARG); hx::ScriptableVisi
 
 #define HX_DEFINE_SCRIPTABLE_DYNAMIC \
  \
-	hx::Val __Field(const ::String &inName,hx::PropertyAccess inCallProp) \
-      { Dynamic result; if (hx::ScriptableField(this,inName,inCallProp,result)) return result; return super::__Field(inName,inCallProp); } \
-	Float __INumField(int inFieldID) \
-		{ Float result; if (hx::ScriptableField(this,inFieldID,hx::paccAlways,result)) return result; return super::__INumField(inFieldID); } \
-	Dynamic __IField(int inFieldID) \
-		{ Dynamic result; if (hx::ScriptableField(this,inFieldID,hx::paccAlways,result)) return result; return super::__IField(inFieldID); } \
-   hx::Val __SetField(const ::String &inName,const hx::Val &inValue,hx::PropertyAccess inCallProp) \
+	::hx::Val __Field(const ::String &inName,::hx::PropertyAccess inCallProp) HXCPP_OVERRIDE \
+      { ::Dynamic result; if (::hx::ScriptableField(this,inName,inCallProp,result)) return result; return super::__Field(inName,inCallProp); } \
+	::Float __INumField(int inFieldID) \
+		{ ::Float result; if (::hx::ScriptableField(this,inFieldID,::hx::paccAlways,result)) return result; return super::__INumField(inFieldID); } \
+	::Dynamic __IField(int inFieldID) \
+		{ ::Dynamic result; if (::hx::ScriptableField(this,inFieldID,::hx::paccAlways,result)) return result; return super::__IField(inFieldID); } \
+   ::hx::Val __SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp) HXCPP_OVERRIDE \
    { \
-      Dynamic value; \
-      if (hx::ScriptableSetField(this, inName, inValue,inCallProp,value)) \
+      ::Dynamic value; \
+      if (::hx::ScriptableSetField(this, inName, inValue,inCallProp,value)) \
          return value; \
 		return super::__SetField(inName,inValue,inCallProp); \
    } \
-	void __GetFields(Array< ::String> &outFields) \
-		{ super::__GetFields(outFields); hx::ScriptableGetFields(this,outFields); }
+	void __GetFields(::Array< ::String> &outFields) HXCPP_OVERRIDE \
+		{ super::__GetFields(outFields); ::hx::ScriptableGetFields(this,outFields); }
 
 
 
diff --git a/Sources/c_borogove/iinclude/hx/StackContext.h b/Sources/c_borogove/iinclude/hx/StackContext.h
index 67dc563..1b54285 100644
--- a/Sources/c_borogove/iinclude/hx/StackContext.h
+++ b/Sources/c_borogove/iinclude/hx/StackContext.h
@@ -116,7 +116,7 @@
        ::hx::StackVariable __stackvariable_##cpp_var(_hx_stackframe.variables, false, haxe_name, &cpp_var);
 
    #define HX_STACK_CATCHABLE(T, n)                                        \
-       hx::StackCatchable __stackcatchable_##n                             \
+       ::hx::StackCatchable __stackcatchable_##n                             \
            (_hx_stackframe, reinterpret_cast<T *>(&_hx_stackframe));
 
    // If HXCPP_DEBUGGER is enabled, then a throw is checked to see if it
diff --git a/Sources/c_borogove/iinclude/hx/StdLibs.h b/Sources/c_borogove/iinclude/hx/StdLibs.h
index 8bb7190..fdfd86d 100644
--- a/Sources/c_borogove/iinclude/hx/StdLibs.h
+++ b/Sources/c_borogove/iinclude/hx/StdLibs.h
@@ -43,6 +43,7 @@ Array<unsigned char> __hxcpp_resource_bytes(String inName);
 // System access
 Array<String>  __get_args();
 double         __time_stamp();
+::cpp::Int64   __time_stamp_ms();
 
 HXCPP_EXTERN_CLASS_ATTRIBUTES void __hxcpp_print_string(const String &inV);
 HXCPP_EXTERN_CLASS_ATTRIBUTES void __hxcpp_println_string(const String &inV);
@@ -89,7 +90,11 @@ HXCPP_EXTERN_CLASS_ATTRIBUTES Dynamic __hxcpp_parse_int(const String &inString);
 HXCPP_EXTERN_CLASS_ATTRIBUTES double __hxcpp_parse_float(const String &inString);
 HXCPP_EXTERN_CLASS_ATTRIBUTES double __hxcpp_parse_substr_float(const String &inString, int start, int len);
 HXCPP_EXTERN_CLASS_ATTRIBUTES int __hxcpp_parse_substr_int(const String &inString, int start=0, int len=-1);
+#if (HXCPP_API_LEVEL>=500)
+HXCPP_EXTERN_CLASS_ATTRIBUTES Dynamic __hxcpp_create_var_args(::hx::Callable<::Dynamic(::cpp::VirtualArray)>& inArrayFunc);
+#else
 HXCPP_EXTERN_CLASS_ATTRIBUTES Dynamic __hxcpp_create_var_args(Dynamic &inArrayFunc);
+#endif
 HXCPP_EXTERN_CLASS_ATTRIBUTES void __hxcpp_set_float_format(String inFormat);
 
 inline int _hx_idiv(int inNum,int inDenom) { return inNum/inDenom; }
@@ -149,19 +154,20 @@ HXCPP_EXTERN_CLASS_ATTRIBUTES String __hxcpp_char_bytes_to_utf8_string(String &i
 HXCPP_EXTERN_CLASS_ATTRIBUTES String __hxcpp_utf8_string_to_char_bytes(String &inUTF8);
 
 
+
 #ifdef HXCPP_GC_GENERATIONAL
    #define HX_MAP_THIS this, h
    #define HX_MAP_THIS_ this,
-   #define HX_MAP_THIS_ARG hx::Object *owner, Dynamic &ioHash
+   #define HX_MAP_THIS_ARG ::hx::Object *owner, ::Dynamic &ioHash
 #else
    #define HX_MAP_THIS h
-   #define HX_MAP_THIS_ 
-   #define HX_MAP_THIS_ARG Dynamic &ioHash
+   #define HX_MAP_THIS_
+   #define HX_MAP_THIS_ARG ::Dynamic &ioHash
 #endif
 
 // --- HashRoot ---------------------------------------------------------------------
 
-HXCPP_EXTERN_CLASS_ATTRIBUTES int           __root_hash_size(Dynamic *rtHash);
+HXCPP_EXTERN_CLASS_ATTRIBUTES int           __root_hash_size(Dynamic &rtHash);
 
 // --- IntHash ----------------------------------------------------------------------
 
@@ -293,11 +299,14 @@ double __hxcpp_time_stamp();
 
 // --- vm/threading --------------------------------------------------------------------
 
+#if (HXCPP_API_LEVEL<500)
+
 Dynamic __hxcpp_thread_create(Dynamic inFunc);
+
 Dynamic __hxcpp_thread_current();
 void    __hxcpp_thread_send(Dynamic inThread, Dynamic inMessage);
 Dynamic __hxcpp_thread_read_message(bool inBlocked);
-bool __hxcpp_is_current_thread(hx::Object *inThread);
+bool __hxcpp_is_current_thread(hx::Object* inThread);
 
 Dynamic __hxcpp_mutex_create();
 void    __hxcpp_mutex_acquire(Dynamic);
@@ -314,21 +323,23 @@ void __hxcpp_condition_acquire(Dynamic);
 bool __hxcpp_condition_try_acquire(Dynamic);
 void __hxcpp_condition_release(Dynamic);
 void __hxcpp_condition_wait(Dynamic);
-bool __hxcpp_condition_timed_wait(Dynamic,double);
+bool __hxcpp_condition_timed_wait(Dynamic, double);
 void __hxcpp_condition_signal(Dynamic);
 void __hxcpp_condition_broadcast(Dynamic);
 
 Dynamic __hxcpp_lock_create();
-bool    __hxcpp_lock_wait(Dynamic inlock,double inTime);
+bool    __hxcpp_lock_wait(Dynamic inlock, double inTime);
 void    __hxcpp_lock_release(Dynamic inlock);
 
 Dynamic __hxcpp_deque_create();
-void    __hxcpp_deque_add(Dynamic q,Dynamic inVal);
-void    __hxcpp_deque_push(Dynamic q,Dynamic inVal);
-Dynamic __hxcpp_deque_pop(Dynamic q,bool block);
+void    __hxcpp_deque_add(Dynamic q, Dynamic inVal);
+void    __hxcpp_deque_push(Dynamic q, Dynamic inVal);
+Dynamic __hxcpp_deque_pop(Dynamic q, bool block);
 
 Dynamic __hxcpp_tls_get(int inID);
-void    __hxcpp_tls_set(int inID,Dynamic inVal);
+void    __hxcpp_tls_set(int inID, Dynamic inVal);
+
+#endif
 
 bool _hx_atomic_exchange_if(::cpp::Pointer<cpp::AtomicInt> inPtr, int test, int newVal  );
 int _hx_atomic_inc(::cpp::Pointer<cpp::AtomicInt> inPtr );
@@ -472,9 +483,11 @@ inline void* _hx_atomic_compare_exchange_ptr(volatile void **a, void *expected,
 #elif defined(HX_MSVC_ATOMICS)
   return _InterlockedCompareExchangePointer((void *volatile *)a, replacement, expected);
 #else
-   void *old = *a;
-   *a = replacement;
-   return old;
+  void *old = *a;
+  if (old == expected) {
+    *a = replacement;
+  }
+  return old;
 #endif
 }
 
@@ -482,6 +495,90 @@ inline void* _hx_atomic_compare_exchange_cast_ptr(void *a, void *expected, void
    return _hx_atomic_compare_exchange_ptr((volatile void **)a, expected, replacement);
 }
 
+#include <atomic>
+
+struct AtomicObject: hx::Object {
+  std::atomic< ::hx::Object *> aPtr;
+
+  AtomicObject(Dynamic val) { aPtr = val.mPtr; }
+
+  void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE {
+    Dynamic ptr = load();
+    HX_MARK_MEMBER(ptr);
+  }
+
+#ifdef HXCPP_VISIT_ALLOCS
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE {
+     hx::Object *obj = aPtr.load();
+     HX_VISIT_MEMBER(obj);
+     aPtr.store(obj);
+   }
+#endif
+
+   Dynamic store(Dynamic val) {
+     aPtr.store(val.mPtr);
+     HX_OBJ_WB_GET(this, val.mPtr);
+     return val;
+   }
+
+   Dynamic load() {
+     return aPtr.load();
+   }
+
+   Dynamic exchange(Dynamic val) {
+      Dynamic ret = aPtr.exchange(val.mPtr);
+      HX_OBJ_WB_GET(this, val.mPtr);
+      return ret;
+   }
+
+   Dynamic compareExchange(Dynamic expected, Dynamic replacement) {
+     // Note: using Dynamic instead of hx::Object* is important
+     // Dynamic has an overloaded == operator, a raw pointer to hx::Object does not.
+     Dynamic original = aPtr.load();
+     while (original == expected) {
+       if (aPtr.compare_exchange_weak(original.mPtr, replacement.mPtr)) {
+         HX_OBJ_WB_GET(this, replacement.mPtr);
+         return original;
+       } else {
+         continue;
+       }
+     }
+     return original;
+   }
+};
+
+inline Dynamic __hxcpp_atomic_object_create(Dynamic value) {
+   return new AtomicObject(value);
+}
+
+inline Dynamic __hxcpp_atomic_object_store(Dynamic dynObj, Dynamic val) {
+  AtomicObject *obj = dynamic_cast<AtomicObject *>(dynObj.mPtr);
+  if (!obj)
+    throw HX_INVALID_OBJECT;
+   return obj->store(val);
+}
+
+inline Dynamic __hxcpp_atomic_object_load(Dynamic dynObj) {
+  AtomicObject *obj = dynamic_cast<AtomicObject *>(dynObj.mPtr);
+  if (!obj)
+    throw HX_INVALID_OBJECT;
+   return obj->load();
+}
+
+inline Dynamic __hxcpp_atomic_object_exchange(Dynamic dynObj, Dynamic newVal) {
+  AtomicObject *obj = dynamic_cast<AtomicObject *>(dynObj.mPtr);
+  if (!obj)
+    throw HX_INVALID_OBJECT;
+   return obj->exchange(newVal);
+}
+
+inline Dynamic __hxcpp_atomic_object_compare_exchange(Dynamic dynObj, Dynamic expected, Dynamic replacement) {
+  AtomicObject *obj = dynamic_cast<AtomicObject *>(dynObj.mPtr);
+  if (!obj)
+    throw HX_INVALID_OBJECT;
+  return obj->compareExchange(expected, replacement);
+}
+
 Array<String> __hxcpp_get_call_stack(bool inSkipLast);
 Array<String> __hxcpp_get_exception_stack();
 #define HXCPP_HAS_CLASSLIST
@@ -903,7 +1000,11 @@ void _hx_ssl_conf_close( Dynamic hconf );
 void _hx_ssl_conf_set_ca( Dynamic hconf, Dynamic hcert );
 void _hx_ssl_conf_set_verify( Dynamic hconf, int mode );
 void _hx_ssl_conf_set_cert( Dynamic hconf, Dynamic hcert, Dynamic hpkey );
+#if (HXCPP_API_LEVEL>=500)
+void _hx_ssl_conf_set_servername_callback(Dynamic hconf, ::hx::Callable<::Dynamic(::String)> obj);
+#else
 void _hx_ssl_conf_set_servername_callback( Dynamic hconf, Dynamic obj );
+#endif
 Dynamic _hx_ssl_cert_load_defaults();
 Dynamic _hx_ssl_cert_load_file( String file );
 Dynamic _hx_ssl_cert_load_path( String path );
diff --git a/Sources/c_borogove/iinclude/hx/StringAlloc.h b/Sources/c_borogove/iinclude/hx/StringAlloc.h
index 29fb7f7..59df683 100755
--- a/Sources/c_borogove/iinclude/hx/StringAlloc.h
+++ b/Sources/c_borogove/iinclude/hx/StringAlloc.h
@@ -16,6 +16,14 @@ class IStringAlloc
       ~IStringAlloc(){};
 };
 
+#ifndef HXCPP_OVERRIDE
+   #if HXCPP_API_LEVEL >= 500 && (__cplusplus >= 201103L || (defined(_MSC_VER) && _MSVC_LANG >= 201103L))
+      #define HXCPP_OVERRIDE override
+   #else
+      #define HXCPP_OVERRIDE
+   #endif
+#endif
+
 template<int STACK>
 class StringAlloc : public IStringAlloc
 {
@@ -30,7 +38,7 @@ class StringAlloc : public IStringAlloc
          if (heap)
             free(heap);
       }
-      void *allocBytes(size_t inBytes)
+      void *allocBytes(size_t inBytes) HXCPP_OVERRIDE
       {
          if (inBytes<=STACK)
             return buffer;
diff --git a/Sources/c_borogove/iinclude/hx/Telemetry.h b/Sources/c_borogove/iinclude/hx/Telemetry.h
index cf86577..8554433 100644
--- a/Sources/c_borogove/iinclude/hx/Telemetry.h
+++ b/Sources/c_borogove/iinclude/hx/Telemetry.h
@@ -3,7 +3,6 @@
 
 #define HX_TELEMETRY_VERSION 1
 
-#include <hxcpp.h>
 #include <vector>
 
 struct TelemetryFrame
diff --git a/Sources/c_borogove/iinclude/hx/TelemetryTracy.h b/Sources/c_borogove/iinclude/hx/TelemetryTracy.h
index 178932a..516bb73 100644
--- a/Sources/c_borogove/iinclude/hx/TelemetryTracy.h
+++ b/Sources/c_borogove/iinclude/hx/TelemetryTracy.h
@@ -7,8 +7,8 @@
 
 #define TRACY_ENABLE
 #include <hxcpp.h>
-#include "../../project/thirdparty/tracy-0.11.1/tracy/TracyC.h"
-#include "../../project/thirdparty/tracy-0.11.1/tracy/Tracy.hpp"
+#include "../../project/thirdparty/tracy-0.13.1/tracy/TracyC.h"
+#include "../../project/thirdparty/tracy-0.13.1/tracy/Tracy.hpp"
 
 #ifdef HXCPP_TRACY_MEMORY
 	#ifdef HXCPP_GC_MOVING
@@ -30,7 +30,7 @@
 	::hx::strbuf TracyConcat(_hx_tracy_str_buffer, TracyLine); \
 	int TracyConcat(_hx_tracy_str_length, TracyLine); \
 	const char *TracyConcat(_hx_tracy_str_buffer_ptr, TracyLine) = name.utf8_str(&TracyConcat(_hx_tracy_str_buffer, TracyLine), false, &TracyConcat(_hx_tracy_str_length, TracyLine)); \
-	::tracy::ScopedZone TracyConcat(_hx_tracy_scoped_zone,TracyLine)(_hx_stackframe.lineNumber, _hx_stackframe.position->fileName, strlen(_hx_stackframe.position->fileName), _hx_stackframe.position->fullName, strlen(_hx_stackframe.position->fullName), TracyConcat(_hx_tracy_str_buffer_ptr, TracyLine), TracyConcat(_hx_tracy_str_length, TracyLine));
+	::tracy::ScopedZone TracyConcat(_hx_tracy_scoped_zone,TracyLine)(_hx_stackframe.lineNumber, _hx_stackframe.position->fileName, strlen(_hx_stackframe.position->fileName), _hx_stackframe.position->fullName, strlen(_hx_stackframe.position->fullName), TracyConcat(_hx_tracy_str_buffer_ptr, TracyLine), TracyConcat(_hx_tracy_str_length, TracyLine), -1);
 #endif
 
 void __hxcpp_tracy_framemark();
diff --git a/Sources/c_borogove/iinclude/hx/Thread.h b/Sources/c_borogove/iinclude/hx/Thread.h
index 069d51e..7f118b2 100644
--- a/Sources/c_borogove/iinclude/hx/Thread.h
+++ b/Sources/c_borogove/iinclude/hx/Thread.h
@@ -86,6 +86,9 @@ inline bool HxCreateDetachedThread(DWORD (WINAPI *func)(void *), void *param)
 
 struct HxMutex
 {
+   bool mValid;
+   pthread_mutex_t *mMutex;
+
    HxMutex()
    {
       pthread_mutexattr_t mta;
@@ -96,9 +99,7 @@ struct HxMutex
    }
    ~HxMutex()
    {
-      if (mValid)
-         pthread_mutex_destroy(mMutex);
-      delete mMutex;
+      Clean();
    }
    void Lock() { pthread_mutex_lock(mMutex); }
    void Unlock() { pthread_mutex_unlock(mMutex); }
@@ -107,12 +108,16 @@ struct HxMutex
    void Clean()
    {
       if (mValid)
+      {
          pthread_mutex_destroy(mMutex);
-      mValid = 0;
+         mValid = false;
+      }
+      if (mMutex)
+      {
+         delete mMutex;
+         mMutex = nullptr;
+      }
    }
-
-   bool mValid;
-   pthread_mutex_t *mMutex;
 };
 
 #define THREAD_FUNC_TYPE void *
@@ -198,19 +203,20 @@ struct HxSemaphore
 
 struct HxSemaphore
 {
+   HxMutex         mMutex;
+   pthread_cond_t  *mCondition;
+   bool            mSet;
+
+
    HxSemaphore()
    {
       mSet = false;
-      mValid = true;
       mCondition = new pthread_cond_t();
       pthread_cond_init(mCondition,0);
    }
    ~HxSemaphore()
    {
-      if (mValid)
-      {
-         pthread_cond_destroy(mCondition);
-      }
+      Clean();
    }
    // For autolock
    inline operator HxMutex &() { return mMutex; }
@@ -294,19 +300,14 @@ struct HxSemaphore
    void Clean()
    {
       mMutex.Clean();
-      if (mValid)
+      if (mCondition)
       {
-         mValid = false;
          pthread_cond_destroy(mCondition);
+         delete mCondition;
+         mCondition = nullptr;
       }
-      delete mCondition;
    }
 
-
-   HxMutex         mMutex;
-   pthread_cond_t  *mCondition;
-   bool            mSet;
-   bool            mValid;
 };
 
 
diff --git a/Sources/c_borogove/iinclude/hx/Tls.h b/Sources/c_borogove/iinclude/hx/Tls.h
index 689d4bb..be79045 100755
--- a/Sources/c_borogove/iinclude/hx/Tls.h
+++ b/Sources/c_borogove/iinclude/hx/Tls.h
@@ -84,13 +84,13 @@
 
 
    #define DECLARE_TLS_DATA(TYPE,NAME) \
-      hx::TLSData<TYPE> NAME;
+      ::hx::TLSData<TYPE> NAME;
    #define DECLARE_FAST_TLS_DATA(TYPE,NAME) \
-      hx::TLSData<TYPE,true> NAME;
+      ::hx::TLSData<TYPE,true> NAME;
    #define EXTERN_TLS_DATA(TYPE,NAME) \
-      extern hx::TLSData<TYPE> NAME;
+      extern ::hx::TLSData<TYPE> NAME;
    #define EXTERN_FAST_TLS_DATA(TYPE,NAME) \
-      extern hx::TLSData<TYPE,true> NAME;
+      extern ::hx::TLSData<TYPE,true> NAME;
 
 
   #endif
@@ -147,13 +147,13 @@ struct TLSData
 #else
 
 #define DECLARE_TLS_DATA(TYPE,NAME) \
-   hx::TLSData<TYPE> NAME;
+   ::hx::TLSData<TYPE> NAME;
 #define DECLARE_FAST_TLS_DATA(TYPE,NAME) \
-   hx::TLSData<TYPE,true> NAME;
+   ::hx::TLSData<TYPE,true> NAME;
 #define EXTERN_TLS_DATA(TYPE,NAME) \
-   extern hx::TLSData<TYPE> NAME;
+   extern ::hx::TLSData<TYPE> NAME;
 #define EXTERN_FAST_TLS_DATA(TYPE,NAME) \
-   extern hx::TLSData<TYPE,true> NAME;
+   extern ::hx::TLSData<TYPE,true> NAME;
 
 #endif
 
diff --git a/Sources/c_borogove/iinclude/hx/thread/ConditionVariable.hpp b/Sources/c_borogove/iinclude/hx/thread/ConditionVariable.hpp
new file mode 100644
index 0000000..aef1f83
--- /dev/null
+++ b/Sources/c_borogove/iinclude/hx/thread/ConditionVariable.hpp
@@ -0,0 +1,30 @@
+#pragma once
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(hx, thread, ConditionVariable)
+
+namespace hx
+{
+	namespace thread
+	{
+		struct ConditionVariable_obj : public hx::Object
+		{
+			ConditionVariable_obj();
+
+			void acquire();
+			bool tryAcquire();
+			void release();
+			void wait();
+			void signal();
+			void broadcast();
+
+		private:
+			struct Impl;
+
+			Impl* impl;
+		};
+	}
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/hx/thread/CountingSemaphore.hpp b/Sources/c_borogove/iinclude/hx/thread/CountingSemaphore.hpp
new file mode 100644
index 0000000..34deb55
--- /dev/null
+++ b/Sources/c_borogove/iinclude/hx/thread/CountingSemaphore.hpp
@@ -0,0 +1,27 @@
+#pragma once
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(hx, thread, CountingSemaphore)
+
+namespace hx
+{
+	namespace thread
+	{
+		struct CountingSemaphore_obj : public hx::Object
+		{
+			CountingSemaphore_obj(int value);
+
+			void acquire();
+			void release();
+			bool tryAcquire(Null<double> timeout);
+
+		private:
+			struct Impl;
+
+			Impl* impl;
+		};
+	}
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/hx/thread/RecursiveMutex.hpp b/Sources/c_borogove/iinclude/hx/thread/RecursiveMutex.hpp
new file mode 100644
index 0000000..f2bac5c
--- /dev/null
+++ b/Sources/c_borogove/iinclude/hx/thread/RecursiveMutex.hpp
@@ -0,0 +1,27 @@
+#pragma once
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(hx, thread, RecursiveMutex)
+
+namespace hx
+{
+	namespace thread
+	{
+		struct RecursiveMutex_obj : public hx::Object
+		{
+			RecursiveMutex_obj();
+
+			void acquire();
+			void release();
+			bool tryAcquire();
+
+		private:
+			struct Impl;
+
+			Impl* impl;
+		};
+	}
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/hx/thread/Scratch.hpp b/Sources/c_borogove/iinclude/hx/thread/Scratch.hpp
new file mode 100644
index 0000000..946eada
--- /dev/null
+++ b/Sources/c_borogove/iinclude/hx/thread/Scratch.hpp
@@ -0,0 +1,33 @@
+#pragma once
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(hx, thread, Thread)
+
+namespace hx
+{
+	namespace thread
+	{
+		class Scratch final
+		{
+			using ReleaseFunc = void(*)(cpp::marshal::View<uint8_t>);
+
+			int* count;
+			ReleaseFunc release;
+
+		public:
+			static Scratch alloc(int bytes);
+
+			cpp::marshal::View<uint8_t> view;
+
+			Scratch(int* _count, cpp::marshal::View<uint8_t> _view, ReleaseFunc _release);
+			Scratch(const Scratch& other);
+
+			~Scratch();
+
+			Scratch& operator=(const Scratch& other);
+		};
+	}
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/hx/thread/Thread.hpp b/Sources/c_borogove/iinclude/hx/thread/Thread.hpp
new file mode 100644
index 0000000..ee857bd
--- /dev/null
+++ b/Sources/c_borogove/iinclude/hx/thread/Thread.hpp
@@ -0,0 +1,30 @@
+#pragma once
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(hx, thread, Thread)
+
+namespace hx
+{
+	namespace thread
+	{
+		struct Thread_obj : public hx::Object
+		{
+			using CreateFunction =
+#if (HXCPP_API_LEVEL >= 500)
+				Callable<void(void)>;
+#else
+				Dynamic;
+#endif
+
+			static Thread create(CreateFunction);
+			static Thread current();
+			static int id();
+
+			virtual String getName() = 0;
+			virtual void setName(const String& name) = 0;
+		};
+	}
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/hx/thread/ThreadLocal.hpp b/Sources/c_borogove/iinclude/hx/thread/ThreadLocal.hpp
new file mode 100644
index 0000000..5cf1934
--- /dev/null
+++ b/Sources/c_borogove/iinclude/hx/thread/ThreadLocal.hpp
@@ -0,0 +1,26 @@
+#pragma once
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(hx, thread, ThreadLocal)
+
+namespace hx
+{
+	namespace thread
+	{
+		class ThreadLocal_obj : public hx::Object
+		{
+			struct Impl;
+
+			Impl* impl;
+
+		public:
+			ThreadLocal_obj();
+
+			Dynamic get();
+			void set(Dynamic obj);
+		};
+	}
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/hx/zip/Compress.hpp b/Sources/c_borogove/iinclude/hx/zip/Compress.hpp
new file mode 100644
index 0000000..85a9ef8
--- /dev/null
+++ b/Sources/c_borogove/iinclude/hx/zip/Compress.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "Zip.hpp"
+
+HX_DECLARE_CLASS2(hx, zip, Compress)
+
+namespace hx
+{
+	namespace zip
+	{
+		struct Compress_obj : Zip_obj
+		{
+			static Compress create(int level);
+			static Array<uint8_t> run(cpp::marshal::View<uint8_t> src, int level);
+
+			virtual int getBounds(int length) = 0;
+		};
+	}
+}
diff --git a/Sources/c_borogove/iinclude/hx/zip/Uncompress.hpp b/Sources/c_borogove/iinclude/hx/zip/Uncompress.hpp
new file mode 100644
index 0000000..2a67827
--- /dev/null
+++ b/Sources/c_borogove/iinclude/hx/zip/Uncompress.hpp
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "Zip.hpp"
+
+HX_DECLARE_CLASS2(hx, zip, Uncompress)
+
+namespace hx
+{
+	namespace zip
+	{
+		struct Uncompress_obj : Zip_obj
+		{
+			static Uncompress create(int windowSize);
+			static Array<uint8_t> run(cpp::marshal::View<uint8_t> src, int bufferSize);
+		};
+	}
+}
diff --git a/Sources/c_borogove/iinclude/hx/zip/Zip.hpp b/Sources/c_borogove/iinclude/hx/zip/Zip.hpp
new file mode 100644
index 0000000..4b3342f
--- /dev/null
+++ b/Sources/c_borogove/iinclude/hx/zip/Zip.hpp
@@ -0,0 +1,36 @@
+#pragma once
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(hx, zip, Zip)
+
+namespace hx
+{
+	namespace zip
+	{
+		enum Flush {
+			None,
+			Sync,
+			Full,
+			Finish,
+			Block
+		};
+
+		struct Result final {
+			const bool done;
+			const int read;
+			const int write;
+
+			Result(int inDone, int inRead, int inWrite);
+		};
+
+		struct Zip_obj : hx::Object
+		{
+			virtual Result execute(cpp::marshal::View<uint8_t> src, cpp::marshal::View<uint8_t> dst) = 0;
+			virtual void setFlushMode(Flush mode) = 0;
+			virtual void close() = 0;
+		};
+	}
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/iinclude/hxMath.h b/Sources/c_borogove/iinclude/hxMath.h
index 1e4b1b6..50fae98 100644
--- a/Sources/c_borogove/iinclude/hxMath.h
+++ b/Sources/c_borogove/iinclude/hxMath.h
@@ -47,7 +47,31 @@ public:
    static bool isNaN(double inX);
    static bool isFinite(double inX);
 
-
+#if (HXCPP_API_LEVEL>=500)
+   static ::hx::Callable<int(double)> floor_dyn();
+   static ::hx::Callable<int(double)> ceil_dyn();
+   static ::hx::Callable<int(double)> round_dyn();
+   static ::hx::Callable<double(double)> ffloor_dyn();
+   static ::hx::Callable<double(double)> fceil_dyn();
+   static ::hx::Callable<double(double)> fround_dyn();
+   static ::hx::Callable<double()> random_dyn();
+   static ::hx::Callable<double(double)> sqrt_dyn();
+   static ::hx::Callable<double(double)> cos_dyn();
+   static ::hx::Callable<double(double)> sin_dyn();
+   static ::hx::Callable<double(double)> tan_dyn();
+   static ::hx::Callable<double(double, double)> atan2_dyn();
+   static ::hx::Callable<double(double)> abs_dyn();
+   static ::hx::Callable<double(double, double) > pow_dyn();
+   static ::hx::Callable<double(double)> log_dyn();
+   static ::hx::Callable<double(double, double)> min_dyn();
+   static ::hx::Callable<double(double, double)> max_dyn();
+   static ::hx::Callable<double(double)> atan_dyn();
+   static ::hx::Callable<double(double)> asin_dyn();
+   static ::hx::Callable<double(double)> acos_dyn();
+   static ::hx::Callable<double(double)> exp_dyn();
+   static ::hx::Callable<bool(double)> isNaN_dyn();
+   static ::hx::Callable<bool(double)> isFinite_dyn();
+#else
    static Dynamic floor_dyn();
    static Dynamic ceil_dyn();
    static Dynamic round_dyn();
@@ -71,6 +95,7 @@ public:
    static Dynamic exp_dyn();
    static Dynamic isNaN_dyn();
    static Dynamic isFinite_dyn();
+#endif
 
    static double NaN;
    static double PI;
diff --git a/Sources/c_borogove/iinclude/hxString.h b/Sources/c_borogove/iinclude/hxString.h
index e390ac3..6906c95 100644
--- a/Sources/c_borogove/iinclude/hxString.h
+++ b/Sources/c_borogove/iinclude/hxString.h
@@ -5,6 +5,7 @@
 #error "Please include hxcpp.h, not hx/Object.h"
 #endif
 
+#include <hx/OS.h>
 #include <hx/StringAlloc.h>
 
 #ifdef __OBJC__
@@ -46,6 +47,9 @@ public:
    static String create(const char16_t *inPtr,int inLen=-1);
    static String create(const char *inPtr,int inLen=-1);
 
+   static String create(const ::cpp::marshal::View<char>& buffer);
+   static String create(const ::cpp::marshal::View<char16_t>& buffer);
+
    // Uses non-gc memory and wont ever be collected
    static ::String createPermanent(const char *inUtf8, int inLen);
    const ::String &makePermanent() const;
@@ -95,7 +99,9 @@ public:
    String(const float &inRHS);
    String(const cpp::Int64 &inRHS);
    String(const cpp::UInt64 &inRHS);
+   #if defined(NEKO_MAC) || defined(NEKO_BSD)
    String(const unsigned long &inRHS);
+   #endif
    explicit String(const bool &inRHS);
    inline String(const null &inRHS) : __s(0), length(0) { }
    String(hx::Null< ::String > inRHS) : __s(inRHS.value.__s), length(inRHS.value.length) { }
@@ -146,10 +152,12 @@ public:
 
    ::String toString() { return *this; }
 
+
     ::String __URLEncode() const;
     ::String __URLDecode() const;
 
 
+
     ::String toUpperCase() const;
     ::String toLowerCase() const;
     ::String charAt(int inPos) const;
@@ -169,6 +177,9 @@ public:
    const wchar_t *wchar_str(hx::IStringAlloc *inBuffer = 0) const;
    const char16_t *wc_str(hx::IStringAlloc *inBuffer = 0, int *outCharLength = 0) const;
 
+   bool wc_str(::cpp::marshal::View<char16_t> buffer, int* outCharLength = nullptr) const;
+   bool utf8_str(::cpp::marshal::View<char> buffer, int* outByteLength = nullptr) const;
+
    const char *__CStr() const { return utf8_str(); };
    const wchar_t *__WCStr() const { return wchar_str(0); }
    inline operator const char *() { return utf8_str(); }
@@ -324,7 +335,7 @@ public:
 
    inline int cca(int inPos) const
    {
-      if ((unsigned)inPos>=length) return 0;
+      if ( (inPos>=length) || (inPos<0) ) return 0;
       #ifdef HX_SMART_STRINGS
       if (isUTF16Encoded())
          return __w[inPos];
@@ -337,10 +348,22 @@ public:
 
    static char16_t *allocChar16Ptr(int len);
 
-
+#if (HXCPP_API_LEVEL>=500)
+   static ::hx::Callable<::String(int)> fromCharCode_dyn();
+
+   ::hx::Callable<::String(int)> charAt_dyn();
+   ::hx::Callable<::Dynamic(int)> charCodeAt_dyn();
+   ::hx::Callable<int(::String, ::Dynamic)> indexOf_dyn();
+   ::hx::Callable<int(::String, ::Dynamic)> lastIndexOf_dyn();
+   ::hx::Callable<::Array<::String>(::String)> split_dyn();
+   ::hx::Callable<::String(int, ::Dynamic)> substr_dyn();
+   ::hx::Callable<::String(int, ::Dynamic)> substring_dyn();
+   ::hx::Callable<::String()> toLowerCase_dyn();
+   ::hx::Callable<::String()> toString_dyn();
+   ::hx::Callable<::String()> toUpperCase_dyn();
+#else
    static  Dynamic fromCharCode_dyn();
 
-
    Dynamic charAt_dyn();
    Dynamic charCodeAt_dyn();
    Dynamic indexOf_dyn();
@@ -351,6 +374,7 @@ public:
    Dynamic toLowerCase_dyn();
    Dynamic toString_dyn();
    Dynamic toUpperCase_dyn();
+#endif
 
    // This is used by the string-wrapped-as-dynamic class
    hx::Val __Field(const ::String &inString, hx::PropertyAccess inCallProp);
diff --git a/Sources/c_borogove/iinclude/hxcpp.h b/Sources/c_borogove/iinclude/hxcpp.h
index 008f135..ca01537 100755
--- a/Sources/c_borogove/iinclude/hxcpp.h
+++ b/Sources/c_borogove/iinclude/hxcpp.h
@@ -68,11 +68,7 @@
    #define HXCPP_ALIGN_FLOAT
 #endif
 
-// Must allign allocs to 8 bytes to match floating point requirement?
-// Ints must br read on 4-byte boundary
-#if (!defined(HXCPP_ALIGN_FLOAT) && (defined(EMSCRIPTEN) || defined(GCW0)) )
-   #define HXCPP_ALIGN_ALLOC
-#endif
+#define HXCPP_ALIGN_ALLOC
 
 
 // Some compilers are over-enthusiastic about what they #define ...
@@ -102,6 +98,12 @@
   #endif
 #endif
 
+#if HXCPP_API_LEVEL >= 500 && (__cplusplus >= 201103L || (defined(_MSC_VER) && _MSVC_LANG >= 201103L))
+  #define HXCPP_OVERRIDE override
+#else
+  #define HXCPP_OVERRIDE
+#endif
+
 typedef char HX_CHAR;
 
 
@@ -253,12 +255,19 @@ namespace hx { class Object; }
 namespace hx { class FieldRef; }
 namespace hx { class IndexRef; }
 namespace hx { class NativeInterface; }
-namespace hx { class StackContext; }
+namespace hx { struct StackContext; }
 namespace hx { template<typename T> class Native; }
 namespace hx { template<typename O> class ObjectPtr; }
 namespace cpp { template<typename S,typename H> class Struct; }
 namespace cpp { template<typename T> class Pointer; }
 namespace cpp { template<typename T> class Function; }
+namespace cpp { namespace marshal { template<class T> class Boxed_obj; } }
+namespace cpp { namespace marshal { template<class T> using Boxed =::hx::ObjectPtr<Boxed_obj<T>>; } }
+namespace cpp { namespace marshal { template<class T> class ValueType; } }
+namespace cpp { namespace marshal { template<class T> class ValueReference; } }
+namespace cpp { namespace marshal { template<class T> class PointerType; } }
+namespace cpp { namespace marshal { template<class T> class PointerReference; } }
+namespace cpp { namespace marshal { template<class T> struct View; } }
 template<typename ELEM_> class Array_obj;
 template<typename ELEM_> class Array;
 namespace hx {
@@ -311,9 +320,9 @@ enum PropertyAccessMode
    paccAlways  = 2,
 };
 typedef PropertyAccessMode PropertyAccess;
-#define HX_PROP_NEVER  hx::paccNever
-#define HX_PROP_DYNAMIC hx::paccDynamic
-#define HX_PROP_ALWAYS hx::paccAlways
+#define HX_PROP_NEVER ::hx::paccNever
+#define HX_PROP_DYNAMIC ::hx::paccDynamic
+#define HX_PROP_ALWAYS ::hx::paccAlways
 
 } // end namespace hx
 
@@ -336,21 +345,37 @@ typedef PropertyAccessMode PropertyAccess;
 #include <cpp/CppInt32__.h>
 // This needs to "see" other declarations ...
 #include <hx/GcTypeInference.h>
+#include <hx/Functions.h>
 #include <hx/FieldRef.h>
 #include "Array.h"
 #include <hx/Anon.h>
 #include <hx/Class.h>
 #include "Enum.h"
 #include <hx/Interface.h>
+#ifdef HXCPP_TELEMETRY
 #include <hx/Telemetry.h>
+#endif
 #if defined(__OBJC__) && defined(HXCPP_OBJC)
   #include <hx/ObjcHelpers.h>
 #endif
 #include <hx/StdLibs.h>
 #include <cpp/Pointer.h>
+#include <cpp/marshal/Boxed.hpp>
+#include <cpp/marshal/ValueType.hpp>
+#include <cpp/marshal/PointerType.hpp>
+#include <cpp/marshal/ValueReference.hpp>
+#include <cpp/marshal/PointerReference.hpp>
+#include <cpp/marshal/View.hpp>
+#include <cpp/marshal/Marshal.hpp>
+#include <cpp/marshal/RootHandle.hpp>
+#include <cpp/encoding/Ascii.hpp>
+#include <cpp/encoding/Utf8.hpp>
+#include <cpp/encoding/Utf16.hpp>
 #include <hx/Native.h>
 #include <hx/Operators.h>
-#include <hx/Functions.h>
+#if (HXCPP_API_LEVEL>=500)
+#include <hx/Invoker.h>
+#endif
 // second time ...
 #include <cpp/Variant.h>
 #include <hx/Debug.h>
diff --git a/Sources/c_borogove/iinclude/null.h b/Sources/c_borogove/iinclude/null.h
index 396dc74..d4d32d6 100644
--- a/Sources/c_borogove/iinclude/null.h
+++ b/Sources/c_borogove/iinclude/null.h
@@ -1,7 +1,7 @@
 #ifndef HX_NULL_H
 #define HX_NULL_H
 
-
+#include <hx/OS.h>
 
 // --- null value  ---------------------------------------------------------
 //
@@ -16,6 +16,8 @@ namespace hx { template<typename O> class ObjectPtr; }
 
 namespace hx { null NullArithmetic(const char *inText); }
 
+namespace hx { template<class TReturn, class... TArgs> class Callable; }
+
 #define HX_NULL_COMPARE_OP(op,type,value) \
 			bool operator op (const type &inRHS) const { return value; }
 
@@ -34,7 +36,7 @@ namespace hx { null NullArithmetic(const char *inText); }
 	HX_NULL_COMPARE_OP(>=,type,false)
 
 #define HX_COMPARE_NULL_OP(op,type,value) \
-	   inline bool operator op (type inLHS, const null &) { return value; }
+	   inline bool operator op (type inLHS, const ::null &) { return value; }
 
 #define HX_COMPARE_NULL_OPS(type) \
 	HX_COMPARE_NULL_OP(<,type,false) \
@@ -52,14 +54,14 @@ namespace hx { null NullArithmetic(const char *inText); }
 
 
 #define HX_NULL_ARITHMETIC_OP(op) \
-template<typename T> inline null operator op (T t) const \
-   { return hx::NullArithmetic(#op); } \
-inline null operator op (const null &) const \
-   { return hx::NullArithmetic(#op); }
+template<typename T> inline ::null operator op (T t) const \
+   { return ::hx::NullArithmetic(#op); } \
+inline ::null operator op (const ::null &) const \
+   { return ::hx::NullArithmetic(#op); }
 
 #define HX_ARITHMETIC_NULL_OP(op) \
-template<typename T> inline null operator op (const T &, const null &) \
-   { return hx::NullArithmetic(#op); }
+template<typename T> inline ::null operator op (const T &, const ::null &) \
+   { return ::hx::NullArithmetic(#op); }
 
 
 class null
@@ -90,9 +92,13 @@ class null
      operator char () { return 0; }
      operator unsigned char () { return 0; }
      operator signed char () { return 0; }
+     operator char16_t () { return 0; }
+     operator char32_t () { return 0; }
      operator short () { return 0; }
      operator unsigned short () { return 0; }
+     #if defined(NEKO_MAC) || defined(NEKO_BSD)
      operator unsigned long () { return 0; }
+     #endif
      operator cpp::UInt64 () { return 0; }
      operator cpp::Int64 () { return 0; }
      template<typename T>
@@ -113,6 +119,8 @@ class null
      template<typename T> inline bool operator != (const hx::ObjectPtr<T> &) const;
      template<typename T> inline bool operator == (const Array<T> &) const;
      template<typename T> inline bool operator != (const Array<T> &) const;
+     template<class TReturn, class... TArgs> inline bool operator == (const ::hx::Callable<TReturn(TArgs...)>&) const;
+     template<class TReturn, class... TArgs> inline bool operator != (const ::hx::Callable<TReturn(TArgs...)>&) const;
      inline bool operator == (const hx::FieldRef &) const;
      inline bool operator != (const hx::FieldRef &) const;
      inline bool operator == (const hx::IndexRef &) const;
@@ -145,6 +153,8 @@ class null
 	  HX_NULL_COMPARE_OPS(unsigned short)
 	  HX_NULL_COMPARE_OPS(signed char)
 	  HX_NULL_COMPARE_OPS(unsigned char)
+	  HX_NULL_COMPARE_OPS(char16_t)
+	  HX_NULL_COMPARE_OPS(char32_t)
 	  HX_NULL_COMPARE_OPS(cpp::Int64)
 	  HX_NULL_COMPARE_OPS(cpp::UInt64)
 	  HX_NULL_COMPARE_MOST_OPS(String)
@@ -194,6 +204,7 @@ struct Null
    }
 
    inline operator Dynamic();
+   inline operator T() { return isNull ? null() : value; }
    inline T Default(T inDefault) { return isNull ? inDefault : value; }
 
    bool isNull;
@@ -213,6 +224,8 @@ HX_COMPARE_NULL_OPS(short)
 HX_COMPARE_NULL_OPS(unsigned short)
 HX_COMPARE_NULL_OPS(signed char)
 HX_COMPARE_NULL_OPS(unsigned char)
+HX_COMPARE_NULL_OPS(char16_t)
+HX_COMPARE_NULL_OPS(char32_t)
 HX_COMPARE_NULL_OPS(cpp::UInt64)
 HX_COMPARE_NULL_OPS(cpp::Int64)
 
diff --git a/Sources/c_borogove/iinclude/sys/FileSystem.h b/Sources/c_borogove/iinclude/sys/FileSystem.h
index 882325d..43e704a 100644
--- a/Sources/c_borogove/iinclude/sys/FileSystem.h
+++ b/Sources/c_borogove/iinclude/sys/FileSystem.h
@@ -53,6 +53,9 @@ class HXCPP_CLASS_ATTRIBUTES FileSystem_obj : public ::hx::Object
 		static bool exists(::String path);
 		static ::Dynamic exists_dyn();
 
+		static void rename(::String path,::String newPath);
+		static ::Dynamic rename_dyn();
+
 		static  ::Dynamic stat(::String path);
 		static ::Dynamic stat_dyn();
 
diff --git a/Sources/c_borogove/iinclude/sys/io/File.h b/Sources/c_borogove/iinclude/sys/io/File.h
index 11172d1..09f6f2f 100644
--- a/Sources/c_borogove/iinclude/sys/io/File.h
+++ b/Sources/c_borogove/iinclude/sys/io/File.h
@@ -6,7 +6,6 @@
 #include <hxcpp.h>
 #endif
 
-HX_DECLARE_CLASS2(haxe,io,Bytes)
 HX_DECLARE_CLASS2(haxe,io,Input)
 HX_DECLARE_CLASS2(haxe,io,Output)
 HX_DECLARE_CLASS2(sys,io,File)
@@ -56,9 +55,6 @@ class HXCPP_CLASS_ATTRIBUTES File_obj : public ::hx::Object
 		bool _hx_isInstanceOf(int inClassId);
 		::String __ToString() const { return HX_("File",9c,fa,94,2e); }
 
-		static void saveBytes(::String path, ::haxe::io::Bytes bytes);
-		static ::Dynamic saveBytes_dyn();
-
 		static  ::sys::io::FileInput read(::String path,::hx::Null< bool >  binary);
 		static ::Dynamic read_dyn();
 
diff --git a/Sources/c_borogove/iinclude/tink/core/OutcomeTools.h b/Sources/c_borogove/iinclude/tink/core/OutcomeTools.h
new file mode 100644
index 0000000..faac36c
--- /dev/null
+++ b/Sources/c_borogove/iinclude/tink/core/OutcomeTools.h
@@ -0,0 +1,63 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_tink_core_OutcomeTools
+#define INCLUDED_tink_core_OutcomeTools
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(tink,core,Outcome)
+HX_DECLARE_CLASS2(tink,core,OutcomeTools)
+
+namespace tink{
+namespace core{
+
+
+class HXCPP_CLASS_ATTRIBUTES OutcomeTools_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef OutcomeTools_obj OBJ_;
+		OutcomeTools_obj();
+
+	public:
+		enum { _hx_ClassId = 0x2617517e };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="tink.core.OutcomeTools")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"tink.core.OutcomeTools"); }
+
+		inline static ::hx::ObjectPtr< OutcomeTools_obj > __new() {
+			::hx::ObjectPtr< OutcomeTools_obj > __this = new OutcomeTools_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< OutcomeTools_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			OutcomeTools_obj *__this = (OutcomeTools_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(OutcomeTools_obj), false, "tink.core.OutcomeTools"));
+			*(void **)__this = OutcomeTools_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~OutcomeTools_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("OutcomeTools",49,44,be,6f); }
+
+		static  ::tink::core::Outcome map( ::tink::core::Outcome outcome, ::Dynamic transform);
+		static ::Dynamic map_dyn();
+
+};
+
+} // end namespace tink
+} // end namespace core
+
+#endif /* INCLUDED_tink_core_OutcomeTools */ 
diff --git a/Sources/c_borogove/iinclude/tink/http/ContentType.h b/Sources/c_borogove/iinclude/tink/http/ContentType.h
new file mode 100644
index 0000000..6a33f4c
--- /dev/null
+++ b/Sources/c_borogove/iinclude/tink/http/ContentType.h
@@ -0,0 +1,65 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_tink_http_ContentType
+#define INCLUDED_tink_http_ContentType
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS1(haxe,IMap)
+HX_DECLARE_CLASS2(haxe,ds,StringMap)
+HX_DECLARE_CLASS2(tink,http,ContentType)
+
+namespace tink{
+namespace http{
+
+
+class HXCPP_CLASS_ATTRIBUTES ContentType_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef ContentType_obj OBJ_;
+		ContentType_obj();
+
+	public:
+		enum { _hx_ClassId = 0x67f0ac31 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="tink.http.ContentType")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"tink.http.ContentType"); }
+		static ::hx::ObjectPtr< ContentType_obj > __new();
+		static ::hx::ObjectPtr< ContentType_obj > __alloc(::hx::Ctx *_hx_ctx);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~ContentType_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("ContentType",73,d4,ad,0e); }
+
+		static  ::tink::http::ContentType ofString(::String s);
+		static ::Dynamic ofString_dyn();
+
+		::String type;
+		::String subtype;
+		 ::haxe::ds::StringMap extensions;
+		::String raw;
+		virtual ::String toString();
+		::Dynamic toString_dyn();
+
+};
+
+} // end namespace tink
+} // end namespace http
+
+#endif /* INCLUDED_tink_http_ContentType */ 
diff --git a/Sources/c_borogove/iinclude/tink/http/Header.h b/Sources/c_borogove/iinclude/tink/http/Header.h
index 8567553..75210e5 100644
--- a/Sources/c_borogove/iinclude/tink/http/Header.h
+++ b/Sources/c_borogove/iinclude/tink/http/Header.h
@@ -54,6 +54,9 @@ class HXCPP_CLASS_ATTRIBUTES Header_obj : public ::hx::Object
 		 ::tink::core::Outcome byName(::String name);
 		::Dynamic byName_dyn();
 
+		 ::tink::core::Outcome contentType();
+		::Dynamic contentType_dyn();
+
 		 ::tink::core::Outcome getContentLength();
 		::Dynamic getContentLength_dyn();
 
diff --git a/Sources/c_borogove/iinclude/tink/http/_Header/HeaderValue_Impl_.h b/Sources/c_borogove/iinclude/tink/http/_Header/HeaderValue_Impl_.h
index a0fbe32..db397d1 100644
--- a/Sources/c_borogove/iinclude/tink/http/_Header/HeaderValue_Impl_.h
+++ b/Sources/c_borogove/iinclude/tink/http/_Header/HeaderValue_Impl_.h
@@ -52,6 +52,12 @@ class HXCPP_CLASS_ATTRIBUTES HeaderValue_Impl__obj : public ::hx::Object
 		bool _hx_isInstanceOf(int inClassId);
 		::String __ToString() const { return HX_("HeaderValue_Impl_",24,b6,26,b3); }
 
+		static ::Array< ::Dynamic> parse(::String this1);
+		static ::Dynamic parse_dyn();
+
+		static ::Array< ::Dynamic> parseWith(::String this1, ::Dynamic parseExtension);
+		static ::Dynamic parseWith_dyn();
+
 		static ::String basicAuth(::String username,::String password);
 		static ::Dynamic basicAuth_dyn();
 
diff --git a/Sources/c_borogove/iinclude/tink/streams/StreamBase.h b/Sources/c_borogove/iinclude/tink/streams/StreamBase.h
index 92259cf..cf72c9e 100644
--- a/Sources/c_borogove/iinclude/tink/streams/StreamBase.h
+++ b/Sources/c_borogove/iinclude/tink/streams/StreamBase.h
@@ -54,6 +54,9 @@ class HXCPP_CLASS_ATTRIBUTES StreamBase_obj : public ::hx::Object
 		::Dynamic regroup( ::Dynamic f);
 		::Dynamic regroup_dyn();
 
+		::Dynamic map( ::Dynamic f);
+		::Dynamic map_dyn();
+
 		::Dynamic prepend(::Dynamic other);
 		::Dynamic prepend_dyn();
 
diff --git a/Sources/c_borogove/iinclude/tink/streams/StreamObject.h b/Sources/c_borogove/iinclude/tink/streams/StreamObject.h
index 5a2bbc9..b160355 100644
--- a/Sources/c_borogove/iinclude/tink/streams/StreamObject.h
+++ b/Sources/c_borogove/iinclude/tink/streams/StreamObject.h
@@ -27,6 +27,10 @@ class HXCPP_CLASS_ATTRIBUTES StreamObject_obj {
 		static inline ::Dynamic regroup( ::Dynamic _hx_, ::Dynamic f) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::tink::streams::StreamObject_obj *>(_hx_.mPtr->_hx_getInterface(0x6164ac00)))->_hx_regroup)(f);
 		}
+		::Dynamic (::hx::Object :: *_hx_map)( ::Dynamic f); 
+		static inline ::Dynamic map( ::Dynamic _hx_, ::Dynamic f) {
+			return (_hx_.mPtr->*( ::hx::interface_cast< ::tink::streams::StreamObject_obj *>(_hx_.mPtr->_hx_getInterface(0x6164ac00)))->_hx_map)(f);
+		}
 		::Dynamic (::hx::Object :: *_hx_idealize)( ::Dynamic rescue); 
 		static inline ::Dynamic idealize( ::Dynamic _hx_, ::Dynamic rescue) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::tink::streams::StreamObject_obj *>(_hx_.mPtr->_hx_getInterface(0x6164ac00)))->_hx_idealize)(rescue);
diff --git a/Sources/c_borogove/iinclude/tink/streams/_Stream/Handler_Impl_.h b/Sources/c_borogove/iinclude/tink/streams/_Stream/Handler_Impl_.h
index 2e0cf9a..a3c8cf8 100644
--- a/Sources/c_borogove/iinclude/tink/streams/_Stream/Handler_Impl_.h
+++ b/Sources/c_borogove/iinclude/tink/streams/_Stream/Handler_Impl_.h
@@ -7,7 +7,6 @@
 #endif
 
 HX_DECLARE_CLASS3(tink,core,_Future,FutureObject)
-HX_DECLARE_CLASS2(tink,streams,Handled)
 HX_DECLARE_CLASS3(tink,streams,_Stream,Handler_Impl_)
 
 namespace tink{
@@ -54,9 +53,6 @@ class HXCPP_CLASS_ATTRIBUTES Handler_Impl__obj : public ::hx::Object
 		bool _hx_isInstanceOf(int inClassId);
 		::String __ToString() const { return HX_("Handler_Impl_",ca,2f,2c,64); }
 
-		static  ::Dynamic ofSafeSync( ::Dynamic f);
-		static ::Dynamic ofSafeSync_dyn();
-
 		static  ::Dynamic ofUnknown( ::Dynamic f);
 		static ::Dynamic ofUnknown_dyn();
 
diff --git a/Sources/c_borogove/iinclude/tink/streams/_Stream/Mapping_Impl_.h b/Sources/c_borogove/iinclude/tink/streams/_Stream/Mapping_Impl_.h
new file mode 100644
index 0000000..5a672d2
--- /dev/null
+++ b/Sources/c_borogove/iinclude/tink/streams/_Stream/Mapping_Impl_.h
@@ -0,0 +1,64 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_tink_streams__Stream_Mapping_Impl_
+#define INCLUDED_tink_streams__Stream_Mapping_Impl_
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(tink,streams,_Stream,Mapping_Impl_)
+
+namespace tink{
+namespace streams{
+namespace _Stream{
+
+
+class HXCPP_CLASS_ATTRIBUTES Mapping_Impl__obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef Mapping_Impl__obj OBJ_;
+		Mapping_Impl__obj();
+
+	public:
+		enum { _hx_ClassId = 0x28df8128 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="tink.streams._Stream.Mapping_Impl_")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"tink.streams._Stream.Mapping_Impl_"); }
+
+		inline static ::hx::ObjectPtr< Mapping_Impl__obj > __new() {
+			::hx::ObjectPtr< Mapping_Impl__obj > __this = new Mapping_Impl__obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< Mapping_Impl__obj > __alloc(::hx::Ctx *_hx_ctx) {
+			Mapping_Impl__obj *__this = (Mapping_Impl__obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Mapping_Impl__obj), false, "tink.streams._Stream.Mapping_Impl_"));
+			*(void **)__this = Mapping_Impl__obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~Mapping_Impl__obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("Mapping_Impl_",0e,c6,ae,86); }
+
+		static  ::Dynamic ofPlain( ::Dynamic f);
+		static ::Dynamic ofPlain_dyn();
+
+};
+
+} // end namespace tink
+} // end namespace streams
+} // end namespace _Stream
+
+#endif /* INCLUDED_tink_streams__Stream_Mapping_Impl_ */ 
diff --git a/Sources/c_borogove/iinclude/tink/url/_Portion/Portion_Impl_.h b/Sources/c_borogove/iinclude/tink/url/_Portion/Portion_Impl_.h
new file mode 100644
index 0000000..568998d
--- /dev/null
+++ b/Sources/c_borogove/iinclude/tink/url/_Portion/Portion_Impl_.h
@@ -0,0 +1,67 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_tink_url__Portion_Portion_Impl_
+#define INCLUDED_tink_url__Portion_Portion_Impl_
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS3(tink,url,_Portion,Portion_Impl_)
+
+namespace tink{
+namespace url{
+namespace _Portion{
+
+
+class HXCPP_CLASS_ATTRIBUTES Portion_Impl__obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef Portion_Impl__obj OBJ_;
+		Portion_Impl__obj();
+
+	public:
+		enum { _hx_ClassId = 0x38058d4a };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="tink.url._Portion.Portion_Impl_")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"tink.url._Portion.Portion_Impl_"); }
+
+		inline static ::hx::ObjectPtr< Portion_Impl__obj > __new() {
+			::hx::ObjectPtr< Portion_Impl__obj > __this = new Portion_Impl__obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< Portion_Impl__obj > __alloc(::hx::Ctx *_hx_ctx) {
+			Portion_Impl__obj *__this = (Portion_Impl__obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Portion_Impl__obj), false, "tink.url._Portion.Portion_Impl_"));
+			*(void **)__this = Portion_Impl__obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~Portion_Impl__obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("Portion_Impl_",a7,a4,97,4f); }
+
+		static ::String toString(::String this1);
+		static ::Dynamic toString_dyn();
+
+		static ::String ofString(::String s);
+		static ::Dynamic ofString_dyn();
+
+};
+
+} // end namespace tink
+} // end namespace url
+} // end namespace _Portion
+
+#endif /* INCLUDED_tink_url__Portion_Portion_Impl_ */ 
diff --git a/Sources/c_borogove/iinclude/tink/url/_Query/QueryStringParser.h b/Sources/c_borogove/iinclude/tink/url/_Query/QueryStringParser.h
new file mode 100644
index 0000000..2053f86
--- /dev/null
+++ b/Sources/c_borogove/iinclude/tink/url/_Query/QueryStringParser.h
@@ -0,0 +1,69 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_tink_url__Query_QueryStringParser
+#define INCLUDED_tink_url__Query_QueryStringParser
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(tink,core,NamedWith)
+HX_DECLARE_CLASS3(tink,url,_Query,QueryStringParser)
+
+namespace tink{
+namespace url{
+namespace _Query{
+
+
+class HXCPP_CLASS_ATTRIBUTES QueryStringParser_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef QueryStringParser_obj OBJ_;
+		QueryStringParser_obj();
+
+	public:
+		enum { _hx_ClassId = 0x78240256 };
+
+		void __construct(::String s,::String sep,::String set,int pos);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="tink.url._Query.QueryStringParser")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"tink.url._Query.QueryStringParser"); }
+		static ::hx::ObjectPtr< QueryStringParser_obj > __new(::String s,::String sep,::String set,int pos);
+		static ::hx::ObjectPtr< QueryStringParser_obj > __alloc(::hx::Ctx *_hx_ctx,::String s,::String sep,::String set,int pos);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~QueryStringParser_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("QueryStringParser",98,2f,8c,35); }
+
+		static ::String trimmedSub(::String s,int start,int end);
+		static ::Dynamic trimmedSub_dyn();
+
+		::String s;
+		::String sep;
+		::String set;
+		int pos;
+		bool hasNext();
+		::Dynamic hasNext_dyn();
+
+		 ::tink::core::NamedWith next();
+		::Dynamic next_dyn();
+
+};
+
+} // end namespace tink
+} // end namespace url
+} // end namespace _Query
+
+#endif /* INCLUDED_tink_url__Query_QueryStringParser */ 
diff --git a/Sources/c_borogove/include/borogove.h b/Sources/c_borogove/include/borogove.h
index 330ab22..39d5bf4 100644
--- a/Sources/c_borogove/include/borogove.h
+++ b/Sources/c_borogove/include/borogove.h
@@ -81,6 +81,15 @@ borogove_ui_state {
 	Invited = 3
 };
 
+enum
+#ifdef __clang__
+__attribute__((enum_extensibility(closed)))
+#endif
+borogove_outgoing_e_2_ee_preference {
+	Default = 0,
+	NoE2EE = 1
+};
+
 enum
 #ifdef __clang__
 __attribute__((enum_extensibility(closed)))
@@ -187,11 +196,11 @@ API_PREFIX const char *borogove_html_to_string(void *html);
  */
 API_PREFIX const char *borogove_html_to_plain_text(void *html);
 
-API_PREFIX void borogove_persistence_media_store_has_media(void *self, const char *hashAlgorithm, const unsigned char *hash, size_t hash__len, void (*handler) (bool, void *handler__context), void *handler__context);
+API_PREFIX void borogove_persistence_media_store_has_media(void *self, void *hash, void (*handler) (const char*, void *handler__context), void *handler__context);
 
 API_PREFIX void borogove_persistence_media_store_remove_media(void *self, const char *hashAlgorithm, const unsigned char *hash, size_t hash__len, void (*handler) (bool, void *handler__context), void *handler__context);
 
-API_PREFIX void borogove_persistence_media_store_store_media(void *self, const char *mime, const unsigned char *bytes, size_t bytes__len, void (*handler) (bool, void *handler__context), void *handler__context);
+API_PREFIX void borogove_persistence_media_store_store_media(void *self, const char *mime, void *source, void (*handler) (const char*, void *handler__context), void *handler__context);
 
 /**
  * Store media on the filesystem
@@ -212,6 +221,8 @@ API_PREFIX void borogove_persistence_key_value_store_get(void *self, const char
 
 API_PREFIX void borogove_persistence_key_value_store_set(void *self, const char *k, const char *v, void (*handler) (bool, void *handler__context), void *handler__context);
 
+API_PREFIX size_t borogove_chat_message_combine_corrections(void *const *messages, size_t messages__len, void ***outPtr);
+
 /**
  * The ID as set by the creator of this message
  */
@@ -233,9 +244,19 @@ API_PREFIX const char *borogove_chat_message_server_id_by(void *chat_message);
 API_PREFIX enum borogove_message_type borogove_chat_message_type(void *chat_message);
 
 /**
- * The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+ * The timestamp this message was sent, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+ * 
+ * If the exact time is not known, the received time may be used
+ */
+API_PREFIX const char *borogove_chat_message_time_sent(void *chat_message);
+
+/**
+ * The timestamp this message was received, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+ * 
+ * This will be the time received by our server, if known, or the time
+ * received at the client otherwise.
  */
-API_PREFIX const char *borogove_chat_message_timestamp(void *chat_message);
+API_PREFIX const char *borogove_chat_message_time_received(void *chat_message);
 
 /**
  * The ID of the sender of this message
@@ -372,6 +393,17 @@ API_PREFIX const char *borogove_chat_message_call_sid(void *chat_message);
  */
 API_PREFIX const char *borogove_chat_message_call_duration(void *chat_message);
 
+/**
+ * Fetch data for a ChatAttachment into local media cache
+ * 
+ * If cachedAt is already filled in for this ChatAttachment, it is simply returned.
+ * 
+ * @param attachment ChatAttachment to fetch
+ * @param client Client to use when fetching
+ * @param handler which receives a ChatAttachment with cachedAt filled in, if possible
+ */
+API_PREFIX void borogove_chat_message_fetch_attachment(void *chat_message, void *attachment, void *client, bool storeIfNeeded, void (*handler) (void*, void *handler__context), void *handler__context);
+
 /**
  * Create a new attachment for adding to a ChatMessage
  * 
@@ -382,6 +414,11 @@ API_PREFIX const char *borogove_chat_message_call_duration(void *chat_message);
  */
 API_PREFIX void *borogove_chat_attachment_create(const char *name, const char *mime, int size, const char *uri);
 
+/**
+ * Location of the data in cache, if present
+ */
+API_PREFIX const char *borogove_chat_attachment_cached_at(void *chat_attachment);
+
 /**
  * Filename
  */
@@ -457,6 +494,8 @@ API_PREFIX const char *borogove_hash_to_base_64(void *hash);
  */
 API_PREFIX const char *borogove_hash_to_base_64_url(void *hash);
 
+API_PREFIX bool borogove_hash_equals(void *hash, void *other);
+
 /**
  * Create a new Unicode reaction to send
  * 
@@ -566,8 +605,9 @@ API_PREFIX void borogove_chat_get_messages_around(void *chat, void *around, void
  * Send a message to this Chat
  * 
  * @param message the ChatMessageBuilder to send
+ * @param e2eePreference optional explicit End-to-End Encryption preference for this message. If Default, uses the client's preferred allowed E2EE method.
  */
-API_PREFIX void borogove_chat_send_message(void *chat, void *message);
+API_PREFIX void borogove_chat_send_message(void *chat, void *message, enum borogove_outgoing_e_2_ee_preference e2eePreference);
 
 /**
  * Signals that all messages up to and including this one have probably
@@ -730,6 +770,11 @@ API_PREFIX const char *borogove_chat_get_photo(void *chat);
  */
 API_PREFIX const char *borogove_chat_get_placeholder(void *chat);
 
+/**
+ * Has the user ever read this chat?
+ */
+API_PREFIX bool borogove_chat_has_ever_read(void *chat);
+
 /**
  * An ID of the last message displayed to the user
  */
@@ -762,6 +807,13 @@ API_PREFIX const char *borogove_chat_get_display_name(void *chat);
  */
 API_PREFIX size_t borogove_chat_get_tags(void *chat, const char ***outPtr);
 
+/**
+ * Set tags on this Chat
+ * 
+ * @param tags The tags to set
+ */
+API_PREFIX void borogove_chat_set_tags(void *chat, const char *const *tags, size_t tags__len);
+
 /**
  * Set if this chat is to be trusted with our presence, etc
  * 
@@ -822,11 +874,6 @@ API_PREFIX void *borogove_chat_dtmf(void *chat);
  */
 API_PREFIX size_t borogove_chat_video_tracks(void *chat, void ***outPtr);
 
-/**
- * Get encryption mode for this chat
- */
-API_PREFIX const char *borogove_chat_encryption_mode(void *chat);
-
 /**
  * Can the user send messages to this chat?
  */
@@ -867,6 +914,11 @@ API_PREFIX void borogove_chat_commands(void *chat, void (*handler) (void**, size
  */
 API_PREFIX void borogove_chat_invited_by(void *chat, void (*handler) (void*, void *handler__context), void *handler__context);
 
+/**
+ * A placeholder member suitable for moderated messages
+ */
+API_PREFIX void *borogove_member_moderated();
+
 /**
  * A unique id for this member
  */
@@ -1273,20 +1325,19 @@ API_PREFIX void borogove_persistence_get_messages_around(void *self, const char
 /**
  * Check whether a media blob is already stored
  * 
- * @param hashAlgorithm hash algorithm for the content ID
- * @param hash raw hash bytes
- * @param handler which receives true when the media exists
+ * @param hash hash of the media we're looking for
+ * @param handler which receives an ID when the media exists, null when it does not
  */
-API_PREFIX void borogove_persistence_has_media(void *self, const char *hashAlgorithm, const unsigned char *hash, size_t hash__len, void (*handler) (bool, void *handler__context), void *handler__context);
+API_PREFIX void borogove_persistence_has_media(void *self, void *hash, void (*handler) (const char*, void *handler__context), void *handler__context);
 
 /**
  * Store media bytes and any metadata needed to retrieve them later
  * 
  * @param mime MIME type of the media
- * @param bytes raw media bytes
- * @param handler which receives true when storage succeeded
+ * @param source raw media bytes
+ * @param handler which receives an ID for the stored media
  */
-API_PREFIX void borogove_persistence_store_media(void *self, const char *mime, const unsigned char *bytes, size_t bytes__len, void (*handler) (bool, void *handler__context), void *handler__context);
+API_PREFIX void borogove_persistence_store_media(void *self, const char *mime, void *source, void (*handler) (const char*, void *handler__context), void *handler__context);
 
 /**
  * Delete previously stored media
@@ -1303,10 +1354,11 @@ API_PREFIX void borogove_persistence_remove_media(void *self, const char *hashAl
  * @param accountId the account to store login state for
  * @param clientId negotiated client ID
  * @param displayName last known display name
- * @param token persisted token or null to clear it
+ * @param rosterVer roster version string if known
+ * @param token persisted token or null to keep the current value
  * @param handler which receives true when store succeeded
  */
-API_PREFIX void borogove_persistence_store_login(void *self, const char *accountId, const char *clientId, const char *displayName, const char *token, void (*handler) (bool, void *handler__context), void *handler__context);
+API_PREFIX void borogove_persistence_store_login(void *self, const char *accountId, const char *clientId, const char *displayName, const char *rosterVer, const char *token, void (*handler) (bool, void *handler__context), void *handler__context);
 
 /**
  * Remove stored data for an account
@@ -1364,6 +1416,11 @@ API_PREFIX void borogove_form_submit_builder_add(void *form_submit_builder, cons
  */
 API_PREFIX void *borogove_chat_message_builder_new();
 
+/**
+ * Create a new ChatMessageBuilder from an existing ChatMessage
+ */
+API_PREFIX void *borogove_chat_message_builder_from_message(void *m);
+
 /**
  * The ID as set by the creator of this message
  */
@@ -1405,14 +1462,34 @@ API_PREFIX enum borogove_message_type borogove_chat_message_builder_type(void *c
 API_PREFIX void borogove_chat_message_builder_set_type(void *chat_message_builder, enum borogove_message_type value);
 
 /**
- * The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+ * The timestamp this message was sent, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+ * 
+ * If the exact time is not known, the received time may be used
  */
-API_PREFIX const char *borogove_chat_message_builder_timestamp(void *chat_message_builder);
+API_PREFIX const char *borogove_chat_message_builder_time_sent(void *chat_message_builder);
 
 /**
- * The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+ * The timestamp this message was sent, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+ * 
+ * If the exact time is not known, the received time may be used
+ */
+API_PREFIX void borogove_chat_message_builder_set_time_sent(void *chat_message_builder, const char *value);
+
+/**
+ * The timestamp this message was received, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+ * 
+ * This will be the time received by our server, if known, or the time
+ * received at the client otherwise.
  */
-API_PREFIX void borogove_chat_message_builder_set_timestamp(void *chat_message_builder, const char *value);
+API_PREFIX const char *borogove_chat_message_builder_time_received(void *chat_message_builder);
+
+/**
+ * The timestamp this message was received, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+ * 
+ * This will be the time received by our server, if known, or the time
+ * received at the client otherwise.
+ */
+API_PREFIX void borogove_chat_message_builder_set_time_received(void *chat_message_builder, const char *value);
 
 /**
  * The ID of the message sender
@@ -1650,6 +1727,18 @@ API_PREFIX void *borogove_client_new(const char *accountId, void *persistence);
  */
 API_PREFIX void borogove_client_set_send_available(void *client, bool value);
 
+/**
+ * If true, the client will block and return a policy-violation error for
+ * any incoming chat message that is not end-to-end encrypted.
+ */
+API_PREFIX bool borogove_client_block_incoming_without_e_2_ee(void *client);
+
+/**
+ * If true, the client will block and return a policy-violation error for
+ * any incoming chat message that is not end-to-end encrypted.
+ */
+API_PREFIX void borogove_client_set_block_incoming_without_e_2_ee(void *client, bool value);
+
 /**
  * Start this client running and trying to connect to the server
  */
@@ -1690,6 +1779,14 @@ API_PREFIX const char *borogove_client_account_id(void *client);
  */
 API_PREFIX const char *borogove_client_display_name(void *client);
 
+/**
+ * Set the current profile photo for this account on the server
+ * 
+ * @param photo to set
+ * @param publicAccess set the access for the photo to public
+ */
+API_PREFIX void borogove_client_set_photo(void *client, void *source, bool publicAccess);
+
 /**
  * Set the current profile for this account on the server
  * 
@@ -1707,13 +1804,33 @@ API_PREFIX void borogove_client_set_profile(void *client, void *profile, bool pu
  */
 API_PREFIX void borogove_client_set_status(void *client, void *status, int expires, bool publicAccess);
 
+/**
+ * Adjusts the outgoing E2EE preference list to prioritize the specified preference.
+ * This ensures that the client will attempt to use this E2EE protocol first when sending messages.
+ * 
+ * @param preference the OutgoingE2EEPreference to prioritize
+ */
+API_PREFIX void borogove_client_prefer_e_2_ee(void *client, enum borogove_outgoing_e_2_ee_preference preference);
+
+/**
+ * Removes the specified E2EE preference from the allowed outgoing preferences.
+ * The client will no longer use this protocol for outgoing messages.
+ * 
+ * @param preference the OutgoingE2EEPreference to ban
+ */
+API_PREFIX void borogove_client_ban_e_2_ee(void *client, enum borogove_outgoing_e_2_ee_preference preference);
+
 /**
  * Turn a file into a ChatAttachment for attaching to a ChatMessage
  * 
  * @param source The AttachmentSource to use
- * @param handler which receives a ChatAttachment or null
+ * @param encrypt Should the data be encrypted with a fresh key?
+ * @param handler which receives a ChatAttachment
+ * @throws AttachmentUploadError when no upload service is available or all
+ * 	discovered services fail. Inspect `code` and, for
+ * 	`all-services-failed`, the per-service `failures`.
  */
-API_PREFIX void borogove_client_prepare_attachment(void *client, void *source, void (*handler) (void*, void *handler__context), void *handler__context);
+API_PREFIX void borogove_client_prepare_attachment(void *client, void *source, bool encrypt, void (*handler) (void*, void *handler__context), void *handler__context);
 
 /**
  * @returns array of open chats, sorted by last activity
@@ -1985,16 +2102,53 @@ API_PREFIX void borogove_available_chat_iterator_next(void *available_chat_itera
  */
 API_PREFIX const char *borogove_channel_subject(void *channel);
 
+/**
+ * Can the user set the Channel subject?
+ */
+API_PREFIX bool borogove_channel_can_set_subject(void *channel);
+
+/**
+ * Set the Channel subject, or subject of a thread
+ */
+API_PREFIX void borogove_channel_set_subject(void *channel, const char *subject, const char *threadId);
+
 /**
  * Description of this Channel
  */
 API_PREFIX const char *borogove_channel_description(void *channel);
 
+/**
+ * If the user is muted by local policy, send a request to moderators
+ */
+API_PREFIX void borogove_channel_request_to_send(void *channel);
+
+/**
+ * Can the user set the photo of this channel?
+ */
+API_PREFIX bool borogove_channel_can_set_photo(void *channel);
+
+/**
+ * Set the current photo for this channel on the server, if user is an owner
+ * 
+ * @param photo to set
+ */
+API_PREFIX void borogove_channel_set_photo(void *channel, void *source);
+
 /**
  * Whether this channel is members-only/private.
  */
 API_PREFIX bool borogove_channel_is_private(void *channel);
 
+/**
+ * List of current voice requests we are aware of
+ */
+API_PREFIX void borogove_channel_voice_requests(void *channel, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
+
+/**
+ * Respond to a particular voice request
+ */
+API_PREFIX void borogove_channel_voice_request_respond(void *channel, void *member, bool canSend);
+
 /**
  * Schedule DTMF events to be sent
  * 
diff --git a/Sources/c_borogove/src/Array.cpp b/Sources/c_borogove/src/Array.cpp
index 19366ea..18c7e9c 100644
--- a/Sources/c_borogove/src/Array.cpp
+++ b/Sources/c_borogove/src/Array.cpp
@@ -1,11 +1,87 @@
 #include <hxcpp.h>
 #include <vector>
+#include <limits>
 #include <cpp/Pointer.h>
 
 #ifdef HXCPP_TELEMETRY
 extern void __hxt_new_array(void* obj, int size);
 #endif
 
+namespace
+{
+    template<class ELEM>
+    class SafeSorter
+    {
+        typedef
+#if (HXCPP_API_LEVEL>=500)
+            ::hx::Callable<int(Dynamic, Dynamic)>
+#else
+            Dynamic
+#endif
+            SorterFunc;
+
+        struct ArraySorter
+        {
+            ELEM* mArray;
+            SorterFunc mSorter;
+
+            ArraySorter(ELEM* inArray, SorterFunc inSorter) : mArray(inArray), mSorter(inSorter) {};
+
+            bool operator()(int inA, int inB)
+            {
+                return mSorter(mArray[inA], mArray[inB]) < 0;
+            }
+        };
+
+        template<class STORE>
+        static void SortImpl(ELEM* inArray, const int inLength, SorterFunc inSorter)
+        {
+            auto index = std::vector<STORE>(inLength);
+            for (auto i = 0; i < inLength; i++)
+            {
+                index[i] = static_cast<STORE>(i);
+            }
+
+            std::stable_sort(index.begin(), index.end(), ArraySorter(inArray, inSorter));
+
+            // Put the results back ...
+            for (int i = 0; i < inLength; i++)
+            {
+                int from = index[i];
+                while (from < i)
+                    from = index[from];
+                if (from != i)
+                {
+                    std::swap(inArray[i], inArray[from]);
+                    index[i] = from;
+                }
+            }
+        }
+
+    public:
+        static void Sort(ELEM* base, const int length, SorterFunc sorter)
+        {
+            if (length < 2)
+            {
+                return;
+            }
+
+            if (length <= std::numeric_limits<uint8_t>::max())
+            {
+                SortImpl<uint8_t>(base, length, sorter);
+            }
+            else if (length <= std::numeric_limits<uint16_t>::max())
+            {
+                SortImpl<uint16_t>(base, length, sorter);
+            }
+            else
+            {
+                SortImpl<uint32_t>(base, length, sorter);
+            }
+        }
+    };
+}
+
 using namespace hx;
 
 
@@ -290,7 +366,7 @@ void ArrayBase::Splice(ArrayBase *outResult,int inPos,int inLen)
       if (inPos<0)
          inPos =0;
    }
-   if (inLen<0)
+   if (inLen<=0)
       return;
    if (inPos+inLen>length)
       inLen = length - inPos;
@@ -488,98 +564,44 @@ String ArrayBase::joinArray(ArrayBase *inBase, String inSeparator)
    return stringArray->join(inSeparator);
 }
 
-template<typename T>
-struct ArrayBaseSorter
-{
-   ArrayBaseSorter(T *inArray, Dynamic inFunc)
-   {
-      mFunc = inFunc;
-      mArray = inArray;
-   }
-
-   bool operator()(int inA, int inB)
-      { return mFunc(mArray[inA], mArray[inB])->__ToInt() < 0; }
-
-   Dynamic mFunc;
-   T*      mArray;
-};
-
-template<typename T,typename STORE>
-void TArraySortLen(T *inArray, int inLength, Dynamic inSorter)
-{
-   std::vector<STORE> index(inLength);
-   for(int i=0;i<inLength;i++)
-      index[i] = (STORE)i;
-
-   std::stable_sort(index.begin(), index.end(), ArrayBaseSorter<T>(inArray,inSorter) );
-
-   // Put the results back ...
-   for(int i=0;i<inLength;i++)
-   {
-      int from = index[i];
-      while(from < i)
-         from = index[from];
-      if (from!=i)
-      {
-         std::swap(inArray[i],inArray[from]);
-         index[i] = from;
-      }
-   }
-}
 
-template<typename T>
-void TArraySort(T *inArray, int inLength, Dynamic inSorter)
-{
-   if (inLength<2)
-      return;
-   if (inLength<=256)
-      TArraySortLen<T,unsigned char >(inArray, inLength, inSorter);
-   else if (inLength<=65536)
-      TArraySortLen<T,unsigned short >(inArray, inLength, inSorter);
-   else
-      TArraySortLen<T,unsigned int >(inArray, inLength, inSorter);
-}
-
-void ArrayBase::safeSort(Dynamic inSorter, bool inIsString)
+void ArrayBase::safeSort(DynamicSorterFunc inSorter, bool inIsString)
 {
    if (inIsString)
-      TArraySort((String *)mBase, length,inSorter);
+       SafeSorter<String>::Sort((String *)mBase, length,inSorter);
    else
-      TArraySort((Dynamic *)mBase, length,inSorter);
+       SafeSorter<Dynamic>::Sort((Dynamic *)mBase, length,inSorter);
 }
 
 
 
-#ifdef HXCPP_VISIT_ALLOCS
-#define ARRAY_VISIT_FUNC \
-    void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mThis); }
-#else
-#define ARRAY_VISIT_FUNC
-#endif
+#if (HXCPP_API_LEVEL<500)
+    #define ARRAY_RUN_FUNC(ret,func,dynamic_arg_list,arg_list) \
+        Dynamic __run(dynamic_arg_list) HXCPP_OVERRIDE \
+        { \
+            ret mThis->__##func(arg_list); return Dynamic(); \
+        }
 
-#define DEFINE_ARRAY_FUNC(ret,func,array_list,dynamic_arg_list,arg_list,ARG_C) \
+#define DEFINE_ARRAY_FUNC(ret,func,array_list,run_func,ARG_C) \
 struct ArrayBase_##func : public hx::Object \
 { \
    HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdClosure }; \
    bool __IsFunction() const { return true; } \
    ArrayBase *mThis; \
    ArrayBase_##func(ArrayBase *inThis) : mThis(inThis) { } \
-   String toString() const{ return HX_CSTRING(#func) ; } \
-   String __ToString() const{ return HX_CSTRING(#func) ; } \
-   int __GetType() const { return vtFunction; } \
-   void *__GetHandle() const { return mThis; } \
-   int __ArgCount() const { return ARG_C; } \
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER(mThis); } \
+   String toString() HXCPP_OVERRIDE { return HX_CSTRING(#func) ; } \
+   String __ToString() const HXCPP_OVERRIDE { return HX_CSTRING(#func) ; } \
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } \
+   void *__GetHandle() const HXCPP_OVERRIDE { return mThis; } \
+   int __ArgCount() const HXCPP_OVERRIDE { return ARG_C; } \
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER(mThis); } \
    ARRAY_VISIT_FUNC \
-   Dynamic __Run(const Array<Dynamic> &inArgs) \
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE \
    { \
       ret mThis->__##func(array_list); return Dynamic(); \
    } \
-   Dynamic __run(dynamic_arg_list) \
-   { \
-      ret mThis->__##func(arg_list); return Dynamic(); \
-   } \
-   int __Compare(const hx::Object *inRHS) const \
+   run_func \
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE \
    { \
       if (!dynamic_cast<const ArrayBase_##func *>(inRHS)) return -1; \
       return (mThis==inRHS->__GetHandle() ? 0 : -1); \
@@ -588,11 +610,11 @@ struct ArrayBase_##func : public hx::Object \
 Dynamic ArrayBase::func##_dyn()  { return new ArrayBase_##func(this);  }
 
 
-#define DEFINE_ARRAY_FUNC0(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST0,HX_DYNAMIC_ARG_LIST0,HX_ARG_LIST0,0)
-#define DEFINE_ARRAY_FUNC1(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST1,HX_DYNAMIC_ARG_LIST1,HX_ARG_LIST1,1)
-#define DEFINE_ARRAY_FUNC2(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST2,HX_DYNAMIC_ARG_LIST2,HX_ARG_LIST2,2)
-#define DEFINE_ARRAY_FUNC3(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST3,HX_DYNAMIC_ARG_LIST3,HX_ARG_LIST3,3)
-#define DEFINE_ARRAY_FUNC4(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST4,HX_DYNAMIC_ARG_LIST4,HX_ARG_LIST4,4)
+#define DEFINE_ARRAY_FUNC0(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST0,ARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST0,HX_ARG_LIST0),0)
+#define DEFINE_ARRAY_FUNC1(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST1,ARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST1,HX_ARG_LIST1),1)
+#define DEFINE_ARRAY_FUNC2(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST2,ARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST2,HX_ARG_LIST2),2)
+#define DEFINE_ARRAY_FUNC3(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST3,ARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST3,HX_ARG_LIST3),3)
+#define DEFINE_ARRAY_FUNC4(ret,func) DEFINE_ARRAY_FUNC(ret,func,HX_ARR_LIST4,ARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST4,HX_ARG_LIST4),4)
 
 
 DEFINE_ARRAY_FUNC1(,__SetSize);
@@ -626,10 +648,7 @@ DEFINE_ARRAY_FUNC1(return,__unsafe_get);
 DEFINE_ARRAY_FUNC2(return,__unsafe_set);
 DEFINE_ARRAY_FUNC1(return,memcmp);
 
-
-
-
-hx::Val ArrayBase::__Field(const String &inString, hx::PropertyAccess inCallProp)
+hx::Val ArrayBase::__Field(const String& inString, hx::PropertyAccess inCallProp)
 {
    if (inString==HX_CSTRING("length")) return (int)size();
    if (inString==HX_CSTRING("concat")) return concat_dyn();
@@ -668,6 +687,14 @@ hx::Val ArrayBase::__Field(const String &inString, hx::PropertyAccess inCallProp
    return null();
 }
 
+#endif
+
+#if (HXCPP_API_LEVEL>=500)
+hx::Val ArrayBase::__pointerToBase()
+{
+    return cpp::CreateDynamicPointer(mBase);
+}
+#endif
 
 static String sArrayFields[] = {
    HX_CSTRING("length"),
@@ -736,20 +763,103 @@ bool DynamicEq(const Dynamic &a, const Dynamic &b)
 
 namespace cpp
 {
-HX_DEFINE_DYNAMIC_FUNC0(IteratorBase,hasNext,return)
-HX_DEFINE_DYNAMIC_FUNC0(IteratorBase,_dynamicNext,return)
+#if (HXCPP_API_LEVEL>=500)
+    ::hx::Callable<bool()> IteratorBase::hasNext_dyn()
+    {
+        struct _hx_iterator_hasNext final : public ::hx::AutoCallable_obj<bool()>
+        {
+            ::hx::ObjectPtr<IteratorBase> __this;
+
+            _hx_iterator_hasNext(IteratorBase* ptr) : __this(ptr)
+            {
+               HX_OBJ_WB_NEW_MARKED_OBJECT(this);
+            }
 
-Dynamic IteratorBase::next_dyn()
-{
-   return hx::CreateMemberFunction0("next",this,__IteratorBase_dynamicNext);
-}
+            bool HX_LOCAL_RUN() final override
+            {
+                return __this->hasNext();
+            }
 
-hx::Val IteratorBase::__Field(const String &inString, hx::PropertyAccess inCallProp)
-{
-   if (inString==HX_CSTRING("hasNext")) return hasNext_dyn();
-   if (inString==HX_CSTRING("next")) return _dynamicNext_dyn();
-   return null();
-}
+            void* __GetHandle() const override
+            {
+                return __this.GetPtr();
+            }
+
+            void __Mark(hx::MarkContext* __inCtx) final override
+            {
+                HX_MARK_MEMBER(__this);
+            }
+
+#ifdef HXCPP_VISIT_ALLOCS
+            void __Visit(hx::VisitContext* __inCtx) override
+            {
+                HX_VISIT_MEMBER(__this);
+            }
+#endif
+        };
+
+        return new _hx_iterator_hasNext(this);
+    }
+
+    ::hx::Callable<::Dynamic()> IteratorBase::next_dyn()
+    {
+        struct _hx_iterator_next : public ::hx::AutoCallable_obj<::Dynamic()>
+        {
+            ::hx::ObjectPtr<IteratorBase> __this;
+
+            _hx_iterator_next(IteratorBase* ptr) : __this(ptr)
+            {
+               HX_OBJ_WB_NEW_MARKED_OBJECT(this);
+            }
+
+            ::Dynamic HX_LOCAL_RUN() final override
+            {
+                return __this->_dynamicNext();
+            }
+
+            void* __GetHandle() const override
+            {
+                return __this.GetPtr();
+            }
+
+            void __Mark(hx::MarkContext* __inCtx) final override
+            {
+                HX_MARK_MEMBER(__this);
+            }
+
+#ifdef HXCPP_VISIT_ALLOCS
+            void __Visit(hx::VisitContext* __inCtx) override
+            {
+                HX_VISIT_MEMBER(__this);
+            }
+#endif
+        };
+
+        return new _hx_iterator_next(this);
+    }
+
+    hx::Val IteratorBase::__Field(const String &inString, hx::PropertyAccess inCallProp)
+    {
+       if (inString==HX_CSTRING("hasNext")) return hasNext_dyn();
+       if (inString==HX_CSTRING("next")) return next_dyn();
+       return null();
+    }
+#else
+    HX_DEFINE_DYNAMIC_FUNC0(IteratorBase, hasNext, return)
+    HX_DEFINE_DYNAMIC_FUNC0(IteratorBase, _dynamicNext, return)
+
+    Dynamic IteratorBase::next_dyn()
+    {
+        return hx::CreateMemberFunction0("next", this, __IteratorBase_dynamicNext);
+    }
+
+    hx::Val IteratorBase::__Field(const String & inString, hx::PropertyAccess inCallProp)
+    {
+        if (inString == HX_CSTRING("hasNext")) return hasNext_dyn();
+        if (inString == HX_CSTRING("next")) return _dynamicNext_dyn();
+        return null();
+    }
+#endif
 }
 
 
@@ -759,9 +869,86 @@ hx::Val IteratorBase::__Field(const String &inString, hx::PropertyAccess inCallP
 namespace cpp
 {
 
+#if (HXCPP_API_LEVEL>=500)
+
+#define HX_VARRAY_ARG_LIST0
+#define HX_VARRAY_ARG_LIST1(arg0) arg0
+#define HX_VARRAY_ARG_LIST2(arg0, arg1) arg0, arg1
+#define HX_VARRAY_ARG_LIST3(arg0, arg1, arg2) arg0, arg1, arg2
+#define HX_VARRAY_ARG_LIST4(arg0, arg1, arg2, arg3) arg0, arg1, arg2, arg3
+
+#define HX_VARRAY_FUNC_LIST0
+#define HX_VARRAY_FUNC_LIST1(arg0) arg0 inArg0
+#define HX_VARRAY_FUNC_LIST2(arg0, arg1) arg0 inArg0, arg1 inArg1
+#define HX_VARRAY_FUNC_LIST3(arg0, arg1, arg2) arg0 inArg0, arg1 inArg1, arg2 inArg2
+#define HX_VARRAY_FUNC_LIST4(arg0, arg1, arg2, arg3) arg0 inArg0, arg1 inArg1, arg2 inArg2, arg3 inArg3
+
+#define HX_VARRAY_FUNC(ret, value, name, args_list, func_list, args_call) \
+    ::hx::Callable<value(args_list)> VirtualArray_obj::name##_dyn() \
+    { \
+        struct _hx_virtualarray_##name final : public ::hx::AutoCallable_obj<value(args_list)> \
+        { \
+            VirtualArray mThis; \
+            _hx_virtualarray_##name(::cpp::VirtualArray inThis) : mThis(inThis) \
+            { \
+                HX_OBJ_WB_NEW_MARKED_OBJECT(this); \
+            } \
+            value _hx_run(func_list) override \
+            { \
+                ret mThis->name(args_call); \
+            } \
+            void* __GetHandle() const override { return mThis.GetPtr(); } \
+            void __Mark(hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(mThis); } \
+            ARRAY_VISIT_FUNC \
+            int __Compare(const ::hx::Object* inRhs) const override \
+            { \
+                auto casted = dynamic_cast<const  _hx_virtualarray_##name *>(inRhs); \
+                if (!casted) return 1; \
+                if (mThis != casted->mThis) return -1; \
+                return 0; \
+            } \
+        }; \
+        return new _hx_virtualarray_##name(this); \
+    }
+
+    HX_VARRAY_FUNC(return, ::cpp::VirtualArray, concat, HX_VARRAY_ARG_LIST1(::cpp::VirtualArray), HX_VARRAY_FUNC_LIST1(::cpp::VirtualArray), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(return, ::cpp::VirtualArray, copy, HX_VARRAY_ARG_LIST0, HX_VARRAY_FUNC_LIST0, HX_ARG_LIST0);
+    HX_VARRAY_FUNC(, void, insert, HX_VARRAY_ARG_LIST2(int, ::Dynamic), HX_VARRAY_FUNC_LIST2(int, ::Dynamic), HX_ARG_LIST2);
+    HX_VARRAY_FUNC(return, ::Dynamic, iterator, HX_VARRAY_ARG_LIST0, HX_VARRAY_FUNC_LIST0, HX_ARG_LIST0);
+    HX_VARRAY_FUNC(return, ::Dynamic, keyValueIterator, HX_VARRAY_ARG_LIST0, HX_VARRAY_FUNC_LIST0, HX_ARG_LIST0);
+    HX_VARRAY_FUNC(return, ::String, join, HX_VARRAY_ARG_LIST1(::String), HX_VARRAY_FUNC_LIST1(::String), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(return, ::Dynamic, pop, HX_VARRAY_ARG_LIST0, HX_VARRAY_FUNC_LIST0, HX_ARG_LIST0);
+    HX_VARRAY_FUNC(return, bool, contains, HX_VARRAY_ARG_LIST1(::Dynamic), HX_VARRAY_FUNC_LIST1(::Dynamic), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(return, bool, remove, HX_VARRAY_ARG_LIST1(::Dynamic), HX_VARRAY_FUNC_LIST1(::Dynamic), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(return, bool, removeAt, HX_VARRAY_ARG_LIST1(int), HX_VARRAY_FUNC_LIST1(int), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(return, int, indexOf, HX_VARRAY_ARG_LIST2(::Dynamic, ::Dynamic), HX_VARRAY_FUNC_LIST2(::Dynamic, ::Dynamic), HX_ARG_LIST2);
+    HX_VARRAY_FUNC(return, int, lastIndexOf, HX_VARRAY_ARG_LIST2(::Dynamic, ::Dynamic), HX_VARRAY_FUNC_LIST2(::Dynamic, ::Dynamic), HX_ARG_LIST2);
+    HX_VARRAY_FUNC(, void, reverse, HX_VARRAY_ARG_LIST0, HX_VARRAY_FUNC_LIST0, HX_ARG_LIST0);
+    HX_VARRAY_FUNC(return, ::Dynamic, shift, HX_VARRAY_ARG_LIST0, HX_VARRAY_FUNC_LIST0, HX_ARG_LIST0);
+    HX_VARRAY_FUNC(return, ::cpp::VirtualArray, slice, HX_VARRAY_ARG_LIST2(int, ::Dynamic), HX_VARRAY_FUNC_LIST2(int, ::Dynamic), HX_ARG_LIST2);
+    HX_VARRAY_FUNC(return, ::cpp::VirtualArray, splice, HX_VARRAY_ARG_LIST2(int, int), HX_VARRAY_FUNC_LIST2(int, int), HX_ARG_LIST2);
+    HX_VARRAY_FUNC(return, void, sort, HX_VARRAY_ARG_LIST1(hx::ArrayBase::DynamicSorterFunc), HX_VARRAY_FUNC_LIST1(hx::ArrayBase::DynamicSorterFunc), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(return, ::String, toString, HX_VARRAY_ARG_LIST0, HX_VARRAY_FUNC_LIST0, HX_ARG_LIST0);
+    HX_VARRAY_FUNC(, void, unshift, HX_VARRAY_ARG_LIST1(::Dynamic), HX_VARRAY_FUNC_LIST1(::Dynamic), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(return, ::cpp::VirtualArray, map, HX_VARRAY_ARG_LIST1(hx::ArrayBase::DynamicMappingFunc), HX_VARRAY_FUNC_LIST1(hx::ArrayBase::DynamicMappingFunc), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(return, ::cpp::VirtualArray, filter, HX_VARRAY_ARG_LIST1(hx::ArrayBase::DynamicFilterFunc), HX_VARRAY_FUNC_LIST1(hx::ArrayBase::DynamicFilterFunc), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(, void, __SetSize, HX_VARRAY_ARG_LIST1(int), HX_VARRAY_FUNC_LIST1(int), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(, void, __SetSizeExact, HX_VARRAY_ARG_LIST1(int), HX_VARRAY_FUNC_LIST1(int), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(return, ::Dynamic, __unsafe_get, HX_VARRAY_ARG_LIST1(::Dynamic), HX_VARRAY_FUNC_LIST1(::Dynamic), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(return, ::Dynamic, __unsafe_set, HX_VARRAY_ARG_LIST2(::Dynamic, ::Dynamic), HX_VARRAY_FUNC_LIST2(::Dynamic, ::Dynamic), HX_ARG_LIST2);
+    HX_VARRAY_FUNC(, void, blit, HX_VARRAY_ARG_LIST4(int, ::cpp::VirtualArray, int, int), HX_VARRAY_FUNC_LIST4(int, ::cpp::VirtualArray, int, int), HX_ARG_LIST4);
+    HX_VARRAY_FUNC(, void, zero, HX_VARRAY_ARG_LIST2(::Dynamic, ::Dynamic), HX_VARRAY_FUNC_LIST2(::Dynamic, ::Dynamic), HX_ARG_LIST2);
+    HX_VARRAY_FUNC(, void, memcmp, HX_VARRAY_ARG_LIST1(::cpp::VirtualArray), HX_VARRAY_FUNC_LIST1(::cpp::VirtualArray), HX_ARG_LIST1);
+    HX_VARRAY_FUNC(, void, resize, HX_VARRAY_ARG_LIST1(int), HX_VARRAY_FUNC_LIST1(int), HX_ARG_LIST1);
 
+#else
+#define VARRAY_RUN_FUNC(ret,func,dynamic_arg_list,arg_list) \
+    Dynamic __run(dynamic_arg_list) HXCPP_OVERRIDE \
+    { \
+        ret mThis->func(arg_list); return Dynamic(); \
+    }
 
-#define DEFINE_VARRAY_FUNC(ret, func,array_list,dynamic_arg_list,arg_list,ARG_C) \
+#define DEFINE_VARRAY_FUNC(ret, func,array_list,run_func,ARG_C) \
 struct VirtualArray_##func : public hx::Object \
 { \
    HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdClosure }; \
@@ -770,30 +957,26 @@ struct VirtualArray_##func : public hx::Object \
    VirtualArray_##func(VirtualArray inThis) : mThis(inThis) { \
       HX_OBJ_WB_NEW_MARKED_OBJECT(this); \
    } \
-   String toString() const{ return HX_CSTRING(#func) ; } \
-   String __ToString() const{ return HX_CSTRING(#func) ; } \
-   int __GetType() const { return vtFunction; } \
-   void *__GetHandle() const { return mThis.mPtr; } \
-   int __ArgCount() const { return ARG_C; } \
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER(mThis); } \
+   String toString() HXCPP_OVERRIDE { return HX_CSTRING(#func) ; } \
+   String __ToString() const HXCPP_OVERRIDE { return HX_CSTRING(#func) ; } \
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; } \
+   void *__GetHandle() const HXCPP_OVERRIDE { return mThis.mPtr; } \
+   int __ArgCount() const HXCPP_OVERRIDE { return ARG_C; } \
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER(mThis); } \
    ARRAY_VISIT_FUNC \
-   Dynamic __Run(const Array<Dynamic> &inArgs) \
+   run_func \
+   Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE \
    { \
       ret mThis->func(array_list); return Dynamic(); \
    } \
-   Dynamic __run(dynamic_arg_list) \
-   { \
-      ret mThis->func(arg_list); return Dynamic(); \
-   } \
 }; \
 Dynamic VirtualArray_obj::func##_dyn()  { return new VirtualArray_##func(this);  }
 
-
-#define DEFINE_VARRAY_FUNC0(ret,func) DEFINE_VARRAY_FUNC(ret,func,HX_ARR_LIST0,HX_DYNAMIC_ARG_LIST0,HX_ARG_LIST0,0)
-#define DEFINE_VARRAY_FUNC1(ret,func) DEFINE_VARRAY_FUNC(ret,func,HX_ARR_LIST1,HX_DYNAMIC_ARG_LIST1,HX_ARG_LIST1,1)
-#define DEFINE_VARRAY_FUNC2(ret,func) DEFINE_VARRAY_FUNC(ret,func,HX_ARR_LIST2,HX_DYNAMIC_ARG_LIST2,HX_ARG_LIST2,2)
-#define DEFINE_VARRAY_FUNC3(ret,func) DEFINE_VARRAY_FUNC(ret,func,HX_ARR_LIST3,HX_DYNAMIC_ARG_LIST3,HX_ARG_LIST3,3)
-#define DEFINE_VARRAY_FUNC4(ret,func) DEFINE_VARRAY_FUNC(ret,func,HX_ARR_LIST4,HX_DYNAMIC_ARG_LIST4,HX_ARG_LIST4,4)
+#define DEFINE_VARRAY_FUNC0(ret,func) DEFINE_VARRAY_FUNC(ret,func,HX_ARR_LIST0,VARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST0,HX_ARG_LIST0),0)
+#define DEFINE_VARRAY_FUNC1(ret,func) DEFINE_VARRAY_FUNC(ret,func,HX_ARR_LIST1,VARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST1,HX_ARG_LIST1),1)
+#define DEFINE_VARRAY_FUNC2(ret,func) DEFINE_VARRAY_FUNC(ret,func,HX_ARR_LIST2,VARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST2,HX_ARG_LIST2),2)
+#define DEFINE_VARRAY_FUNC3(ret,func) DEFINE_VARRAY_FUNC(ret,func,HX_ARR_LIST3,VARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST3,HX_ARG_LIST3),3)
+#define DEFINE_VARRAY_FUNC4(ret,func) DEFINE_VARRAY_FUNC(ret,func,HX_ARR_LIST4,VARRAY_RUN_FUNC(ret,func,HX_DYNAMIC_ARG_LIST4,HX_ARG_LIST4),4)
 
 
 DEFINE_VARRAY_FUNC1(return,concat);
@@ -827,7 +1010,7 @@ DEFINE_VARRAY_FUNC2(return,__unsafe_set);
 DEFINE_VARRAY_FUNC4(,blit);
 DEFINE_VARRAY_FUNC1(,resize);
 
-
+#endif
 
 
 int VirtualArray_obj::__Compare(const hx::Object *inRHS) const
@@ -874,7 +1057,11 @@ hx::Val VirtualArray_obj::__Field(const String &inString, hx::PropertyAccess inC
    if (inString==HX_CSTRING("keyValueIterator")) return keyValueIterator_dyn();
    if (inString==HX_CSTRING("join")) return join_dyn();
    if (inString==HX_CSTRING("pop")) return pop_dyn();
-   if (inString==HX_CSTRING("push")) return push_dyn();
+#if (HXCPP_API_LEVEL>=500)
+   if (inString==HX_CSTRING("push")) return push_dyn<::Dynamic>();
+#else
+   if (inString == HX_CSTRING("push")) return push_dyn();
+#endif
    if (inString==HX_CSTRING("contains")) return contains_dyn();
    if (inString==HX_CSTRING("remove")) return remove_dyn();
    if (inString==HX_CSTRING("removeAt")) return removeAt_dyn();
@@ -1116,7 +1303,7 @@ VirtualArray VirtualArray_obj::splice(int inPos, int len)
    return result;
 }
 
-VirtualArray VirtualArray_obj::map(Dynamic inFunc)
+VirtualArray VirtualArray_obj::map(ArrayBase::DynamicMappingFunc inFunc)
 {
    VirtualArray result = new VirtualArray_obj( );
    int len = get_length();
@@ -1125,7 +1312,7 @@ VirtualArray VirtualArray_obj::map(Dynamic inFunc)
    return result;
 }
 
-VirtualArray VirtualArray_obj::filter(Dynamic inFunc)
+VirtualArray VirtualArray_obj::filter(ArrayBase::DynamicFilterFunc inFunc)
 {
    if ( !base )
       return new VirtualArray_obj();
@@ -1142,8 +1329,8 @@ class EmptyIterator : public IteratorBase
 public:
    HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdArrayIterator }; \
 
-   bool hasNext() { return false; }
-   Dynamic _dynamicNext() { return null(); }
+   bool hasNext() HXCPP_OVERRIDE { return false; }
+   Dynamic _dynamicNext() HXCPP_OVERRIDE { return null(); }
 };
 
 
diff --git a/Sources/c_borogove/src/Dynamic.cpp b/Sources/c_borogove/src/Dynamic.cpp
index 144bc3f..548de67 100644
--- a/Sources/c_borogove/src/Dynamic.cpp
+++ b/Sources/c_borogove/src/Dynamic.cpp
@@ -46,7 +46,7 @@ class IntData : public hx::Object
 public:
    enum { _hx_ClassId = hx::clsIdInt };
 
-   bool _hx_isInstanceOf(int inClassId)
+   bool _hx_isInstanceOf(int inClassId) HXCPP_OVERRIDE
    {
       return inClassId==1 || inClassId==(int)_hx_ClassId || inClassId==(int)hx::clsIdFloat;
    }
@@ -56,17 +56,17 @@ public:
       { return hx::Object::operator new(inSize,inAlloc,inName); }
    IntData(int inValue=0) : mValue(inValue) {};
 
-   hx::Class __GetClass() const { return __IntClass; }
+   hx::Class __GetClass() const HXCPP_OVERRIDE { return __IntClass; }
 
-   virtual int __GetType() const { return vtInt; }
+   int __GetType() const HXCPP_OVERRIDE { return vtInt; }
 
-   String toString() { return String(mValue); }
-   String __ToString() const { return String(mValue); }
-   double __ToDouble() const { return mValue; }
-   int __ToInt() const { return mValue; }
-   cpp::Int64 __ToInt64() const { return mValue; }
+   String toString() HXCPP_OVERRIDE { return String(mValue); }
+   String __ToString() const HXCPP_OVERRIDE { return String(mValue); }
+   double __ToDouble() const HXCPP_OVERRIDE { return mValue; }
+   int __ToInt() const HXCPP_OVERRIDE { return mValue; }
+   cpp::Int64 __ToInt64() const HXCPP_OVERRIDE { return mValue; }
 
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       double diff = mValue - inRHS->__ToDouble();
       return diff < 0 ? -1 : diff==0 ? 0 : 1;
@@ -86,16 +86,16 @@ public:
       { return hx::Object::operator new(inSize,inAlloc,"Bool"); }
    BoolData(bool inValue=false) : mValue(inValue) {};
 
-   hx::Class __GetClass() const { return __BoolClass; }
+   hx::Class __GetClass() const HXCPP_OVERRIDE { return __BoolClass; }
 
-   virtual int __GetType() const { return vtBool; }
+   int __GetType() const HXCPP_OVERRIDE { return vtBool; }
 
-   String __ToString() const { return mValue ? HX_CSTRING("true") : HX_CSTRING("false"); }
-   String toString() { return mValue ? HX_CSTRING("true") : HX_CSTRING("false"); }
-   double __ToDouble() const { return mValue; }
-   int __ToInt() const { return mValue; }
+   String __ToString() const  HXCPP_OVERRIDE { return mValue ? HX_CSTRING("true") : HX_CSTRING("false"); }
+   String toString() HXCPP_OVERRIDE { return mValue ? HX_CSTRING("true") : HX_CSTRING("false"); }
+   double __ToDouble() const HXCPP_OVERRIDE { return mValue; }
+   int __ToInt() const HXCPP_OVERRIDE { return mValue; }
 
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       double diff = (double)mValue - inRHS->__ToDouble();
       return diff < 0 ? -1 : diff==0 ? 0 : 1;
@@ -116,16 +116,16 @@ public:
       { return hx::Object::operator new(inSize,inAlloc,inName); }
    DoubleData(double inValue=0) : mValue(inValue) {};
 
-   hx::Class __GetClass() const { return __FloatClass; }
+   hx::Class __GetClass() const HXCPP_OVERRIDE { return __FloatClass; }
 
-   virtual int __GetType() const { return vtFloat; }
-   String toString() { return String(mValue); }
-   String __ToString() const { return String(mValue); }
-   double __ToDouble() const { return mValue; }
-   int __ToInt() const { return (int)mValue; }
-   cpp::Int64 __ToInt64() const { return mValue; }
+   int __GetType() const HXCPP_OVERRIDE { return vtFloat; }
+   String toString() HXCPP_OVERRIDE { return String(mValue); }
+   String __ToString() const HXCPP_OVERRIDE { return String(mValue); }
+   double __ToDouble() const HXCPP_OVERRIDE { return mValue; }
+   int __ToInt() const HXCPP_OVERRIDE { return (int)mValue; }
+   cpp::Int64 __ToInt64() const HXCPP_OVERRIDE { return (cpp::Int64)mValue; }
 
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       double rval = inRHS->__ToDouble();
       if (rval==mValue)
@@ -148,26 +148,26 @@ public:
       { return hx::Object::operator new(inSize,inAlloc,inName); }
    Int64Data(cpp::Int64 inValue=0) : mValue(inValue) {};
 
-   hx::Class __GetClass() const { return __Int64Class; }
+   hx::Class __GetClass() const HXCPP_OVERRIDE { return __Int64Class; }
 
-   virtual int __GetType() const { return vtInt64; }
-   String toString() { return String(mValue); }
-   String __ToString() const { return String(mValue); }
-   double __ToDouble() const { return mValue; }
-   int __ToInt() const { return (int)mValue; }
-   cpp::Int64 __ToInt64() const { return mValue; }
-   void __GetFields(Array<String> &outFields)
+   int __GetType() const HXCPP_OVERRIDE { return vtInt64; }
+   String toString() HXCPP_OVERRIDE { return String(mValue); }
+   String __ToString() const HXCPP_OVERRIDE { return String(mValue); }
+   double __ToDouble() const HXCPP_OVERRIDE { return (double)mValue; }
+   int __ToInt() const HXCPP_OVERRIDE { return (int)mValue; }
+   cpp::Int64 __ToInt64() const HXCPP_OVERRIDE { return mValue; }
+   void __GetFields(Array<String>& outFields) HXCPP_OVERRIDE
    {
       outFields->push( HX_HCSTRING("hi","\x01","\x5b","\x00","\x00") );
       outFields->push( HX_HCSTRING("lo","\x83","\x5e","\x00","\x00") );
    }
-   hx::Val __Field(const String &inName, hx::PropertyAccess inCallProp)
+   hx::Val __Field(const String &inName, hx::PropertyAccess inCallProp) HXCPP_OVERRIDE
    {
       if (HX_FIELD_EQ(inName,"hi") ) { return hx::Val( (int)(mValue>>32)); }
       if (HX_FIELD_EQ(inName,"lo") ) { return hx::Val( (int)(mValue&0xffffffff)); }
       return hx::Object::__Field(inName,inCallProp);
    }
-   hx::Val __SetField(const String &inName,const hx::Val &inValue, hx::PropertyAccess inCallProp)
+   hx::Val __SetField(const String &inName,const hx::Val &inValue, hx::PropertyAccess inCallProp) HXCPP_OVERRIDE
    {
       if (HX_FIELD_EQ(inName,"hi") )
       {
@@ -182,7 +182,7 @@ public:
       return hx::Object::__SetField(inName,inValue,inCallProp);
    }
 
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       double rval = inRHS->__ToInt64();
       if (rval==mValue)
@@ -209,20 +209,20 @@ public:
 
     HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdPointer };
 
-   hx::Class __GetClass() const { return __PointerClass; }
+   hx::Class __GetClass() const HXCPP_OVERRIDE { return __PointerClass; }
 
    // k_cpp_pointer
-   int __GetType() const { return vtAbstractBase + 2; }
-   void * __GetHandle() const { return mValue; }
-   String toString()
+   int __GetType() const HXCPP_OVERRIDE { return vtAbstractBase + 2; }
+   void * __GetHandle() const HXCPP_OVERRIDE { return mValue; }
+   String toString() HXCPP_OVERRIDE
    {
       char buf[100];
       snprintf(buf,sizeof(buf),"Pointer(%p)", mValue);
       return String(buf);
    }
-   String __ToString() const { return String(mValue); }
+   String __ToString() const HXCPP_OVERRIDE { return String(mValue); }
 
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       void *r = inRHS==0 ? 0 : inRHS->__GetHandle();
       return mValue < r ? -1 : mValue==r ? 0 : 1;
@@ -250,29 +250,29 @@ public:
 
    HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdStruct };
 
-   hx::Class __GetClass() const { return __PointerClass; }
+   hx::Class __GetClass() const HXCPP_OVERRIDE { return __PointerClass; }
 
    // k_cpp_struct
-   int __GetType() const { return vtAbstractBase + 3; }
-   void * __GetHandle() const { return mValue; }
-   String toString()
+   int __GetType() const HXCPP_OVERRIDE { return vtAbstractBase + 3; }
+   void * __GetHandle() const HXCPP_OVERRIDE { return mValue; }
+   String toString() HXCPP_OVERRIDE
    {
       return __ToString();
    }
-   String __ToString() const
+   String __ToString() const HXCPP_OVERRIDE
    {
       String result;
       mHandler(cpp::dhoToString, mValue, 0, &result );
       return result;
    }
-   const char *__CStr() const
+   const char *__CStr() const HXCPP_OVERRIDE
    {
       const char *result = "unknown";
       mHandler(cpp::dhoGetClassName, mValue, 0, &result );
       return result;
    }
 
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       if (!inRHS)
          return 1;
@@ -288,15 +288,15 @@ public:
       return 0;
    }
 
-   int __length() const { return mLength; }
+   int __length() const HXCPP_OVERRIDE { return mLength; }
 
-   void __Mark(hx::MarkContext *__inCtx)
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_MARK_ARRAY(mValue);
    }
 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx)
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_VISIT_ARRAY(mValue);
    }
@@ -393,7 +393,15 @@ Dynamic::Dynamic(signed char inVal)
    mPtr = fromInt(inVal);
 }
 
+Dynamic::Dynamic(char16_t inVal)
+{
+    mPtr = fromInt(inVal);
+}
 
+Dynamic::Dynamic(char32_t inVal)
+{
+    mPtr = fromInt(inVal);
+}
 
 Dynamic::Dynamic(double inVal)
 {
@@ -402,7 +410,7 @@ Dynamic::Dynamic(double inVal)
       int idx = inVal+1;
       mPtr = sConstDynamicInts[idx].mPtr;
       if (!mPtr)
-         mPtr = sConstDynamicInts[idx].mPtr = new (hx::NewObjConst)IntData(inVal);
+         mPtr = sConstDynamicInts[idx].mPtr = new (hx::NewObjConst)IntData((int)inVal);
    }
    else
       mPtr = (hx::Object *)new DoubleData(inVal);
@@ -411,12 +419,13 @@ Dynamic::Dynamic(double inVal)
 
 Dynamic::Dynamic(cpp::Int64 inVal)
 {
-   if ( (int)inVal==inVal && inVal>=-1 && inVal<256 )
+   int ival = (int)inVal;
+   if ( ival==inVal && ival>=-1 && ival<256 )
    {
-      int idx = inVal+1;
+      int idx = ival+1;
       mPtr = sConstDynamicInts[idx].mPtr;
       if (!mPtr)
-         mPtr = sConstDynamicInts[idx].mPtr = new (hx::NewObjConst)IntData(inVal);
+         mPtr = sConstDynamicInts[idx].mPtr = new (hx::NewObjConst)IntData(ival);
    }
    else
       mPtr = (hx::Object *)new Int64Data(inVal);
@@ -436,6 +445,7 @@ Dynamic::Dynamic(cpp::UInt64 inVal)
       mPtr = (hx::Object *)new Int64Data(inVal);
 }
 
+#if defined(NEKO_MAC) || defined(NEKO_BSD)
 Dynamic::Dynamic(unsigned long inVal)
 {
    if ( (int)inVal==inVal && inVal<256 )
@@ -448,7 +458,7 @@ Dynamic::Dynamic(unsigned long inVal)
    else
       mPtr = (hx::Object *)new Int64Data(inVal);
 }
-
+#endif
 
 
 
@@ -502,6 +512,8 @@ DYN_OP_ADD(short)
 DYN_OP_ADD(unsigned short)
 DYN_OP_ADD(signed char)
 DYN_OP_ADD(unsigned char)
+DYN_OP_ADD(char16_t)
+DYN_OP_ADD(char32_t)
 DYN_OP_ADD(cpp::Int64)
 DYN_OP_ADD(cpp::UInt64)
 
diff --git a/Sources/c_borogove/src/HaxeCBridge.cpp b/Sources/c_borogove/src/HaxeCBridge.cpp
index 6f52787..59ab4be 100644
--- a/Sources/c_borogove/src/HaxeCBridge.cpp
+++ b/Sources/c_borogove/src/HaxeCBridge.cpp
@@ -58,187 +58,187 @@
 #include <sys/thread/_Thread/Thread_Impl_.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2254_mainThreadInit,"HaxeCBridge","mainThreadInit",0x6f09ae5b,"HaxeCBridge.mainThreadInit","HaxeCBridge.hx",2254,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2269_mainThreadRun,"HaxeCBridge","mainThreadRun",0xa4afa660,"HaxeCBridge.mainThreadRun","HaxeCBridge.hx",2269,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2359_retainHaxeArray,"HaxeCBridge","retainHaxeArray",0x7373bc46,"HaxeCBridge.retainHaxeArray","HaxeCBridge.hx",2359,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2368_retainHaxeObject,"HaxeCBridge","retainHaxeObject",0xef200772,"HaxeCBridge.retainHaxeObject","HaxeCBridge.hx",2368,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2378_retainHaxeString,"HaxeCBridge","retainHaxeString",0xeb10b184,"HaxeCBridge.retainHaxeString","HaxeCBridge.hx",2378,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2385_retainPtr,"HaxeCBridge","retainPtr",0x2c61e661,"HaxeCBridge.retainPtr","HaxeCBridge.hx",2385,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2398_releaseHaxePtr,"HaxeCBridge","releaseHaxePtr",0x5df2fc29,"HaxeCBridge.releaseHaxePtr","HaxeCBridge.hx",2398,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2411_isMainThread,"HaxeCBridge","isMainThread",0x6f71c035,"HaxeCBridge.isMainThread","HaxeCBridge.hx",2411,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2416_endMainThread,"HaxeCBridge","endMainThread",0x0d9deed6,"HaxeCBridge.endMainThread","HaxeCBridge.hx",2416,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2255_mainThreadInit,"HaxeCBridge","mainThreadInit",0x6f09ae5b,"HaxeCBridge.mainThreadInit","HaxeCBridge.hx",2255,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2270_mainThreadRun,"HaxeCBridge","mainThreadRun",0xa4afa660,"HaxeCBridge.mainThreadRun","HaxeCBridge.hx",2270,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2360_retainHaxeArray,"HaxeCBridge","retainHaxeArray",0x7373bc46,"HaxeCBridge.retainHaxeArray","HaxeCBridge.hx",2360,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2369_retainHaxeObject,"HaxeCBridge","retainHaxeObject",0xef200772,"HaxeCBridge.retainHaxeObject","HaxeCBridge.hx",2369,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2379_retainHaxeString,"HaxeCBridge","retainHaxeString",0xeb10b184,"HaxeCBridge.retainHaxeString","HaxeCBridge.hx",2379,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2386_retainPtr,"HaxeCBridge","retainPtr",0x2c61e661,"HaxeCBridge.retainPtr","HaxeCBridge.hx",2386,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2399_releaseHaxePtr,"HaxeCBridge","releaseHaxePtr",0x5df2fc29,"HaxeCBridge.releaseHaxePtr","HaxeCBridge.hx",2399,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2412_isMainThread,"HaxeCBridge","isMainThread",0x6f71c035,"HaxeCBridge.isMainThread","HaxeCBridge.hx",2412,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2417_endMainThread,"HaxeCBridge","endMainThread",0x0d9deed6,"HaxeCBridge.endMainThread","HaxeCBridge.hx",2417,0xa18550d8)
 
 void HaxeCBridge::mainThreadInit(::cpp::Function< bool  () > isMainThreadCb){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2254_mainThreadInit)
-HXLINE(2260)		::_HaxeCBridge::Internal_obj::isMainThreadCb = isMainThreadCb;
-HXLINE(2261)		::_HaxeCBridge::Internal_obj::mainThreadWaitLock = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current())->waitLock;
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2255_mainThreadInit)
+HXLINE(2261)		::_HaxeCBridge::Internal_obj::isMainThreadCb = isMainThreadCb;
+HXLINE(2262)		::_HaxeCBridge::Internal_obj::mainThreadWaitLock = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current())->waitLock;
             	}
 
 
 void HaxeCBridge::mainThreadRun(::cpp::Function< void  () > processNativeCalls,::cpp::Function< bool  () > hasPendingNativeCalls,::cpp::Function< void  (const char*) > onUnhandledException){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2269_mainThreadRun)
-HXLINE(2270)		try {
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2270_mainThreadRun)
+HXLINE(2271)		try {
             			HX_STACK_CATCHABLE( ::Dynamic, 0);
             		} catch( ::Dynamic _hx_e) {
             			if (_hx_e.IsClass<  ::Dynamic >() ){
             				HX_STACK_BEGIN_CATCH
             				 ::Dynamic _g = _hx_e;
-HXLINE(2272)				{
-HXLINE(2272)					null();
+HXLINE(2273)				{
+HXLINE(2273)					null();
             				}
-HXDLIN(2272)				 ::haxe::Exception _g1 = ::haxe::Exception_obj::caught(_g);
-HXDLIN(2272)				{
-HXLINE(2273)					 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN(2273)					::Array< ::Dynamic> tmp = _g1->get_stack();
-HXDLIN(2273)					::String _hx_tmp1;
-HXDLIN(2273)					if (::hx::IsNull( tmp )) {
-HXLINE(2273)						_hx_tmp1 = HX_("null",87,9e,0e,49);
+HXDLIN(2273)				 ::haxe::Exception _g1 = ::haxe::Exception_obj::caught(_g);
+HXDLIN(2273)				{
+HXLINE(2274)					 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN(2274)					::Array< ::Dynamic> tmp = _g1->get_stack();
+HXDLIN(2274)					::String _hx_tmp1;
+HXDLIN(2274)					if (::hx::IsNull( tmp )) {
+HXLINE(2274)						_hx_tmp1 = HX_("null",87,9e,0e,49);
             					}
             					else {
-HXLINE(2273)						_hx_tmp1 = ::haxe::_CallStack::CallStack_Impl__obj::toString(tmp);
+HXLINE(2274)						_hx_tmp1 = ::haxe::_CallStack::CallStack_Impl__obj::toString(tmp);
             					}
-HXDLIN(2273)					_hx_tmp(_g1, ::Dynamic(::hx::Anon_obj::Create(5)
+HXDLIN(2274)					_hx_tmp(_g1, ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("HaxeCBridge",a6,7d,e3,bb))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_hx_tmp1))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("mainThreadRun",28,d7,3c,8e))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("HaxeCBridge.hx",d8,50,85,a1))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),2273)));
-HXLINE(2274)					onUnhandledException(::Std_obj::string(_g1).utf8_str());
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),2274)));
+HXLINE(2275)					onUnhandledException(::Std_obj::string(_g1).utf8_str());
             				}
             			}
             			else {
             				HX_STACK_DO_THROW(_hx_e);
             			}
             		}
-HXLINE(2281)		 ::sys::thread::EventLoop eventLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
-HXLINE(2283)		::Array< ::Dynamic> recycleRegular = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(2284)		::Array< ::Dynamic> recycleOneTimers = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(2285)		while(::_HaxeCBridge::Internal_obj::mainThreadLoopActive){
-HXLINE(2286)			try {
+HXLINE(2282)		 ::sys::thread::EventLoop eventLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
+HXLINE(2284)		::Array< ::Dynamic> recycleRegular = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2285)		::Array< ::Dynamic> recycleOneTimers = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2286)		while(::_HaxeCBridge::Internal_obj::mainThreadLoopActive){
+HXLINE(2287)			try {
             				HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE(2288)				processNativeCalls();
-HXLINE(2291)				Float now = ::Sys_obj::time();
-HXDLIN(2291)				int eventsToRunIdx = 0;
-HXDLIN(2291)				Float nextEventAt = ( (Float)(-1) );
-HXDLIN(2291)				eventLoop->mutex->acquire();
-HXDLIN(2291)				while(eventLoop->waitLock->wait(((Float)0.0))){
+HXLINE(2289)				processNativeCalls();
+HXLINE(2292)				Float now = ::Sys_obj::time();
+HXDLIN(2292)				int eventsToRunIdx = 0;
+HXDLIN(2292)				Float nextEventAt = ( (Float)(-1) );
+HXDLIN(2292)				eventLoop->mutex->acquire();
+HXDLIN(2292)				while(eventLoop->waitLock->wait(((Float)0.0))){
             				}
-HXLINE(2291)				 ::sys::thread::_EventLoop::RegularEvent current = eventLoop->regularEvents;
-HXDLIN(2291)				while(::hx::IsNotNull( current )){
-HXLINE(2291)					if ((current->nextRunTime <= now)) {
-HXLINE(2291)						eventsToRunIdx = (eventsToRunIdx + 1);
-HXDLIN(2291)						recycleRegular[(eventsToRunIdx - 1)] = current;
-HXDLIN(2291)						 ::sys::thread::_EventLoop::RegularEvent current1 = current;
-HXDLIN(2291)						current1->nextRunTime = (current1->nextRunTime + current->interval);
+HXLINE(2292)				 ::sys::thread::_EventLoop::RegularEvent current = eventLoop->regularEvents;
+HXDLIN(2292)				while(::hx::IsNotNull( current )){
+HXLINE(2292)					if ((current->nextRunTime <= now)) {
+HXLINE(2292)						eventsToRunIdx = (eventsToRunIdx + 1);
+HXDLIN(2292)						recycleRegular[(eventsToRunIdx - 1)] = current;
+HXDLIN(2292)						 ::sys::thread::_EventLoop::RegularEvent current1 = current;
+HXDLIN(2292)						current1->nextRunTime = (current1->nextRunTime + current->interval);
 HXLINE( 220)						nextEventAt = ( (Float)(-2) );
             					}
             					else {
-HXLINE(2291)						bool _hx_tmp2;
-HXDLIN(2291)						if ((nextEventAt != -1)) {
-HXLINE(2291)							_hx_tmp2 = (current->nextRunTime < nextEventAt);
+HXLINE(2292)						bool _hx_tmp2;
+HXDLIN(2292)						if ((nextEventAt != -1)) {
+HXLINE(2292)							_hx_tmp2 = (current->nextRunTime < nextEventAt);
             						}
             						else {
-HXLINE(2291)							_hx_tmp2 = true;
+HXLINE(2292)							_hx_tmp2 = true;
             						}
-HXDLIN(2291)						if (_hx_tmp2) {
+HXDLIN(2292)						if (_hx_tmp2) {
 HXLINE( 222)							nextEventAt = current->nextRunTime;
             						}
             					}
 HXLINE( 224)					current = current->next;
             				}
-HXLINE(2291)				eventLoop->mutex->release();
-HXDLIN(2291)				int _g2 = 0;
-HXDLIN(2291)				int _g3 = eventsToRunIdx;
-HXDLIN(2291)				while((_g2 < _g3)){
-HXLINE(2291)					_g2 = (_g2 + 1);
-HXDLIN(2291)					int i = (_g2 - 1);
-HXDLIN(2291)					if (!(recycleRegular->__get(i).StaticCast<  ::sys::thread::_EventLoop::RegularEvent >()->cancelled)) {
-HXLINE(2291)						recycleRegular->__get(i).StaticCast<  ::sys::thread::_EventLoop::RegularEvent >()->run();
+HXLINE(2292)				eventLoop->mutex->release();
+HXDLIN(2292)				int _g2 = 0;
+HXDLIN(2292)				int _g3 = eventsToRunIdx;
+HXDLIN(2292)				while((_g2 < _g3)){
+HXLINE(2292)					_g2 = (_g2 + 1);
+HXDLIN(2292)					int i = (_g2 - 1);
+HXDLIN(2292)					if (!(recycleRegular->__get(i).StaticCast<  ::sys::thread::_EventLoop::RegularEvent >()->cancelled)) {
+HXLINE(2292)						recycleRegular->__get(i).StaticCast<  ::sys::thread::_EventLoop::RegularEvent >()->run();
             					}
-HXDLIN(2291)					recycleRegular[i] = null();
+HXDLIN(2292)					recycleRegular[i] = null();
             				}
 HXLINE( 234)				eventsToRunIdx = 0;
-HXLINE(2291)				eventLoop->mutex->acquire();
-HXDLIN(2291)				::Array< ::Dynamic> _this = eventLoop->oneTimeEvents;
-HXDLIN(2291)				int _g_current = 0;
-HXDLIN(2291)				while((_g_current < _this->length)){
-HXLINE(2291)					 ::Dynamic _g_value = _this->__get(_g_current);
-HXDLIN(2291)					_g_current = (_g_current + 1);
-HXDLIN(2291)					if (::hx::IsNull( _g_value )) {
-HXLINE(2291)						goto _hx_goto_5;
+HXLINE(2292)				eventLoop->mutex->acquire();
+HXDLIN(2292)				::Array< ::Dynamic> _this = eventLoop->oneTimeEvents;
+HXDLIN(2292)				int _g_current = 0;
+HXDLIN(2292)				while((_g_current < _this->length)){
+HXLINE(2292)					 ::Dynamic _g_value = _this->__get(_g_current);
+HXDLIN(2292)					_g_current = (_g_current + 1);
+HXDLIN(2292)					if (::hx::IsNull( _g_value )) {
+HXLINE(2292)						goto _hx_goto_5;
             					}
             					else {
-HXLINE(2291)						eventsToRunIdx = (eventsToRunIdx + 1);
-HXDLIN(2291)						recycleOneTimers[(eventsToRunIdx - 1)] = _g_value;
-HXDLIN(2291)						eventLoop->oneTimeEvents[(_g_current - 1)] = null();
+HXLINE(2292)						eventsToRunIdx = (eventsToRunIdx + 1);
+HXDLIN(2292)						recycleOneTimers[(eventsToRunIdx - 1)] = _g_value;
+HXDLIN(2292)						eventLoop->oneTimeEvents[(_g_current - 1)] = null();
             					}
             				}
             				_hx_goto_5:;
-HXDLIN(2291)				eventLoop->oneTimeEventsIdx = 0;
-HXDLIN(2291)				bool hasPromisedEvents = (eventLoop->promisedEventsCount > 0);
-HXDLIN(2291)				eventLoop->mutex->release();
-HXDLIN(2291)				int _g4 = 0;
-HXDLIN(2291)				int _g5 = eventsToRunIdx;
-HXDLIN(2291)				while((_g4 < _g5)){
-HXLINE(2291)					_g4 = (_g4 + 1);
-HXDLIN(2291)					int i1 = (_g4 - 1);
-HXDLIN(2291)					recycleOneTimers->__get(i1)();
-HXDLIN(2291)					recycleOneTimers[i1] = null();
+HXDLIN(2292)				eventLoop->oneTimeEventsIdx = 0;
+HXDLIN(2292)				bool hasPromisedEvents = (eventLoop->promisedEventsCount > 0);
+HXDLIN(2292)				eventLoop->mutex->release();
+HXDLIN(2292)				int _g4 = 0;
+HXDLIN(2292)				int _g5 = eventsToRunIdx;
+HXDLIN(2292)				while((_g4 < _g5)){
+HXLINE(2292)					_g4 = (_g4 + 1);
+HXDLIN(2292)					int i1 = (_g4 - 1);
+HXDLIN(2292)					recycleOneTimers->__get(i1)();
+HXDLIN(2292)					recycleOneTimers[i1] = null();
             				}
-HXDLIN(2291)				if (eventLoop->isMainThread) {
-HXLINE(2291)					Float next = ::haxe::MainLoop_obj::tick();
-HXDLIN(2291)					if (::haxe::MainLoop_obj::hasEvents()) {
-HXLINE(2291)						eventsToRunIdx = (eventsToRunIdx + 1);
-HXDLIN(2291)						if ((nextEventAt > next)) {
+HXDLIN(2292)				if (eventLoop->isMainThread) {
+HXLINE(2292)					Float next = ::haxe::MainLoop_obj::tick();
+HXDLIN(2292)					if (::haxe::MainLoop_obj::hasEvents()) {
+HXLINE(2292)						eventsToRunIdx = (eventsToRunIdx + 1);
+HXDLIN(2292)						if ((nextEventAt > next)) {
 HXLINE( 264)							nextEventAt = next;
             						}
             					}
             				}
-HXLINE(2291)				if ((eventsToRunIdx > 0)) {
+HXLINE(2292)				if ((eventsToRunIdx > 0)) {
 HXLINE( 270)					nextEventAt = ( (Float)(-2) );
             				}
-HXLINE(2291)				Float eventTickInfo_nextEventAt = nextEventAt;
-HXLINE(2292)				if (hasPendingNativeCalls()) {
-HXLINE(2293)					continue;
+HXLINE(2292)				Float eventTickInfo_nextEventAt = nextEventAt;
+HXLINE(2293)				if (hasPendingNativeCalls()) {
+HXLINE(2294)					continue;
             				}
-HXLINE(2295)				Float _hx_switch_0 = eventTickInfo_nextEventAt;
+HXLINE(2296)				Float _hx_switch_0 = eventTickInfo_nextEventAt;
             				if (  (_hx_switch_0==( (Float)(-2) )) ){
-HXLINE(2296)					goto _hx_goto_7;
+HXLINE(2297)					goto _hx_goto_7;
             				}
             				if (  (_hx_switch_0==( (Float)(-1) )) ){
-HXLINE(2298)					bool _hx_tmp3;
-HXDLIN(2298)					if (::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending) {
-HXLINE(2298)						_hx_tmp3 = !(hasPromisedEvents);
+HXLINE(2299)					bool _hx_tmp3;
+HXDLIN(2299)					if (::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending) {
+HXLINE(2299)						_hx_tmp3 = !(hasPromisedEvents);
             					}
             					else {
-HXLINE(2298)						_hx_tmp3 = false;
+HXLINE(2299)						_hx_tmp3 = false;
             					}
-HXDLIN(2298)					if (_hx_tmp3) {
-HXLINE(2300)						goto _hx_goto_1;
+HXDLIN(2299)					if (_hx_tmp3) {
+HXLINE(2301)						goto _hx_goto_1;
             					}
-HXLINE(2302)					::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(null());
-HXLINE(2297)					goto _hx_goto_7;
+HXLINE(2303)					::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(null());
+HXLINE(2298)					goto _hx_goto_7;
             				}
             				/* default */{
-HXLINE(2304)					Float timeout = (eventTickInfo_nextEventAt - ::Sys_obj::time());
-HXLINE(2305)					::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(::Math_obj::max(( (Float)(0) ),timeout));
+HXLINE(2305)					Float timeout = (eventTickInfo_nextEventAt - ::Sys_obj::time());
+HXLINE(2306)					::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(::Math_obj::max(( (Float)(0) ),timeout));
             				}
             				_hx_goto_7:;
             			} catch( ::Dynamic _hx_e) {
             				if (_hx_e.IsClass<  ::Dynamic >() ){
             					HX_STACK_BEGIN_CATCH
             					 ::Dynamic _g6 = _hx_e;
-HXLINE(2307)					{
-HXLINE(2307)						null();
+HXLINE(2308)					{
+HXLINE(2308)						null();
             					}
-HXLINE(2308)					::String s;
-HXDLIN(2308)					if (::hx::IsNull( _g6 )) {
-HXLINE(2308)						s = HX_("null",87,9e,0e,49);
+HXLINE(2309)					::String s;
+HXDLIN(2309)					if (::hx::IsNull( _g6 )) {
+HXLINE(2309)						s = HX_("null",87,9e,0e,49);
             					}
             					else {
-HXLINE(2308)						s = ::Std_obj::string(_g6);
+HXLINE(2309)						s = ::Std_obj::string(_g6);
             					}
-HXDLIN(2308)					onUnhandledException(s.utf8_str());
+HXDLIN(2309)					onUnhandledException(s.utf8_str());
             				}
             				else {
             					HX_STACK_DO_THROW(_hx_e);
@@ -246,123 +246,123 @@ HXDLIN(2308)					onUnhandledException(s.utf8_str());
             			}
             		}
             		_hx_goto_1:;
-HXLINE(2313)		__hxcpp_collect(true);
+HXLINE(2314)		__hxcpp_collect(true);
             	}
 
 
 void** HaxeCBridge::retainHaxeArray(::cpp::VirtualArray haxeArray){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2359_retainHaxeArray)
-HXLINE(2362)		void** ptr = (void**)haxeArray->getBase();
-HXLINE(2363)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXLINE(2364)		{
-HXLINE(2364)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN(2364)			if (::hx::IsNull( store )) {
-HXLINE(2364)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2360_retainHaxeArray)
+HXLINE(2363)		void** ptr = (void**)haxeArray->getBase();
+HXLINE(2364)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXLINE(2365)		{
+HXLINE(2365)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN(2365)			if (::hx::IsNull( store )) {
+HXLINE(2365)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             					->setFixed(1,HX_("value",71,7f,b8,31),haxeArray));
-HXDLIN(2364)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN(2365)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             			}
             			else {
-HXLINE(2364)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2365)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             			}
             		}
-HXLINE(2365)		return ptr;
+HXLINE(2366)		return ptr;
             	}
 
 
 void* HaxeCBridge::retainHaxeObject( ::Dynamic haxeObject){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2368_retainHaxeObject)
-HXLINE(2370)		void* ptr = haxeObject.mPtr;
-HXLINE(2373)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXLINE(2374)		{
-HXLINE(2374)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN(2374)			if (::hx::IsNull( store )) {
-HXLINE(2374)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2369_retainHaxeObject)
+HXLINE(2371)		void* ptr = haxeObject.mPtr;
+HXLINE(2374)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXLINE(2375)		{
+HXLINE(2375)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN(2375)			if (::hx::IsNull( store )) {
+HXLINE(2375)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             					->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN(2374)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN(2375)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             			}
             			else {
-HXLINE(2374)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2375)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             			}
             		}
-HXLINE(2375)		return ptr;
+HXLINE(2376)		return ptr;
             	}
 
 
 const char* HaxeCBridge::retainHaxeString(::String haxeString){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2378_retainHaxeString)
-HXLINE(2379)		const char* cStrPtr = haxeString.utf8_str();
-HXLINE(2380)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXLINE(2381)		{
-HXLINE(2381)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN(2381)			if (::hx::IsNull( store )) {
-HXLINE(2381)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2379_retainHaxeString)
+HXLINE(2380)		const char* cStrPtr = haxeString.utf8_str();
+HXLINE(2381)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXLINE(2382)		{
+HXLINE(2382)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN(2382)			if (::hx::IsNull( store )) {
+HXLINE(2382)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             					->setFixed(1,HX_("value",71,7f,b8,31),haxeString));
-HXDLIN(2381)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN(2382)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             			}
             			else {
-HXLINE(2381)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2382)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             			}
             		}
-HXLINE(2382)		return cStrPtr;
+HXLINE(2383)		return cStrPtr;
             	}
 
 
 void HaxeCBridge::retainPtr(::cpp::Int64 ptrInt64, ::Dynamic haxeObject){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2385_retainPtr)
-HXLINE(2387)		 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXLINE(2388)		if (::hx::IsNull( store )) {
-HXLINE(2390)			store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2386_retainPtr)
+HXLINE(2388)		 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXLINE(2389)		if (::hx::IsNull( store )) {
+HXLINE(2391)			store =  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             				->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXLINE(2391)			::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE(2392)			::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             		}
             		else {
-HXLINE(2394)			::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2395)			::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             		}
             	}
 
 
 void HaxeCBridge::releaseHaxePtr(void * haxePtr){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2398_releaseHaxePtr)
-HXLINE(2399)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(haxePtr);
-HXLINE(2400)		 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXLINE(2401)		bool _hx_tmp;
-HXDLIN(2401)		if (::hx::IsNotNull( store )) {
-HXLINE(2401)			_hx_tmp = ::hx::IsGreater( store->__Field(HX_("refCount",7c,2e,66,86),::hx::paccDynamic),0 );
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2399_releaseHaxePtr)
+HXLINE(2400)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(haxePtr);
+HXLINE(2401)		 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXLINE(2402)		bool _hx_tmp;
+HXDLIN(2402)		if (::hx::IsNotNull( store )) {
+HXLINE(2402)			_hx_tmp = ::hx::IsGreater( store->__Field(HX_("refCount",7c,2e,66,86),::hx::paccDynamic),0 );
             		}
             		else {
-HXLINE(2401)			_hx_tmp = false;
+HXLINE(2402)			_hx_tmp = false;
             		}
-HXDLIN(2401)		if (_hx_tmp) {
-HXLINE(2402)			::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))--;
-HXLINE(2403)			if (::hx::IsLessEq( store->__Field(HX_("refCount",7c,2e,66,86),::hx::paccDynamic),0 )) {
-HXLINE(2404)				::_HaxeCBridge::Internal_obj::gcRetainMap->remove(ptrInt64);
+HXDLIN(2402)		if (_hx_tmp) {
+HXLINE(2403)			::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))--;
+HXLINE(2404)			if (::hx::IsLessEq( store->__Field(HX_("refCount",7c,2e,66,86),::hx::paccDynamic),0 )) {
+HXLINE(2405)				::_HaxeCBridge::Internal_obj::gcRetainMap->remove(ptrInt64);
             			}
             		}
             	}
 
 
 bool HaxeCBridge::isMainThread(){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2411_isMainThread)
-HXDLIN(2411)		return ::_HaxeCBridge::Internal_obj::isMainThreadCb();
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2412_isMainThread)
+HXDLIN(2412)		return ::_HaxeCBridge::Internal_obj::isMainThreadCb();
             	}
 
 
 void HaxeCBridge::endMainThread(bool waitOnScheduledEvents){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2416_endMainThread)
-HXLINE(2417)		::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending = true;
-HXLINE(2418)		bool _hx_tmp;
-HXDLIN(2418)		if (::_HaxeCBridge::Internal_obj::mainThreadLoopActive) {
-HXLINE(2418)			_hx_tmp = waitOnScheduledEvents;
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2417_endMainThread)
+HXLINE(2418)		::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending = true;
+HXLINE(2419)		bool _hx_tmp;
+HXDLIN(2419)		if (::_HaxeCBridge::Internal_obj::mainThreadLoopActive) {
+HXLINE(2419)			_hx_tmp = waitOnScheduledEvents;
             		}
             		else {
-HXLINE(2418)			_hx_tmp = false;
+HXLINE(2419)			_hx_tmp = false;
             		}
-HXDLIN(2418)		::_HaxeCBridge::Internal_obj::mainThreadLoopActive = _hx_tmp;
-HXLINE(2419)		 ::__hxcpp_lock_release(::_HaxeCBridge::Internal_obj::mainThreadWaitLock->l);
+HXDLIN(2419)		::_HaxeCBridge::Internal_obj::mainThreadLoopActive = _hx_tmp;
+HXLINE(2420)		 ::__hxcpp_lock_release(::_HaxeCBridge::Internal_obj::mainThreadWaitLock->l);
             	}
 
 
diff --git a/Sources/c_borogove/src/Lambda.cpp b/Sources/c_borogove/src/Lambda.cpp
index b6a0ec5..1b6299e 100644
--- a/Sources/c_borogove/src/Lambda.cpp
+++ b/Sources/c_borogove/src/Lambda.cpp
@@ -7,6 +7,7 @@
 
 HX_LOCAL_STACK_FRAME(_hx_pos_a2b9229e56451ffa_45_array,"Lambda","array",0x9c8b0512,"Lambda.array","/usr/local/lib/haxe/std/Lambda.hx",45,0xf61dfe9a)
 HX_LOCAL_STACK_FRAME(_hx_pos_a2b9229e56451ffa_125_exists,"Lambda","exists",0x65091043,"Lambda.exists","/usr/local/lib/haxe/std/Lambda.hx",125,0xf61dfe9a)
+HX_LOCAL_STACK_FRAME(_hx_pos_a2b9229e56451ffa_168_filter,"Lambda","filter",0x2a5e121f,"Lambda.filter","/usr/local/lib/haxe/std/Lambda.hx",168,0xf61dfe9a)
 HX_LOCAL_STACK_FRAME(_hx_pos_a2b9229e56451ffa_183_fold,"Lambda","fold",0x9b8816a8,"Lambda.fold","/usr/local/lib/haxe/std/Lambda.hx",183,0xf61dfe9a)
 HX_LOCAL_STACK_FRAME(_hx_pos_a2b9229e56451ffa_225_empty,"Lambda","empty",0xe6d5d206,"Lambda.empty","/usr/local/lib/haxe/std/Lambda.hx",225,0xf61dfe9a)
 HX_LOCAL_STACK_FRAME(_hx_pos_a2b9229e56451ffa_255_find,"Lambda","find",0x9b838ae0,"Lambda.find","/usr/local/lib/haxe/std/Lambda.hx",255,0xf61dfe9a)
@@ -60,6 +61,24 @@ HXLINE( 129)		return false;
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC2(Lambda_obj,exists,return )
 
+::cpp::VirtualArray Lambda_obj::filter( ::Dynamic it, ::Dynamic f){
+            	HX_STACKFRAME(&_hx_pos_a2b9229e56451ffa_168_filter)
+HXDLIN( 168)		::cpp::VirtualArray _g = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN( 168)		{
+HXDLIN( 168)			 ::Dynamic x = it->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 168)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 168)				 ::Dynamic x1 = x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN( 168)				if (( (bool)(f(x1)) )) {
+HXDLIN( 168)					_g->push(x1);
+            				}
+            			}
+            		}
+HXDLIN( 168)		return _g;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(Lambda_obj,filter,return )
+
  ::Dynamic Lambda_obj::fold( ::Dynamic it, ::Dynamic f, ::Dynamic first){
             	HX_STACKFRAME(&_hx_pos_a2b9229e56451ffa_183_fold)
 HXLINE( 184)		{
@@ -135,6 +154,7 @@ bool Lambda_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::Pr
 		break;
 	case 6:
 		if (HX_FIELD_EQ(inName,"exists") ) { outValue = exists_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"filter") ) { outValue = filter_dyn(); return true; }
 		break;
 	case 9:
 		if (HX_FIELD_EQ(inName,"findIndex") ) { outValue = findIndex_dyn(); return true; }
@@ -152,6 +172,7 @@ static ::hx::StaticInfo *Lambda_obj_sStaticStorageInfo = 0;
 static ::String Lambda_obj_sStaticFields[] = {
 	HX_("array",99,6d,8f,25),
 	HX_("exists",dc,1d,e0,bf),
+	HX_("filter",b8,1f,35,85),
 	HX_("fold",01,5c,c0,43),
 	HX_("empty",8d,3a,da,6f),
 	HX_("find",39,d0,bb,43),
diff --git a/Sources/c_borogove/src/Math.cpp b/Sources/c_borogove/src/Math.cpp
index 2b2b5fa..14cbd56 100755
--- a/Sources/c_borogove/src/Math.cpp
+++ b/Sources/c_borogove/src/Math.cpp
@@ -37,6 +37,64 @@ double Math_obj::POSITIVE_INFINITY = std::numeric_limits<double>::infinity();
 #undef max
 #endif
 
+#if (HXCPP_API_LEVEL>=500)
+
+	#ifdef HXCPP_VISIT_ALLOCS
+	#define MATHS_VISIT_FUNC \
+		void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mThis); }
+	#else
+		#define MATHS_VISIT_FUNC
+	#endif
+
+	#define HX_MATHS_ARG_LIST0
+	#define HX_MATHS_ARG_LIST1(arg0) arg0
+	#define HX_MATHS_ARG_LIST2(arg0, arg1) arg0, arg1
+
+	#define HX_MATHS_FUNC_LIST0
+	#define HX_MATHS_FUNC_LIST1(arg0) arg0 inArg0
+	#define HX_MATHS_FUNC_LIST2(arg0, arg1) arg0 inArg0, arg1 inArg1
+
+	#define HX_MATHS_FUNC(value, name, args_list, func_list, args_call) \
+		::hx::Callable<value(args_list)> Math_obj::name##_dyn() \
+		{ \
+			struct _hx_maths_##name final : public ::hx::AutoCallable_obj<value(args_list)> \
+			{ \
+				value HX_LOCAL_RUN(func_list) override \
+				{ \
+					return Math_obj::name(args_call); \
+				} \
+				int __Compare(const ::hx::Object* inRhs) const override \
+				{ \
+					return dynamic_cast<const _hx_maths_##name *>(inRhs) ? 0 : -1; \
+				} \
+			}; \
+			return new _hx_maths_##name(); \
+		}
+
+	HX_MATHS_FUNC(int, floor, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(int, ceil, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(int, round, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, ffloor, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, fceil, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, fround, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, random, HX_MATHS_ARG_LIST0, HX_MATHS_FUNC_LIST0, HX_ARG_LIST0);
+	HX_MATHS_FUNC(double, sqrt, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, cos, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, sin, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, tan, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, atan2, HX_MATHS_ARG_LIST2(double, double), HX_MATHS_FUNC_LIST2(double, double), HX_ARG_LIST2);
+	HX_MATHS_FUNC(double, abs, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, pow, HX_MATHS_ARG_LIST2(double, double), HX_MATHS_FUNC_LIST2(double, double), HX_ARG_LIST2);
+	HX_MATHS_FUNC(double, log, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, min, HX_MATHS_ARG_LIST2(double, double), HX_MATHS_FUNC_LIST2(double, double), HX_ARG_LIST2);
+	HX_MATHS_FUNC(double, max, HX_MATHS_ARG_LIST2(double, double), HX_MATHS_FUNC_LIST2(double, double), HX_ARG_LIST2);
+	HX_MATHS_FUNC(double, acos, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, asin, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, atan, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(double, exp, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(bool, isNaN, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+	HX_MATHS_FUNC(bool, isFinite, HX_MATHS_ARG_LIST1(double), HX_MATHS_FUNC_LIST1(double), HX_ARG_LIST1);
+#else
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Math_obj,floor,return);
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Math_obj,ffloor,return);
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Math_obj,ceil,return);
@@ -60,6 +118,7 @@ STATIC_HX_DEFINE_DYNAMIC_FUNC1(Math_obj,acos,return);
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Math_obj,exp,return);
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Math_obj,isNaN,return);
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Math_obj,isFinite,return);
+#endif
 
 hx::Val Math_obj::__Field(const String &inString, hx::PropertyAccess inCallProp)
 {
diff --git a/Sources/c_borogove/src/String.cpp b/Sources/c_borogove/src/String.cpp
index 815d976..86ce6bb 100644
--- a/Sources/c_borogove/src/String.cpp
+++ b/Sources/c_borogove/src/String.cpp
@@ -788,10 +788,41 @@ String String::create(const char *inString,int inLength)
    return String(s,len);
 }
 
+String String::create(const::cpp::marshal::View<char>& buffer)
+{
+    auto start = buffer.ptr.ptr;
+    auto end   = start + buffer.length;
 
+    while (start < end) {
+        if (*start == false)
+        {
+            break;
+        }
 
+        start++;
+    }
+
+    return String::create(buffer.ptr.ptr, buffer.length - (end - start));
+}
 
+String String::create(const cpp::marshal::View<char16_t>& buffer)
+{
+    auto start = reinterpret_cast<const char16_t*>(buffer.ptr.ptr);
+    auto end   = start + buffer.length;
+    auto extra = 0;
+
+    while (start < end) {
+        if (Char16Advance(start) == false)
+        {
+            // set extra to 1 so we don't include the null terminating character in the calculated length.
+            extra = 1;
+
+            break;
+        }
+    }
 
+    return String::create(buffer.ptr.ptr, buffer.length - (end - start) - extra);
+}
 
 String::String(const Dynamic &inRHS)
 {
@@ -862,6 +893,7 @@ String::String(const cpp::UInt64 &inRHS)
    __s = GCStringDup(buf,-1,&length);
 }
 
+#if defined(NEKO_MAC) || defined(NEKO_BSD)
 String::String(const unsigned long &inRHS)
 {
    char buf[100];
@@ -869,6 +901,7 @@ String::String(const unsigned long &inRHS)
    buf[99]='\0';
    __s = GCStringDup(buf,-1,&length);
 }
+#endif
 
 String::String(const float &inRHS)
 {
@@ -1388,15 +1421,18 @@ Dynamic String::charCodeAt(int inPos) const
 
 String String::fromCharCode( int c )
 {
-   if (c<=255)
+   if (0<=c && c<=255)
    {
       return sConstStrings[c];
    }
    else
    {
       #ifdef HX_SMART_STRINGS
-      if (IsUtf16Surrogate(c)||c>=0x110000)
-         c = 0xFFFD;
+      // Leave Utf16 surrogate handling up to the application - as far as hxcpp is concerned
+      // they are single characters. ie, mirror charAt. 
+      // If the application does not group them as a pair, then it may not be possible to convert to utf8.
+      //if (IsUtf16Surrogate(c))
+      //   hx::Throw(HX_CSTRING("Invalid unpaired surrogate code"));
       #endif
 
       int group = c>>10;
@@ -1554,7 +1590,7 @@ void __hxcpp_string_of_bytes(Array<unsigned char> &inBytes,String &outString,int
    else
    {
       const unsigned char *p0 = (const unsigned char *)inBytes->GetBase();
-      #ifdef HX_SMART_STRINGS
+#ifdef HX_SMART_STRINGS
       bool hasWChar = false;
       const unsigned char *p = p0 + pos;
       for(int i=0;i<len;i++)
@@ -1568,7 +1604,7 @@ void __hxcpp_string_of_bytes(Array<unsigned char> &inBytes,String &outString,int
          outString = _hx_utf8_to_utf16(p0+pos,len,true);
       }
       else
-      #endif
+#endif
       outString = String( GCStringDup((const char *)p0+pos, len, 0), len);
    }
 }
@@ -1769,6 +1805,127 @@ const char16_t * String::wc_str(hx::IStringAlloc *inBuffer, int *outCharLength)
    return str;
 }
 
+bool String::wc_str(::cpp::marshal::View<char16_t> buffer, int* outCharLength) const
+{
+#ifdef HX_SMART_STRINGS
+    if (isUTF16Encoded())
+    {
+        if (buffer.length < length + 1)
+        {
+            return false;
+        }
+
+        if (nullptr != outCharLength)
+        {
+            *outCharLength = length + 1;
+        }
+
+        std::memcpy(buffer.ptr, __w, sizeof(char16_t) * length);
+
+        buffer[int64_t{ length }] = 0;
+
+        return true;
+    }
+#endif
+
+    auto charCount = 0;
+    auto source    = reinterpret_cast<const unsigned char*>(__s);
+    auto cursor    = source;
+    auto end       = source + length;
+
+    while (cursor < end)
+    {
+        auto code = DecodeAdvanceUTF8(cursor, end);
+
+        charCount += UTF16BytesCheck(code);
+    }
+
+    if (buffer.length < charCount + 1)
+    {
+        return false;
+    }
+
+    cursor = source;
+    auto output = buffer.ptr.ptr;
+
+    while (cursor < end)
+    {
+        auto code = DecodeAdvanceUTF8(cursor, end);
+
+        Char16AdvanceSet(output, code);
+    }
+
+    *output = 0;
+
+    if (nullptr != outCharLength)
+    {
+        *outCharLength = length + 1;
+    }
+
+    return true;
+}
+
+bool String::utf8_str(::cpp::marshal::View<char> buffer, int* outByteLength) const
+{
+#ifdef HX_SMART_STRINGS
+    if (isUTF16Encoded())
+    {
+        auto cursor = __w;
+
+        while (Char16Advance(cursor)) {}
+
+        auto calculated = cursor - __w - 1;
+
+        cursor = __w;
+
+        auto end   = cursor + calculated;
+        auto chars = 0;
+
+        while (cursor < end)
+        {
+            chars += UTF8Bytes(Char16Advance(cursor));
+        }
+
+        if (buffer.length < chars + 1)
+        {
+            return false;
+        }
+
+        auto output = buffer.ptr.ptr;
+        cursor = __w;
+
+        while (cursor < end)
+        {
+            UTF8EncodeAdvance(output, Char16Advance(cursor));
+        }
+
+        *output = 0;
+
+        if (nullptr != outByteLength)
+        {
+            *outByteLength = chars + 1;
+        }
+
+        return true;
+    }
+#endif
+
+    if (buffer.length < length)
+    {
+        return false;
+    }
+
+    if (nullptr != outByteLength)
+    {
+        *outByteLength = length + 1;
+    }
+
+    std::memcpy(buffer.ptr, __s, sizeof(char) * length);
+
+    buffer[int64_t{ length }] = 0;
+
+    return true;
+}
 
 const wchar_t * String::wchar_str(hx::IStringAlloc *inBuffer) const
 {
@@ -1970,10 +2127,7 @@ String String::substr(int inFirst, Dynamic inLen) const
    if (inFirst<0) inFirst = 0;
    if (len<0)
    {
-      len += length;
-      // This logic matches flash ....
-      if (inFirst + len >=length)
-         len = 0;
+      len = length + len - inFirst;
    }
 
    if (len<=0 || inFirst>=length)
@@ -2115,57 +2269,136 @@ String &String::operator+=(const String &inRHS)
    return *this;
 }
 
-#ifdef HXCPP_VISIT_ALLOCS
-#define STRING_VISIT_FUNC \
-    void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_STRING(mThis.raw_ref()); }
+#if (HXCPP_API_LEVEL>=500)
+    #ifdef HXCPP_VISIT_ALLOCS
+        #define STRING_VISIT_FUNC \
+            void __Visit(hx::VisitContext *__inCtx) override { HX_VISIT_MEMBER(mThis); }
+    #else
+        #define STRING_VISIT_FUNC
+    #endif
+
+    #define HX_STRING_ARG_LIST0
+    #define HX_STRING_ARG_LIST1(arg0) arg0
+    #define HX_STRING_ARG_LIST2(arg0, arg1) arg0, arg1
+
+    #define HX_STRING_FUNC_LIST0
+    #define HX_STRING_FUNC_LIST1(arg0) arg0 inArg0
+    #define HX_STRING_FUNC_LIST2(arg0, arg1) arg0 inArg0, arg1 inArg1
+
+    #define HX_STRING_FUNC(value, name, args_list, func_list, args_call) \
+        ::hx::Callable<value(args_list)> String::name##_dyn() \
+        { \
+            struct _hx_string_##name final : public ::hx::AutoCallable_obj<value(args_list)> \
+            { \
+                ::String mThis; \
+                _hx_string_##name(const ::String& inThis) : mThis(inThis) \
+                { \
+                    HX_OBJ_WB_NEW_MARKED_OBJECT(this); \
+                } \
+                value HX_LOCAL_RUN(func_list) override \
+                { \
+                    return mThis.name(args_call); \
+                } \
+                void __SetThis(Dynamic inThis) override \
+                { \
+                    mThis = inThis; \
+                } \
+                void* __GetHandle() const override { return const_cast<char *>(mThis.raw_ptr()); } \
+                void __Mark(hx::MarkContext *__inCtx) override { HX_MARK_MEMBER(mThis); } \
+                STRING_VISIT_FUNC \
+                int __Compare(const ::hx::Object* inRhs) const override \
+                { \
+                    auto casted = dynamic_cast<const _hx_string_##name *>(inRhs); \
+                    if (!casted) return 1; \
+                    if (!hx::IsPointerEq(mThis, casted->mThis)) return -1; \
+                    return 0; \
+                } \
+            }; \
+            return new _hx_string_##name(*this); \
+        }
+
+    HX_STRING_FUNC(::String, charAt, HX_STRING_ARG_LIST1(int), HX_STRING_FUNC_LIST1(int), HX_ARG_LIST1);
+    HX_STRING_FUNC(::Dynamic, charCodeAt, HX_STRING_ARG_LIST1(int), HX_STRING_FUNC_LIST1(int), HX_ARG_LIST1);
+    HX_STRING_FUNC(int, indexOf, HX_STRING_ARG_LIST2(::String, ::Dynamic), HX_STRING_FUNC_LIST2(::String, ::Dynamic), HX_ARG_LIST2);
+    HX_STRING_FUNC(int, lastIndexOf, HX_STRING_ARG_LIST2(::String, ::Dynamic), HX_STRING_FUNC_LIST2(::String, ::Dynamic), HX_ARG_LIST2);
+    HX_STRING_FUNC(::Array<::String>, split, HX_STRING_ARG_LIST1(::String), HX_STRING_FUNC_LIST1(::String), HX_ARG_LIST1);
+    HX_STRING_FUNC(::String, substr, HX_STRING_ARG_LIST2(int, ::Dynamic), HX_STRING_FUNC_LIST2(int, ::Dynamic), HX_ARG_LIST2);
+    HX_STRING_FUNC(::String, substring, HX_STRING_ARG_LIST2(int, ::Dynamic), HX_STRING_FUNC_LIST2(int, ::Dynamic), HX_ARG_LIST2);
+    HX_STRING_FUNC(::String, toLowerCase, HX_STRING_ARG_LIST0, HX_STRING_FUNC_LIST0, HX_ARG_LIST0);
+    HX_STRING_FUNC(::String, toString, HX_STRING_ARG_LIST0, HX_STRING_FUNC_LIST0, HX_ARG_LIST0);
+    HX_STRING_FUNC(::String, toUpperCase, HX_STRING_ARG_LIST0, HX_STRING_FUNC_LIST0, HX_ARG_LIST0);
+
+    ::hx::Callable<::String(int)> String::fromCharCode_dyn()
+    {
+        struct _hx_string_fromCharCode : public ::hx::AutoCallable_obj<::String(HX_STRING_ARG_LIST1(int))>
+        {
+            ::String HX_LOCAL_RUN(HX_STRING_FUNC_LIST1(int)) override
+            {
+                return ::String::fromCharCode(HX_ARG_LIST1);
+            }
+            int __Compare(const ::hx::Object* inRhs) const override
+            {
+                return dynamic_cast<const _hx_string_fromCharCode*>(inRhs) ? 0 : -1;
+            }
+        };
+
+        return new _hx_string_fromCharCode();
+    }
 #else
-#define STRING_VISIT_FUNC
+    #ifdef HXCPP_VISIT_ALLOCS
+    #define STRING_VISIT_FUNC \
+        void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_STRING(mThis.raw_ref()); }
+    #else
+    #define STRING_VISIT_FUNC
+    #endif
+
+    #define DEFINE_STRING_FUNC(func,array_list,dynamic_arg_list,arg_list,ARG_C) \
+    struct __String_##func : public hx::Object \
+    { \
+       bool __IsFunction() const { return true; } \
+       HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdClosure }; \
+       String mThis; \
+       __String_##func(const String &inThis) : mThis(inThis) { \
+          HX_OBJ_WB_NEW_MARKED_OBJECT(this); \
+       } \
+       String toString() HXCPP_OVERRIDE { return HX_CSTRING(#func); } \
+       String __ToString() const HXCPP_OVERRIDE { return HX_CSTRING(#func); } \
+       int __GetType() const HXCPP_OVERRIDE { return vtFunction; } \
+       void *__GetHandle() const HXCPP_OVERRIDE { return const_cast<char *>(mThis.raw_ptr()); } \
+       int __ArgCount() const HXCPP_OVERRIDE { return ARG_C; } \
+       void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_STRING(mThis.raw_ptr()); } \
+       Dynamic __Run(const Array<Dynamic> &inArgs) HXCPP_OVERRIDE \
+       { \
+          return mThis.func(array_list); return Dynamic(); \
+       } \
+       Dynamic __run(dynamic_arg_list) HXCPP_OVERRIDE \
+       { \
+          return mThis.func(arg_list); return Dynamic(); \
+       } \
+       STRING_VISIT_FUNC \
+       void  __SetThis(Dynamic inThis) HXCPP_OVERRIDE { mThis = inThis; } \
+    }; \
+    Dynamic String::func##_dyn()  { return new __String_##func(*this);  }
+
+
+    #define DEFINE_STRING_FUNC0(func) DEFINE_STRING_FUNC(func,HX_ARR_LIST0,HX_DYNAMIC_ARG_LIST0,HX_ARG_LIST0,0)
+    #define DEFINE_STRING_FUNC1(func) DEFINE_STRING_FUNC(func,HX_ARR_LIST1,HX_DYNAMIC_ARG_LIST1,HX_ARG_LIST1,1)
+    #define DEFINE_STRING_FUNC2(func) DEFINE_STRING_FUNC(func,HX_ARR_LIST2,HX_DYNAMIC_ARG_LIST2,HX_ARG_LIST2,2)
+
+    DEFINE_STRING_FUNC1(charAt);
+    DEFINE_STRING_FUNC1(charCodeAt);
+    DEFINE_STRING_FUNC2(indexOf);
+    DEFINE_STRING_FUNC2(lastIndexOf);
+    DEFINE_STRING_FUNC1(split);
+    DEFINE_STRING_FUNC2(substr);
+    DEFINE_STRING_FUNC2(substring);
+    DEFINE_STRING_FUNC0(toLowerCase);
+    DEFINE_STRING_FUNC0(toUpperCase);
+    DEFINE_STRING_FUNC0(toString);
+
+    STATIC_HX_DEFINE_DYNAMIC_FUNC1(String, fromCharCode, return)
 #endif
 
-#define DEFINE_STRING_FUNC(func,array_list,dynamic_arg_list,arg_list,ARG_C) \
-struct __String_##func : public hx::Object \
-{ \
-   bool __IsFunction() const { return true; } \
-   HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdClosure }; \
-   String mThis; \
-   __String_##func(const String &inThis) : mThis(inThis) { \
-      HX_OBJ_WB_NEW_MARKED_OBJECT(this); \
-   } \
-   String toString() const{ return HX_CSTRING(#func); } \
-   String __ToString() const{ return HX_CSTRING(#func); } \
-   int __GetType() const { return vtFunction; } \
-   void *__GetHandle() const { return const_cast<char *>(mThis.raw_ptr()); } \
-   int __ArgCount() const { return ARG_C; } \
-   Dynamic __Run(const Array<Dynamic> &inArgs) \
-   { \
-      return mThis.func(array_list); return Dynamic(); \
-   } \
-   Dynamic __run(dynamic_arg_list) \
-   { \
-      return mThis.func(arg_list); return Dynamic(); \
-   } \
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_STRING(mThis.raw_ptr()); } \
-   STRING_VISIT_FUNC \
-   void  __SetThis(Dynamic inThis) { mThis = inThis; } \
-}; \
-Dynamic String::func##_dyn()  { return new __String_##func(*this);  }
-
-
-#define DEFINE_STRING_FUNC0(func) DEFINE_STRING_FUNC(func,HX_ARR_LIST0,HX_DYNAMIC_ARG_LIST0,HX_ARG_LIST0,0)
-#define DEFINE_STRING_FUNC1(func) DEFINE_STRING_FUNC(func,HX_ARR_LIST1,HX_DYNAMIC_ARG_LIST1,HX_ARG_LIST1,1)
-#define DEFINE_STRING_FUNC2(func) DEFINE_STRING_FUNC(func,HX_ARR_LIST2,HX_DYNAMIC_ARG_LIST2,HX_ARG_LIST2,2)
-
-DEFINE_STRING_FUNC1(charAt);
-DEFINE_STRING_FUNC1(charCodeAt);
-DEFINE_STRING_FUNC2(indexOf);
-DEFINE_STRING_FUNC2(lastIndexOf);
-DEFINE_STRING_FUNC1(split);
-DEFINE_STRING_FUNC2(substr);
-DEFINE_STRING_FUNC2(substring);
-DEFINE_STRING_FUNC0(toLowerCase);
-DEFINE_STRING_FUNC0(toUpperCase);
-DEFINE_STRING_FUNC0(toString);
-
 hx::Val String::__Field(const String &inString, hx::PropertyAccess inCallProp)
 {
    if (HX_FIELD_EQ(inString,"length")) return length;
@@ -2202,8 +2435,6 @@ static String sStringFields[] = {
    String(null())
 };
 
-STATIC_HX_DEFINE_DYNAMIC_FUNC1(String,fromCharCode,return )
-
 namespace hx
 {
 
@@ -2268,13 +2499,13 @@ public:
       HX_OBJ_WB_GET(this,mValue.raw_ref());
    };
 
-   hx::Class __GetClass() const { return __StringClass; }
+   hx::Class __GetClass() const HXCPP_OVERRIDE { return __StringClass; }
    bool __Is(hx::Object *inClass) const { return dynamic_cast< StringData *>(inClass); }
 
-   virtual int __GetType() const { return vtString; }
-   String __ToString() const { return mValue; }
-   String toString() { return mValue; }
-   double __ToDouble() const
+   int __GetType() const HXCPP_OVERRIDE { return vtString; }
+   String __ToString() const HXCPP_OVERRIDE { return mValue; }
+   String toString() HXCPP_OVERRIDE { return mValue; }
+   double __ToDouble() const HXCPP_OVERRIDE
    {
       if (!mValue.raw_ptr()) return 0;
 
@@ -2284,33 +2515,33 @@ public:
       return atof(mValue.utf8_str());
       #endif
    }
-   int __length() const { return mValue.length; }
+   int __length() const HXCPP_OVERRIDE { return mValue.length; }
 
-   void __Mark(hx::MarkContext *__inCtx)
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_MARK_MEMBER(mValue);
    }
 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx)
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_VISIT_MEMBER(mValue);
    }
    #endif
 
 
-   int __ToInt() const
+   int __ToInt() const HXCPP_OVERRIDE
    {
       if (!mValue.raw_ptr()) return 0;
       return atoi(mValue.utf8_str());
    }
 
-   int __Compare(const hx::Object *inRHS) const
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       return mValue.compare( const_cast<hx::Object*>(inRHS)->toString() );
    }
 
-   hx::Val __Field(const String &inString, hx::PropertyAccess inCallProp)
+   hx::Val __Field(const String &inString, hx::PropertyAccess inCallProp) HXCPP_OVERRIDE
    {
       return mValue.__Field(inString, inCallProp);
    }
diff --git a/Sources/c_borogove/src/StringTools.cpp b/Sources/c_borogove/src/StringTools.cpp
index 2debb5f..022f37b 100644
--- a/Sources/c_borogove/src/StringTools.cpp
+++ b/Sources/c_borogove/src/StringTools.cpp
@@ -12,20 +12,21 @@
 #endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_0e615b5827179e15_50_urlEncode,"StringTools","urlEncode",0x06afdce1,"StringTools.urlEncode","/usr/local/lib/haxe/std/StringTools.hx",50,0x3f930611)
+HX_LOCAL_STACK_FRAME(_hx_pos_0e615b5827179e15_118_urlDecode,"StringTools","urlDecode",0x71b947f9,"StringTools.urlDecode","/usr/local/lib/haxe/std/StringTools.hx",118,0x3f930611)
 HX_LOCAL_STACK_FRAME(_hx_pos_0e615b5827179e15_158_htmlEscape,"StringTools","htmlEscape",0x0e1a5dd0,"StringTools.htmlEscape","/usr/local/lib/haxe/std/StringTools.hx",158,0x3f930611)
-static const ::String _hx_array_data_0363db6a_3[] = {
+static const ::String _hx_array_data_0363db6a_4[] = {
 	HX_("&quot;",2c,d9,81,8f),
 };
-static const ::String _hx_array_data_0363db6a_4[] = {
+static const ::String _hx_array_data_0363db6a_5[] = {
 	HX_("&amp;",dd,d4,aa,21),
 };
-static const ::String _hx_array_data_0363db6a_5[] = {
+static const ::String _hx_array_data_0363db6a_6[] = {
 	HX_("&#039;",62,26,77,78),
 };
-static const ::String _hx_array_data_0363db6a_6[] = {
+static const ::String _hx_array_data_0363db6a_7[] = {
 	HX_("&lt;",4d,74,70,19),
 };
-static const ::String _hx_array_data_0363db6a_7[] = {
+static const ::String _hx_array_data_0363db6a_8[] = {
 	HX_("&gt;",08,a9,6c,19),
 };
 HX_LOCAL_STACK_FRAME(_hx_pos_0e615b5827179e15_240_startsWith,"StringTools","startsWith",0x5f4e6efb,"StringTools.startsWith","/usr/local/lib/haxe/std/StringTools.hx",240,0x3f930611)
@@ -63,6 +64,14 @@ HXDLIN(  50)		return ( (::String)(s.__URLEncode()) );
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(StringTools_obj,urlEncode,return )
 
+::String StringTools_obj::urlDecode(::String s){
+            	HX_STACKFRAME(&_hx_pos_0e615b5827179e15_118_urlDecode)
+HXDLIN( 118)		return ( (::String)(s.__URLDecode()) );
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(StringTools_obj,urlDecode,return )
+
 ::String StringTools_obj::htmlEscape(::String s, ::Dynamic quotes){
             	HX_GC_STACKFRAME(&_hx_pos_0e615b5827179e15_158_htmlEscape)
 HXLINE( 159)		 ::StringBuf buf =  ::StringBuf_obj::__alloc( HX_CTX );
@@ -93,7 +102,7 @@ HXLINE( 169)							if (::hx::IsNotNull( buf->charBuf )) {
 HXLINE( 169)								buf->flush();
             							}
 HXDLIN( 169)							if (::hx::IsNull( buf->b )) {
-HXLINE( 169)								buf->b = ::Array_obj< ::String >::fromData( _hx_array_data_0363db6a_3,1);
+HXLINE( 169)								buf->b = ::Array_obj< ::String >::fromData( _hx_array_data_0363db6a_4,1);
             							}
             							else {
 HXLINE( 169)								buf->b->push(HX_("&quot;",2c,d9,81,8f));
@@ -127,7 +136,7 @@ HXLINE( 163)						if (::hx::IsNotNull( buf->charBuf )) {
 HXLINE( 163)							buf->flush();
             						}
 HXDLIN( 163)						if (::hx::IsNull( buf->b )) {
-HXLINE( 163)							buf->b = ::Array_obj< ::String >::fromData( _hx_array_data_0363db6a_4,1);
+HXLINE( 163)							buf->b = ::Array_obj< ::String >::fromData( _hx_array_data_0363db6a_5,1);
             						}
             						else {
 HXLINE( 163)							buf->b->push(HX_("&amp;",dd,d4,aa,21));
@@ -140,7 +149,7 @@ HXLINE( 171)							if (::hx::IsNotNull( buf->charBuf )) {
 HXLINE( 171)								buf->flush();
             							}
 HXDLIN( 171)							if (::hx::IsNull( buf->b )) {
-HXLINE( 171)								buf->b = ::Array_obj< ::String >::fromData( _hx_array_data_0363db6a_5,1);
+HXLINE( 171)								buf->b = ::Array_obj< ::String >::fromData( _hx_array_data_0363db6a_6,1);
             							}
             							else {
 HXLINE( 171)								buf->b->push(HX_("&#039;",62,26,77,78));
@@ -174,7 +183,7 @@ HXLINE( 165)						if (::hx::IsNotNull( buf->charBuf )) {
 HXLINE( 165)							buf->flush();
             						}
 HXDLIN( 165)						if (::hx::IsNull( buf->b )) {
-HXLINE( 165)							buf->b = ::Array_obj< ::String >::fromData( _hx_array_data_0363db6a_6,1);
+HXLINE( 165)							buf->b = ::Array_obj< ::String >::fromData( _hx_array_data_0363db6a_7,1);
             						}
             						else {
 HXLINE( 165)							buf->b->push(HX_("&lt;",4d,74,70,19));
@@ -186,7 +195,7 @@ HXLINE( 167)						if (::hx::IsNotNull( buf->charBuf )) {
 HXLINE( 167)							buf->flush();
             						}
 HXDLIN( 167)						if (::hx::IsNull( buf->b )) {
-HXLINE( 167)							buf->b = ::Array_obj< ::String >::fromData( _hx_array_data_0363db6a_7,1);
+HXLINE( 167)							buf->b = ::Array_obj< ::String >::fromData( _hx_array_data_0363db6a_8,1);
             						}
             						else {
 HXLINE( 167)							buf->b->push(HX_("&gt;",08,a9,6c,19));
@@ -288,11 +297,11 @@ HXLINE( 306)				_hx_tmp = ::StringTools_obj::isSpace(s,r);
 HXLINE( 306)				_hx_tmp = false;
             			}
 HXDLIN( 306)			if (!(_hx_tmp)) {
-HXLINE( 306)				goto _hx_goto_11;
+HXLINE( 306)				goto _hx_goto_12;
             			}
 HXLINE( 307)			r = (r + 1);
             		}
-            		_hx_goto_11:;
+            		_hx_goto_12:;
 HXLINE( 309)		if ((r > 0)) {
 HXLINE( 310)			return s.substr(r,(l - r));
             		}
@@ -318,11 +327,11 @@ HXLINE( 331)				_hx_tmp = ::StringTools_obj::isSpace(s,((l - r) - 1));
 HXLINE( 331)				_hx_tmp = false;
             			}
 HXDLIN( 331)			if (!(_hx_tmp)) {
-HXLINE( 331)				goto _hx_goto_13;
+HXLINE( 331)				goto _hx_goto_14;
             			}
 HXLINE( 332)			r = (r + 1);
             		}
-            		_hx_goto_13:;
+            		_hx_goto_14:;
 HXLINE( 334)		if ((r > 0)) {
 HXLINE( 335)			return s.substr(0,(l - r));
             		}
@@ -435,6 +444,7 @@ bool StringTools_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::h
 		break;
 	case 9:
 		if (HX_FIELD_EQ(inName,"urlEncode") ) { outValue = urlEncode_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"urlDecode") ) { outValue = urlDecode_dyn(); return true; }
 		break;
 	case 10:
 		if (HX_FIELD_EQ(inName,"htmlEscape") ) { outValue = htmlEscape_dyn(); return true; }
@@ -452,6 +462,7 @@ static ::hx::StaticInfo *StringTools_obj_sStaticStorageInfo = 0;
 
 static ::String StringTools_obj_sStaticFields[] = {
 	HX_("urlEncode",e5,4e,52,9a),
+	HX_("urlDecode",fd,b9,5b,05),
 	HX_("htmlEscape",4c,af,9b,a8),
 	HX_("startsWith",77,c0,cf,f9),
 	HX_("endsWith",5e,7a,b6,db),
diff --git a/Sources/c_borogove/src/Xml.cpp b/Sources/c_borogove/src/Xml.cpp
index c31d092..e9a0b7e 100644
--- a/Sources/c_borogove/src/Xml.cpp
+++ b/Sources/c_borogove/src/Xml.cpp
@@ -21,6 +21,7 @@ HX_DEFINE_STACK_FRAME(_hx_pos_7e4d842269e66db1_397_new,"Xml","new",0x2e496e29,"X
 HX_LOCAL_STACK_FRAME(_hx_pos_7e4d842269e66db1_244_get,"Xml","get",0x2e441e5f,"Xml.get","/usr/local/lib/haxe/std/Xml.hx",244,0x5c1024e4)
 HX_LOCAL_STACK_FRAME(_hx_pos_7e4d842269e66db1_255_set,"Xml","set",0x2e4d396b,"Xml.set","/usr/local/lib/haxe/std/Xml.hx",255,0x5c1024e4)
 HX_LOCAL_STACK_FRAME(_hx_pos_7e4d842269e66db1_287_attributes,"Xml","attributes",0x1ab5462e,"Xml.attributes","/usr/local/lib/haxe/std/Xml.hx",287,0x5c1024e4)
+HX_LOCAL_STACK_FRAME(_hx_pos_7e4d842269e66db1_337_firstElement,"Xml","firstElement",0xc103a583,"Xml.firstElement","/usr/local/lib/haxe/std/Xml.hx",337,0x5c1024e4)
 HX_LOCAL_STACK_FRAME(_hx_pos_7e4d842269e66db1_394_toString,"Xml","toString",0xb7bb9a43,"Xml.toString","/usr/local/lib/haxe/std/Xml.hx",394,0x5c1024e4)
 HX_LOCAL_STACK_FRAME(_hx_pos_7e4d842269e66db1_182_createElement,"Xml","createElement",0x97359a29,"Xml.createElement","/usr/local/lib/haxe/std/Xml.hx",182,0x5c1024e4)
 HX_LOCAL_STACK_FRAME(_hx_pos_7e4d842269e66db1_86_boot,"Xml","boot",0x4a0ff649,"Xml.boot","/usr/local/lib/haxe/std/Xml.hx",86,0x5c1024e4)
@@ -81,6 +82,35 @@ HXLINE( 291)		return this->attributeMap->keys();
 
 HX_DEFINE_DYNAMIC_FUNC0(Xml_obj,attributes,return )
 
+ ::Xml Xml_obj::firstElement(){
+            	HX_STACKFRAME(&_hx_pos_7e4d842269e66db1_337_firstElement)
+HXLINE( 338)		bool _hx_tmp;
+HXDLIN( 338)		if ((this->nodeType != ::Xml_obj::Document)) {
+HXLINE( 338)			_hx_tmp = (this->nodeType != ::Xml_obj::Element);
+            		}
+            		else {
+HXLINE( 338)			_hx_tmp = false;
+            		}
+HXDLIN( 338)		if (_hx_tmp) {
+HXLINE( 338)			HX_STACK_DO_THROW((HX_("Bad node type, expected Element or Document but found ",a0,d6,ba,79) + ::_Xml::XmlType_Impl__obj::toString(this->nodeType)));
+            		}
+HXLINE( 339)		{
+HXLINE( 339)			int _g = 0;
+HXDLIN( 339)			::Array< ::Dynamic> _g1 = this->children;
+HXDLIN( 339)			while((_g < _g1->length)){
+HXLINE( 339)				 ::Xml child = _g1->__get(_g).StaticCast<  ::Xml >();
+HXDLIN( 339)				_g = (_g + 1);
+HXLINE( 340)				if ((child->nodeType == ::Xml_obj::Element)) {
+HXLINE( 341)					return child;
+            				}
+            			}
+            		}
+HXLINE( 344)		return null();
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Xml_obj,firstElement,return )
+
 ::String Xml_obj::toString(){
             	HX_STACKFRAME(&_hx_pos_7e4d842269e66db1_394_toString)
 HXDLIN( 394)		return ::haxe::xml::Printer_obj::print(::hx::ObjectPtr<OBJ_>(this),null());
@@ -167,6 +197,7 @@ void Xml_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 12:
 		if (HX_FIELD_EQ(inName,"attributeMap") ) { return ::hx::Val( attributeMap ); }
+		if (HX_FIELD_EQ(inName,"firstElement") ) { return ::hx::Val( firstElement_dyn() ); }
 	}
 	return super::__Field(inName,inCallProp);
 }
@@ -250,6 +281,7 @@ static ::String Xml_obj_sMemberFields[] = {
 	HX_("get",96,80,4e,00),
 	HX_("set",a2,9b,57,00),
 	HX_("attributes",d7,a8,71,97),
+	HX_("firstElement",6c,c4,9c,2f),
 	HX_("toString",ac,d0,6e,38),
 	::String(null()) };
 
diff --git a/Sources/c_borogove/src/_HaxeCBridge/HaxeArray_Impl_.cpp b/Sources/c_borogove/src/_HaxeCBridge/HaxeArray_Impl_.cpp
index cc8f674..480640f 100644
--- a/Sources/c_borogove/src/_HaxeCBridge/HaxeArray_Impl_.cpp
+++ b/Sources/c_borogove/src/_HaxeCBridge/HaxeArray_Impl_.cpp
@@ -14,7 +14,7 @@
 #include <haxe/IMap.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_c8a4db259b59e383_2228_fromNullableArrayT,"_HaxeCBridge.HaxeArray_Impl_","fromNullableArrayT",0x40827fc8,"_HaxeCBridge.HaxeArray_Impl_.fromNullableArrayT","HaxeCBridge.hx",2228,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_c8a4db259b59e383_2229_fromNullableArrayT,"_HaxeCBridge.HaxeArray_Impl_","fromNullableArrayT",0x40827fc8,"_HaxeCBridge.HaxeArray_Impl_.fromNullableArrayT","HaxeCBridge.hx",2229,0xa18550d8)
 namespace _HaxeCBridge{
 
 void HaxeArray_Impl__obj::__construct() { }
@@ -35,50 +35,50 @@ bool HaxeArray_Impl__obj::_hx_isInstanceOf(int inClassId) {
 }
 
 void** HaxeArray_Impl__obj::fromNullableArrayT(::cpp::VirtualArray x){
-            	HX_STACKFRAME(&_hx_pos_c8a4db259b59e383_2228_fromNullableArrayT)
-HXLINE(2229)		if (::hx::IsNull( x )) {
-HXLINE(2229)			return null();
+            	HX_STACKFRAME(&_hx_pos_c8a4db259b59e383_2229_fromNullableArrayT)
+HXLINE(2230)		if (::hx::IsNull( x )) {
+HXLINE(2230)			return null();
             		}
-HXLINE(2231)		::cpp::VirtualArray x1 = x;
-HXDLIN(2231)		{
-HXLINE(2231)			int _g = 0;
-HXDLIN(2231)			while((_g < x1->get_length())){
-HXLINE(2231)				 ::Dynamic el = x1->__get(_g);
-HXDLIN(2231)				_g = (_g + 1);
-HXDLIN(2231)				{
-HXLINE(2231)					 ::Dynamic haxeObject = el;
-HXDLIN(2231)					void* ptr = haxeObject.mPtr;
-HXDLIN(2231)					::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN(2231)					{
-HXLINE(2231)						 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN(2231)						if (::hx::IsNull( store )) {
-HXLINE(2231)							store =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2232)		::cpp::VirtualArray x1 = x;
+HXDLIN(2232)		{
+HXLINE(2232)			int _g = 0;
+HXDLIN(2232)			while((_g < x1->get_length())){
+HXLINE(2232)				 ::Dynamic el = x1->__get(_g);
+HXDLIN(2232)				_g = (_g + 1);
+HXDLIN(2232)				{
+HXLINE(2232)					 ::Dynamic haxeObject = el;
+HXDLIN(2232)					void* ptr = haxeObject.mPtr;
+HXDLIN(2232)					::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN(2232)					{
+HXLINE(2232)						 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN(2232)						if (::hx::IsNull( store )) {
+HXLINE(2232)							store =  ::Dynamic(::hx::Anon_obj::Create(2)
             								->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             								->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN(2231)							::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN(2232)							::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             						}
             						else {
-HXLINE(2231)							::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2232)							::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             						}
             					}
             				}
             			}
             		}
-HXDLIN(2231)		void** ptr1 = (void**)x1->getBase();
-HXDLIN(2231)		::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN(2231)		{
-HXLINE(2231)			 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN(2231)			if (::hx::IsNull( store1 )) {
-HXLINE(2231)				store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN(2232)		void** ptr1 = (void**)x1->getBase();
+HXDLIN(2232)		::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN(2232)		{
+HXLINE(2232)			 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN(2232)			if (::hx::IsNull( store1 )) {
+HXLINE(2232)				store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             					->setFixed(1,HX_("value",71,7f,b8,31),x1));
-HXDLIN(2231)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN(2232)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             			}
             			else {
-HXLINE(2231)				::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2232)				::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             			}
             		}
-HXDLIN(2231)		return ptr1;
+HXDLIN(2232)		return ptr1;
             	}
 
 
diff --git a/Sources/c_borogove/src/_HaxeCBridge/HaxeOpaqueArray_Impl_.cpp b/Sources/c_borogove/src/_HaxeCBridge/HaxeOpaqueArray_Impl_.cpp
index f1db3ce..1a7c7dd 100644
--- a/Sources/c_borogove/src/_HaxeCBridge/HaxeOpaqueArray_Impl_.cpp
+++ b/Sources/c_borogove/src/_HaxeCBridge/HaxeOpaqueArray_Impl_.cpp
@@ -14,7 +14,7 @@
 #include <haxe/IMap.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_d33de724b9fc3cd4_2205_fromNullableArrayT,"_HaxeCBridge.HaxeOpaqueArray_Impl_","fromNullableArrayT",0xd5bd2249,"_HaxeCBridge.HaxeOpaqueArray_Impl_.fromNullableArrayT","HaxeCBridge.hx",2205,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_d33de724b9fc3cd4_2206_fromNullableArrayT,"_HaxeCBridge.HaxeOpaqueArray_Impl_","fromNullableArrayT",0xd5bd2249,"_HaxeCBridge.HaxeOpaqueArray_Impl_.fromNullableArrayT","HaxeCBridge.hx",2206,0xa18550d8)
 namespace _HaxeCBridge{
 
 void HaxeOpaqueArray_Impl__obj::__construct() { }
@@ -35,37 +35,37 @@ bool HaxeOpaqueArray_Impl__obj::_hx_isInstanceOf(int inClassId) {
 }
 
 void** HaxeOpaqueArray_Impl__obj::fromNullableArrayT(::cpp::VirtualArray x){
-            	HX_STACKFRAME(&_hx_pos_d33de724b9fc3cd4_2205_fromNullableArrayT)
-HXLINE(2206)		if (::hx::IsNull( x )) {
-HXLINE(2206)			return null();
+            	HX_STACKFRAME(&_hx_pos_d33de724b9fc3cd4_2206_fromNullableArrayT)
+HXLINE(2207)		if (::hx::IsNull( x )) {
+HXLINE(2207)			return null();
             		}
-HXLINE(2208)		::cpp::VirtualArray x1 = x;
-HXDLIN(2208)		::Array< size_t > arr = ::Array_obj< size_t >::__new(x1->get_length());
-HXDLIN(2208)		{
-HXLINE(2208)			int _g_current = 0;
-HXDLIN(2208)			::cpp::VirtualArray _g_array = x1;
-HXDLIN(2208)			while((_g_current < _g_array->get_length())){
-HXLINE(2208)				 ::Dynamic _g_value = _g_array->__get(_g_current);
-HXDLIN(2208)				_g_current = (_g_current + 1);
-HXDLIN(2208)				 ::Dynamic el = _g_value;
-HXDLIN(2208)				arr[(_g_current - 1)] = reinterpret_cast<size_t>(( (void*)(( (::cpp::Pointer< void >)(el) )->get_raw()) ));
+HXLINE(2209)		::cpp::VirtualArray x1 = x;
+HXDLIN(2209)		::Array< size_t > arr = ::Array_obj< size_t >::__new(x1->get_length());
+HXDLIN(2209)		{
+HXLINE(2209)			int _g_current = 0;
+HXDLIN(2209)			::cpp::VirtualArray _g_array = x1;
+HXDLIN(2209)			while((_g_current < _g_array->get_length())){
+HXLINE(2209)				 ::Dynamic _g_value = _g_array->__get(_g_current);
+HXDLIN(2209)				_g_current = (_g_current + 1);
+HXDLIN(2209)				 ::Dynamic el = _g_value;
+HXDLIN(2209)				arr[(_g_current - 1)] = reinterpret_cast<size_t>(( (void*)(( (::cpp::Pointer< void >)(el) )->get_raw()) ));
             			}
             		}
-HXDLIN(2208)		void** ptr = (void**)arr->getBase();
-HXDLIN(2208)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN(2208)		{
-HXLINE(2208)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN(2208)			if (::hx::IsNull( store )) {
-HXLINE(2390)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN(2209)		void** ptr = (void**)arr->getBase();
+HXDLIN(2209)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN(2209)		{
+HXLINE(2209)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN(2209)			if (::hx::IsNull( store )) {
+HXLINE(2391)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             					->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE(2208)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE(2209)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             			}
             			else {
-HXLINE(2208)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2209)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             			}
             		}
-HXDLIN(2208)		return ptr;
+HXDLIN(2209)		return ptr;
             	}
 
 
diff --git a/Sources/c_borogove/src/_HaxeCBridge/HaxeStringArray_Impl_.cpp b/Sources/c_borogove/src/_HaxeCBridge/HaxeStringArray_Impl_.cpp
index 8576e65..da93d71 100644
--- a/Sources/c_borogove/src/_HaxeCBridge/HaxeStringArray_Impl_.cpp
+++ b/Sources/c_borogove/src/_HaxeCBridge/HaxeStringArray_Impl_.cpp
@@ -14,7 +14,7 @@
 #include <haxe/IMap.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_6dd11d7cebaf62d3_2186_fromNullableArrayString,"_HaxeCBridge.HaxeStringArray_Impl_","fromNullableArrayString",0xff874cec,"_HaxeCBridge.HaxeStringArray_Impl_.fromNullableArrayString","HaxeCBridge.hx",2186,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6dd11d7cebaf62d3_2187_fromNullableArrayString,"_HaxeCBridge.HaxeStringArray_Impl_","fromNullableArrayString",0xff874cec,"_HaxeCBridge.HaxeStringArray_Impl_.fromNullableArrayString","HaxeCBridge.hx",2187,0xa18550d8)
 namespace _HaxeCBridge{
 
 void HaxeStringArray_Impl__obj::__construct() { }
@@ -35,54 +35,54 @@ bool HaxeStringArray_Impl__obj::_hx_isInstanceOf(int inClassId) {
 }
 
 const char** HaxeStringArray_Impl__obj::fromNullableArrayString(::Array< ::String > x){
-            	HX_STACKFRAME(&_hx_pos_6dd11d7cebaf62d3_2186_fromNullableArrayString)
-HXLINE(2187)		if (::hx::IsNull( x )) {
-HXLINE(2187)			return null();
+            	HX_STACKFRAME(&_hx_pos_6dd11d7cebaf62d3_2187_fromNullableArrayString)
+HXLINE(2188)		if (::hx::IsNull( x )) {
+HXLINE(2188)			return null();
             		}
-HXLINE(2189)		::Array< ::String > x1 = x;
-HXDLIN(2189)		::Array< size_t > arr = ::Array_obj< size_t >::__new(x1->length);
-HXDLIN(2189)		{
-HXLINE(2189)			int _g_current = 0;
-HXDLIN(2189)			::Array< ::String > _g_array = x1;
-HXDLIN(2189)			while((_g_current < _g_array->length)){
-HXLINE(2189)				::String _g_value = _g_array->__get(_g_current);
-HXDLIN(2189)				_g_current = (_g_current + 1);
-HXDLIN(2189)				::String el = _g_value;
-HXDLIN(2189)				{
-HXLINE(2189)					const char* cStrPtr = el.utf8_str();
-HXDLIN(2189)					::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN(2189)					{
-HXLINE(2189)						 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN(2189)						if (::hx::IsNull( store )) {
-HXLINE(2390)							store =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2190)		::Array< ::String > x1 = x;
+HXDLIN(2190)		::Array< size_t > arr = ::Array_obj< size_t >::__new(x1->length);
+HXDLIN(2190)		{
+HXLINE(2190)			int _g_current = 0;
+HXDLIN(2190)			::Array< ::String > _g_array = x1;
+HXDLIN(2190)			while((_g_current < _g_array->length)){
+HXLINE(2190)				::String _g_value = _g_array->__get(_g_current);
+HXDLIN(2190)				_g_current = (_g_current + 1);
+HXDLIN(2190)				::String el = _g_value;
+HXDLIN(2190)				{
+HXLINE(2190)					const char* cStrPtr = el.utf8_str();
+HXDLIN(2190)					::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN(2190)					{
+HXLINE(2190)						 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN(2190)						if (::hx::IsNull( store )) {
+HXLINE(2391)							store =  ::Dynamic(::hx::Anon_obj::Create(2)
             								->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             								->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE(2189)							::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE(2190)							::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             						}
             						else {
-HXLINE(2189)							::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2190)							::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             						}
             					}
-HXDLIN(2189)					const char* ptr = cStrPtr;
-HXDLIN(2189)					arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN(2190)					const char* ptr = cStrPtr;
+HXDLIN(2190)					arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             				}
             			}
             		}
-HXDLIN(2189)		void** ptr1 = (void**)arr->getBase();
-HXDLIN(2189)		::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN(2189)		{
-HXLINE(2189)			 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN(2189)			if (::hx::IsNull( store1 )) {
-HXLINE(2390)				store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN(2190)		void** ptr1 = (void**)arr->getBase();
+HXDLIN(2190)		::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN(2190)		{
+HXLINE(2190)			 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN(2190)			if (::hx::IsNull( store1 )) {
+HXLINE(2391)				store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             					->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE(2189)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE(2190)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             			}
             			else {
-HXLINE(2189)				::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2190)				::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             			}
             		}
-HXDLIN(2189)		return ( (const char**)(ptr1) );
+HXDLIN(2190)		return ( (const char**)(ptr1) );
             	}
 
 
diff --git a/Sources/c_borogove/src/_HaxeCBridge/Internal.cpp b/Sources/c_borogove/src/_HaxeCBridge/Internal.cpp
index 1d180b1..ec4d593 100644
--- a/Sources/c_borogove/src/_HaxeCBridge/Internal.cpp
+++ b/Sources/c_borogove/src/_HaxeCBridge/Internal.cpp
@@ -14,9 +14,9 @@
 #include <sys/thread/Lock.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2437_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2437,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2438_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2438,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2439_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2439,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2440_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2440,0xa18550d8)
 namespace _HaxeCBridge{
 
 void Internal_obj::__construct() { }
@@ -165,16 +165,16 @@ void Internal_obj::__register()
 void Internal_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2437_boot)
-HXDLIN(2437)		mainThreadLoopActive = true;
+            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2438_boot)
+HXDLIN(2438)		mainThreadLoopActive = true;
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2438_boot)
-HXDLIN(2438)		mainThreadEndIfNoPending = false;
+            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2439_boot)
+HXDLIN(2439)		mainThreadEndIfNoPending = false;
             	}
 {
-            	HX_GC_STACKFRAME(&_hx_pos_afd834d22acce778_2439_boot)
-HXDLIN(2439)		gcRetainMap =  ::cpp::Int64Map_obj::__alloc( HX_CTX );
+            	HX_GC_STACKFRAME(&_hx_pos_afd834d22acce778_2440_boot)
+HXDLIN(2440)		gcRetainMap =  ::cpp::Int64Map_obj::__alloc( HX_CTX );
             	}
 }
 
diff --git a/Sources/c_borogove/src/__HaxeCBridgeBindings__.cpp b/Sources/c_borogove/src/__HaxeCBridgeBindings__.cpp
index 904e356..a8d1d8c 100644
--- a/Sources/c_borogove/src/__HaxeCBridgeBindings__.cpp
+++ b/Sources/c_borogove/src/__HaxeCBridgeBindings__.cpp
@@ -24,6 +24,8 @@
 #include <borogove/Html.h>
 #include <borogove/persistence/MediaStore__Companion.h>
 #include <borogove/persistence/MediaStore.h>
+#include <borogove/Hash.h>
+#include <tink/streams/StreamObject.h>
 #include <borogove/persistence/MediaStoreFS.h>
 #include <borogove/persistence/KeyValueStore__Companion.h>
 #include <borogove/persistence/KeyValueStore.h>
@@ -32,7 +34,7 @@
 #include <borogove/ChatMessageBuilder.h>
 #include <borogove/Member.h>
 #include <borogove/ChatAttachment.h>
-#include <borogove/Hash.h>
+#include <borogove/Client.h>
 #include <borogove/Reaction.h>
 #include <borogove/LinkMetadata.h>
 #include <borogove/EventEmitter.h>
@@ -42,7 +44,6 @@
 #include <borogove/calls/Session.h>
 #include <borogove/calls/DTMFSender.h>
 #include <borogove/AvailableChat.h>
-#include <borogove/Client.h>
 #include <borogove/Profile.h>
 #include <borogove/ProfileItem.h>
 #include <borogove/calls/MediaStreamTrack.h>
@@ -62,8 +63,8 @@
 #include <borogove/persistence/Dummy.h>
 #include <borogove/Push.h>
 #include <borogove/Notification.h>
-#include <borogove/ProfileBuilder.h>
 #include <borogove/AttachmentSource.h>
+#include <borogove/ProfileBuilder.h>
 #include <borogove/AvailableChatIterator.h>
 #include <borogove/calls/MediaStream.h>
 #include <borogove/calls/Session__Companion.h>
@@ -123,6 +124,7 @@ namespace HaxeCBridgeInternal {
 
 	void defaultExceptionHandler(const char* info) {
 		fprintf(stderr, "Unhandled Borogove exception: %s\n", info);
+		abort();
 	}
 
 	typedef void (* MainThreadCallback)(void* data);
@@ -532,12 +534,12 @@ const char *borogove_html_to_plain_text(void *a0) {
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_persistence_media_store_has_media(void *a0, const char *a1, const unsigned char *a2, size_t a3, void (*a4) (bool, void *handler__context), void *a5) {
+void borogove_persistence_media_store_has_media(void *a0, void *a1, void (*a2) (const char*, void *handler__context), void *a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return borogove::persistence::MediaStore__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, cpp::Function<void(bool, void * handler__context)>(a4), a5);
+		return borogove::persistence::MediaStore__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)a0), Dynamic((hx::Object *)a1), cpp::Function<void(const char*, void * handler__context)>(a2), a3);
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const unsigned char* a2; size_t a3; void (* a4) (bool, void * handler__context); void* a5;} args;
+		struct {void * a0; void * a1; void (* a2) (const char*, void * handler__context); void* a3;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -545,7 +547,7 @@ void borogove_persistence_media_store_has_media(void *a0, const char *a1, const
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				borogove::persistence::MediaStore__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, cpp::Function<void(bool, void * handler__context)>(data->args.a4), data->args.a5);
+				borogove::persistence::MediaStore__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)data->args.a0), Dynamic((hx::Object *)data->args.a1), cpp::Function<void(const char*, void * handler__context)>(data->args.a2), data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -558,7 +560,7 @@ void borogove_persistence_media_store_has_media(void *a0, const char *a1, const
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4, a5} };
+	Data data = { {a0, a1, a2, a3} };
 
 	// queue a callback to execute hasMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
@@ -600,12 +602,12 @@ void borogove_persistence_media_store_remove_media(void *a0, const char *a1, con
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_persistence_media_store_store_media(void *a0, const char *a1, const unsigned char *a2, size_t a3, void (*a4) (bool, void *handler__context), void *a5) {
+void borogove_persistence_media_store_store_media(void *a0, const char *a1, void *a2, void (*a3) (const char*, void *handler__context), void *a4) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return borogove::persistence::MediaStore__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, cpp::Function<void(bool, void * handler__context)>(a4), a5);
+		return borogove::persistence::MediaStore__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)a0), a1, Dynamic((hx::Object *)a2), cpp::Function<void(const char*, void * handler__context)>(a3), a4);
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const unsigned char* a2; size_t a3; void (* a4) (bool, void * handler__context); void* a5;} args;
+		struct {void * a0; const char * a1; void * a2; void (* a3) (const char*, void * handler__context); void* a4;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -613,7 +615,7 @@ void borogove_persistence_media_store_store_media(void *a0, const char *a1, cons
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				borogove::persistence::MediaStore__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, cpp::Function<void(bool, void * handler__context)>(data->args.a4), data->args.a5);
+				borogove::persistence::MediaStore__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, Dynamic((hx::Object *)data->args.a2), cpp::Function<void(const char*, void * handler__context)>(data->args.a3), data->args.a4);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -626,7 +628,7 @@ void borogove_persistence_media_store_store_media(void *a0, const char *a1, cons
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4, a5} };
+	Data data = { {a0, a1, a2, a3, a4} };
 
 	// queue a callback to execute storeMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
@@ -771,6 +773,42 @@ void borogove_persistence_key_value_store_set(void *a0, const char *a1, const ch
 	data.lock.Wait();
 }
 
+HAXE_C_BRIDGE_LINKAGE
+size_t borogove_chat_message_combine_corrections(void *const *a0, size_t a1, void ***a2) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return borogove::ChatMessage_obj::combineCorrections__fromC(a0, a1, a2);
+	}
+	struct Data {
+		struct {void* const* a0; size_t a1; void*** a2;} args;
+		HxSemaphore lock;
+		size_t ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = borogove::ChatMessage_obj::combineCorrections__fromC(data->args.a0, data->args.a1, data->args.a2);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2} };
+
+	// queue a callback to execute combineCorrections__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
 HAXE_C_BRIDGE_LINKAGE
 const char *borogove_chat_message_local_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -916,9 +954,9 @@ enum borogove_message_type borogove_chat_message_type(void *a0) {
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_timestamp(void *a0) {
+const char *borogove_chat_message_time_sent(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->timestamp__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->timeSent__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -930,7 +968,7 @@ const char *borogove_chat_message_timestamp(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->timestamp__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->timeSent__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -945,7 +983,43 @@ const char *borogove_chat_message_timestamp(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute timestamp__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute timeSent__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *borogove_chat_message_time_received(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->timeReceived__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->timeReceived__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute timeReceived__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
@@ -1887,6 +1961,40 @@ const char *borogove_chat_message_call_duration(void *a0) {
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+void borogove_chat_message_fetch_attachment(void *a0, void *a1, void *a2, bool a3, void (*a4) (void*, void *handler__context), void *a5) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::ChatMessage((hx::Object *)a0, true))->fetchAttachment__fromC(Dynamic((hx::Object *)a1), Dynamic((hx::Object *)a2), a3, cpp::Function<void(void*, void * handler__context)>(a4), a5);
+	}
+	struct Data {
+		struct {void * a0; void * a1; void * a2; bool a3; void (* a4) (void*, void * handler__context); void* a5;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::ChatMessage((hx::Object *)data->args.a0, true))->fetchAttachment__fromC(Dynamic((hx::Object *)data->args.a1), Dynamic((hx::Object *)data->args.a2), data->args.a3, cpp::Function<void(void*, void * handler__context)>(data->args.a4), data->args.a5);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2, a3, a4, a5} };
+
+	// queue a callback to execute fetchAttachment__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
 HAXE_C_BRIDGE_LINKAGE
 void *borogove_chat_attachment_create(const char *a0, const char *a1, int a2, const char *a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -1923,6 +2031,42 @@ void *borogove_chat_attachment_create(const char *a0, const char *a1, int a2, co
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+const char *borogove_chat_attachment_cached_at(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((borogove::ChatAttachment((hx::Object *)a0, true))->cachedAt__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatAttachment((hx::Object *)data->args.a0, true))->cachedAt__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute cachedAt__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
 HAXE_C_BRIDGE_LINKAGE
 const char *borogove_chat_attachment_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -2355,6 +2499,42 @@ const char *borogove_hash_to_base_64_url(void *a0) {
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+bool borogove_hash_equals(void *a0, void *a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Hash((hx::Object *)a0, true))->equals(Dynamic((hx::Object *)a1));
+	}
+	struct Data {
+		struct {void * a0; void * a1;} args;
+		HxSemaphore lock;
+		bool ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (borogove::Hash((hx::Object *)data->args.a0, true))->equals(Dynamic((hx::Object *)data->args.a1));
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute equals() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
 HAXE_C_BRIDGE_LINKAGE
 void *borogove_reaction_unicode(const char *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -3248,12 +3428,12 @@ void borogove_chat_get_messages_around(void *a0, void *a1, void (*a2) (void**, s
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_send_message(void *a0, void *a1) {
+void borogove_chat_send_message(void *a0, void *a1, enum borogove_outgoing_e_2_ee_preference a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->sendMessage__fromC(Dynamic((hx::Object *)a1));
+		return (borogove::Chat((hx::Object *)a0, true))->sendMessage(Dynamic((hx::Object *)a1), a2);
 	}
 	struct Data {
-		struct {void * a0; void * a1;} args;
+		struct {void * a0; void * a1; enum borogove_outgoing_e_2_ee_preference a2;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -3261,7 +3441,7 @@ void borogove_chat_send_message(void *a0, void *a1) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->sendMessage__fromC(Dynamic((hx::Object *)data->args.a1));
+				(borogove::Chat((hx::Object *)data->args.a0, true))->sendMessage(Dynamic((hx::Object *)data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3274,9 +3454,9 @@ void borogove_chat_send_message(void *a0, void *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute sendMessage__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute sendMessage() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
@@ -4147,6 +4327,42 @@ const char *borogove_chat_get_placeholder(void *a0) {
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+bool borogove_chat_has_ever_read(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Chat((hx::Object *)a0, true))->hasEverRead();
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		bool ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->hasEverRead();
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute hasEverRead() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
 HAXE_C_BRIDGE_LINKAGE
 void borogove_chat_read_up_to(void *a0, void (*a1) (void*, void *handler__context), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -4359,6 +4575,40 @@ size_t borogove_chat_get_tags(void *a0, const char ***a1) {
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+void borogove_chat_set_tags(void *a0, const char *const *a1, size_t a2) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Chat((hx::Object *)a0, true))->setTags__fromC(a1, a2);
+	}
+	struct Data {
+		struct {void * a0; const char* const* a1; size_t a2;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::Chat((hx::Object *)data->args.a0, true))->setTags__fromC(data->args.a1, data->args.a2);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2} };
+
+	// queue a callback to execute setTags__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
 HAXE_C_BRIDGE_LINKAGE
 void borogove_chat_set_trusted(void *a0, bool a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -4750,21 +5000,21 @@ size_t borogove_chat_video_tracks(void *a0, void ***a1) {
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_encryption_mode(void *a0) {
+bool borogove_chat_can_send(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->encryptionMode());
+		return (borogove::Chat((hx::Object *)a0, true))->canSend();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->encryptionMode());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canSend();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4779,16 +5029,16 @@ const char *borogove_chat_encryption_mode(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute encryptionMode() on the main thread and wait until execution completes
+	// queue a callback to execute canSend() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_can_send(void *a0) {
+bool borogove_chat_can_moderate(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->canSend();
+		return (borogove::Chat((hx::Object *)a0, true))->canModerate();
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -4800,7 +5050,7 @@ bool borogove_chat_can_send(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canSend();
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canModerate();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4815,63 +5065,27 @@ bool borogove_chat_can_send(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute canSend() on the main thread and wait until execution completes
+	// queue a callback to execute canModerate() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_can_moderate(void *a0) {
+void borogove_chat_invite(void *a0, void *a1, const char *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->canModerate();
+		return (borogove::Chat((hx::Object *)a0, true))->invite(Dynamic((hx::Object *)a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void * a1; const char * a2;} args;
 		HxSemaphore lock;
-		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canModerate();
-				data->lock.Set();
-			} catch(Dynamic runtimeException) {
-				data->lock.Set();
-				throw runtimeException;
-			}
-		}
-	};
-
-	#ifdef HXCPP_DEBUG
-	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
-	#endif
-
-	Data data = { {a0} };
-
-	// queue a callback to execute canModerate() on the main thread and wait until execution completes
-	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
-	data.lock.Wait();
-	return data.ret;
-}
-
-HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_invite(void *a0, void *a1, const char *a2) {
-	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->invite(Dynamic((hx::Object *)a1), a2);
-	}
-	struct Data {
-		struct {void * a0; void * a1; const char * a2;} args;
-		HxSemaphore lock;
-	};
-	struct Callback {
-		static void run(void* p) {
-			// executed within the haxe main thread
-			Data* data = (Data*) p;
-			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->invite(Dynamic((hx::Object *)data->args.a1), data->args.a2);
+				(borogove::Chat((hx::Object *)data->args.a0, true))->invite(Dynamic((hx::Object *)data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5067,6 +5281,42 @@ void borogove_chat_invited_by(void *a0, void (*a1) (void*, void *handler__contex
 	data.lock.Wait();
 }
 
+HAXE_C_BRIDGE_LINKAGE
+void *borogove_member_moderated() {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeObject(borogove::Member_obj::MODERATED__fromC());
+	}
+	struct Data {
+		struct {} args;
+		HxSemaphore lock;
+		void * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::Member_obj::MODERATED__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {} };
+
+	// queue a callback to execute MODERATED__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
 HAXE_C_BRIDGE_LINKAGE
 const char *borogove_member_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -8094,12 +8344,12 @@ void borogove_persistence_get_messages_around(void *a0, const char *a1, void *a2
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_persistence_has_media(void *a0, const char *a1, const unsigned char *a2, size_t a3, void (*a4) (bool, void *handler__context), void *a5) {
+void borogove_persistence_has_media(void *a0, void *a1, void (*a2) (const char*, void *handler__context), void *a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return borogove::Persistence__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, cpp::Function<void(bool, void * handler__context)>(a4), a5);
+		return borogove::Persistence__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)a0), Dynamic((hx::Object *)a1), cpp::Function<void(const char*, void * handler__context)>(a2), a3);
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const unsigned char* a2; size_t a3; void (* a4) (bool, void * handler__context); void* a5;} args;
+		struct {void * a0; void * a1; void (* a2) (const char*, void * handler__context); void* a3;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -8107,7 +8357,7 @@ void borogove_persistence_has_media(void *a0, const char *a1, const unsigned cha
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				borogove::Persistence__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, cpp::Function<void(bool, void * handler__context)>(data->args.a4), data->args.a5);
+				borogove::Persistence__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)data->args.a0), Dynamic((hx::Object *)data->args.a1), cpp::Function<void(const char*, void * handler__context)>(data->args.a2), data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8120,7 +8370,7 @@ void borogove_persistence_has_media(void *a0, const char *a1, const unsigned cha
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4, a5} };
+	Data data = { {a0, a1, a2, a3} };
 
 	// queue a callback to execute hasMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
@@ -8128,12 +8378,12 @@ void borogove_persistence_has_media(void *a0, const char *a1, const unsigned cha
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_persistence_store_media(void *a0, const char *a1, const unsigned char *a2, size_t a3, void (*a4) (bool, void *handler__context), void *a5) {
+void borogove_persistence_store_media(void *a0, const char *a1, void *a2, void (*a3) (const char*, void *handler__context), void *a4) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return borogove::Persistence__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, cpp::Function<void(bool, void * handler__context)>(a4), a5);
+		return borogove::Persistence__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)a0), a1, Dynamic((hx::Object *)a2), cpp::Function<void(const char*, void * handler__context)>(a3), a4);
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const unsigned char* a2; size_t a3; void (* a4) (bool, void * handler__context); void* a5;} args;
+		struct {void * a0; const char * a1; void * a2; void (* a3) (const char*, void * handler__context); void* a4;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -8141,7 +8391,7 @@ void borogove_persistence_store_media(void *a0, const char *a1, const unsigned c
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				borogove::Persistence__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, cpp::Function<void(bool, void * handler__context)>(data->args.a4), data->args.a5);
+				borogove::Persistence__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, Dynamic((hx::Object *)data->args.a2), cpp::Function<void(const char*, void * handler__context)>(data->args.a3), data->args.a4);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8154,7 +8404,7 @@ void borogove_persistence_store_media(void *a0, const char *a1, const unsigned c
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4, a5} };
+	Data data = { {a0, a1, a2, a3, a4} };
 
 	// queue a callback to execute storeMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
@@ -8196,12 +8446,12 @@ void borogove_persistence_remove_media(void *a0, const char *a1, const unsigned
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_persistence_store_login(void *a0, const char *a1, const char *a2, const char *a3, const char *a4, void (*a5) (bool, void *handler__context), void *a6) {
+void borogove_persistence_store_login(void *a0, const char *a1, const char *a2, const char *a3, const char *a4, const char *a5, void (*a6) (bool, void *handler__context), void *a7) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return borogove::Persistence__Companion_obj::storeLogin__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, a4, cpp::Function<void(bool, void * handler__context)>(a5), a6);
+		return borogove::Persistence__Companion_obj::storeLogin__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, a4, a5, cpp::Function<void(bool, void * handler__context)>(a6), a7);
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const char * a2; const char * a3; const char * a4; void (* a5) (bool, void * handler__context); void* a6;} args;
+		struct {void * a0; const char * a1; const char * a2; const char * a3; const char * a4; const char * a5; void (* a6) (bool, void * handler__context); void* a7;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -8209,7 +8459,7 @@ void borogove_persistence_store_login(void *a0, const char *a1, const char *a2,
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				borogove::Persistence__Companion_obj::storeLogin__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, data->args.a4, cpp::Function<void(bool, void * handler__context)>(data->args.a5), data->args.a6);
+				borogove::Persistence__Companion_obj::storeLogin__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, data->args.a4, data->args.a5, cpp::Function<void(bool, void * handler__context)>(data->args.a6), data->args.a7);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8222,7 +8472,7 @@ void borogove_persistence_store_login(void *a0, const char *a1, const char *a2,
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4, a5, a6} };
+	Data data = { {a0, a1, a2, a3, a4, a5, a6, a7} };
 
 	// queue a callback to execute storeLogin__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
@@ -8473,6 +8723,42 @@ void *borogove_chat_message_builder_new() {
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+void *borogove_chat_message_builder_from_message(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeObject(borogove::ChatMessageBuilder_obj::fromMessage(Dynamic((hx::Object *)a0)));
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		void * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::ChatMessageBuilder_obj::fromMessage(Dynamic((hx::Object *)data->args.a0)));
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute fromMessage() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
 HAXE_C_BRIDGE_LINKAGE
 const char *borogove_chat_message_builder_local_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -8754,9 +9040,9 @@ void borogove_chat_message_builder_set_type(void *a0, enum borogove_message_type
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_timestamp(void *a0) {
+const char *borogove_chat_message_builder_time_sent(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->timestamp__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->timeSent__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -8768,7 +9054,7 @@ const char *borogove_chat_message_builder_timestamp(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->timestamp__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->timeSent__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8783,16 +9069,86 @@ const char *borogove_chat_message_builder_timestamp(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute timestamp__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute timeSent__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_chat_message_builder_set_time_sent(void *a0, const char *a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_timeSent__fromC(a1);
+	}
+	struct Data {
+		struct {void * a0; const char * a1;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_timeSent__fromC(data->args.a1);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute set_timeSent__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *borogove_chat_message_builder_time_received(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->timeReceived__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->timeReceived__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute timeReceived__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_timestamp(void *a0, const char *a1) {
+void borogove_chat_message_builder_set_time_received(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_timestamp__fromC(a1);
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_timeReceived__fromC(a1);
 	}
 	struct Data {
 		struct {void * a0; const char * a1;} args;
@@ -8803,7 +9159,7 @@ void borogove_chat_message_builder_set_timestamp(void *a0, const char *a1) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_timestamp__fromC(data->args.a1);
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_timeReceived__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8818,7 +9174,7 @@ void borogove_chat_message_builder_set_timestamp(void *a0, const char *a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute set_timestamp__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set_timeReceived__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
@@ -10343,6 +10699,76 @@ void borogove_client_set_send_available(void *a0, bool a1) {
 	data.lock.Wait();
 }
 
+HAXE_C_BRIDGE_LINKAGE
+bool borogove_client_block_incoming_without_e_2_ee(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Client((hx::Object *)a0, true))->blockIncomingWithoutE2EE__fromC();
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		bool ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->blockIncomingWithoutE2EE__fromC();
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute blockIncomingWithoutE2EE__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_client_set_block_incoming_without_e_2_ee(void *a0, bool a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Client((hx::Object *)a0, true))->set_blockIncomingWithoutE2EE__fromC(a1);
+	}
+	struct Data {
+		struct {void * a0; bool a1;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::Client((hx::Object *)data->args.a0, true))->set_blockIncomingWithoutE2EE__fromC(data->args.a1);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute set_blockIncomingWithoutE2EE__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
 HAXE_C_BRIDGE_LINKAGE
 void borogove_client_start(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -10552,9 +10978,9 @@ const char *borogove_client_display_name(void *a0) {
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_set_profile(void *a0, void *a1, bool a2) {
+void borogove_client_set_photo(void *a0, void *a1, bool a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->setProfile(Dynamic((hx::Object *)a1), a2);
+		return (borogove::Client((hx::Object *)a0, true))->setPhoto(Dynamic((hx::Object *)a1), a2);
 	}
 	struct Data {
 		struct {void * a0; void * a1; bool a2;} args;
@@ -10565,7 +10991,7 @@ void borogove_client_set_profile(void *a0, void *a1, bool a2) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->setProfile(Dynamic((hx::Object *)data->args.a1), data->args.a2);
+				(borogove::Client((hx::Object *)data->args.a0, true))->setPhoto(Dynamic((hx::Object *)data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -10580,18 +11006,18 @@ void borogove_client_set_profile(void *a0, void *a1, bool a2) {
 
 	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute setProfile() on the main thread and wait until execution completes
+	// queue a callback to execute setPhoto() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_set_status(void *a0, void *a1, int a2, bool a3) {
+void borogove_client_set_profile(void *a0, void *a1, bool a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->setStatus(Dynamic((hx::Object *)a1), a2, a3);
+		return (borogove::Client((hx::Object *)a0, true))->setProfile(Dynamic((hx::Object *)a1), a2);
 	}
 	struct Data {
-		struct {void * a0; void * a1; int a2; bool a3;} args;
+		struct {void * a0; void * a1; bool a2;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -10599,7 +11025,7 @@ void borogove_client_set_status(void *a0, void *a1, int a2, bool a3) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->setStatus(Dynamic((hx::Object *)data->args.a1), data->args.a2, data->args.a3);
+				(borogove::Client((hx::Object *)data->args.a0, true))->setProfile(Dynamic((hx::Object *)data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -10612,20 +11038,20 @@ void borogove_client_set_status(void *a0, void *a1, int a2, bool a3) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute setStatus() on the main thread and wait until execution completes
+	// queue a callback to execute setProfile() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_prepare_attachment(void *a0, void *a1, void (*a2) (void*, void *handler__context), void *a3) {
+void borogove_client_set_status(void *a0, void *a1, int a2, bool a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->prepareAttachment__fromC(Dynamic((hx::Object *)a1), cpp::Function<void(void*, void * handler__context)>(a2), a3);
+		return (borogove::Client((hx::Object *)a0, true))->setStatus(Dynamic((hx::Object *)a1), a2, a3);
 	}
 	struct Data {
-		struct {void * a0; void * a1; void (* a2) (void*, void * handler__context); void* a3;} args;
+		struct {void * a0; void * a1; int a2; bool a3;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -10633,7 +11059,7 @@ void borogove_client_prepare_attachment(void *a0, void *a1, void (*a2) (void*, v
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->prepareAttachment__fromC(Dynamic((hx::Object *)data->args.a1), cpp::Function<void(void*, void * handler__context)>(data->args.a2), data->args.a3);
+				(borogove::Client((hx::Object *)data->args.a0, true))->setStatus(Dynamic((hx::Object *)data->args.a1), data->args.a2, data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -10648,15 +11074,117 @@ void borogove_client_prepare_attachment(void *a0, void *a1, void (*a2) (void*, v
 
 	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute prepareAttachment__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute setStatus() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_client_get_chats(void *a0, void ***a1) {
+void borogove_client_prefer_e_2_ee(void *a0, enum borogove_outgoing_e_2_ee_preference a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->getChats__fromC(a1);
+		return (borogove::Client((hx::Object *)a0, true))->preferE2ee(a1);
+	}
+	struct Data {
+		struct {void * a0; enum borogove_outgoing_e_2_ee_preference a1;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::Client((hx::Object *)data->args.a0, true))->preferE2ee(data->args.a1);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute preferE2ee() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_client_ban_e_2_ee(void *a0, enum borogove_outgoing_e_2_ee_preference a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Client((hx::Object *)a0, true))->banE2ee(a1);
+	}
+	struct Data {
+		struct {void * a0; enum borogove_outgoing_e_2_ee_preference a1;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::Client((hx::Object *)data->args.a0, true))->banE2ee(data->args.a1);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute banE2ee() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_client_prepare_attachment(void *a0, void *a1, bool a2, void (*a3) (void*, void *handler__context), void *a4) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Client((hx::Object *)a0, true))->prepareAttachment__fromC(Dynamic((hx::Object *)a1), a2, cpp::Function<void(void*, void * handler__context)>(a3), a4);
+	}
+	struct Data {
+		struct {void * a0; void * a1; bool a2; void (* a3) (void*, void * handler__context); void* a4;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::Client((hx::Object *)data->args.a0, true))->prepareAttachment__fromC(Dynamic((hx::Object *)data->args.a1), data->args.a2, cpp::Function<void(void*, void * handler__context)>(data->args.a3), data->args.a4);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2, a3, a4} };
+
+	// queue a callback to execute prepareAttachment__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+size_t borogove_client_get_chats(void *a0, void ***a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Client((hx::Object *)a0, true))->getChats__fromC(a1);
 	}
 	struct Data {
 		struct {void * a0; void*** a1;} args;
@@ -12425,6 +12953,76 @@ const char *borogove_channel_subject(void *a0) {
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+bool borogove_channel_can_set_subject(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Channel((hx::Object *)a0, true))->canSetSubject();
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		bool ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (borogove::Channel((hx::Object *)data->args.a0, true))->canSetSubject();
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute canSetSubject() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_channel_set_subject(void *a0, const char *a1, const char *a2) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Channel((hx::Object *)a0, true))->setSubject(a1, a2);
+	}
+	struct Data {
+		struct {void * a0; const char * a1; const char * a2;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::Channel((hx::Object *)data->args.a0, true))->setSubject(data->args.a1, data->args.a2);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2} };
+
+	// queue a callback to execute setSubject() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
 HAXE_C_BRIDGE_LINKAGE
 const char *borogove_channel_description(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -12461,6 +13059,110 @@ const char *borogove_channel_description(void *a0) {
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+void borogove_channel_request_to_send(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Channel((hx::Object *)a0, true))->requestToSend();
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::Channel((hx::Object *)data->args.a0, true))->requestToSend();
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute requestToSend() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+bool borogove_channel_can_set_photo(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Channel((hx::Object *)a0, true))->canSetPhoto();
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		bool ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (borogove::Channel((hx::Object *)data->args.a0, true))->canSetPhoto();
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute canSetPhoto() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_channel_set_photo(void *a0, void *a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Channel((hx::Object *)a0, true))->setPhoto(Dynamic((hx::Object *)a1));
+	}
+	struct Data {
+		struct {void * a0; void * a1;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::Channel((hx::Object *)data->args.a0, true))->setPhoto(Dynamic((hx::Object *)data->args.a1));
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute setPhoto() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
 HAXE_C_BRIDGE_LINKAGE
 bool borogove_channel_is_private(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -12497,6 +13199,74 @@ bool borogove_channel_is_private(void *a0) {
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+void borogove_channel_voice_requests(void *a0, void (*a1) (void**, size_t, void *handler__context), void *a2) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Channel((hx::Object *)a0, true))->voiceRequests__fromC(cpp::Function<void(void**, size_t, void * handler__context)>(a1), a2);
+	}
+	struct Data {
+		struct {void * a0; void (* a1) (void**, size_t, void * handler__context); void* a2;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::Channel((hx::Object *)data->args.a0, true))->voiceRequests__fromC(cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a1), data->args.a2);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2} };
+
+	// queue a callback to execute voiceRequests__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_channel_voice_request_respond(void *a0, void *a1, bool a2) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Channel((hx::Object *)a0, true))->voiceRequestRespond(Dynamic((hx::Object *)a1), a2);
+	}
+	struct Data {
+		struct {void * a0; void * a1; bool a2;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(borogove::Channel((hx::Object *)data->args.a0, true))->voiceRequestRespond(Dynamic((hx::Object *)data->args.a1), data->args.a2);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2} };
+
+	// queue a callback to execute voiceRequestRespond() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
 HAXE_C_BRIDGE_LINKAGE
 void borogove_calls_dtmf_sender_insert_dtmf(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
diff --git a/Sources/c_borogove/src/__boot__.cpp b/Sources/c_borogove/src/__boot__.cpp
index 10d5b02..e5ade17 100644
--- a/Sources/c_borogove/src/__boot__.cpp
+++ b/Sources/c_borogove/src/__boot__.cpp
@@ -130,12 +130,12 @@
 #ifndef INCLUDED_htmlparser_HtmlParser
 #include <htmlparser/HtmlParser.h>
 #endif
-#ifndef INCLUDED_hsluv_Hsluv
-#include <hsluv/Hsluv.h>
-#endif
 #ifndef INCLUDED_haxe_crypto_random_SecureRandom
 #include <haxe/crypto/random/SecureRandom.h>
 #endif
+#ifndef INCLUDED_haxe_crypto_mode_GCMSIV
+#include <haxe/crypto/mode/GCMSIV.h>
+#endif
 #ifndef INCLUDED_haxe_crypto_Base64
 #include <haxe/crypto/Base64.h>
 #endif
@@ -223,6 +223,9 @@
 #ifndef INCLUDED_borogove_Member
 #include <borogove/Member.h>
 #endif
+#ifndef INCLUDED_hsluv_Hsluv
+#include <hsluv/Hsluv.h>
+#endif
 #ifndef INCLUDED_borogove_Html
 #include <borogove/Html.h>
 #endif
@@ -319,6 +322,12 @@
 #ifndef INCLUDED__HaxeCBridge_Internal
 #include <_HaxeCBridge/Internal.h>
 #endif
+#ifndef INCLUDED_tink_url__Query_QueryStringParser
+#include <tink/url/_Query/QueryStringParser.h>
+#endif
+#ifndef INCLUDED_tink_url__Portion_Portion_Impl_
+#include <tink/url/_Portion/Portion_Impl_.h>
+#endif
 #ifndef INCLUDED_tink_url__Path_Path_Impl_
 #include <tink/url/_Path/Path_Impl_.h>
 #endif
@@ -340,6 +349,9 @@
 #ifndef INCLUDED_tink_streams_IdealizeStream
 #include <tink/streams/IdealizeStream.h>
 #endif
+#ifndef INCLUDED_tink_streams__Stream_Mapping_Impl_
+#include <tink/streams/_Stream/Mapping_Impl_.h>
+#endif
 #ifndef INCLUDED_tink_streams__Stream_ErrorStream
 #include <tink/streams/_Stream/ErrorStream.h>
 #endif
@@ -460,6 +472,9 @@
 #ifndef INCLUDED_tink_http_Header
 #include <tink/http/Header.h>
 #endif
+#ifndef INCLUDED_tink_http_ContentType
+#include <tink/http/ContentType.h>
+#endif
 #ifndef INCLUDED_tink_http_HandlerObject
 #include <tink/http/HandlerObject.h>
 #endif
@@ -484,6 +499,9 @@
 #ifndef INCLUDED_tink_core_MPair
 #include <tink/core/MPair.h>
 #endif
+#ifndef INCLUDED_tink_core_OutcomeTools
+#include <tink/core/OutcomeTools.h>
+#endif
 #ifndef INCLUDED_tink_core_NamedWith
 #include <tink/core/NamedWith.h>
 #endif
@@ -754,17 +772,71 @@
 #ifndef INCLUDED_haxe_ds_BalancedTree
 #include <haxe/ds/BalancedTree.h>
 #endif
+#ifndef INCLUDED_haxe_crypto_padding_TBC
+#include <haxe/crypto/padding/TBC.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_SpacePadding
+#include <haxe/crypto/padding/SpacePadding.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_PKCS7
+#include <haxe/crypto/padding/PKCS7.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_NullPadding
+#include <haxe/crypto/padding/NullPadding.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_NoPadding
+#include <haxe/crypto/padding/NoPadding.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_ISO10126
+#include <haxe/crypto/padding/ISO10126.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_BitPadding
+#include <haxe/crypto/padding/BitPadding.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_AnsiX923
+#include <haxe/crypto/padding/AnsiX923.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_SIV
+#include <haxe/crypto/mode/SIV.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_PCBC
+#include <haxe/crypto/mode/PCBC.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_OFB
+#include <haxe/crypto/mode/OFB.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_GCM
+#include <haxe/crypto/mode/GCM.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_ECB
+#include <haxe/crypto/mode/ECB.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_EAX
+#include <haxe/crypto/mode/EAX.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CTR
+#include <haxe/crypto/mode/CTR.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CMAC
+#include <haxe/crypto/mode/CMAC.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CFB
+#include <haxe/crypto/mode/CFB.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CCM
+#include <haxe/crypto/mode/CCM.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CBC
+#include <haxe/crypto/mode/CBC.h>
+#endif
 #ifndef INCLUDED_haxe_crypto_Sha256
 #include <haxe/crypto/Sha256.h>
 #endif
-#ifndef INCLUDED_haxe_crypto_Sha1
-#include <haxe/crypto/Sha1.h>
-#endif
 #ifndef INCLUDED_haxe_crypto_BaseCode
 #include <haxe/crypto/BaseCode.h>
 #endif
-#ifndef INCLUDED_haxe_io_Bytes
-#include <haxe/io/Bytes.h>
+#ifndef INCLUDED_haxe_crypto_Aes
+#include <haxe/crypto/Aes.h>
 #endif
 #ifndef INCLUDED_haxe_ValueException
 #include <haxe/ValueException.h>
@@ -787,9 +859,6 @@
 #ifndef INCLUDED_haxe__Int64_Int64_Impl_
 #include <haxe/_Int64/Int64_Impl_.h>
 #endif
-#ifndef INCLUDED_haxe_Exception
-#include <haxe/Exception.h>
-#endif
 #ifndef INCLUDED_haxe_EntryPoint
 #include <haxe/EntryPoint.h>
 #endif
@@ -820,6 +889,9 @@
 #ifndef INCLUDED_datetime__DateTime_DateTime_Impl_
 #include <datetime/_DateTime/DateTime_Impl_.h>
 #endif
+#ifndef INCLUDED_cpp_vm_WeakRef
+#include <cpp/vm/WeakRef.h>
+#endif
 #ifndef INCLUDED_cpp__NativeString_NativeString_Impl_
 #include <cpp/_NativeString/NativeString_Impl_.h>
 #endif
@@ -850,6 +922,12 @@
 #ifndef INCLUDED_borogove_queries_PubsubGet
 #include <borogove/queries/PubsubGet.h>
 #endif
+#ifndef INCLUDED_borogove_queries_MucSettingsSubmit
+#include <borogove/queries/MucSettingsSubmit.h>
+#endif
+#ifndef INCLUDED_borogove_queries_MucSettingsGet
+#include <borogove/queries/MucSettingsGet.h>
+#endif
 #ifndef INCLUDED_borogove_queries_MAMQuery
 #include <borogove/queries/MAMQuery.h>
 #endif
@@ -910,6 +988,9 @@
 #ifndef INCLUDED_borogove_calls_Group
 #include <borogove/calls/Group.h>
 #endif
+#ifndef INCLUDED_borogove__XEP0454_XEP0454_Fields_
+#include <borogove/_XEP0454/XEP0454_Fields_.h>
+#endif
 #ifndef INCLUDED_borogove_XEP0393
 #include <borogove/XEP0393.h>
 #endif
@@ -925,6 +1006,12 @@
 #ifndef INCLUDED_borogove_StanzaError
 #include <borogove/StanzaError.h>
 #endif
+#ifndef INCLUDED_borogove__Source_Source_Impl_
+#include <borogove/_Source/Source_Impl_.h>
+#endif
+#ifndef INCLUDED_borogove_Sha1
+#include <borogove/Sha1.h>
+#endif
 #ifndef INCLUDED_borogove_ReactionUpdate
 #include <borogove/ReactionUpdate.h>
 #endif
@@ -946,6 +1033,12 @@
 #ifndef INCLUDED_borogove_Outbox
 #include <borogove/Outbox.h>
 #endif
+#ifndef INCLUDED_borogove_MucSettingsCommandSession
+#include <borogove/MucSettingsCommandSession.h>
+#endif
+#ifndef INCLUDED_borogove_MucSettingsCommand
+#include <borogove/MucSettingsCommand.h>
+#endif
 #ifndef INCLUDED_borogove_ModerationAction
 #include <borogove/ModerationAction.h>
 #endif
@@ -958,6 +1051,12 @@
 #ifndef INCLUDED_borogove_MemberUpdate
 #include <borogove/MemberUpdate.h>
 #endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_Sha1
+#include <haxe/crypto/Sha1.h>
+#endif
 #ifndef INCLUDED_borogove_JsonPrinter
 #include <borogove/JsonPrinter.h>
 #endif
@@ -967,6 +1066,9 @@
 #ifndef INCLUDED_borogove_Identicon
 #include <borogove/Identicon.h>
 #endif
+#ifndef INCLUDED_borogove_IncrementalHash
+#include <borogove/IncrementalHash.h>
+#endif
 #ifndef INCLUDED_borogove_GenericStream
 #include <borogove/GenericStream.h>
 #endif
@@ -976,9 +1078,6 @@
 #ifndef INCLUDED_borogove_FormSubmitBuilder
 #include <borogove/FormSubmitBuilder.h>
 #endif
-#ifndef INCLUDED_borogove_EncryptionPolicy
-#include <borogove/EncryptionPolicy.h>
-#endif
 #ifndef INCLUDED_borogove_Builder
 #include <borogove/Builder.h>
 #endif
@@ -1006,9 +1105,15 @@
 #ifndef INCLUDED_borogove_Date
 #include <borogove/Date.h>
 #endif
+#ifndef INCLUDED_borogove_ChatMessageCombiner
+#include <borogove/ChatMessageCombiner.h>
+#endif
 #ifndef INCLUDED_borogove_SerializedChat
 #include <borogove/SerializedChat.h>
 #endif
+#ifndef INCLUDED_borogove_ChannelPinger
+#include <borogove/ChannelPinger.h>
+#endif
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
@@ -1024,6 +1129,12 @@
 #ifndef INCLUDED_borogove_Caps
 #include <borogove/Caps.h>
 #endif
+#ifndef INCLUDED_borogove_AttachmentUploadError
+#include <borogove/AttachmentUploadError.h>
+#endif
+#ifndef INCLUDED_haxe_Exception
+#include <haxe/Exception.h>
+#endif
 #ifndef INCLUDED_borogove_AsyncLock
 #include <borogove/AsyncLock.h>
 #endif
@@ -1125,8 +1236,8 @@ __files__boot();
 ::sys::net::Host_obj::__register();
 ::sys::Http_obj::__register();
 ::htmlparser::HtmlParser_obj::__register();
-::hsluv::Hsluv_obj::__register();
 ::haxe::crypto::random::SecureRandom_obj::__register();
+::haxe::crypto::mode::GCMSIV_obj::__register();
 ::haxe::crypto::Base64_obj::__register();
 ::sys::thread::_Thread::HaxeThread_obj::__register();
 ::borogove::persistence::Sqlite_obj::__register();
@@ -1156,6 +1267,7 @@ __files__boot();
 ::borogove::Persistence_obj::__register();
 ::borogove::Notification_obj::__register();
 ::borogove::Member_obj::__register();
+::hsluv::Hsluv_obj::__register();
 ::borogove::Html_obj::__register();
 ::borogove::FormSection__Companion_obj::__register();
 ::borogove::Form_obj::__register();
@@ -1188,6 +1300,8 @@ __files__boot();
 ::borogove::AttachmentSource_obj::__register();
 ::Xml_obj::__register();
 ::_HaxeCBridge::Internal_obj::__register();
+::tink::url::_Query::QueryStringParser_obj::__register();
+::tink::url::_Portion::Portion_Impl__obj::__register();
 ::tink::url::_Path::Path_Impl__obj::__register();
 ::tink::url::_Host::Host_Impl__obj::__register();
 ::tink::streams::FutureStream_obj::__register();
@@ -1195,6 +1309,7 @@ __files__boot();
 ::tink::streams::_Stream::Handler_Impl__obj::__register();
 ::tink::streams::Single_obj::__register();
 ::tink::streams::IdealizeStream_obj::__register();
+::tink::streams::_Stream::Mapping_Impl__obj::__register();
 ::tink::streams::_Stream::ErrorStream_obj::__register();
 ::tink::streams::_Stream::RegroupStream_obj::__register();
 ::tink::streams::_Stream::CompoundStream_obj::__register();
@@ -1235,6 +1350,7 @@ __files__boot();
 ::tink::http::HeaderField_obj::__register();
 ::tink::http::_Header::HeaderValue_Impl__obj::__register();
 ::tink::http::Header_obj::__register();
+::tink::http::ContentType_obj::__register();
 ::tink::http::HandlerObject_obj::__register();
 ::tink::http::_Fetch::FetchResponse_Impl__obj::__register();
 ::tink::http::Container_obj::__register();
@@ -1243,6 +1359,7 @@ __files__boot();
 ::tink::io::StreamParserObject_obj::__register();
 ::tink::core::_Promise::Promise_Impl__obj::__register();
 ::tink::core::MPair_obj::__register();
+::tink::core::OutcomeTools_obj::__register();
 ::tink::core::NamedWith_obj::__register();
 ::tink::core::_Lazy::LazyFunc_obj::__register();
 ::tink::core::_Lazy::Lazy_Impl__obj::__register();
@@ -1333,10 +1450,28 @@ __files__boot();
 ::haxe::ds::EnumValueMap_obj::__register();
 ::haxe::ds::TreeNode_obj::__register();
 ::haxe::ds::BalancedTree_obj::__register();
+::haxe::crypto::padding::TBC_obj::__register();
+::haxe::crypto::padding::SpacePadding_obj::__register();
+::haxe::crypto::padding::PKCS7_obj::__register();
+::haxe::crypto::padding::NullPadding_obj::__register();
+::haxe::crypto::padding::NoPadding_obj::__register();
+::haxe::crypto::padding::ISO10126_obj::__register();
+::haxe::crypto::padding::BitPadding_obj::__register();
+::haxe::crypto::padding::AnsiX923_obj::__register();
+::haxe::crypto::mode::SIV_obj::__register();
+::haxe::crypto::mode::PCBC_obj::__register();
+::haxe::crypto::mode::OFB_obj::__register();
+::haxe::crypto::mode::GCM_obj::__register();
+::haxe::crypto::mode::ECB_obj::__register();
+::haxe::crypto::mode::EAX_obj::__register();
+::haxe::crypto::mode::CTR_obj::__register();
+::haxe::crypto::mode::CMAC_obj::__register();
+::haxe::crypto::mode::CFB_obj::__register();
+::haxe::crypto::mode::CCM_obj::__register();
+::haxe::crypto::mode::CBC_obj::__register();
 ::haxe::crypto::Sha256_obj::__register();
-::haxe::crypto::Sha1_obj::__register();
 ::haxe::crypto::BaseCode_obj::__register();
-::haxe::io::Bytes_obj::__register();
+::haxe::crypto::Aes_obj::__register();
 ::haxe::ValueException_obj::__register();
 ::haxe::Timer_obj::__register();
 ::haxe::NativeStackTrace_obj::__register();
@@ -1344,7 +1479,6 @@ __files__boot();
 ::haxe::MainEvent_obj::__register();
 ::haxe::Int64Helper_obj::__register();
 ::haxe::_Int64::Int64_Impl__obj::__register();
-::haxe::Exception_obj::__register();
 ::haxe::EntryPoint_obj::__register();
 ::sys::thread::EventLoop_obj::__register();
 ::sys::thread::Mutex_obj::__register();
@@ -1355,6 +1489,7 @@ __files__boot();
 ::datetime::cores::DateTimeIntervalCore_obj::__register();
 ::datetime::_DateTimeInterval::DateTimeInterval_Impl__obj::__register();
 ::datetime::_DateTime::DateTime_Impl__obj::__register();
+::cpp::vm::WeakRef_obj::__register();
 ::cpp::_NativeString::NativeString_Impl__obj::__register();
 ::cpp::Lib_obj::__register();
 ::cpp::Int64Map_obj::__register();
@@ -1365,6 +1500,8 @@ __files__boot();
 ::borogove::queries::Push2Enable_obj::__register();
 ::borogove::queries::Push2Disable_obj::__register();
 ::borogove::queries::PubsubGet_obj::__register();
+::borogove::queries::MucSettingsSubmit_obj::__register();
+::borogove::queries::MucSettingsGet_obj::__register();
 ::borogove::queries::MAMQuery_obj::__register();
 ::borogove::queries::JabberIqGatewayGet_obj::__register();
 ::borogove::queries::HttpUploadSlot_obj::__register();
@@ -1385,11 +1522,14 @@ __files__boot();
 ::borogove::calls::OutgoingSession_obj::__register();
 ::borogove::calls::PeerConnection_obj::__register();
 ::borogove::calls::Group_obj::__register();
+::borogove::_XEP0454::XEP0454_Fields__obj::__register();
 ::borogove::XEP0393_obj::__register();
 ::borogove::_Util::Util_Fields__obj::__register();
 ::borogove::Util_obj::__register();
 ::borogove::StringUtil_obj::__register();
 ::borogove::StanzaError_obj::__register();
+::borogove::_Source::Source_Impl__obj::__register();
+::borogove::Sha1_obj::__register();
 ::borogove::ReactionUpdate_obj::__register();
 ::borogove::Push_obj::__register();
 ::borogove::PubsubEvent_obj::__register();
@@ -1397,17 +1537,21 @@ __files__boot();
 ::borogove::_Presence::Presence_Impl__obj::__register();
 ::borogove::OutboxItem_obj::__register();
 ::borogove::Outbox_obj::__register();
+::borogove::MucSettingsCommandSession_obj::__register();
+::borogove::MucSettingsCommand_obj::__register();
 ::borogove::ModerationAction_obj::__register();
 ::borogove::MessageSync_obj::__register();
 ::borogove::Message_obj::__register();
 ::borogove::MemberUpdate_obj::__register();
+::haxe::io::Bytes_obj::__register();
+::haxe::crypto::Sha1_obj::__register();
 ::borogove::JsonPrinter_obj::__register();
 ::borogove::JID_obj::__register();
 ::borogove::Identicon_obj::__register();
+::borogove::IncrementalHash_obj::__register();
 ::borogove::GenericStream_obj::__register();
 ::borogove::FormLayoutSection_obj::__register();
 ::borogove::FormSubmitBuilder_obj::__register();
-::borogove::EncryptionPolicy_obj::__register();
 ::borogove::Builder_obj::__register();
 ::borogove::Other_obj::__register();
 ::borogove::Emoji_obj::__register();
@@ -1417,12 +1561,16 @@ __files__boot();
 ::borogove::UnicodeRange_obj::__register();
 ::borogove::UnicodeSet_obj::__register();
 ::borogove::Date_obj::__register();
+::borogove::ChatMessageCombiner_obj::__register();
 ::borogove::SerializedChat_obj::__register();
+::borogove::ChannelPinger_obj::__register();
 ::borogove::Stanza_obj::__register();
 ::borogove::_DataForm::Field_Impl__obj::__register();
 ::borogove::_DataForm::DataForm_Impl__obj::__register();
 ::borogove::Identity_obj::__register();
 ::borogove::Caps_obj::__register();
+::borogove::AttachmentUploadError_obj::__register();
+::haxe::Exception_obj::__register();
 ::borogove::AsyncLock_obj::__register();
 ::_Xml::XmlType_Impl__obj::__register();
 ::_UnicodeString::UnicodeString_Impl__obj::__register();
@@ -1504,6 +1652,7 @@ __files__boot();
 ::borogove::Form_obj::__boot();
 ::borogove::FormSection__Companion_obj::__boot();
 ::borogove::Html_obj::__boot();
+::hsluv::Hsluv_obj::__boot();
 ::borogove::Member_obj::__boot();
 ::borogove::Notification_obj::__boot();
 ::borogove::Persistence_obj::__boot();
@@ -1533,8 +1682,8 @@ __files__boot();
 ::borogove::persistence::Sqlite_obj::__boot();
 ::sys::thread::_Thread::HaxeThread_obj::__boot();
 ::haxe::crypto::Base64_obj::__boot();
+::haxe::crypto::mode::GCMSIV_obj::__boot();
 ::haxe::crypto::random::SecureRandom_obj::__boot();
-::hsluv::Hsluv_obj::__boot();
 ::htmlparser::HtmlParser_obj::__boot();
 ::sys::Http_obj::__boot();
 ::sys::net::Host_obj::__boot();
diff --git a/Sources/c_borogove/src/borogove/AttachmentUploadError.cpp b/Sources/c_borogove/src/borogove/AttachmentUploadError.cpp
new file mode 100644
index 0000000..8255689
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/AttachmentUploadError.cpp
@@ -0,0 +1,192 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_borogove_AttachmentUploadError
+#include <borogove/AttachmentUploadError.h>
+#endif
+#ifndef INCLUDED_haxe_Exception
+#include <haxe/Exception.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_2954c614ac6c4af4_18_new,"borogove.AttachmentUploadError","new",0x7e21f829,"borogove.AttachmentUploadError.new","borogove/AttachmentUploadError.hx",18,0x38a93a68)
+namespace borogove{
+
+void AttachmentUploadError_obj::__construct(::String code,::String message,::String serviceId, ::Dynamic statusCode, ::Dynamic cause,::Array< ::Dynamic> failures){
+            	HX_STACKFRAME(&_hx_pos_2954c614ac6c4af4_18_new)
+HXDLIN(  18)		{
+HXLINE(  19)			super::__construct(message,null(),null());
+HXLINE(  20)			this->code = code;
+HXLINE(  21)			this->serviceId = serviceId;
+HXLINE(  22)			this->statusCode = statusCode;
+HXLINE(  23)			this->cause = cause;
+HXLINE(  24)			::Array< ::Dynamic> _hx_tmp;
+HXDLIN(  24)			if (::hx::IsNotNull( failures )) {
+HXLINE(  24)				_hx_tmp = failures;
+            			}
+            			else {
+HXLINE(  24)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(0);
+            			}
+HXDLIN(  24)			this->failures = _hx_tmp;
+            		}
+HXLINE(  18)		{
+HXDLIN(  18)			this->_hx___skipStack++;
+            		}
+            	}
+
+Dynamic AttachmentUploadError_obj::__CreateEmpty() { return new AttachmentUploadError_obj; }
+
+void *AttachmentUploadError_obj::_hx_vtable = 0;
+
+Dynamic AttachmentUploadError_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< AttachmentUploadError_obj > _hx_result = new AttachmentUploadError_obj();
+	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2],inArgs[3],inArgs[4],inArgs[5]);
+	return _hx_result;
+}
+
+bool AttachmentUploadError_obj::_hx_isInstanceOf(int inClassId) {
+	if (inClassId<=(int)0x0936a07b) {
+		return inClassId==(int)0x00000001 || inClassId==(int)0x0936a07b;
+	} else {
+		return inClassId==(int)0x677ddc49;
+	}
+}
+
+
+::hx::ObjectPtr< AttachmentUploadError_obj > AttachmentUploadError_obj::__new(::String code,::String message,::String serviceId, ::Dynamic statusCode, ::Dynamic cause,::Array< ::Dynamic> failures) {
+	::hx::ObjectPtr< AttachmentUploadError_obj > __this = new AttachmentUploadError_obj();
+	__this->__construct(code,message,serviceId,statusCode,cause,failures);
+	return __this;
+}
+
+::hx::ObjectPtr< AttachmentUploadError_obj > AttachmentUploadError_obj::__alloc(::hx::Ctx *_hx_ctx,::String code,::String message,::String serviceId, ::Dynamic statusCode, ::Dynamic cause,::Array< ::Dynamic> failures) {
+	AttachmentUploadError_obj *__this = (AttachmentUploadError_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(AttachmentUploadError_obj), true, "borogove.AttachmentUploadError"));
+	*(void **)__this = AttachmentUploadError_obj::_hx_vtable;
+	__this->__construct(code,message,serviceId,statusCode,cause,failures);
+	return __this;
+}
+
+AttachmentUploadError_obj::AttachmentUploadError_obj()
+{
+}
+
+void AttachmentUploadError_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(AttachmentUploadError);
+	HX_MARK_MEMBER_NAME(code,"code");
+	HX_MARK_MEMBER_NAME(serviceId,"serviceId");
+	HX_MARK_MEMBER_NAME(statusCode,"statusCode");
+	HX_MARK_MEMBER_NAME(cause,"cause");
+	HX_MARK_MEMBER_NAME(failures,"failures");
+	 ::haxe::Exception_obj::__Mark(HX_MARK_ARG);
+	HX_MARK_END_CLASS();
+}
+
+void AttachmentUploadError_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(code,"code");
+	HX_VISIT_MEMBER_NAME(serviceId,"serviceId");
+	HX_VISIT_MEMBER_NAME(statusCode,"statusCode");
+	HX_VISIT_MEMBER_NAME(cause,"cause");
+	HX_VISIT_MEMBER_NAME(failures,"failures");
+	 ::haxe::Exception_obj::__Visit(HX_VISIT_ARG);
+}
+
+::hx::Val AttachmentUploadError_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 4:
+		if (HX_FIELD_EQ(inName,"code") ) { return ::hx::Val( code ); }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"cause") ) { return ::hx::Val( cause ); }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"failures") ) { return ::hx::Val( failures ); }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"serviceId") ) { return ::hx::Val( serviceId ); }
+		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"statusCode") ) { return ::hx::Val( statusCode ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+::hx::Val AttachmentUploadError_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 4:
+		if (HX_FIELD_EQ(inName,"code") ) { code=inValue.Cast< ::String >(); return inValue; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"cause") ) { cause=inValue.Cast<  ::Dynamic >(); return inValue; }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"failures") ) { failures=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"serviceId") ) { serviceId=inValue.Cast< ::String >(); return inValue; }
+		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"statusCode") ) { statusCode=inValue.Cast<  ::Dynamic >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+void AttachmentUploadError_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("code",2d,b1,c4,41));
+	outFields->push(HX_("serviceId",70,93,d4,bc));
+	outFields->push(HX_("statusCode",7f,45,22,a6));
+	outFields->push(HX_("cause",69,4c,22,41));
+	outFields->push(HX_("failures",e9,d0,27,04));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo AttachmentUploadError_obj_sMemberStorageInfo[] = {
+	{::hx::fsString,(int)offsetof(AttachmentUploadError_obj,code),HX_("code",2d,b1,c4,41)},
+	{::hx::fsString,(int)offsetof(AttachmentUploadError_obj,serviceId),HX_("serviceId",70,93,d4,bc)},
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(AttachmentUploadError_obj,statusCode),HX_("statusCode",7f,45,22,a6)},
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(AttachmentUploadError_obj,cause),HX_("cause",69,4c,22,41)},
+	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(AttachmentUploadError_obj,failures),HX_("failures",e9,d0,27,04)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo *AttachmentUploadError_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String AttachmentUploadError_obj_sMemberFields[] = {
+	HX_("code",2d,b1,c4,41),
+	HX_("serviceId",70,93,d4,bc),
+	HX_("statusCode",7f,45,22,a6),
+	HX_("cause",69,4c,22,41),
+	HX_("failures",e9,d0,27,04),
+	::String(null()) };
+
+::hx::Class AttachmentUploadError_obj::__mClass;
+
+void AttachmentUploadError_obj::__register()
+{
+	AttachmentUploadError_obj _hx_dummy;
+	AttachmentUploadError_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.AttachmentUploadError",b7,af,8e,82);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(AttachmentUploadError_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< AttachmentUploadError_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = AttachmentUploadError_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = AttachmentUploadError_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/Autolink.cpp b/Sources/c_borogove/src/borogove/Autolink.cpp
index 6b37136..64f170a 100644
--- a/Sources/c_borogove/src/borogove/Autolink.cpp
+++ b/Sources/c_borogove/src/borogove/Autolink.cpp
@@ -19,6 +19,12 @@
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_b6a92d28a7d85bf6_355_one,"borogove.Autolink","one",0xc87857ee,"borogove.Autolink.one","borogove/Autolink.hx",355,0x8c1e1427)
 HX_LOCAL_STACK_FRAME(_hx_pos_b6a92d28a7d85bf6_356_one,"borogove.Autolink","one",0xc87857ee,"borogove.Autolink.one","borogove/Autolink.hx",356,0x8c1e1427)
@@ -238,7 +244,7 @@ HXLINE( 377)			if (::StringTools_obj::endsWith(text,HX_("?",3f,00,00,00))) {
 HXLINE( 377)				text = text.substr(0,(text.length - 1));
             			}
 HXLINE( 379)			 ::borogove::Node _hx_tmp2 = ::borogove::Node_obj::Element( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("a",61,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("href",eb,09,15,45),uri)))->text(text));
+            				->setFixed(0,HX_("href",eb,09,15,45),uri)),null())->text(text));
 HXDLIN( 379)			return  ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("start",62,74,0b,84), ::Dynamic(pos->__Field(HX_("pos",94,5d,55,00),::hx::paccDynamic)))
             				->setFixed(1,HX_("end",db,03,4d,00), ::Dynamic((pos->__Field(HX_("pos",94,5d,55,00),::hx::paccDynamic) + len)))
diff --git a/Sources/c_borogove/src/borogove/AvailableChat.cpp b/Sources/c_borogove/src/borogove/AvailableChat.cpp
index 33e70b5..e004808 100644
--- a/Sources/c_borogove/src/borogove/AvailableChat.cpp
+++ b/Sources/c_borogove/src/borogove/AvailableChat.cpp
@@ -7,23 +7,27 @@
 #ifndef INCLUDED_borogove_Caps
 #include <borogove/Caps.h>
 #endif
+#ifndef INCLUDED_borogove_Stanza
+#include <borogove/Stanza.h>
+#endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_eed68530cdcabc2a_2354_new,"borogove.AvailableChat","new",0x5dac2a06,"borogove.AvailableChat.new","borogove/Chat.hx",2354,0x1763ae98)
+HX_DEFINE_STACK_FRAME(_hx_pos_eed68530cdcabc2a_2676_new,"borogove.AvailableChat","new",0x5dac2a06,"borogove.AvailableChat.new","borogove/Chat.hx",2676,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_5767937a9c3c6668_478_chatId__fromC,"borogove.AvailableChat","chatId__fromC",0xf38d212c,"borogove.AvailableChat.chatId__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_5767937a9c3c6668_478_displayName__fromC,"borogove.AvailableChat","displayName__fromC",0x70140f86,"borogove.AvailableChat.displayName__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_5767937a9c3c6668_478_note__fromC,"borogove.AvailableChat","note__fromC",0x82768a6d,"borogove.AvailableChat.note__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_2330_isChannel,"borogove.AvailableChat","isChannel",0xad5c981f,"borogove.AvailableChat.isChannel","borogove/Chat.hx",2330,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_2336_canAudioCall,"borogove.AvailableChat","canAudioCall",0xb02e8bfe,"borogove.AvailableChat.canAudioCall","borogove/Chat.hx",2336,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_2346_canVideoCall,"borogove.AvailableChat","canVideoCall",0xb6315e23,"borogove.AvailableChat.canVideoCall","borogove/Chat.hx",2346,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_2310_boot,"borogove.AvailableChat","boot",0x91119bcc,"borogove.AvailableChat.boot","borogove/Chat.hx",2310,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_2652_isChannel,"borogove.AvailableChat","isChannel",0xad5c981f,"borogove.AvailableChat.isChannel","borogove/Chat.hx",2652,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_2658_canAudioCall,"borogove.AvailableChat","canAudioCall",0xb02e8bfe,"borogove.AvailableChat.canAudioCall","borogove/Chat.hx",2658,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_2668_canVideoCall,"borogove.AvailableChat","canVideoCall",0xb6315e23,"borogove.AvailableChat.canVideoCall","borogove/Chat.hx",2668,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_2630_boot,"borogove.AvailableChat","boot",0x91119bcc,"borogove.AvailableChat.boot","borogove/Chat.hx",2630,0x1763ae98)
 namespace borogove{
 
-void AvailableChat_obj::__construct(::String chatId,::String displayName,::String note, ::borogove::Caps caps){
-            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_2354_new)
-HXLINE(2355)		this->chatId = chatId;
-HXLINE(2356)		this->displayName = displayName;
-HXLINE(2357)		this->note = note;
-HXLINE(2358)		this->caps = caps;
+void AvailableChat_obj::__construct(::String chatId,::String displayName,::String note, ::borogove::Caps caps, ::borogove::Stanza rosterItem){
+            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_2676_new)
+HXLINE(2677)		this->chatId = chatId;
+HXLINE(2678)		this->displayName = displayName;
+HXLINE(2679)		this->note = note;
+HXLINE(2680)		this->caps = caps;
+HXLINE(2681)		this->rosterItem = rosterItem;
             	}
 
 Dynamic AvailableChat_obj::__CreateEmpty() { return new AvailableChat_obj; }
@@ -33,7 +37,7 @@ void *AvailableChat_obj::_hx_vtable = 0;
 Dynamic AvailableChat_obj::__Create(::hx::DynamicArray inArgs)
 {
 	::hx::ObjectPtr< AvailableChat_obj > _hx_result = new AvailableChat_obj();
-	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2],inArgs[3]);
+	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2],inArgs[3],inArgs[4]);
 	return _hx_result;
 }
 
@@ -66,76 +70,76 @@ HXDLIN( 478)		return this->note;
 HX_DEFINE_DYNAMIC_FUNC0(AvailableChat_obj,note__fromC,return )
 
 bool AvailableChat_obj::isChannel(){
-            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_2330_isChannel)
-HXDLIN(2330)		return this->caps->isChannel(this->chatId);
+            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_2652_isChannel)
+HXDLIN(2652)		return this->caps->isChannel(this->chatId);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AvailableChat_obj,isChannel,return )
 
 bool AvailableChat_obj::canAudioCall(){
-            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_2336_canAudioCall)
-HXLINE(2338)		bool _hx_tmp;
-HXDLIN(2338)		::Array< ::String > tmp = this->caps->features;
-HXDLIN(2338)		 ::Dynamic tmp1;
-HXDLIN(2338)		if (::hx::IsNotNull( tmp )) {
-HXLINE(2338)			tmp1 = tmp->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
+            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_2658_canAudioCall)
+HXLINE(2660)		bool _hx_tmp;
+HXDLIN(2660)		::Array< ::String > tmp = this->caps->features;
+HXDLIN(2660)		 ::Dynamic tmp1;
+HXDLIN(2660)		if (::hx::IsNotNull( tmp )) {
+HXLINE(2660)			tmp1 = tmp->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
             		}
             		else {
-HXLINE(2338)			tmp1 = null();
+HXLINE(2660)			tmp1 = null();
             		}
-HXDLIN(2338)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE(2338)			_hx_tmp = ( (bool)(tmp1) );
+HXDLIN(2660)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(2660)			_hx_tmp = ( (bool)(tmp1) );
             		}
             		else {
-HXLINE(2338)			_hx_tmp = false;
+HXLINE(2660)			_hx_tmp = false;
             		}
-HXDLIN(2338)		if (_hx_tmp) {
-HXLINE(2338)			return true;
+HXDLIN(2660)		if (_hx_tmp) {
+HXLINE(2660)			return true;
             		}
-HXLINE(2340)		return false;
+HXLINE(2662)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AvailableChat_obj,canAudioCall,return )
 
 bool AvailableChat_obj::canVideoCall(){
-            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_2346_canVideoCall)
-HXLINE(2348)		bool _hx_tmp;
-HXDLIN(2348)		::Array< ::String > tmp = this->caps->features;
-HXDLIN(2348)		 ::Dynamic tmp1;
-HXDLIN(2348)		if (::hx::IsNotNull( tmp )) {
-HXLINE(2348)			tmp1 = tmp->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
+            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_2668_canVideoCall)
+HXLINE(2670)		bool _hx_tmp;
+HXDLIN(2670)		::Array< ::String > tmp = this->caps->features;
+HXDLIN(2670)		 ::Dynamic tmp1;
+HXDLIN(2670)		if (::hx::IsNotNull( tmp )) {
+HXLINE(2670)			tmp1 = tmp->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
             		}
             		else {
-HXLINE(2348)			tmp1 = null();
+HXLINE(2670)			tmp1 = null();
             		}
-HXDLIN(2348)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE(2348)			_hx_tmp = ( (bool)(tmp1) );
+HXDLIN(2670)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(2670)			_hx_tmp = ( (bool)(tmp1) );
             		}
             		else {
-HXLINE(2348)			_hx_tmp = false;
+HXLINE(2670)			_hx_tmp = false;
             		}
-HXDLIN(2348)		if (_hx_tmp) {
-HXLINE(2348)			return true;
+HXDLIN(2670)		if (_hx_tmp) {
+HXLINE(2670)			return true;
             		}
-HXLINE(2350)		return false;
+HXLINE(2672)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AvailableChat_obj,canVideoCall,return )
 
 
-::hx::ObjectPtr< AvailableChat_obj > AvailableChat_obj::__new(::String chatId,::String displayName,::String note, ::borogove::Caps caps) {
+::hx::ObjectPtr< AvailableChat_obj > AvailableChat_obj::__new(::String chatId,::String displayName,::String note, ::borogove::Caps caps, ::borogove::Stanza rosterItem) {
 	::hx::ObjectPtr< AvailableChat_obj > __this = new AvailableChat_obj();
-	__this->__construct(chatId,displayName,note,caps);
+	__this->__construct(chatId,displayName,note,caps,rosterItem);
 	return __this;
 }
 
-::hx::ObjectPtr< AvailableChat_obj > AvailableChat_obj::__alloc(::hx::Ctx *_hx_ctx,::String chatId,::String displayName,::String note, ::borogove::Caps caps) {
+::hx::ObjectPtr< AvailableChat_obj > AvailableChat_obj::__alloc(::hx::Ctx *_hx_ctx,::String chatId,::String displayName,::String note, ::borogove::Caps caps, ::borogove::Stanza rosterItem) {
 	AvailableChat_obj *__this = (AvailableChat_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(AvailableChat_obj), true, "borogove.AvailableChat"));
 	*(void **)__this = AvailableChat_obj::_hx_vtable;
-	__this->__construct(chatId,displayName,note,caps);
+	__this->__construct(chatId,displayName,note,caps,rosterItem);
 	return __this;
 }
 
@@ -150,6 +154,7 @@ void AvailableChat_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(displayName,"displayName");
 	HX_MARK_MEMBER_NAME(note,"note");
 	HX_MARK_MEMBER_NAME(caps,"caps");
+	HX_MARK_MEMBER_NAME(rosterItem,"rosterItem");
 	HX_MARK_END_CLASS();
 }
 
@@ -159,6 +164,7 @@ void AvailableChat_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(displayName,"displayName");
 	HX_VISIT_MEMBER_NAME(note,"note");
 	HX_VISIT_MEMBER_NAME(caps,"caps");
+	HX_VISIT_MEMBER_NAME(rosterItem,"rosterItem");
 }
 
 ::hx::Val AvailableChat_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
@@ -174,6 +180,9 @@ void AvailableChat_obj::__Visit(HX_VISIT_PARAMS)
 	case 9:
 		if (HX_FIELD_EQ(inName,"isChannel") ) { return ::hx::Val( isChannel_dyn() ); }
 		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"rosterItem") ) { return ::hx::Val( rosterItem ); }
+		break;
 	case 11:
 		if (HX_FIELD_EQ(inName,"displayName") ) { return ::hx::Val( displayName ); }
 		if (HX_FIELD_EQ(inName,"note__fromC") ) { return ::hx::Val( note__fromC_dyn() ); }
@@ -201,6 +210,9 @@ void AvailableChat_obj::__Visit(HX_VISIT_PARAMS)
 	case 6:
 		if (HX_FIELD_EQ(inName,"chatId") ) { chatId=inValue.Cast< ::String >(); return inValue; }
 		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"rosterItem") ) { rosterItem=inValue.Cast<  ::borogove::Stanza >(); return inValue; }
+		break;
 	case 11:
 		if (HX_FIELD_EQ(inName,"displayName") ) { displayName=inValue.Cast< ::String >(); return inValue; }
 	}
@@ -213,6 +225,7 @@ void AvailableChat_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("displayName",ad,11,f2,30));
 	outFields->push(HX_("note",f2,17,0a,49));
 	outFields->push(HX_("caps",21,1c,ba,41));
+	outFields->push(HX_("rosterItem",3e,80,8b,d7));
 	super::__GetFields(outFields);
 };
 
@@ -222,6 +235,7 @@ static ::hx::StorageInfo AvailableChat_obj_sMemberStorageInfo[] = {
 	{::hx::fsString,(int)offsetof(AvailableChat_obj,displayName),HX_("displayName",ad,11,f2,30)},
 	{::hx::fsString,(int)offsetof(AvailableChat_obj,note),HX_("note",f2,17,0a,49)},
 	{::hx::fsObject /*  ::borogove::Caps */ ,(int)offsetof(AvailableChat_obj,caps),HX_("caps",21,1c,ba,41)},
+	{::hx::fsObject /*  ::borogove::Stanza */ ,(int)offsetof(AvailableChat_obj,rosterItem),HX_("rosterItem",3e,80,8b,d7)},
 	{ ::hx::fsUnknown, 0, null()}
 };
 static ::hx::StaticInfo *AvailableChat_obj_sStaticStorageInfo = 0;
@@ -235,6 +249,7 @@ static ::String AvailableChat_obj_sMemberFields[] = {
 	HX_("note",f2,17,0a,49),
 	HX_("note__fromC",c7,1a,13,57),
 	HX_("caps",21,1c,ba,41),
+	HX_("rosterItem",3e,80,8b,d7),
 	HX_("isChannel",f9,7d,d0,d0),
 	HX_("canAudioCall",64,4a,90,e4),
 	HX_("canVideoCall",89,1c,93,ea),
@@ -268,8 +283,8 @@ void AvailableChat_obj::__register()
 void AvailableChat_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_2310_boot)
-HXDLIN(2310)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_2630_boot)
+HXDLIN(2630)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("chatId__fromC",06,fc,b1,94), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
diff --git a/Sources/c_borogove/src/borogove/AvailableChatIterator.cpp b/Sources/c_borogove/src/borogove/AvailableChatIterator.cpp
index 5a2404e..2e66da3 100644
--- a/Sources/c_borogove/src/borogove/AvailableChatIterator.cpp
+++ b/Sources/c_borogove/src/borogove/AvailableChatIterator.cpp
@@ -93,13 +93,13 @@ HX_DEFINE_STACK_FRAME(_hx_pos_d2dba419a7f92221_114_new,"borogove.AvailableChatIt
 HX_DEFINE_STACK_FRAME(_hx_pos_d2dba419a7f92221_119_new,"borogove.AvailableChatIterator","new",0xf41c8314,"borogove.AvailableChatIterator.new","borogove/AvailableChatIterator.hx",119,0xe9fab5dd)
 HX_DEFINE_STACK_FRAME(_hx_pos_d2dba419a7f92221_118_new,"borogove.AvailableChatIterator","new",0xf41c8314,"borogove.AvailableChatIterator.new","borogove/AvailableChatIterator.hx",118,0xe9fab5dd)
 HX_LOCAL_STACK_FRAME(_hx_pos_07fd1ca5fb749c25_478_q__fromC,"borogove.AvailableChatIterator","q__fromC",0x85dfd0f4,"borogove.AvailableChatIterator.q__fromC","HaxeCBridge.hx",478,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_152_check,"borogove.AvailableChatIterator","check",0x4318607c,"borogove.AvailableChatIterator.check","borogove/AvailableChatIterator.hx",152,0xe9fab5dd)
 HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_150_check,"borogove.AvailableChatIterator","check",0x4318607c,"borogove.AvailableChatIterator.check","borogove/AvailableChatIterator.hx",150,0xe9fab5dd)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_148_check,"borogove.AvailableChatIterator","check",0x4318607c,"borogove.AvailableChatIterator.check","borogove/AvailableChatIterator.hx",148,0xe9fab5dd)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_147_check,"borogove.AvailableChatIterator","check",0x4318607c,"borogove.AvailableChatIterator.check","borogove/AvailableChatIterator.hx",147,0xe9fab5dd)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_197_next,"borogove.AvailableChatIterator","next",0xa4d62fbf,"borogove.AvailableChatIterator.next","borogove/AvailableChatIterator.hx",197,0xe9fab5dd)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_149_check,"borogove.AvailableChatIterator","check",0x4318607c,"borogove.AvailableChatIterator.check","borogove/AvailableChatIterator.hx",149,0xe9fab5dd)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_199_next,"borogove.AvailableChatIterator","next",0xa4d62fbf,"borogove.AvailableChatIterator.next","borogove/AvailableChatIterator.hx",199,0xe9fab5dd)
 HX_LOCAL_STACK_FRAME(_hx_pos_07fd1ca5fb749c25_365_next__fromC,"borogove.AvailableChatIterator","next__fromC",0xa26d469a,"borogove.AvailableChatIterator.next__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_216_internalNext,"borogove.AvailableChatIterator","internalNext",0x8370519c,"borogove.AvailableChatIterator.internalNext","borogove/AvailableChatIterator.hx",216,0xe9fab5dd)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_201_internalNext,"borogove.AvailableChatIterator","internalNext",0x8370519c,"borogove.AvailableChatIterator.internalNext","borogove/AvailableChatIterator.hx",201,0xe9fab5dd)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_218_internalNext,"borogove.AvailableChatIterator","internalNext",0x8370519c,"borogove.AvailableChatIterator.internalNext","borogove/AvailableChatIterator.hx",218,0xe9fab5dd)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_203_internalNext,"borogove.AvailableChatIterator","internalNext",0x8370519c,"borogove.AvailableChatIterator.internalNext","borogove/AvailableChatIterator.hx",203,0xe9fab5dd)
 HX_LOCAL_STACK_FRAME(_hx_pos_d2dba419a7f92221_24_boot,"borogove.AvailableChatIterator","boot",0x9cef2efe,"borogove.AvailableChatIterator.boot","borogove/AvailableChatIterator.hx",24,0xe9fab5dd)
 namespace borogove{
 
@@ -284,7 +284,7 @@ HXLINE(  81)							available1 = ( ( ::borogove::Caps)(caps->__Field(HX_("next",f
             						else {
 HXLINE(  81)							available1 = ::borogove::CapsRepo_obj::empty;
             						}
-HXDLIN(  81)						::Dynamic available2 = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::AvailableChat_obj::__alloc( HX_CTX ,chat2,available,chat3,available1)));
+HXDLIN(  81)						::Dynamic available2 = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::AvailableChat_obj::__alloc( HX_CTX ,chat2,available,chat3,available1,null())));
 HXLINE(  82)						if (chat->isTrusted()) {
 HXLINE(  83)							this->results->push(available2);
             						}
@@ -426,18 +426,21 @@ HXDLIN( 125)													::String _hx_tmp2 = ::StringTools_obj::replace(_gthis->
 HXDLIN( 125)													::Dynamic _hx_tmp3 = _gthis2->check( ::borogove::JID_obj::__alloc( HX_CTX ,_hx_tmp2,bareJid->domain,null(),null()));
 HXDLIN( 125)													::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp3,resolve,null());
             												}
+            												else {
+HXLINE( 127)													resolve(::Array_obj< ::Dynamic>::__new(0));
+            												}
             											}
             										}
             										else {
-HXLINE( 128)											switch((int)(result->_hx_getIndex())){
+HXLINE( 130)											switch((int)(result->_hx_getIndex())){
             												case (int)0: {
-HXLINE( 129)													resolve(::Array_obj< ::Dynamic>::__new(0));
+HXLINE( 131)													resolve(::Array_obj< ::Dynamic>::__new(0));
             												}
             												break;
             												case (int)1: {
-HXLINE( 131)													 ::borogove::AvailableChatIterator _gthis3 = _gthis;
-HXDLIN( 131)													::Dynamic _hx_tmp4 = _gthis3->check(::borogove::JID_obj::parse(( (::String)(result->_hx_getObject(0)) )));
-HXDLIN( 131)													::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp4,resolve,null());
+HXLINE( 133)													 ::borogove::AvailableChatIterator _gthis3 = _gthis;
+HXDLIN( 133)													::Dynamic _hx_tmp4 = _gthis3->check(::borogove::JID_obj::parse(( (::String)(result->_hx_getObject(0)) )));
+HXDLIN( 133)													::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp4,resolve,null());
             												}
             												break;
             											}
@@ -447,7 +450,7 @@ HXDLIN( 131)													::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp4,
 
             									HX_GC_STACKFRAME(&_hx_pos_d2dba419a7f92221_118_new)
 HXLINE( 119)									jigGet1->onFinished( ::Dynamic(new _hx_Closure_7(_gthis,caps2,jigGet1,resolve,bareJid)));
-HXLINE( 135)									client->sendQuery(jigGet1);
+HXLINE( 137)									client->sendQuery(jigGet1);
             								}
             								HX_END_LOCAL_FUNC2((void))
 
@@ -471,19 +474,19 @@ HXLINE( 116)									fullJid = resource1;
 HXLINE( 117)								::String jigGet =  ::borogove::JID_obj::__alloc( HX_CTX ,bareJid1,bareJid2,fullJid,null())->asString();
 HXDLIN( 117)								 ::borogove::queries::JabberIqGatewayGet jigGet1 =  ::borogove::queries::JabberIqGatewayGet_obj::__alloc( HX_CTX ,jigGet,this->query);
 HXLINE( 118)								::Array< ::Dynamic> _hx_tmp10 = this->results;
-HXDLIN( 118)								_hx_tmp10->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_8(caps2,_gthis,client,jigGet1,bareJid))));
+HXDLIN( 118)								_hx_tmp10->unshift(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_8(caps2,_gthis,client,jigGet1,bareJid))));
             							}
             						}
             					}
             				}
             			}
             		}
-HXLINE( 142)		{
-HXLINE( 142)			int _g6 = 0;
-HXDLIN( 142)			while((_g6 < laterResults->length)){
-HXLINE( 142)				::Dynamic later = laterResults->__get(_g6);
-HXDLIN( 142)				_g6 = (_g6 + 1);
-HXLINE( 143)				this->results->push(later);
+HXLINE( 144)		{
+HXLINE( 144)			int _g6 = 0;
+HXDLIN( 144)			while((_g6 < laterResults->length)){
+HXLINE( 144)				::Dynamic later = laterResults->__get(_g6);
+HXDLIN( 144)				_g6 = (_g6 + 1);
+HXLINE( 145)				this->results->push(later);
             			}
             		}
             	}
@@ -516,117 +519,117 @@ HX_DEFINE_DYNAMIC_FUNC0(AvailableChatIterator_obj,q__fromC,return )
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_0, ::borogove::AvailableChatIterator,_gthis, ::Dynamic,resolve, ::borogove::queries::DiscoInfoGet,discoGet, ::borogove::JID,jid) HXARGC(0)
             			void _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_d2dba419a7f92221_150_check)
-HXLINE( 151)				 ::borogove::Caps resultCaps = discoGet->getResult();
-HXLINE( 152)				if (::hx::IsNull( resultCaps )) {
-HXLINE( 153)					 ::borogove::Stanza tmp = discoGet->responseStanza;
-HXDLIN( 153)					 ::borogove::Stanza tmp1;
-HXDLIN( 153)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 153)						tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
+            				HX_GC_STACKFRAME(&_hx_pos_d2dba419a7f92221_152_check)
+HXLINE( 153)				 ::borogove::Caps resultCaps = discoGet->getResult();
+HXLINE( 154)				if (::hx::IsNull( resultCaps )) {
+HXLINE( 155)					 ::borogove::Stanza tmp = discoGet->responseStanza;
+HXDLIN( 155)					 ::borogove::Stanza tmp1;
+HXDLIN( 155)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 155)						tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
             					}
             					else {
-HXLINE( 153)						tmp1 = null();
+HXLINE( 155)						tmp1 = null();
             					}
-HXDLIN( 153)					 ::borogove::Stanza err;
-HXDLIN( 153)					if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 153)						err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
+HXDLIN( 155)					 ::borogove::Stanza err;
+HXDLIN( 155)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 155)						err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
             					}
             					else {
-HXLINE( 153)						err = null();
-            					}
-HXLINE( 154)					bool _hx_tmp;
-HXDLIN( 154)					bool _hx_tmp1;
-HXDLIN( 154)					if (::hx::IsNotNull( err )) {
-HXLINE( 154)						::String _hx_tmp2;
-HXDLIN( 154)						if (::hx::IsNotNull( err )) {
-HXLINE( 154)							_hx_tmp2 = err->name;
+HXLINE( 155)						err = null();
+            					}
+HXLINE( 156)					bool _hx_tmp;
+HXDLIN( 156)					bool _hx_tmp1;
+HXDLIN( 156)					if (::hx::IsNotNull( err )) {
+HXLINE( 156)						::String _hx_tmp2;
+HXDLIN( 156)						if (::hx::IsNotNull( err )) {
+HXLINE( 156)							_hx_tmp2 = err->name;
             						}
             						else {
-HXLINE( 154)							_hx_tmp2 = null();
+HXLINE( 156)							_hx_tmp2 = null();
             						}
-HXDLIN( 154)						_hx_tmp1 = (_hx_tmp2 == HX_("service-unavailable",f8,3c,11,1c));
+HXDLIN( 156)						_hx_tmp1 = (_hx_tmp2 == HX_("service-unavailable",f8,3c,11,1c));
             					}
             					else {
-HXLINE( 154)						_hx_tmp1 = true;
+HXLINE( 156)						_hx_tmp1 = true;
             					}
-HXDLIN( 154)					if (!(_hx_tmp1)) {
-HXLINE( 154)						::String _hx_tmp3;
-HXDLIN( 154)						if (::hx::IsNotNull( err )) {
-HXLINE( 154)							_hx_tmp3 = err->name;
+HXDLIN( 156)					if (!(_hx_tmp1)) {
+HXLINE( 156)						::String _hx_tmp3;
+HXDLIN( 156)						if (::hx::IsNotNull( err )) {
+HXLINE( 156)							_hx_tmp3 = err->name;
             						}
             						else {
-HXLINE( 154)							_hx_tmp3 = null();
+HXLINE( 156)							_hx_tmp3 = null();
             						}
-HXDLIN( 154)						_hx_tmp = (_hx_tmp3 == HX_("feature-not-implemented",71,20,2e,96));
+HXDLIN( 156)						_hx_tmp = (_hx_tmp3 == HX_("feature-not-implemented",71,20,2e,96));
             					}
             					else {
-HXLINE( 154)						_hx_tmp = true;
-            					}
-HXDLIN( 154)					if (_hx_tmp) {
-HXLINE( 155)						 ::Dynamic resolve1 = resolve;
-HXDLIN( 155)						::String _hx_tmp4 = jid->asString();
-HXDLIN( 155)						::String _hx_tmp5;
-HXDLIN( 155)						if (::hx::IsNull( jid->node )) {
-HXLINE( 155)							_hx_tmp5 = _gthis->query;
+HXLINE( 156)						_hx_tmp = true;
+            					}
+HXDLIN( 156)					if (_hx_tmp) {
+HXLINE( 157)						 ::Dynamic resolve1 = resolve;
+HXDLIN( 157)						::String _hx_tmp4 = jid->asString();
+HXDLIN( 157)						::String _hx_tmp5;
+HXDLIN( 157)						if (::hx::IsNull( jid->node )) {
+HXLINE( 157)							_hx_tmp5 = _gthis->query;
             						}
             						else {
-HXLINE( 155)							_hx_tmp5 = jid->node;
+HXLINE( 157)							_hx_tmp5 = jid->node;
             						}
-HXDLIN( 155)						resolve1(::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::AvailableChat_obj::__alloc( HX_CTX ,_hx_tmp4,_hx_tmp5,jid->asString(),::borogove::CapsRepo_obj::empty)));
+HXDLIN( 157)						resolve1(::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::AvailableChat_obj::__alloc( HX_CTX ,_hx_tmp4,_hx_tmp5,jid->asString(),::borogove::CapsRepo_obj::empty,null())));
             					}
             					else {
-HXLINE( 157)						resolve(::Array_obj< ::Dynamic>::__new(0));
+HXLINE( 159)						resolve(::Array_obj< ::Dynamic>::__new(0));
             					}
             				}
             				else {
-HXLINE( 160)					 ::borogove::Caps caps = _gthis->client->capsRepo->add(resultCaps,null());
-HXLINE( 161)					 ::borogove::Identity identity = resultCaps->identities->__get(0).StaticCast<  ::borogove::Identity >();
-HXLINE( 162)					::String displayName;
-HXDLIN( 162)					::String tmp2;
-HXDLIN( 162)					if (::hx::IsNotNull( identity )) {
-HXLINE( 162)						tmp2 = identity->name;
+HXLINE( 162)					 ::borogove::Caps caps = _gthis->client->capsRepo->add(resultCaps,null());
+HXLINE( 163)					 ::borogove::Identity identity = resultCaps->identities->__get(0).StaticCast<  ::borogove::Identity >();
+HXLINE( 164)					::String displayName;
+HXDLIN( 164)					::String tmp2;
+HXDLIN( 164)					if (::hx::IsNotNull( identity )) {
+HXLINE( 164)						tmp2 = identity->name;
             					}
             					else {
-HXLINE( 162)						tmp2 = null();
+HXLINE( 164)						tmp2 = null();
             					}
-HXDLIN( 162)					if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 162)						displayName = tmp2;
+HXDLIN( 164)					if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 164)						displayName = tmp2;
             					}
             					else {
-HXLINE( 162)						displayName = _gthis->query;
+HXLINE( 164)						displayName = _gthis->query;
             					}
-HXLINE( 163)					::String note = jid->asString();
-HXDLIN( 163)					::String note1;
-HXDLIN( 163)					if (::hx::IsNull( identity )) {
-HXLINE( 163)						note1 = HX_("",00,00,00,00);
+HXLINE( 165)					::String note = jid->asString();
+HXDLIN( 165)					::String note1;
+HXDLIN( 165)					if (::hx::IsNull( identity )) {
+HXLINE( 165)						note1 = HX_("",00,00,00,00);
             					}
             					else {
-HXLINE( 163)						note1 = ((HX_(" (",08,1c,00,00) + identity->type) + HX_(")",29,00,00,00));
+HXLINE( 165)						note1 = ((HX_(" (",08,1c,00,00) + identity->type) + HX_(")",29,00,00,00));
             					}
-HXLINE( 164)					 ::Dynamic resolve2 = resolve;
-HXDLIN( 164)					resolve2(::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::AvailableChat_obj::__alloc( HX_CTX ,jid->asString(),displayName,(note + note1),caps)));
+HXLINE( 166)					 ::Dynamic resolve2 = resolve;
+HXDLIN( 166)					resolve2(::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::AvailableChat_obj::__alloc( HX_CTX ,jid->asString(),displayName,(note + note1),caps,null())));
             				}
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_d2dba419a7f92221_148_check)
-HXLINE( 149)			 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,jid->asString(),null());
-HXLINE( 150)			discoGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,resolve,discoGet,jid)));
-HXLINE( 167)			_gthis->client->sendQuery(discoGet);
+            			HX_GC_STACKFRAME(&_hx_pos_d2dba419a7f92221_150_check)
+HXLINE( 151)			 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,jid->asString(),null());
+HXLINE( 152)			discoGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,resolve,discoGet,jid)));
+HXLINE( 169)			_gthis->client->sendQuery(discoGet);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_d2dba419a7f92221_147_check)
-HXDLIN( 147)		 ::borogove::AvailableChatIterator _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 148)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,jid)));
+            	HX_STACKFRAME(&_hx_pos_d2dba419a7f92221_149_check)
+HXDLIN( 149)		 ::borogove::AvailableChatIterator _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 150)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,jid)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(AvailableChatIterator_obj,check,return )
 
 ::Dynamic AvailableChatIterator_obj::next(){
-            	HX_STACKFRAME(&_hx_pos_d2dba419a7f92221_197_next)
-HXDLIN( 197)		return this->internalNext();
+            	HX_STACKFRAME(&_hx_pos_d2dba419a7f92221_199_next)
+HXDLIN( 199)		return this->internalNext();
             	}
 
 
@@ -676,29 +679,29 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->next(), ::Dyn
 ::Dynamic AvailableChatIterator_obj::internalNext(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::AvailableChatIterator,_gthis) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> availables){
-            			HX_STACKFRAME(&_hx_pos_d2dba419a7f92221_216_internalNext)
-HXLINE( 217)			_gthis->head = availables;
-HXLINE( 218)			return _gthis->internalNext();
+            			HX_STACKFRAME(&_hx_pos_d2dba419a7f92221_218_internalNext)
+HXLINE( 219)			_gthis->head = availables;
+HXLINE( 220)			return _gthis->internalNext();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_d2dba419a7f92221_201_internalNext)
-HXDLIN( 201)		 ::borogove::AvailableChatIterator _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 202)		if ((this->head->length > 0)) {
-HXLINE( 203)			 ::borogove::AvailableChat available = this->head->shift().StaticCast<  ::borogove::AvailableChat >();
-HXLINE( 205)			if (::hx::IsNotNull( available )) {
-HXLINE( 206)				if (this->dedup->exists(available->chatId)) {
-HXLINE( 206)					return this->internalNext();
+            	HX_STACKFRAME(&_hx_pos_d2dba419a7f92221_203_internalNext)
+HXDLIN( 203)		 ::borogove::AvailableChatIterator _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 204)		if ((this->head->length > 0)) {
+HXLINE( 205)			 ::borogove::AvailableChat available = this->head->shift().StaticCast<  ::borogove::AvailableChat >();
+HXLINE( 207)			if (::hx::IsNotNull( available )) {
+HXLINE( 208)				if (this->dedup->exists(available->chatId)) {
+HXLINE( 208)					return this->internalNext();
             				}
-HXLINE( 208)				this->dedup->set(available->chatId,true);
-HXLINE( 209)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(available);
+HXLINE( 210)				this->dedup->set(available->chatId,true);
+HXLINE( 211)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(available);
             			}
             		}
-HXLINE( 213)		::Dynamic promise = this->results->shift();
-HXLINE( 214)		if (::hx::IsNull( promise )) {
-HXLINE( 214)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 215)		::Dynamic promise = this->results->shift();
+HXLINE( 216)		if (::hx::IsNull( promise )) {
+HXLINE( 216)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
-HXLINE( 216)		return ::thenshim::_Promise::Promise_Impl__obj::then(promise, ::Dynamic(new _hx_Closure_0(_gthis)),null());
+HXLINE( 218)		return ::thenshim::_Promise::Promise_Impl__obj::then(promise, ::Dynamic(new _hx_Closure_0(_gthis)),null());
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/Caps.cpp b/Sources/c_borogove/src/borogove/Caps.cpp
index c42940a..b96f5f2 100644
--- a/Sources/c_borogove/src/borogove/Caps.cpp
+++ b/Sources/c_borogove/src/borogove/Caps.cpp
@@ -25,6 +25,12 @@
 #ifndef INCLUDED_borogove__DataForm_Field_Impl_
 #include <borogove/_DataForm/Field_Impl_.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 #ifndef INCLUDED_haxe_io_Bytes
 #include <haxe/io/Bytes.h>
 #endif
@@ -39,43 +45,47 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_17_new,"borogove.Caps","new",0xd5c5c0a0,"borogove.Caps.new","borogove/Caps.hx",17,0xed3da4ef)
-HX_DEFINE_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_74_new,"borogove.Caps","new",0xd5c5c0a0,"borogove.Caps.new","borogove/Caps.hx",74,0xed3da4ef)
-HX_DEFINE_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_75_new,"borogove.Caps","new",0xd5c5c0a0,"borogove.Caps.new","borogove/Caps.hx",75,0xed3da4ef)
-HX_DEFINE_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_76_new,"borogove.Caps","new",0xd5c5c0a0,"borogove.Caps.new","borogove/Caps.hx",76,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_94_isChannel,"borogove.Caps","isChannel",0x55b41e39,"borogove.Caps.isChannel","borogove/Caps.hx",94,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_96_isChannel,"borogove.Caps","isChannel",0x55b41e39,"borogove.Caps.isChannel","borogove/Caps.hx",96,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_102_discoReply,"borogove.Caps","discoReply",0x066a3310,"borogove.Caps.discoReply","borogove/Caps.hx",102,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_120_addC,"borogove.Caps","addC",0x2eaa32c2,"borogove.Caps.addC","borogove/Caps.hx",120,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_139_hashInput,"borogove.Caps","hashInput",0x77a0999c,"borogove.Caps.hashInput","borogove/Caps.hx",139,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_152_hashInput,"borogove.Caps","hashInput",0x77a0999c,"borogove.Caps.hashInput","borogove/Caps.hx",152,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_170_computeVer,"borogove.Caps","computeVer",0xf6e0aeec,"borogove.Caps.computeVer","borogove/Caps.hx",170,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_183_computeVer,"borogove.Caps","computeVer",0xf6e0aeec,"borogove.Caps.computeVer","borogove/Caps.hx",183,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_201_verRaw,"borogove.Caps","verRaw",0xd5dfc305,"borogove.Caps.verRaw","borogove/Caps.hx",201,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_214_ver,"borogove.Caps","ver",0xd5cbd2a3,"borogove.Caps.ver","borogove/Caps.hx",214,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_27_filter,"borogove.Caps","filter",0xb9e6d778,"borogove.Caps.filter","borogove/Caps.hx",27,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_41_filter,"borogove.Caps","filter",0xb9e6d778,"borogove.Caps.filter","borogove/Caps.hx",41,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_42_filter,"borogove.Caps","filter",0xb9e6d778,"borogove.Caps.filter","borogove/Caps.hx",42,0xed3da4ef)
+HX_DEFINE_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_84_new,"borogove.Caps","new",0xd5c5c0a0,"borogove.Caps.new","borogove/Caps.hx",84,0xed3da4ef)
+HX_DEFINE_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_85_new,"borogove.Caps","new",0xd5c5c0a0,"borogove.Caps.new","borogove/Caps.hx",85,0xed3da4ef)
+HX_DEFINE_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_86_new,"borogove.Caps","new",0xd5c5c0a0,"borogove.Caps.new","borogove/Caps.hx",86,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_104_isChannel,"borogove.Caps","isChannel",0x55b41e39,"borogove.Caps.isChannel","borogove/Caps.hx",104,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_106_isChannel,"borogove.Caps","isChannel",0x55b41e39,"borogove.Caps.isChannel","borogove/Caps.hx",106,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_112_discoReply,"borogove.Caps","discoReply",0x066a3310,"borogove.Caps.discoReply","borogove/Caps.hx",112,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_130_addC,"borogove.Caps","addC",0x2eaa32c2,"borogove.Caps.addC","borogove/Caps.hx",130,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_149_hashInput,"borogove.Caps","hashInput",0x77a0999c,"borogove.Caps.hashInput","borogove/Caps.hx",149,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_162_hashInput,"borogove.Caps","hashInput",0x77a0999c,"borogove.Caps.hashInput","borogove/Caps.hx",162,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_180_computeVer,"borogove.Caps","computeVer",0xf6e0aeec,"borogove.Caps.computeVer","borogove/Caps.hx",180,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_193_computeVer,"borogove.Caps","computeVer",0xf6e0aeec,"borogove.Caps.computeVer","borogove/Caps.hx",193,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_211_verRaw,"borogove.Caps","verRaw",0xd5dfc305,"borogove.Caps.verRaw","borogove/Caps.hx",211,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_224_ver,"borogove.Caps","ver",0xd5cbd2a3,"borogove.Caps.ver","borogove/Caps.hx",224,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_28_filter,"borogove.Caps","filter",0xb9e6d778,"borogove.Caps.filter","borogove/Caps.hx",28,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_40_filter,"borogove.Caps","filter",0xb9e6d778,"borogove.Caps.filter","borogove/Caps.hx",40,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_47_filter,"borogove.Caps","filter",0xb9e6d778,"borogove.Caps.filter","borogove/Caps.hx",47,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_51_filter,"borogove.Caps","filter",0xb9e6d778,"borogove.Caps.filter","borogove/Caps.hx",51,0xed3da4ef)
 HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_24_filter,"borogove.Caps","filter",0xb9e6d778,"borogove.Caps.filter","borogove/Caps.hx",24,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_54_withIdentity,"borogove.Caps","withIdentity",0x2955f524,"borogove.Caps.withIdentity","borogove/Caps.hx",54,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_59_withFeature,"borogove.Caps","withFeature",0xbcdb4190,"borogove.Caps.withFeature","borogove/Caps.hx",59,0xed3da4ef)
+static const bool _hx_array_data_daf930ae_32[] = {
+	0,
+};
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_64_withIdentity,"borogove.Caps","withIdentity",0x2955f524,"borogove.Caps.withIdentity","borogove/Caps.hx",64,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_4d51f4c65f9a1a9f_69_withFeature,"borogove.Caps","withFeature",0xbcdb4190,"borogove.Caps.withFeature","borogove/Caps.hx",69,0xed3da4ef)
 namespace borogove{
 
 void Caps_obj::__construct(::String node,::Array< ::Dynamic> identities,::Array< ::String > features,::Array< ::Dynamic> data,::Array< unsigned char > ver){
             	HX_GC_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_17_new)
 HXLINE(  22)		this->_ver = null();
-HXLINE(  72)		if (::hx::IsNull( ver )) {
+HXLINE(  82)		if (::hx::IsNull( ver )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             			int _hx_run(::String x,::String y){
-            				HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_74_new)
-HXLINE(  74)				if ((x == y)) {
-HXLINE(  74)					return 0;
+            				HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_84_new)
+HXLINE(  84)				if ((x == y)) {
+HXLINE(  84)					return 0;
             				}
             				else {
-HXLINE(  74)					if ((x < y)) {
-HXLINE(  74)						return -1;
+HXLINE(  84)					if ((x < y)) {
+HXLINE(  84)						return -1;
             					}
             					else {
-HXLINE(  74)						return 1;
+HXLINE(  84)						return 1;
             					}
             				}
             			}
@@ -83,18 +93,18 @@ HXLINE(  74)						return 1;
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(2)
             			int _hx_run( ::borogove::Identity x, ::borogove::Identity y){
-            				HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_75_new)
-HXLINE(  75)				::String _hx_tmp = x->ver();
-HXDLIN(  75)				if ((_hx_tmp == y->ver())) {
-HXLINE(  75)					return 0;
+            				HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_85_new)
+HXLINE(  85)				::String _hx_tmp = x->ver();
+HXDLIN(  85)				if ((_hx_tmp == y->ver())) {
+HXLINE(  85)					return 0;
             				}
             				else {
-HXLINE(  75)					::String _hx_tmp1 = x->ver();
-HXDLIN(  75)					if ((_hx_tmp1 < y->ver())) {
-HXLINE(  75)						return -1;
+HXLINE(  85)					::String _hx_tmp1 = x->ver();
+HXDLIN(  85)					if ((_hx_tmp1 < y->ver())) {
+HXLINE(  85)						return -1;
             					}
             					else {
-HXLINE(  75)						return 1;
+HXLINE(  85)						return 1;
             					}
             				}
             			}
@@ -102,52 +112,52 @@ HXLINE(  75)						return 1;
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(2)
             			int _hx_run( ::borogove::Stanza x, ::borogove::Stanza y){
-            				HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_76_new)
-HXLINE(  76)				 ::borogove::Stanza tmp = ::borogove::_DataForm::DataForm_Impl__obj::field(x,HX_("FORM_TYPE",d5,96,c9,5a));
-HXDLIN(  76)				::Array< ::String > tmp1;
-HXDLIN(  76)				if (::hx::IsNotNull( tmp )) {
-HXLINE(  76)					tmp1 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp);
+            				HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_86_new)
+HXLINE(  86)				 ::borogove::Stanza tmp = ::borogove::_DataForm::DataForm_Impl__obj::field(x,HX_("FORM_TYPE",d5,96,c9,5a));
+HXDLIN(  86)				::Array< ::String > tmp1;
+HXDLIN(  86)				if (::hx::IsNotNull( tmp )) {
+HXLINE(  86)					tmp1 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp);
             				}
             				else {
-HXLINE(  76)					tmp1 = null();
+HXLINE(  86)					tmp1 = null();
             				}
-HXDLIN(  76)				::Array< ::String > _hx_tmp;
-HXDLIN(  76)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE(  76)					_hx_tmp = tmp1;
+HXDLIN(  86)				::Array< ::String > _hx_tmp;
+HXDLIN(  86)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE(  86)					_hx_tmp = tmp1;
             				}
             				else {
-HXLINE(  76)					_hx_tmp = ::Array_obj< ::String >::__new(0);
+HXLINE(  86)					_hx_tmp = ::Array_obj< ::String >::__new(0);
             				}
-HXDLIN(  76)				::String _hx_tmp1 = _hx_tmp->join(HX_("\n",0a,00,00,00));
-HXDLIN(  76)				 ::borogove::Stanza tmp2 = ::borogove::_DataForm::DataForm_Impl__obj::field(y,HX_("FORM_TYPE",d5,96,c9,5a));
-HXDLIN(  76)				::Array< ::String > tmp3;
-HXDLIN(  76)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE(  76)					tmp3 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp2);
+HXDLIN(  86)				::String _hx_tmp1 = _hx_tmp->join(HX_("\n",0a,00,00,00));
+HXDLIN(  86)				 ::borogove::Stanza tmp2 = ::borogove::_DataForm::DataForm_Impl__obj::field(y,HX_("FORM_TYPE",d5,96,c9,5a));
+HXDLIN(  86)				::Array< ::String > tmp3;
+HXDLIN(  86)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE(  86)					tmp3 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp2);
             				}
             				else {
-HXLINE(  76)					tmp3 = null();
+HXLINE(  86)					tmp3 = null();
             				}
-HXDLIN(  76)				::Array< ::String > _hx_tmp2;
-HXDLIN(  76)				if (::hx::IsNotNull( tmp3 )) {
-HXLINE(  76)					_hx_tmp2 = tmp3;
+HXDLIN(  86)				::Array< ::String > _hx_tmp2;
+HXDLIN(  86)				if (::hx::IsNotNull( tmp3 )) {
+HXLINE(  86)					_hx_tmp2 = tmp3;
             				}
             				else {
-HXLINE(  76)					_hx_tmp2 = ::Array_obj< ::String >::__new(0);
+HXLINE(  86)					_hx_tmp2 = ::Array_obj< ::String >::__new(0);
             				}
-HXDLIN(  76)				return ::Reflect_obj::compare(_hx_tmp1,_hx_tmp2->join(HX_("\n",0a,00,00,00)));
+HXDLIN(  86)				return ::Reflect_obj::compare(_hx_tmp1,_hx_tmp2->join(HX_("\n",0a,00,00,00)));
             			}
             			HX_END_LOCAL_FUNC2(return)
 
-HXLINE(  74)			features->sort( ::Dynamic(new _hx_Closure_0()));
-HXLINE(  75)			identities->sort( ::Dynamic(new _hx_Closure_1()));
-HXLINE(  76)			data->sort( ::Dynamic(new _hx_Closure_2()));
+HXLINE(  84)			features->sort( ::Dynamic(new _hx_Closure_0()));
+HXLINE(  85)			identities->sort( ::Dynamic(new _hx_Closure_1()));
+HXLINE(  86)			data->sort( ::Dynamic(new _hx_Closure_2()));
             		}
-HXLINE(  79)		this->node = node;
-HXLINE(  80)		this->identities = identities;
-HXLINE(  81)		this->features = features;
-HXLINE(  82)		this->data = data;
-HXLINE(  83)		if (::hx::IsNotNull( ver )) {
-HXLINE(  84)			this->_ver =  ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-1",90,a8,1c,7c),ver);
+HXLINE(  89)		this->node = node;
+HXLINE(  90)		this->identities = identities;
+HXLINE(  91)		this->features = features;
+HXLINE(  92)		this->data = data;
+HXLINE(  93)		if (::hx::IsNotNull( ver )) {
+HXLINE(  94)			this->_ver =  ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-1",90,a8,1c,7c),ver);
             		}
             	}
 
@@ -167,292 +177,292 @@ bool Caps_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 bool Caps_obj::isChannel(::String chatId){
-            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_94_isChannel)
-HXLINE(  95)		if ((chatId.indexOf(HX_("@",40,00,00,00),null()) < 0)) {
-HXLINE(  95)			return false;
+            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_104_isChannel)
+HXLINE( 105)		if ((chatId.indexOf(HX_("@",40,00,00,00),null()) < 0)) {
+HXLINE( 105)			return false;
             		}
-HXLINE(  96)		if (this->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6))) {
+HXLINE( 106)		if (this->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6))) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			bool _hx_run( ::borogove::Identity identity){
-            				HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_96_isChannel)
-HXLINE(  96)				return (identity->category == HX_("conference",1c,2b,83,41));
+            				HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_106_isChannel)
+HXLINE( 106)				return (identity->category == HX_("conference",1c,2b,83,41));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(  96)			return ::hx::IsNotNull( ::Lambda_obj::find(this->identities, ::Dynamic(new _hx_Closure_0())) );
+HXLINE( 106)			return ::hx::IsNotNull( ::Lambda_obj::find(this->identities, ::Dynamic(new _hx_Closure_0())) );
             		}
             		else {
-HXLINE(  96)			return false;
+HXLINE( 106)			return false;
             		}
-HXDLIN(  96)		return false;
+HXDLIN( 106)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Caps_obj,isChannel,return )
 
  ::borogove::Stanza Caps_obj::discoReply(){
-            	HX_GC_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_102_discoReply)
-HXLINE( 103)		 ::borogove::Stanza query =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/disco#info",cb,2b,7f,0b))));
-HXLINE( 104)		{
-HXLINE( 104)			int _g = 0;
-HXDLIN( 104)			::Array< ::Dynamic> _g1 = this->identities;
-HXDLIN( 104)			while((_g < _g1->length)){
-HXLINE( 104)				 ::borogove::Identity identity = _g1->__get(_g).StaticCast<  ::borogove::Identity >();
-HXDLIN( 104)				_g = (_g + 1);
-HXLINE( 105)				identity->addToDisco(query);
+            	HX_GC_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_112_discoReply)
+HXLINE( 113)		 ::borogove::Stanza query =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/disco#info",cb,2b,7f,0b))),null());
+HXLINE( 114)		{
+HXLINE( 114)			int _g = 0;
+HXDLIN( 114)			::Array< ::Dynamic> _g1 = this->identities;
+HXDLIN( 114)			while((_g < _g1->length)){
+HXLINE( 114)				 ::borogove::Identity identity = _g1->__get(_g).StaticCast<  ::borogove::Identity >();
+HXDLIN( 114)				_g = (_g + 1);
+HXLINE( 115)				identity->addToDisco(query);
             			}
             		}
-HXLINE( 107)		{
-HXLINE( 107)			int _g2 = 0;
-HXDLIN( 107)			::Array< ::String > _g3 = this->features;
-HXDLIN( 107)			while((_g2 < _g3->length)){
-HXLINE( 107)				::String feature = _g3->__get(_g2);
-HXDLIN( 107)				_g2 = (_g2 + 1);
-HXLINE( 108)				query->tag(HX_("feature",b6,f2,7c,1a), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("var",e7,de,59,00),feature)))->up();
+HXLINE( 117)		{
+HXLINE( 117)			int _g2 = 0;
+HXDLIN( 117)			::Array< ::String > _g3 = this->features;
+HXDLIN( 117)			while((_g2 < _g3->length)){
+HXLINE( 117)				::String feature = _g3->__get(_g2);
+HXDLIN( 117)				_g2 = (_g2 + 1);
+HXLINE( 118)				query->tag(HX_("feature",b6,f2,7c,1a), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("var",e7,de,59,00),feature)),null())->up();
             			}
             		}
-HXLINE( 110)		query->addChildren(this->data);
-HXLINE( 111)		return query;
+HXLINE( 120)		query->addChildren(this->data);
+HXLINE( 121)		return query;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Caps_obj,discoReply,return )
 
  ::borogove::Stanza Caps_obj::addC( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_120_addC)
-HXLINE( 124)		::String _hx_tmp = this->node;
-HXLINE( 121)		stanza->tag(HX_("c",63,00,00,00), ::Dynamic(::hx::Anon_obj::Create(4)
+            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_130_addC)
+HXLINE( 134)		::String _hx_tmp = this->node;
+HXLINE( 131)		stanza->tag(HX_("c",63,00,00,00), ::Dynamic(::hx::Anon_obj::Create(4)
             			->setFixed(0,HX_("ver",63,e2,59,00),this->ver())
             			->setFixed(1,HX_("hash",ce,2f,08,45),HX_("sha-1",90,a8,1c,7c))
             			->setFixed(2,HX_("node",02,0a,0a,49),_hx_tmp)
-            			->setFixed(3,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/caps",95,d0,90,e2))))->up();
-HXLINE( 127)		bool _hx_tmp1;
-HXDLIN( 127)		bool _hx_tmp2;
-HXDLIN( 127)		if ((this->identities->length <= 0)) {
-HXLINE( 127)			_hx_tmp2 = (this->features->length > 0);
+            			->setFixed(3,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/caps",95,d0,90,e2))),null())->up();
+HXLINE( 137)		bool _hx_tmp1;
+HXDLIN( 137)		bool _hx_tmp2;
+HXDLIN( 137)		if ((this->identities->length <= 0)) {
+HXLINE( 137)			_hx_tmp2 = (this->features->length > 0);
             		}
             		else {
-HXLINE( 127)			_hx_tmp2 = true;
+HXLINE( 137)			_hx_tmp2 = true;
             		}
-HXDLIN( 127)		if (!(_hx_tmp2)) {
-HXLINE( 127)			_hx_tmp1 = (this->data->length > 0);
+HXDLIN( 137)		if (!(_hx_tmp2)) {
+HXLINE( 137)			_hx_tmp1 = (this->data->length > 0);
             		}
             		else {
-HXLINE( 127)			_hx_tmp1 = true;
+HXLINE( 137)			_hx_tmp1 = true;
             		}
-HXDLIN( 127)		if (_hx_tmp1) {
-HXLINE( 128)			 ::borogove::Stanza _hx_tmp3 = stanza->tag(HX_("c",63,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:caps",3d,5a,a1,f4))));
-HXLINE( 132)			::String _hx_tmp4 = ::borogove::Hash_obj::sha256(this->hashInput())->toBase64();
-HXLINE( 128)			_hx_tmp3->textTag(HX_("hash",ce,2f,08,45),_hx_tmp4, ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 137)		if (_hx_tmp1) {
+HXLINE( 138)			 ::borogove::Stanza _hx_tmp3 = stanza->tag(HX_("c",63,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:caps",3d,5a,a1,f4))),null());
+HXLINE( 142)			::String _hx_tmp4 = ::borogove::Hash_obj::sha256(this->hashInput())->toBase64();
+HXLINE( 138)			_hx_tmp3->textTag(HX_("hash",ce,2f,08,45),_hx_tmp4, ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("algo",d3,ff,6f,40),HX_("sha-256",32,dd,04,3b))
-            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hashes:2",90,ad,87,c7))))->up();
+            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hashes:2",90,ad,87,c7))),null())->up();
             		}
-HXLINE( 136)		return stanza;
+HXLINE( 146)		return stanza;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Caps_obj,addC,return )
 
  ::haxe::io::Bytes Caps_obj::hashInput(){
-            	HX_GC_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_139_hashInput)
-HXLINE( 140)		 ::haxe::io::BytesOutput s =  ::haxe::io::BytesOutput_obj::__alloc( HX_CTX );
-HXLINE( 141)		{
-HXLINE( 141)			int _g = 0;
-HXDLIN( 141)			::Array< ::String > _g1 = this->features;
-HXDLIN( 141)			while((_g < _g1->length)){
-HXLINE( 141)				::String feature = _g1->__get(_g);
-HXDLIN( 141)				_g = (_g + 1);
-HXLINE( 142)				{
-HXLINE( 142)					 ::haxe::io::Bytes b = ::haxe::io::Bytes_obj::ofString(feature,null());
-HXDLIN( 142)					s->writeBytes(b,0,b->length);
+            	HX_GC_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_149_hashInput)
+HXLINE( 150)		 ::haxe::io::BytesOutput s =  ::haxe::io::BytesOutput_obj::__alloc( HX_CTX );
+HXLINE( 151)		{
+HXLINE( 151)			int _g = 0;
+HXDLIN( 151)			::Array< ::String > _g1 = this->features;
+HXDLIN( 151)			while((_g < _g1->length)){
+HXLINE( 151)				::String feature = _g1->__get(_g);
+HXDLIN( 151)				_g = (_g + 1);
+HXLINE( 152)				{
+HXLINE( 152)					 ::haxe::io::Bytes b = ::haxe::io::Bytes_obj::ofString(feature,null());
+HXDLIN( 152)					s->writeBytes(b,0,b->length);
             				}
-HXLINE( 143)				s->writeByte(31);
+HXLINE( 153)				s->writeByte(31);
             			}
             		}
-HXLINE( 145)		s->writeByte(28);
-HXLINE( 146)		{
-HXLINE( 146)			int _g2 = 0;
-HXDLIN( 146)			::Array< ::Dynamic> _g3 = this->identities;
-HXDLIN( 146)			while((_g2 < _g3->length)){
-HXLINE( 146)				 ::borogove::Identity identity = _g3->__get(_g2).StaticCast<  ::borogove::Identity >();
-HXDLIN( 146)				_g2 = (_g2 + 1);
-HXLINE( 147)				identity->writeTo(s);
+HXLINE( 155)		s->writeByte(28);
+HXLINE( 156)		{
+HXLINE( 156)			int _g2 = 0;
+HXDLIN( 156)			::Array< ::Dynamic> _g3 = this->identities;
+HXDLIN( 156)			while((_g2 < _g3->length)){
+HXLINE( 156)				 ::borogove::Identity identity = _g3->__get(_g2).StaticCast<  ::borogove::Identity >();
+HXDLIN( 156)				_g2 = (_g2 + 1);
+HXLINE( 157)				identity->writeTo(s);
             			}
             		}
-HXLINE( 149)		s->writeByte(28);
-HXLINE( 150)		{
-HXLINE( 150)			int _g4 = 0;
-HXDLIN( 150)			::Array< ::Dynamic> _g5 = this->data;
-HXDLIN( 150)			while((_g4 < _g5->length)){
+HXLINE( 159)		s->writeByte(28);
+HXLINE( 160)		{
+HXLINE( 160)			int _g4 = 0;
+HXDLIN( 160)			::Array< ::Dynamic> _g5 = this->data;
+HXDLIN( 160)			while((_g4 < _g5->length)){
             				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             				int _hx_run( ::borogove::Stanza x, ::borogove::Stanza y){
-            					HX_GC_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_152_hashInput)
-HXLINE( 152)					::String tmp = ( (::String)(::Reflect_obj::field(x->attr,HX_("var",e7,de,59,00))) );
-HXDLIN( 152)					::String _hx_tmp;
-HXDLIN( 152)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 152)						_hx_tmp = tmp;
+            					HX_GC_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_162_hashInput)
+HXLINE( 162)					::String tmp = x->attr->get_string(HX_("var",e7,de,59,00));
+HXDLIN( 162)					::String _hx_tmp;
+HXDLIN( 162)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 162)						_hx_tmp = tmp;
             					}
             					else {
-HXLINE( 152)						_hx_tmp = HX_("",00,00,00,00);
+HXLINE( 162)						_hx_tmp = HX_("",00,00,00,00);
             					}
-HXDLIN( 152)					::String _hx_tmp1 = ::Array_obj< ::String >::__new(1)->init(0,_hx_tmp)->concat(::borogove::_DataForm::Field_Impl__obj::get_value(x))->join(HX_("\x1f""",1f,00,00,00));
-HXDLIN( 152)					::String tmp1 = ( (::String)(::Reflect_obj::field(y->attr,HX_("var",e7,de,59,00))) );
-HXDLIN( 152)					::String _hx_tmp2;
-HXDLIN( 152)					if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 152)						_hx_tmp2 = tmp1;
+HXDLIN( 162)					::String _hx_tmp1 = ::Array_obj< ::String >::__new(1)->init(0,_hx_tmp)->concat(::borogove::_DataForm::Field_Impl__obj::get_value(x))->join(HX_("\x1f""",1f,00,00,00));
+HXDLIN( 162)					::String tmp1 = y->attr->get_string(HX_("var",e7,de,59,00));
+HXDLIN( 162)					::String _hx_tmp2;
+HXDLIN( 162)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 162)						_hx_tmp2 = tmp1;
             					}
             					else {
-HXLINE( 152)						_hx_tmp2 = HX_("",00,00,00,00);
+HXLINE( 162)						_hx_tmp2 = HX_("",00,00,00,00);
             					}
-HXDLIN( 152)					return ::Reflect_obj::compare(_hx_tmp1,::Array_obj< ::String >::__new(1)->init(0,_hx_tmp2)->concat(::borogove::_DataForm::Field_Impl__obj::get_value(y))->join(HX_("\x1f""",1f,00,00,00)));
+HXDLIN( 162)					return ::Reflect_obj::compare(_hx_tmp1,::Array_obj< ::String >::__new(1)->init(0,_hx_tmp2)->concat(::borogove::_DataForm::Field_Impl__obj::get_value(y))->join(HX_("\x1f""",1f,00,00,00)));
             				}
             				HX_END_LOCAL_FUNC2(return)
 
-HXLINE( 150)				 ::borogove::Stanza form = _g5->__get(_g4).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 150)				_g4 = (_g4 + 1);
-HXLINE( 151)				::Array< ::Dynamic> fields = form->allTags(HX_("field",ba,94,93,00),null());
-HXLINE( 152)				fields->sort( ::Dynamic(new _hx_Closure_0()));
-HXLINE( 153)				{
-HXLINE( 153)					int _g6 = 0;
-HXDLIN( 153)					while((_g6 < fields->length)){
-HXLINE( 153)						 ::borogove::Stanza field = fields->__get(_g6).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 153)						_g6 = (_g6 + 1);
-HXLINE( 154)						::Array< ::String > values = ::borogove::_DataForm::Field_Impl__obj::get_value(field);
-HXLINE( 155)						values->sort(::Reflect_obj::compare_dyn());
-HXLINE( 156)						{
-HXLINE( 156)							::String s1;
-HXDLIN( 156)							::String tmp = ( (::String)(::Reflect_obj::field(field->attr,HX_("var",e7,de,59,00))) );
-HXDLIN( 156)							if (::hx::IsNotNull( tmp )) {
-HXLINE( 156)								s1 = tmp;
+HXLINE( 160)				 ::borogove::Stanza form = _g5->__get(_g4).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 160)				_g4 = (_g4 + 1);
+HXLINE( 161)				::Array< ::Dynamic> fields = form->allTags(HX_("field",ba,94,93,00),null());
+HXLINE( 162)				fields->sort( ::Dynamic(new _hx_Closure_0()));
+HXLINE( 163)				{
+HXLINE( 163)					int _g6 = 0;
+HXDLIN( 163)					while((_g6 < fields->length)){
+HXLINE( 163)						 ::borogove::Stanza field = fields->__get(_g6).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 163)						_g6 = (_g6 + 1);
+HXLINE( 164)						::Array< ::String > values = ::borogove::_DataForm::Field_Impl__obj::get_value(field);
+HXLINE( 165)						values->sort(::Reflect_obj::compare_dyn());
+HXLINE( 166)						{
+HXLINE( 166)							::String s1;
+HXDLIN( 166)							::String tmp = field->attr->get_string(HX_("var",e7,de,59,00));
+HXDLIN( 166)							if (::hx::IsNotNull( tmp )) {
+HXLINE( 166)								s1 = tmp;
             							}
             							else {
-HXLINE( 156)								s1 = HX_("",00,00,00,00);
+HXLINE( 166)								s1 = HX_("",00,00,00,00);
             							}
-HXDLIN( 156)							 ::haxe::io::Bytes b1 = ::haxe::io::Bytes_obj::ofString(s1,null());
-HXDLIN( 156)							s->writeBytes(b1,0,b1->length);
+HXDLIN( 166)							 ::haxe::io::Bytes b1 = ::haxe::io::Bytes_obj::ofString(s1,null());
+HXDLIN( 166)							s->writeBytes(b1,0,b1->length);
             						}
-HXLINE( 157)						s->writeByte(31);
-HXLINE( 158)						{
-HXLINE( 158)							int _g7 = 0;
-HXDLIN( 158)							while((_g7 < values->length)){
-HXLINE( 158)								::String value = values->__get(_g7);
-HXDLIN( 158)								_g7 = (_g7 + 1);
-HXLINE( 159)								{
-HXLINE( 159)									 ::haxe::io::Bytes b2 = ::haxe::io::Bytes_obj::ofString(value,null());
-HXDLIN( 159)									s->writeBytes(b2,0,b2->length);
+HXLINE( 167)						s->writeByte(31);
+HXLINE( 168)						{
+HXLINE( 168)							int _g7 = 0;
+HXDLIN( 168)							while((_g7 < values->length)){
+HXLINE( 168)								::String value = values->__get(_g7);
+HXDLIN( 168)								_g7 = (_g7 + 1);
+HXLINE( 169)								{
+HXLINE( 169)									 ::haxe::io::Bytes b2 = ::haxe::io::Bytes_obj::ofString(value,null());
+HXDLIN( 169)									s->writeBytes(b2,0,b2->length);
             								}
-HXLINE( 160)								s->writeByte(31);
+HXLINE( 170)								s->writeByte(31);
             							}
             						}
-HXLINE( 162)						s->writeByte(30);
+HXLINE( 172)						s->writeByte(30);
             					}
             				}
-HXLINE( 164)				s->writeByte(29);
+HXLINE( 174)				s->writeByte(29);
             			}
             		}
-HXLINE( 166)		s->writeByte(28);
-HXLINE( 167)		return s->getBytes();
+HXLINE( 176)		s->writeByte(28);
+HXLINE( 177)		return s->getBytes();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Caps_obj,hashInput,return )
 
  ::borogove::Hash Caps_obj::computeVer(){
-            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_170_computeVer)
-HXLINE( 171)		::String s = HX_("",00,00,00,00);
-HXLINE( 172)		{
-HXLINE( 172)			int _g = 0;
-HXDLIN( 172)			::Array< ::Dynamic> _g1 = this->identities;
-HXDLIN( 172)			while((_g < _g1->length)){
-HXLINE( 172)				 ::borogove::Identity identity = _g1->__get(_g).StaticCast<  ::borogove::Identity >();
-HXDLIN( 172)				_g = (_g + 1);
-HXLINE( 173)				s = (s + (identity->ver() + HX_("<",3c,00,00,00)));
+            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_180_computeVer)
+HXLINE( 181)		::String s = HX_("",00,00,00,00);
+HXLINE( 182)		{
+HXLINE( 182)			int _g = 0;
+HXDLIN( 182)			::Array< ::Dynamic> _g1 = this->identities;
+HXDLIN( 182)			while((_g < _g1->length)){
+HXLINE( 182)				 ::borogove::Identity identity = _g1->__get(_g).StaticCast<  ::borogove::Identity >();
+HXDLIN( 182)				_g = (_g + 1);
+HXLINE( 183)				s = (s + (identity->ver() + HX_("<",3c,00,00,00)));
             			}
             		}
-HXLINE( 175)		{
-HXLINE( 175)			int _g2 = 0;
-HXDLIN( 175)			::Array< ::String > _g3 = this->features;
-HXDLIN( 175)			while((_g2 < _g3->length)){
-HXLINE( 175)				::String feature = _g3->__get(_g2);
-HXDLIN( 175)				_g2 = (_g2 + 1);
-HXLINE( 176)				s = (s + (feature + HX_("<",3c,00,00,00)));
+HXLINE( 185)		{
+HXLINE( 185)			int _g2 = 0;
+HXDLIN( 185)			::Array< ::String > _g3 = this->features;
+HXDLIN( 185)			while((_g2 < _g3->length)){
+HXLINE( 185)				::String feature = _g3->__get(_g2);
+HXDLIN( 185)				_g2 = (_g2 + 1);
+HXLINE( 186)				s = (s + (feature + HX_("<",3c,00,00,00)));
             			}
             		}
-HXLINE( 178)		{
-HXLINE( 178)			int _g4 = 0;
-HXDLIN( 178)			::Array< ::Dynamic> _g5 = this->data;
-HXDLIN( 178)			while((_g4 < _g5->length)){
+HXLINE( 188)		{
+HXLINE( 188)			int _g4 = 0;
+HXDLIN( 188)			::Array< ::Dynamic> _g5 = this->data;
+HXDLIN( 188)			while((_g4 < _g5->length)){
             				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             				int _hx_run( ::borogove::Stanza x, ::borogove::Stanza y){
-            					HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_183_computeVer)
-HXLINE( 183)					::String _hx_tmp;
-HXDLIN( 183)					::String tmp = ( (::String)(::Reflect_obj::field(x->attr,HX_("var",e7,de,59,00))) );
-HXDLIN( 183)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 183)						_hx_tmp = tmp;
+            					HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_193_computeVer)
+HXLINE( 193)					::String _hx_tmp;
+HXDLIN( 193)					::String tmp = x->attr->get_string(HX_("var",e7,de,59,00));
+HXDLIN( 193)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 193)						_hx_tmp = tmp;
             					}
             					else {
-HXLINE( 183)						_hx_tmp = HX_("",00,00,00,00);
+HXLINE( 193)						_hx_tmp = HX_("",00,00,00,00);
             					}
-HXDLIN( 183)					::String tmp1 = ( (::String)(::Reflect_obj::field(y->attr,HX_("var",e7,de,59,00))) );
-HXDLIN( 183)					::String _hx_tmp1;
-HXDLIN( 183)					if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 183)						_hx_tmp1 = tmp1;
+HXDLIN( 193)					::String tmp1 = y->attr->get_string(HX_("var",e7,de,59,00));
+HXDLIN( 193)					::String _hx_tmp1;
+HXDLIN( 193)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 193)						_hx_tmp1 = tmp1;
             					}
             					else {
-HXLINE( 183)						_hx_tmp1 = HX_("",00,00,00,00);
+HXLINE( 193)						_hx_tmp1 = HX_("",00,00,00,00);
             					}
-HXDLIN( 183)					return ::Reflect_obj::compare(_hx_tmp,_hx_tmp1);
+HXDLIN( 193)					return ::Reflect_obj::compare(_hx_tmp,_hx_tmp1);
             				}
             				HX_END_LOCAL_FUNC2(return)
 
-HXLINE( 178)				 ::borogove::Stanza form = _g5->__get(_g4).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 178)				_g4 = (_g4 + 1);
-HXLINE( 179)				 ::borogove::Stanza formType = ::borogove::_DataForm::DataForm_Impl__obj::field(form,HX_("FORM_TYPE",d5,96,c9,5a));
-HXLINE( 180)				::String s1;
-HXDLIN( 180)				if (::hx::IsNull( formType )) {
-HXLINE( 180)					s1 = HX_("",00,00,00,00);
+HXLINE( 188)				 ::borogove::Stanza form = _g5->__get(_g4).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 188)				_g4 = (_g4 + 1);
+HXLINE( 189)				 ::borogove::Stanza formType = ::borogove::_DataForm::DataForm_Impl__obj::field(form,HX_("FORM_TYPE",d5,96,c9,5a));
+HXLINE( 190)				::String s1;
+HXDLIN( 190)				if (::hx::IsNull( formType )) {
+HXLINE( 190)					s1 = HX_("",00,00,00,00);
             				}
             				else {
-HXLINE( 180)					s1 = ::borogove::_DataForm::Field_Impl__obj::get_value(formType)->__get(0);
+HXLINE( 190)					s1 = ::borogove::_DataForm::Field_Impl__obj::get_value(formType)->__get(0);
             				}
-HXDLIN( 180)				s = (s + s1);
-HXLINE( 181)				s = (s + HX_("<",3c,00,00,00));
-HXLINE( 182)				::Array< ::Dynamic> fields = form->allTags(HX_("field",ba,94,93,00),null());
-HXLINE( 183)				fields->sort( ::Dynamic(new _hx_Closure_0()));
-HXLINE( 184)				{
-HXLINE( 184)					int _g6 = 0;
-HXDLIN( 184)					while((_g6 < fields->length)){
-HXLINE( 184)						 ::borogove::Stanza field = fields->__get(_g6).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 184)						_g6 = (_g6 + 1);
-HXLINE( 185)						::String tmp = ( (::String)(::Reflect_obj::field(field->attr,HX_("var",e7,de,59,00))) );
-HXDLIN( 185)						::String _hx_tmp;
-HXDLIN( 185)						if (::hx::IsNotNull( tmp )) {
-HXLINE( 185)							_hx_tmp = tmp;
+HXDLIN( 190)				s = (s + s1);
+HXLINE( 191)				s = (s + HX_("<",3c,00,00,00));
+HXLINE( 192)				::Array< ::Dynamic> fields = form->allTags(HX_("field",ba,94,93,00),null());
+HXLINE( 193)				fields->sort( ::Dynamic(new _hx_Closure_0()));
+HXLINE( 194)				{
+HXLINE( 194)					int _g6 = 0;
+HXDLIN( 194)					while((_g6 < fields->length)){
+HXLINE( 194)						 ::borogove::Stanza field = fields->__get(_g6).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 194)						_g6 = (_g6 + 1);
+HXLINE( 195)						::String tmp = field->attr->get_string(HX_("var",e7,de,59,00));
+HXDLIN( 195)						::String _hx_tmp;
+HXDLIN( 195)						if (::hx::IsNotNull( tmp )) {
+HXLINE( 195)							_hx_tmp = tmp;
             						}
             						else {
-HXLINE( 185)							_hx_tmp = HX_("",00,00,00,00);
+HXLINE( 195)							_hx_tmp = HX_("",00,00,00,00);
             						}
-HXDLIN( 185)						if ((_hx_tmp != HX_("FORM_TYPE",d5,96,c9,5a))) {
-HXLINE( 186)							::String tmp1 = ( (::String)(::Reflect_obj::field(field->attr,HX_("var",e7,de,59,00))) );
-HXDLIN( 186)							::String s2;
-HXDLIN( 186)							if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 186)								s2 = tmp1;
+HXDLIN( 195)						if ((_hx_tmp != HX_("FORM_TYPE",d5,96,c9,5a))) {
+HXLINE( 196)							::String tmp1 = field->attr->get_string(HX_("var",e7,de,59,00));
+HXDLIN( 196)							::String s2;
+HXDLIN( 196)							if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 196)								s2 = tmp1;
             							}
             							else {
-HXLINE( 186)								s2 = HX_("",00,00,00,00);
+HXLINE( 196)								s2 = HX_("",00,00,00,00);
             							}
-HXDLIN( 186)							s = (s + (s2 + HX_("<",3c,00,00,00)));
-HXLINE( 187)							::Array< ::String > values = ::borogove::_DataForm::Field_Impl__obj::get_value(field);
-HXLINE( 188)							values->sort(::Reflect_obj::compare_dyn());
-HXLINE( 189)							{
-HXLINE( 189)								int _g7 = 0;
-HXDLIN( 189)								while((_g7 < values->length)){
-HXLINE( 189)									::String value = values->__get(_g7);
-HXDLIN( 189)									_g7 = (_g7 + 1);
-HXLINE( 190)									s = (s + (value + HX_("<",3c,00,00,00)));
+HXDLIN( 196)							s = (s + (s2 + HX_("<",3c,00,00,00)));
+HXLINE( 197)							::Array< ::String > values = ::borogove::_DataForm::Field_Impl__obj::get_value(field);
+HXLINE( 198)							values->sort(::Reflect_obj::compare_dyn());
+HXLINE( 199)							{
+HXLINE( 199)								int _g7 = 0;
+HXDLIN( 199)								while((_g7 < values->length)){
+HXLINE( 199)									::String value = values->__get(_g7);
+HXDLIN( 199)									_g7 = (_g7 + 1);
+HXLINE( 200)									s = (s + (value + HX_("<",3c,00,00,00)));
             								}
             							}
             						}
@@ -460,29 +470,29 @@ HXLINE( 190)									s = (s + (value + HX_("<",3c,00,00,00)));
             				}
             			}
             		}
-HXLINE( 195)		return ::borogove::Hash_obj::sha1(::haxe::io::Bytes_obj::ofString(s,null()));
+HXLINE( 205)		return ::borogove::Hash_obj::sha1(::haxe::io::Bytes_obj::ofString(s,null()));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Caps_obj,computeVer,return )
 
  ::borogove::Hash Caps_obj::verRaw(){
-            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_201_verRaw)
-HXLINE( 202)		 ::borogove::Hash ver = this->_ver;
-HXLINE( 203)		if (::hx::IsNotNull( ver )) {
-HXLINE( 203)			return ver;
+            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_211_verRaw)
+HXLINE( 212)		 ::borogove::Hash ver = this->_ver;
+HXLINE( 213)		if (::hx::IsNotNull( ver )) {
+HXLINE( 213)			return ver;
             		}
-HXLINE( 205)		 ::borogove::Hash newVer = this->computeVer();
-HXLINE( 206)		this->_ver = newVer;
-HXLINE( 207)		return newVer;
+HXLINE( 215)		 ::borogove::Hash newVer = this->computeVer();
+HXLINE( 216)		this->_ver = newVer;
+HXLINE( 217)		return newVer;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Caps_obj,verRaw,return )
 
 ::String Caps_obj::ver(){
-            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_214_ver)
-HXDLIN( 214)		return this->verRaw()->toBase64();
+            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_224_ver)
+HXDLIN( 224)		return this->verRaw()->toBase64();
             	}
 
 
@@ -491,44 +501,57 @@ HX_DEFINE_DYNAMIC_FUNC0(Caps_obj,ver,return )
  ::Dynamic Caps_obj::filter( ::Dynamic caps, ::Dynamic predicate){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,predicate, ::Dynamic,caps,::Array< ::Dynamic>,nextMatch) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_27_filter)
-HXLINE(  28)			while(( (bool)(caps->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(  29)				 ::Dynamic n = caps->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE(  30)				if (( (bool)(predicate( ::Dynamic(n->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)))) )) {
-HXLINE(  31)					nextMatch[0] = n;
-HXLINE(  32)					return;
+            			HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_28_filter)
+HXLINE(  29)			while(( (bool)(caps->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(  30)				 ::Dynamic n = caps->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE(  31)				if (( (bool)(predicate( ::Dynamic(n->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)))) )) {
+HXLINE(  32)					nextMatch[0] = n;
+HXLINE(  33)					return;
             				}
             			}
-HXLINE(  35)			nextMatch[0] = null();
+HXLINE(  36)			nextMatch[0] = null();
+            		}
+            		HX_END_LOCAL_FUNC0((void))
+
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,findNext,::Array< bool >,initialized) HXARGC(0)
+            		void _hx_run(){
+            			HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_40_filter)
+HXLINE(  40)			if (!(initialized->__get(0))) {
+HXLINE(  41)				initialized[0] = true;
+HXLINE(  42)				findNext();
+            			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1,::Array< ::Dynamic>,nextMatch) HXARGC(0)
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2,::Array< ::Dynamic>,nextMatch, ::Dynamic,ensureInit) HXARGC(0)
             		bool _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_41_filter)
-HXLINE(  41)			return ::hx::IsNotNull( nextMatch->__get(0) );
+            			HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_47_filter)
+HXLINE(  48)			ensureInit();
+HXLINE(  49)			return ::hx::IsNotNull( nextMatch->__get(0) );
             		}
             		HX_END_LOCAL_FUNC0(return)
 
-            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::Dynamic,findNext,::Array< ::Dynamic>,nextMatch) HXARGC(0)
+            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,findNext,::Array< ::Dynamic>,nextMatch, ::Dynamic,ensureInit) HXARGC(0)
             		 ::Dynamic _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_42_filter)
-HXLINE(  43)			 ::Dynamic r = nextMatch->__get(0);
-HXLINE(  44)			if (::hx::IsNull( r )) {
-HXLINE(  44)				HX_STACK_DO_THROW(HX_("No more elements",23,94,c5,f6));
+            			HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_51_filter)
+HXLINE(  52)			ensureInit();
+HXLINE(  53)			 ::Dynamic r = nextMatch->__get(0);
+HXLINE(  54)			if (::hx::IsNull( r )) {
+HXLINE(  54)				HX_STACK_DO_THROW(HX_("No more elements",23,94,c5,f6));
             			}
-HXLINE(  46)			findNext();
-HXLINE(  47)			return r;
+HXLINE(  56)			findNext();
+HXLINE(  57)			return r;
             		}
             		HX_END_LOCAL_FUNC0(return)
 
             	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_24_filter)
 HXLINE(  25)		::Array< ::Dynamic> nextMatch = ::Array_obj< ::Dynamic>::__new(1)->init(0,null());
-HXLINE(  27)		 ::Dynamic findNext =  ::Dynamic(new _hx_Closure_0(predicate,caps,nextMatch));
-HXLINE(  38)		findNext();
-HXLINE(  40)		return  ::Dynamic(::hx::Anon_obj::Create(2)
-            			->setFixed(0,HX_("hasNext",6d,a5,46,18), ::Dynamic(new _hx_Closure_1(nextMatch)))
-            			->setFixed(1,HX_("next",f3,84,02,49), ::Dynamic(new _hx_Closure_2(findNext,nextMatch))));
+HXLINE(  26)		::Array< bool > initialized = ::Array_obj< bool >::fromData( _hx_array_data_daf930ae_32,1);
+HXLINE(  28)		 ::Dynamic findNext =  ::Dynamic(new _hx_Closure_0(predicate,caps,nextMatch));
+HXLINE(  39)		 ::Dynamic ensureInit =  ::Dynamic(new _hx_Closure_1(findNext,initialized));
+HXLINE(  46)		return  ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("hasNext",6d,a5,46,18), ::Dynamic(new _hx_Closure_2(nextMatch,ensureInit)))
+            			->setFixed(1,HX_("next",f3,84,02,49), ::Dynamic(new _hx_Closure_3(findNext,nextMatch,ensureInit))));
             	}
 
 
@@ -539,36 +562,36 @@ STATIC_HX_DEFINE_DYNAMIC_FUNC2(Caps_obj,filter,return )
             		bool _hx_run( ::borogove::Caps c){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::String,type,::String,category) HXARGC(1)
             			bool _hx_run( ::borogove::Identity identity){
-            				HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_54_withIdentity)
-HXDLIN(  54)				bool _hx_tmp;
-HXDLIN(  54)				if (::hx::IsNotNull( category )) {
-HXDLIN(  54)					_hx_tmp = (category == identity->category);
+            				HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_64_withIdentity)
+HXDLIN(  64)				bool _hx_tmp;
+HXDLIN(  64)				if (::hx::IsNotNull( category )) {
+HXDLIN(  64)					_hx_tmp = (category == identity->category);
             				}
             				else {
-HXDLIN(  54)					_hx_tmp = true;
+HXDLIN(  64)					_hx_tmp = true;
             				}
-HXDLIN(  54)				if (_hx_tmp) {
-HXDLIN(  54)					if (::hx::IsNotNull( type )) {
-HXDLIN(  54)						return (type == identity->type);
+HXDLIN(  64)				if (_hx_tmp) {
+HXDLIN(  64)					if (::hx::IsNotNull( type )) {
+HXDLIN(  64)						return (type == identity->type);
             					}
             					else {
-HXDLIN(  54)						return true;
+HXDLIN(  64)						return true;
             					}
             				}
             				else {
-HXDLIN(  54)					return false;
+HXDLIN(  64)					return false;
             				}
-HXDLIN(  54)				return false;
+HXDLIN(  64)				return false;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_54_withIdentity)
-HXDLIN(  54)			return ::Lambda_obj::exists(c->identities, ::Dynamic(new _hx_Closure_0(type,category)));
+            			HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_64_withIdentity)
+HXDLIN(  64)			return ::Lambda_obj::exists(c->identities, ::Dynamic(new _hx_Closure_0(type,category)));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_54_withIdentity)
-HXDLIN(  54)		return ::borogove::Caps_obj::filter(caps, ::Dynamic(new _hx_Closure_1(type,category)));
+            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_64_withIdentity)
+HXDLIN(  64)		return ::borogove::Caps_obj::filter(caps, ::Dynamic(new _hx_Closure_1(type,category)));
             	}
 
 
@@ -577,13 +600,13 @@ STATIC_HX_DEFINE_DYNAMIC_FUNC3(Caps_obj,withIdentity,return )
  ::Dynamic Caps_obj::withFeature( ::Dynamic caps,::String feature){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::String,feature) HXARGC(1)
             		bool _hx_run( ::borogove::Caps c){
-            			HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_59_withFeature)
-HXDLIN(  59)			return c->features->contains(feature);
+            			HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_69_withFeature)
+HXDLIN(  69)			return c->features->contains(feature);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_59_withFeature)
-HXDLIN(  59)		return ::borogove::Caps_obj::filter(caps, ::Dynamic(new _hx_Closure_0(feature)));
+            	HX_STACKFRAME(&_hx_pos_4d51f4c65f9a1a9f_69_withFeature)
+HXDLIN(  69)		return ::borogove::Caps_obj::filter(caps, ::Dynamic(new _hx_Closure_0(feature)));
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/CapsRepo.cpp b/Sources/c_borogove/src/borogove/CapsRepo.cpp
index 5707fff..b6cb648 100644
--- a/Sources/c_borogove/src/borogove/CapsRepo.cpp
+++ b/Sources/c_borogove/src/borogove/CapsRepo.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_borogove_Caps
 #include <borogove/Caps.h>
 #endif
@@ -94,7 +91,7 @@ HXLINE(  38)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(result);
             	HX_STACKFRAME(&_hx_pos_92d2b0aa8e71fa73_28_getAsync)
 HXDLIN(  28)		 ::borogove::CapsRepo _gthis = ::hx::ObjectPtr<OBJ_>(this);
 HXLINE(  29)		 ::borogove::Stanza c = presence->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
-HXDLIN(  29)		 ::Dynamic tmp;
+HXDLIN(  29)		 ::haxe::ds::StringMap tmp;
 HXDLIN(  29)		if (::hx::IsNotNull( c )) {
 HXLINE(  29)			tmp = c->attr;
             		}
@@ -103,7 +100,7 @@ HXLINE(  29)			tmp = null();
             		}
 HXDLIN(  29)		::String ver;
 HXDLIN(  29)		if (::hx::IsNotNull( tmp )) {
-HXLINE(  29)			ver = ( (::String)(::Reflect_obj::field(tmp,HX_("ver",63,e2,59,00))) );
+HXLINE(  29)			ver = tmp->get_string(HX_("ver",63,e2,59,00));
             		}
             		else {
 HXLINE(  29)			ver = null();
@@ -124,7 +121,7 @@ HX_DEFINE_DYNAMIC_FUNC1(CapsRepo_obj,getAsync,return )
  ::borogove::Caps CapsRepo_obj::get( ::borogove::Stanza presence){
             	HX_STACKFRAME(&_hx_pos_92d2b0aa8e71fa73_42_get)
 HXLINE(  43)		 ::borogove::Stanza c = presence->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
-HXDLIN(  43)		 ::Dynamic tmp;
+HXDLIN(  43)		 ::haxe::ds::StringMap tmp;
 HXDLIN(  43)		if (::hx::IsNotNull( c )) {
 HXLINE(  43)			tmp = c->attr;
             		}
@@ -133,7 +130,7 @@ HXLINE(  43)			tmp = null();
             		}
 HXDLIN(  43)		::String ver;
 HXDLIN(  43)		if (::hx::IsNotNull( tmp )) {
-HXLINE(  43)			ver = ( (::String)(::Reflect_obj::field(tmp,HX_("ver",63,e2,59,00))) );
+HXLINE(  43)			ver = tmp->get_string(HX_("ver",63,e2,59,00));
             		}
             		else {
 HXLINE(  43)			ver = null();
diff --git a/Sources/c_borogove/src/borogove/Channel.cpp b/Sources/c_borogove/src/borogove/Channel.cpp
index 18c626b..18f0fd0 100644
--- a/Sources/c_borogove/src/borogove/Channel.cpp
+++ b/Sources/c_borogove/src/borogove/Channel.cpp
@@ -16,9 +16,15 @@
 #ifndef INCLUDED__FractionalIndexing_FractionalIndexing_Fields_
 #include <_FractionalIndexing/FractionalIndexing_Fields_.h>
 #endif
+#ifndef INCLUDED__HaxeCBridge_HaxeArray_Impl_
+#include <_HaxeCBridge/HaxeArray_Impl_.h>
+#endif
 #ifndef INCLUDED__UUIDv7_UUIDv7_Fields_
 #include <_UUIDv7/UUIDv7_Fields_.h>
 #endif
+#ifndef INCLUDED_borogove_AttachmentSource
+#include <borogove/AttachmentSource.h>
+#endif
 #ifndef INCLUDED_borogove_AvailableChat
 #include <borogove/AvailableChat.h>
 #endif
@@ -31,9 +37,15 @@
 #ifndef INCLUDED_borogove_Channel
 #include <borogove/Channel.h>
 #endif
+#ifndef INCLUDED_borogove_ChannelPinger
+#include <borogove/ChannelPinger.h>
+#endif
 #ifndef INCLUDED_borogove_Chat
 #include <borogove/Chat.h>
 #endif
+#ifndef INCLUDED_borogove_ChatAttachment
+#include <borogove/ChatAttachment.h>
+#endif
 #ifndef INCLUDED_borogove_ChatMessage
 #include <borogove/ChatMessage.h>
 #endif
@@ -43,6 +55,9 @@
 #ifndef INCLUDED_borogove_Client
 #include <borogove/Client.h>
 #endif
+#ifndef INCLUDED_borogove_Command
+#include <borogove/Command.h>
+#endif
 #ifndef INCLUDED_borogove_CustomEmojiReaction
 #include <borogove/CustomEmojiReaction.h>
 #endif
@@ -94,6 +109,9 @@
 #ifndef INCLUDED_borogove_ModerationAction
 #include <borogove/ModerationAction.h>
 #endif
+#ifndef INCLUDED_borogove_MucSettingsCommand
+#include <borogove/MucSettingsCommand.h>
+#endif
 #ifndef INCLUDED_borogove_Outbox
 #include <borogove/Outbox.h>
 #endif
@@ -127,6 +145,9 @@
 #ifndef INCLUDED_borogove__DataForm_Field_Impl_
 #include <borogove/_DataForm/Field_Impl_.h>
 #endif
+#ifndef INCLUDED_borogove__Source_Source_Impl_
+#include <borogove/_Source/Source_Impl_.h>
+#endif
 #ifndef INCLUDED_borogove_queries_DiscoInfoGet
 #include <borogove/queries/DiscoInfoGet.h>
 #endif
@@ -145,12 +166,30 @@
 #ifndef INCLUDED_haxe_Timer
 #include <haxe/Timer.h>
 #endif
+#ifndef INCLUDED_haxe_crypto_Base64
+#include <haxe/crypto/Base64.h>
+#endif
 #ifndef INCLUDED_haxe_ds_StringMap
 #include <haxe/ds/StringMap.h>
 #endif
 #ifndef INCLUDED_haxe_io_Bytes
 #include <haxe/io/Bytes.h>
 #endif
+#ifndef INCLUDED_haxe_io_BytesOutput
+#include <haxe/io/BytesOutput.h>
+#endif
+#ifndef INCLUDED_haxe_io_Input
+#include <haxe/io/Input.h>
+#endif
+#ifndef INCLUDED_haxe_io_Output
+#include <haxe/io/Output.h>
+#endif
+#ifndef INCLUDED_sys_io_File
+#include <sys/io/File.h>
+#endif
+#ifndef INCLUDED_sys_io_FileInput
+#include <sys/io/FileInput.h>
+#endif
 #ifndef INCLUDED_thenshim_PromiseTools
 #include <thenshim/PromiseTools.h>
 #endif
@@ -160,160 +199,251 @@
 #ifndef INCLUDED_thenshim__Promise_Promise_Impl_
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
+#ifndef INCLUDED_tink_chunk_ByteChunk
+#include <tink/chunk/ByteChunk.h>
+#endif
+#ifndef INCLUDED_tink_chunk_ChunkBase
+#include <tink/chunk/ChunkBase.h>
+#endif
+#ifndef INCLUDED_tink_chunk_ChunkObject
+#include <tink/chunk/ChunkObject.h>
+#endif
+#ifndef INCLUDED_tink_core_LinkObject
+#include <tink/core/LinkObject.h>
+#endif
+#ifndef INCLUDED_tink_core__Future_FutureObject
+#include <tink/core/_Future/FutureObject.h>
+#endif
+#ifndef INCLUDED_tink_core__Lazy_Computable
+#include <tink/core/_Lazy/Computable.h>
+#endif
+#ifndef INCLUDED_tink_core__Lazy_LazyConst
+#include <tink/core/_Lazy/LazyConst.h>
+#endif
+#ifndef INCLUDED_tink_core__Lazy_LazyObject
+#include <tink/core/_Lazy/LazyObject.h>
+#endif
+#ifndef INCLUDED_tink_io_PipeResult
+#include <tink/io/PipeResult.h>
+#endif
+#ifndef INCLUDED_tink_io_SinkBase
+#include <tink/io/SinkBase.h>
+#endif
+#ifndef INCLUDED_tink_io_SinkObject
+#include <tink/io/SinkObject.h>
+#endif
+#ifndef INCLUDED_tink_io_WorkerObject
+#include <tink/io/WorkerObject.h>
+#endif
+#ifndef INCLUDED_tink_io__Source_Source_Impl_
+#include <tink/io/_Source/Source_Impl_.h>
+#endif
+#ifndef INCLUDED_tink_io__Worker_Worker_Impl_
+#include <tink/io/_Worker/Worker_Impl_.h>
+#endif
+#ifndef INCLUDED_tink_io_std_InputSource
+#include <tink/io/std/InputSource.h>
+#endif
+#ifndef INCLUDED_tink_io_std_OutputSink
+#include <tink/io/std/OutputSink.h>
+#endif
+#ifndef INCLUDED_tink_streams_Generator
+#include <tink/streams/Generator.h>
+#endif
+#ifndef INCLUDED_tink_streams_Single
+#include <tink/streams/Single.h>
+#endif
+#ifndef INCLUDED_tink_streams_StreamBase
+#include <tink/streams/StreamBase.h>
+#endif
+#ifndef INCLUDED_tink_streams_StreamObject
+#include <tink/streams/StreamObject.h>
+#endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1430_new,"borogove.Channel","new",0x12050648,"borogove.Channel.new","borogove/Chat.hx",1430,0x1763ae98)
+HX_DEFINE_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1528_new,"borogove.Channel","new",0x12050648,"borogove.Channel.new","borogove/Chat.hx",1528,0x1763ae98)
 static const ::String _hx_array_data_da6a8256_1[] = {
 	HX_("http://jabber.org/protocol/muc",07,b2,7f,c6),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1487_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1487,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1476_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1476,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1462_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1462,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1468_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1468,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1517_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1517,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1528_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1528,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1509_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1509,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1503_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1503,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1542_selfPingSuccess,"borogove.Channel","selfPingSuccess",0x1336bf2d,"borogove.Channel.selfPingSuccess","borogove/Chat.hx",1542,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1534_selfPingSuccess,"borogove.Channel","selfPingSuccess",0x1336bf2d,"borogove.Channel.selfPingSuccess","borogove/Chat.hx",1534,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1545_getDisplayName,"borogove.Channel","getDisplayName",0x49aca7cf,"borogove.Channel.getDisplayName","borogove/Chat.hx",1545,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1561_subject,"borogove.Channel","subject",0x396e4b94,"borogove.Channel.subject","borogove/Chat.hx",1561,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1568_description,"borogove.Channel","description",0x2f5266e4,"borogove.Channel.description","borogove/Chat.hx",1568,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1572_info,"borogove.Channel","info",0xaf192d86,"borogove.Channel.info","borogove/Chat.hx",1572,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1575_invite,"borogove.Channel","invite",0x94735ce1,"borogove.Channel.invite","borogove/Chat.hx",1575,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1588_canInvite,"borogove.Channel","canInvite",0x7f9cd9e1,"borogove.Channel.canInvite","borogove/Chat.hx",1588,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1600_canSend,"borogove.Channel","canSend",0x7a8ebf60,"borogove.Channel.canSend","borogove/Chat.hx",1600,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1610_canModerate,"borogove.Channel","canModerate",0xd0f331db,"borogove.Channel.canModerate","borogove/Chat.hx",1610,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1623_getCaps,"borogove.Channel","getCaps",0x242315bf,"borogove.Channel.getCaps","borogove/Chat.hx",1623,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1624_getCaps,"borogove.Channel","getCaps",0x242315bf,"borogove.Channel.getCaps","borogove/Chat.hx",1624,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1620_getCaps,"borogove.Channel","getCaps",0x242315bf,"borogove.Channel.getCaps","borogove/Chat.hx",1620,0x1763ae98)
-static const bool _hx_array_data_da6a8256_26[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1591_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1591,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1580_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1580,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1565_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1565,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1572_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1572,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1626_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1626,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1637_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1637,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1613_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1613,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1607_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1607,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1643_selfPingSuccess,"borogove.Channel","selfPingSuccess",0x1336bf2d,"borogove.Channel.selfPingSuccess","borogove/Chat.hx",1643,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1651_getDisplayName,"borogove.Channel","getDisplayName",0x49aca7cf,"borogove.Channel.getDisplayName","borogove/Chat.hx",1651,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1667_subject,"borogove.Channel","subject",0x396e4b94,"borogove.Channel.subject","borogove/Chat.hx",1667,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1673_canSetSubject,"borogove.Channel","canSetSubject",0x0459fa42,"borogove.Channel.canSetSubject","borogove/Chat.hx",1673,0x1763ae98)
+static const ::String _hx_array_data_da6a8256_16[] = {
+	HX_("0",30,00,00,00),
+};
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1690_setSubject,"borogove.Channel","setSubject",0xba2dfd42,"borogove.Channel.setSubject","borogove/Chat.hx",1690,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1700_description,"borogove.Channel","description",0x2f5266e4,"borogove.Channel.description","borogove/Chat.hx",1700,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1704_info,"borogove.Channel","info",0xaf192d86,"borogove.Channel.info","borogove/Chat.hx",1704,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1707_invite,"borogove.Channel","invite",0x94735ce1,"borogove.Channel.invite","borogove/Chat.hx",1707,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1720_canInvite,"borogove.Channel","canInvite",0x7f9cd9e1,"borogove.Channel.canInvite","borogove/Chat.hx",1720,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1732_canSend,"borogove.Channel","canSend",0x7a8ebf60,"borogove.Channel.canSend","borogove/Chat.hx",1732,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1742_canModerate,"borogove.Channel","canModerate",0xd0f331db,"borogove.Channel.canModerate","borogove/Chat.hx",1742,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1758_requestToSend,"borogove.Channel","requestToSend",0x8c6ad8fa,"borogove.Channel.requestToSend","borogove/Chat.hx",1758,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1754_requestToSend,"borogove.Channel","requestToSend",0x8c6ad8fa,"borogove.Channel.requestToSend","borogove/Chat.hx",1754,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1769_isOwner,"borogove.Channel","isOwner",0xe4e285d1,"borogove.Channel.isOwner","borogove/Chat.hx",1769,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1766_isOwner,"borogove.Channel","isOwner",0xe4e285d1,"borogove.Channel.isOwner","borogove/Chat.hx",1766,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1773_commands,"borogove.Channel","commands",0x97f011e0,"borogove.Channel.commands","borogove/Chat.hx",1773,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1772_commands,"borogove.Channel","commands",0x97f011e0,"borogove.Channel.commands","borogove/Chat.hx",1772,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1781_hasCommands,"borogove.Channel","hasCommands",0x6141f42a,"borogove.Channel.hasCommands","borogove/Chat.hx",1781,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1791_canSetPhoto,"borogove.Channel","canSetPhoto",0xd0054fc8,"borogove.Channel.canSetPhoto","borogove/Chat.hx",1791,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1799_setPhoto,"borogove.Channel","setPhoto",0xa9c292c8,"borogove.Channel.setPhoto","borogove/Chat.hx",1799,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1803_setPhoto,"borogove.Channel","setPhoto",0xa9c292c8,"borogove.Channel.setPhoto","borogove/Chat.hx",1803,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1821_getCaps,"borogove.Channel","getCaps",0x242315bf,"borogove.Channel.getCaps","borogove/Chat.hx",1821,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1822_getCaps,"borogove.Channel","getCaps",0x242315bf,"borogove.Channel.getCaps","borogove/Chat.hx",1822,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1818_getCaps,"borogove.Channel","getCaps",0x242315bf,"borogove.Channel.getCaps","borogove/Chat.hx",1818,0x1763ae98)
+static const bool _hx_array_data_da6a8256_38[] = {
 	1,
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1632_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1632,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1633_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1633,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1646_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1646,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1650_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1650,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1679_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1679,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1683_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1683,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1685_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1685,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1714_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1714,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1750_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1750,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1777_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1777,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1779_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1779,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1788_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1788,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1720_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1720,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1744_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1744,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1736_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1736,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1732_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1732,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1798_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1798,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1689_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1689,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1812_setTrusted,"borogove.Channel","setTrusted",0xa74cb38d,"borogove.Channel.setTrusted","borogove/Chat.hx",1812,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1818_isTrusted,"borogove.Channel","isTrusted",0xa81fc915,"borogove.Channel.isTrusted","borogove/Chat.hx",1818,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1825_isPrivate,"borogove.Channel","isPrivate",0x1ae83e21,"borogove.Channel.isPrivate","borogove/Chat.hx",1825,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1829_setupNotifications,"borogove.Channel","setupNotifications",0xe0d25d83,"borogove.Channel.setupNotifications","borogove/Chat.hx",1829,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1837_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1837,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1848_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1848,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1853_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1853,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1850_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1850,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1835_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1835,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1865_preview,"borogove.Channel","preview",0x4bc129f0,"borogove.Channel.preview","borogove/Chat.hx",1865,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1872_livePresence,"borogove.Channel","livePresence",0x1293c65f,"borogove.Channel.livePresence","borogove/Chat.hx",1872,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1879_syncing,"borogove.Channel","syncing",0xb70d474f,"borogove.Channel.syncing","borogove/Chat.hx",1879,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1887_setLastMessage,"borogove.Channel","setLastMessage",0x879768a7,"borogove.Channel.setLastMessage","borogove/Chat.hx",1887,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1883_setLastMessage,"borogove.Channel","setLastMessage",0x879768a7,"borogove.Channel.setLastMessage","borogove/Chat.hx",1883,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1882_setLastMessage,"borogove.Channel","setLastMessage",0x879768a7,"borogove.Channel.setLastMessage","borogove/Chat.hx",1882,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1895_canAudioCall,"borogove.Channel","canAudioCall",0x430d177c,"borogove.Channel.canAudioCall","borogove/Chat.hx",1895,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1899_canVideoCall,"borogove.Channel","canVideoCall",0x490fe9a1,"borogove.Channel.canVideoCall","borogove/Chat.hx",1899,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1903_nickInUse,"borogove.Channel","nickInUse",0xd519bea7,"borogove.Channel.nickInUse","borogove/Chat.hx",1903,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1908_getFullJid,"borogove.Channel","getFullJid",0x5d591998,"borogove.Channel.getFullJid","borogove/Chat.hx",1908,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1915_members,"borogove.Channel","members",0x2a5676c1,"borogove.Channel.members","borogove/Chat.hx",1915,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1912_members,"borogove.Channel","members",0x2a5676c1,"borogove.Channel.members","borogove/Chat.hx",1912,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1914_members,"borogove.Channel","members",0x2a5676c1,"borogove.Channel.members","borogove/Chat.hx",1914,0x1763ae98)
-static const ::String _hx_array_data_da6a8256_78[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1830_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1830,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1831_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1831,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1844_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1844,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1848_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1848,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1865_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1865,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1884_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1884,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1888_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1888,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1890_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1890,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1944_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1944,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1980_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1980,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2011_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",2011,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2013_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",2013,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2022_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",2022,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1950_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1950,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1974_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1974,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1966_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1966,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1962_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1962,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2032_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",2032,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1894_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1894,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2046_setTrusted,"borogove.Channel","setTrusted",0xa74cb38d,"borogove.Channel.setTrusted","borogove/Chat.hx",2046,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2052_isTrusted,"borogove.Channel","isTrusted",0xa81fc915,"borogove.Channel.isTrusted","borogove/Chat.hx",2052,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2059_isPrivate,"borogove.Channel","isPrivate",0x1ae83e21,"borogove.Channel.isPrivate","borogove/Chat.hx",2059,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2063_setupNotifications,"borogove.Channel","setupNotifications",0xe0d25d83,"borogove.Channel.setupNotifications","borogove/Chat.hx",2063,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2071_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",2071,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2082_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",2082,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2087_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",2087,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2084_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",2084,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2069_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",2069,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2099_preview,"borogove.Channel","preview",0x4bc129f0,"borogove.Channel.preview","borogove/Chat.hx",2099,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2106_livePresence,"borogove.Channel","livePresence",0x1293c65f,"borogove.Channel.livePresence","borogove/Chat.hx",2106,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2112_syncing,"borogove.Channel","syncing",0xb70d474f,"borogove.Channel.syncing","borogove/Chat.hx",2112,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2119_inMessageSync,"borogove.Channel","inMessageSync",0x8e63dfc5,"borogove.Channel.inMessageSync","borogove/Chat.hx",2119,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2127_setLastMessage,"borogove.Channel","setLastMessage",0x879768a7,"borogove.Channel.setLastMessage","borogove/Chat.hx",2127,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2123_setLastMessage,"borogove.Channel","setLastMessage",0x879768a7,"borogove.Channel.setLastMessage","borogove/Chat.hx",2123,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2122_setLastMessage,"borogove.Channel","setLastMessage",0x879768a7,"borogove.Channel.setLastMessage","borogove/Chat.hx",2122,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2135_canAudioCall,"borogove.Channel","canAudioCall",0x430d177c,"borogove.Channel.canAudioCall","borogove/Chat.hx",2135,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2139_canVideoCall,"borogove.Channel","canVideoCall",0x490fe9a1,"borogove.Channel.canVideoCall","borogove/Chat.hx",2139,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2143_nickInUse,"borogove.Channel","nickInUse",0xd519bea7,"borogove.Channel.nickInUse","borogove/Chat.hx",2143,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2148_getFullJid,"borogove.Channel","getFullJid",0x5d591998,"borogove.Channel.getFullJid","borogove/Chat.hx",2148,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2155_members,"borogove.Channel","members",0x2a5676c1,"borogove.Channel.members","borogove/Chat.hx",2155,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2152_members,"borogove.Channel","members",0x2a5676c1,"borogove.Channel.members","borogove/Chat.hx",2152,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2154_members,"borogove.Channel","members",0x2a5676c1,"borogove.Channel.members","borogove/Chat.hx",2154,0x1763ae98)
+static const ::String _hx_array_data_da6a8256_92[] = {
 	HX_("admin",8f,ac,4a,1c),HX_("owner",33,98,76,38),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1919_getMemberDetails,"borogove.Channel","getMemberDetails",0xf634642a,"borogove.Channel.getMemberDetails","borogove/Chat.hx",1919,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1925_buildMember,"borogove.Channel","buildMember",0x255c2610,"borogove.Channel.buildMember","borogove/Chat.hx",1925,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1926_buildMember,"borogove.Channel","buildMember",0x255c2610,"borogove.Channel.buildMember","borogove/Chat.hx",1926,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1966_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",1966,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1970_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",1970,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1963_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",1963,0x1763ae98)
-static const ::String _hx_array_data_da6a8256_91[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2159_getMemberDetails,"borogove.Channel","getMemberDetails",0xf634642a,"borogove.Channel.getMemberDetails","borogove/Chat.hx",2159,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2169_voiceRequests,"borogove.Channel","voiceRequests",0xf22611fe,"borogove.Channel.voiceRequests","borogove/Chat.hx",2169,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_76be2635117be6b6_365_voiceRequests__fromC,"borogove.Channel","voiceRequests__fromC",0xc927ba3b,"borogove.Channel.voiceRequests__fromC","HaxeCBridge.hx",365,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2198_voiceRequestRespond,"borogove.Channel","voiceRequestRespond",0xc90cfd00,"borogove.Channel.voiceRequestRespond","borogove/Chat.hx",2198,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2179_voiceRequestRespond,"borogove.Channel","voiceRequestRespond",0xc90cfd00,"borogove.Channel.voiceRequestRespond","borogove/Chat.hx",2179,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2195_voiceRequestRespond,"borogove.Channel","voiceRequestRespond",0xc90cfd00,"borogove.Channel.voiceRequestRespond","borogove/Chat.hx",2195,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2175_voiceRequestRespond,"borogove.Channel","voiceRequestRespond",0xc90cfd00,"borogove.Channel.voiceRequestRespond","borogove/Chat.hx",2175,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2204_buildMember,"borogove.Channel","buildMember",0x255c2610,"borogove.Channel.buildMember","borogove/Chat.hx",2204,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2205_buildMember,"borogove.Channel","buildMember",0x255c2610,"borogove.Channel.buildMember","borogove/Chat.hx",2205,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2245_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",2245,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2249_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",2249,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2242_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",2242,0x1763ae98)
+static const ::String _hx_array_data_da6a8256_113[] = {
 	HX_("owner",33,98,76,38),HX_("admin",8f,ac,4a,1c),HX_("none",b8,12,0a,49),HX_("outcast",4d,1e,c5,db),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1967_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",1967,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1971_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",1971,0x1763ae98)
-static const ::String _hx_array_data_da6a8256_94[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2246_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",2246,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2250_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",2250,0x1763ae98)
+static const ::String _hx_array_data_da6a8256_116[] = {
 	HX_("none",b8,12,0a,49),HX_("outcast",4d,1e,c5,db),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1973_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",1973,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1982_canRemoveRole,"borogove.Channel","canRemoveRole",0x50c0f9f2,"borogove.Channel.canRemoveRole","borogove/Chat.hx",1982,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1986_canRemoveRole,"borogove.Channel","canRemoveRole",0x50c0f9f2,"borogove.Channel.canRemoveRole","borogove/Chat.hx",1986,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1979_canRemoveRole,"borogove.Channel","canRemoveRole",0x50c0f9f2,"borogove.Channel.canRemoveRole","borogove/Chat.hx",1979,0x1763ae98)
-static const ::String _hx_array_data_da6a8256_99[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2252_availableRoles,"borogove.Channel","availableRoles",0xa01e5ccc,"borogove.Channel.availableRoles","borogove/Chat.hx",2252,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2261_canRemoveRole,"borogove.Channel","canRemoveRole",0x50c0f9f2,"borogove.Channel.canRemoveRole","borogove/Chat.hx",2261,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2265_canRemoveRole,"borogove.Channel","canRemoveRole",0x50c0f9f2,"borogove.Channel.canRemoveRole","borogove/Chat.hx",2265,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2258_canRemoveRole,"borogove.Channel","canRemoveRole",0x50c0f9f2,"borogove.Channel.canRemoveRole","borogove/Chat.hx",2258,0x1763ae98)
+static const ::String _hx_array_data_da6a8256_121[] = {
 	HX_("owner",33,98,76,38),HX_("admin",8f,ac,4a,1c),HX_("none",b8,12,0a,49),HX_("outcast",4d,1e,c5,db),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1987_canRemoveRole,"borogove.Channel","canRemoveRole",0x50c0f9f2,"borogove.Channel.canRemoveRole","borogove/Chat.hx",1987,0x1763ae98)
-static const ::String _hx_array_data_da6a8256_101[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2266_canRemoveRole,"borogove.Channel","canRemoveRole",0x50c0f9f2,"borogove.Channel.canRemoveRole","borogove/Chat.hx",2266,0x1763ae98)
+static const ::String _hx_array_data_da6a8256_123[] = {
 	HX_("admin",8f,ac,4a,1c),HX_("none",b8,12,0a,49),HX_("outcast",4d,1e,c5,db),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2001_addRole,"borogove.Channel","addRole",0x97d2781f,"borogove.Channel.addRole","borogove/Chat.hx",2001,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1995_addRole,"borogove.Channel","addRole",0x97d2781f,"borogove.Channel.addRole","borogove/Chat.hx",1995,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2006_removeRole,"borogove.Channel","removeRole",0x0694fcf2,"borogove.Channel.removeRole","borogove/Chat.hx",2006,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2014_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",2014,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2020_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",2020,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2010_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",2010,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2038_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",2038,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2044_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",2044,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2031_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",2031,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2055_getMessagesAround,"borogove.Channel","getMessagesAround",0x8ea35157,"borogove.Channel.getMessagesAround","borogove/Chat.hx",2055,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2063_prepareIncomingMessage,"borogove.Channel","prepareIncomingMessage",0xe60006d2,"borogove.Channel.prepareIncomingMessage","borogove/Chat.hx",2063,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2082_prepareOutgoingMessage,"borogove.Channel","prepareOutgoingMessage",0x4c2ccc0c,"borogove.Channel.prepareOutgoingMessage","borogove/Chat.hx",2082,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2103_correctMessage,"borogove.Channel","correctMessage",0x85df7995,"borogove.Channel.correctMessage","borogove/Chat.hx",2103,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2110_correctMessage,"borogove.Channel","correctMessage",0x85df7995,"borogove.Channel.correctMessage","borogove/Chat.hx",2110,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2097_correctMessage,"borogove.Channel","correctMessage",0x85df7995,"borogove.Channel.correctMessage","borogove/Chat.hx",2097,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2125_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",2125,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2117_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",2117,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2140_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",2140,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2138_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",2138,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2146_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",2146,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2181_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",2181,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2157_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",2157,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2175_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",2175,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2193_sendMessageStanza,"borogove.Channel","sendMessageStanza",0x9ef9e89c,"borogove.Channel.sendMessageStanza","borogove/Chat.hx",2193,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2187_sendMessageStanza,"borogove.Channel","sendMessageStanza",0x9ef9e89c,"borogove.Channel.sendMessageStanza","borogove/Chat.hx",2187,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2198_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",2198,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2213_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",2213,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2197_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",2197,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2239_bookmark,"borogove.Channel","bookmark",0x0c8bedce,"borogove.Channel.bookmark","borogove/Chat.hx",2239,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2257_bookmark,"borogove.Channel","bookmark",0x0c8bedce,"borogove.Channel.bookmark","borogove/Chat.hx",2257,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2217_bookmark,"borogove.Channel","bookmark",0x0c8bedce,"borogove.Channel.bookmark","borogove/Chat.hx",2217,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2268_sendChatState,"borogove.Channel","sendChatState",0xbd4bc999,"borogove.Channel.sendChatState","borogove/Chat.hx",2268,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2284_close,"borogove.Channel","close",0x113b97a0,"borogove.Channel.close","borogove/Chat.hx",2284,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1430_boot,"borogove.Channel","boot",0xaa79794a,"borogove.Channel.boot","borogove/Chat.hx",1430,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2280_addRole,"borogove.Channel","addRole",0x97d2781f,"borogove.Channel.addRole","borogove/Chat.hx",2280,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2274_addRole,"borogove.Channel","addRole",0x97d2781f,"borogove.Channel.addRole","borogove/Chat.hx",2274,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2285_removeRole,"borogove.Channel","removeRole",0x0694fcf2,"borogove.Channel.removeRole","borogove/Chat.hx",2285,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2293_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",2293,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2303_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",2303,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2289_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",2289,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2322_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",2322,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2332_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",2332,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2314_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",2314,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2343_getMessagesAround,"borogove.Channel","getMessagesAround",0x8ea35157,"borogove.Channel.getMessagesAround","borogove/Chat.hx",2343,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2351_prepareIncomingMessage,"borogove.Channel","prepareIncomingMessage",0xe60006d2,"borogove.Channel.prepareIncomingMessage","borogove/Chat.hx",2351,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2387_prepareOutgoingMessage,"borogove.Channel","prepareOutgoingMessage",0x4c2ccc0c,"borogove.Channel.prepareOutgoingMessage","borogove/Chat.hx",2387,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2418_correctMessage,"borogove.Channel","correctMessage",0x85df7995,"borogove.Channel.correctMessage","borogove/Chat.hx",2418,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2425_correctMessage,"borogove.Channel","correctMessage",0x85df7995,"borogove.Channel.correctMessage","borogove/Chat.hx",2425,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2412_correctMessage,"borogove.Channel","correctMessage",0x85df7995,"borogove.Channel.correctMessage","borogove/Chat.hx",2412,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2439_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",2439,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2431_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",2431,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2454_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",2454,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2452_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",2452,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2460_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",2460,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2495_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",2495,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2471_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",2471,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2489_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",2489,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2503_defaultE2ee,"borogove.Channel","defaultE2ee",0xe4dd2d16,"borogove.Channel.defaultE2ee","borogove/Chat.hx",2503,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2502_defaultE2ee,"borogove.Channel","defaultE2ee",0xe4dd2d16,"borogove.Channel.defaultE2ee","borogove/Chat.hx",2502,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2525_sendMessageStanza,"borogove.Channel","sendMessageStanza",0x9ef9e89c,"borogove.Channel.sendMessageStanza","borogove/Chat.hx",2525,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2513_sendMessageStanza,"borogove.Channel","sendMessageStanza",0x9ef9e89c,"borogove.Channel.sendMessageStanza","borogove/Chat.hx",2513,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2547_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",2547,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2562_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",2562,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2546_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",2546,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2566_bookmark,"borogove.Channel","bookmark",0x0c8bedce,"borogove.Channel.bookmark","borogove/Chat.hx",2566,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2588_sendChatState,"borogove.Channel","sendChatState",0xbd4bc999,"borogove.Channel.sendChatState","borogove/Chat.hx",2588,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_2604_close,"borogove.Channel","close",0x113b97a0,"borogove.Channel.close","borogove/Chat.hx",2604,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1528_boot,"borogove.Channel","boot",0xaa79794a,"borogove.Channel.boot","borogove/Chat.hx",1528,0x1763ae98)
 namespace borogove{
 
 void Channel_obj::__construct( ::borogove::Client client, ::borogove::GenericStream stream,::Dynamic persistence,::String chatId,::hx::Null< int >  __o_uiState,::hx::Null< bool >  __o_isBookmarked,::hx::Null< bool >  __o_isBlocked, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy, ::borogove::Caps disco){
             		int uiState = __o_uiState.Default(1);
             		bool isBookmarked = __o_isBookmarked.Default(false);
             		bool isBlocked = __o_isBlocked.Default(false);
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1430_new)
-HXLINE(1446)		this->lastMessageSenderName = null();
-HXLINE(1445)		this->sortId = null();
-HXLINE(1444)		this->membersForName = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1442)		this->mavUntil = null();
-HXLINE(1440)		this->self = null();
-HXLINE(1438)		this->forceLive = false;
-HXLINE(1437)		this->sync = null();
-HXLINE(1436)		this->joinFailed = null();
-HXLINE(1434)		this->inSync = false;
-HXLINE(1432)		this->disco =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_1,1),::Array_obj< ::Dynamic>::__new(0),null());
-HXLINE(1450)		super::__construct(client,stream,persistence,chatId,uiState,isBookmarked,isBlocked,extensions,readUpToId,readUpToBy,null());
-HXLINE(1451)		if (::hx::IsNotNull( disco )) {
-HXLINE(1452)			this->disco = disco;
-HXLINE(1453)			if (!(disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
-HXLINE(1455)				this->forceLive = true;
-HXLINE(1456)				this->outbox->start();
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1528_new)
+HXLINE(1545)		this->lastMessageSenderName = null();
+HXLINE(1544)		this->sortId = null();
+HXLINE(1542)		this->membersForName = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1540)		this->mavUntil = null();
+HXLINE(1538)		this->self = null();
+HXLINE(1536)		this->forceLive = false;
+HXLINE(1535)		this->sync = null();
+HXLINE(1534)		this->joinFailed = null();
+HXLINE(1532)		this->inSync = false;
+HXLINE(1530)		this->disco =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_1,1),::Array_obj< ::Dynamic>::__new(0),null());
+HXLINE(1549)		super::__construct(client,stream,persistence,chatId,uiState,isBookmarked,isBlocked,extensions,readUpToId,readUpToBy,null());
+HXLINE(1550)		::haxe::Log_obj::trace(HX_("SYNC: channel inSync",1e,d0,1c,33), ::Dynamic(::hx::Anon_obj::Create(5)
+            			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
+            			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
+            				->setFixed(0,HX_("inSync",e0,98,c5,88),this->inSync)
+            				->setFixed(1,HX_("chatId",d3,04,77,b7),chatId)
+            				->setFixed(2,HX_("reason",c4,0f,9d,fc),HX_("initialize",50,31,bb,ec)))))
+            			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("new",60,d0,53,00))
+            			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),1550)));
+HXLINE(1554)		if (::hx::IsNotNull( disco )) {
+HXLINE(1555)			this->disco = disco;
+HXLINE(1556)			if (!(disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
+HXLINE(1558)				this->forceLive = true;
+HXLINE(1559)				this->outbox->start();
             			}
             		}
             	}
@@ -346,876 +476,1189 @@ void Channel_obj::selfPing(bool refresh){
             		void _hx_run(){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Channel,_gthis) HXARGC(1)
             			void _hx_run( ::borogove::Stanza response){
-            				HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1487_selfPing)
-HXLINE(1487)				if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE(1488)					 ::borogove::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
-HXDLIN(1488)					 ::borogove::Stanza err;
-HXDLIN(1488)					if (::hx::IsNotNull( tmp )) {
-HXLINE(1488)						err = tmp->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
+            				HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1591_selfPing)
+HXLINE(1591)				if (::hx::IsEq( response->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) )) {
+HXLINE(1592)					 ::borogove::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
+HXDLIN(1592)					 ::borogove::Stanza err;
+HXDLIN(1592)					if (::hx::IsNotNull( tmp )) {
+HXLINE(1592)						err = tmp->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
             					}
             					else {
-HXLINE(1488)						err = null();
+HXLINE(1592)						err = null();
             					}
-HXLINE(1489)					bool _hx_tmp;
-HXDLIN(1489)					if ((err->name != HX_("service-unavailable",f8,3c,11,1c))) {
-HXLINE(1489)						_hx_tmp = (err->name == HX_("feature-not-implemented",71,20,2e,96));
+HXLINE(1593)					bool _hx_tmp;
+HXDLIN(1593)					if ((err->name != HX_("service-unavailable",f8,3c,11,1c))) {
+HXLINE(1593)						_hx_tmp = (err->name == HX_("feature-not-implemented",71,20,2e,96));
             					}
             					else {
-HXLINE(1489)						_hx_tmp = true;
+HXLINE(1593)						_hx_tmp = true;
             					}
-HXDLIN(1489)					if (_hx_tmp) {
-HXLINE(1489)						_gthis->selfPingSuccess();
-HXDLIN(1489)						return;
+HXDLIN(1593)					if (_hx_tmp) {
+HXLINE(1593)						_gthis->selfPingSuccess();
+HXDLIN(1593)						return;
             					}
-HXLINE(1490)					bool _hx_tmp1;
-HXDLIN(1490)					if ((err->name != HX_("remote-server-not-found",e5,4f,ca,aa))) {
-HXLINE(1490)						_hx_tmp1 = (err->name == HX_("remote-server-timeout",fe,b0,ee,1a));
+HXLINE(1594)					bool _hx_tmp1;
+HXDLIN(1594)					if ((err->name != HX_("remote-server-not-found",e5,4f,ca,aa))) {
+HXLINE(1594)						_hx_tmp1 = (err->name == HX_("remote-server-timeout",fe,b0,ee,1a));
             					}
             					else {
-HXLINE(1490)						_hx_tmp1 = true;
+HXLINE(1594)						_hx_tmp1 = true;
             					}
-HXDLIN(1490)					if (_hx_tmp1) {
-HXLINE(1490)						_gthis->selfPingSuccess();
-HXDLIN(1490)						return;
+HXDLIN(1594)					if (_hx_tmp1) {
+HXLINE(1594)						_gthis->selfPingSuccess();
+HXDLIN(1594)						return;
             					}
-HXLINE(1491)					if ((err->name == HX_("item-not-found",4e,b5,9b,5b))) {
-HXLINE(1491)						_gthis->selfPingSuccess();
-HXDLIN(1491)						return;
+HXLINE(1595)					if ((err->name == HX_("item-not-found",4e,b5,9b,5b))) {
+HXLINE(1595)						_gthis->selfPingSuccess();
+HXDLIN(1595)						return;
             					}
-HXLINE(1492)					::haxe::Log_obj::trace(HX_("SYNC: self-ping fail, join",ea,45,f2,f0), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(1596)					::haxe::Log_obj::trace(HX_("SYNC: self-ping fail, join",ea,45,f2,f0), ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis->chatId))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("selfPing",1e,60,3c,38))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),1492)));
-HXLINE(1493)					_gthis->join();
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),1596)));
+HXLINE(1597)					_gthis->join(null());
             				}
             				else {
-HXLINE(1495)					_gthis->selfPingSuccess();
+HXLINE(1599)					_gthis->selfPingSuccess();
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1476_selfPing)
-HXLINE(1477)			if (!(_gthis->disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
-HXLINE(1479)				_gthis->forceLive = true;
-HXLINE(1480)				_gthis->outbox->start();
-HXLINE(1481)				return;
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1580_selfPing)
+HXLINE(1581)			if (!(_gthis->disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
+HXLINE(1583)				_gthis->forceLive = true;
+HXLINE(1584)				_gthis->outbox->start();
+HXLINE(1585)				return;
             			}
-HXLINE(1483)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXLINE(1484)			::String _hx_tmp = _gthis->getFullJid()->asString();
-HXLINE(1483)			_gthis1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1587)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
+HXLINE(1588)			::String _hx_tmp = _gthis->getFullJid()->asString();
+HXLINE(1587)			_gthis1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("to",7b,65,00,00),_hx_tmp)
-            				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))))->tag(HX_("ping",72,f2,57,4a), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:ping",8e,30,3f,fd))))->up(), ::Dynamic(new _hx_Closure_2(_gthis)));
+            				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null())->tag(HX_("ping",72,f2,57,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:ping",8e,30,3f,fd))),null())->up(), ::Dynamic(new _hx_Closure_2(_gthis)));
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1462_selfPing)
-HXDLIN(1462)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1463)		if ((this->uiState == 3)) {
-HXLINE(1463)			return;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1565_selfPing)
+HXDLIN(1565)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1566)		if ((this->uiState == 3)) {
+HXLINE(1566)			return;
             		}
-HXLINE(1465)		if ((this->uiState == 2)) {
+HXLINE(1568)		if ((this->uiState == 2)) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			 ::borogove::Stanza _hx_run( ::borogove::Stanza stanza){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1468_selfPing)
-HXLINE(1469)				::Reflect_obj::setField(stanza->attr,HX_("type",ba,f2,08,4d),HX_("unavailable",50,e0,29,fd));
-HXLINE(1470)				return stanza;
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1572_selfPing)
+HXLINE(1573)				stanza->attr->set(HX_("type",ba,f2,08,4d),HX_("unavailable",50,e0,29,fd));
+HXLINE(1574)				return stanza;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1466)			 ::borogove::Client _hx_tmp = this->client;
-HXDLIN(1466)			_hx_tmp->sendPresence(this->getFullJid()->asString(), ::Dynamic(new _hx_Closure_0()));
-HXLINE(1473)			return;
+HXLINE(1569)			this->client->channelPinger->remove(::hx::ObjectPtr<OBJ_>(this));
+HXLINE(1570)			 ::borogove::Client _hx_tmp = this->client;
+HXDLIN(1570)			_hx_tmp->sendPresence(this->getFullJid()->asString(), ::Dynamic(new _hx_Closure_0()));
+HXLINE(1577)			return;
             		}
-HXLINE(1476)		 ::Dynamic _hx_tmp1;
-HXDLIN(1476)		if (refresh) {
-HXLINE(1476)			_hx_tmp1 = this->refreshDisco_dyn();
+HXLINE(1580)		 ::Dynamic _hx_tmp1;
+HXDLIN(1580)		if (refresh) {
+HXLINE(1580)			_hx_tmp1 = this->refreshDisco_dyn();
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             			void _hx_run( ::Dynamic cb){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1476_selfPing)
-HXLINE(1476)				cb();
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1580_selfPing)
+HXLINE(1580)				cb();
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1476)			_hx_tmp1 =  ::Dynamic(new _hx_Closure_1());
+HXLINE(1580)			_hx_tmp1 =  ::Dynamic(new _hx_Closure_1());
             		}
-HXDLIN(1476)		_hx_tmp1( ::Dynamic(new _hx_Closure_3(_gthis)));
+HXDLIN(1580)		_hx_tmp1( ::Dynamic(new _hx_Closure_3(_gthis)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,selfPing,(void))
 
-::Dynamic Channel_obj::join(){
+::Dynamic Channel_obj::join(::hx::Null< bool >  __o_justCleared){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Channel,_gthis) HXARGC(1)
             		::Dynamic _hx_run(bool _){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(1)
             			 ::borogove::Stanza _hx_run( ::borogove::Stanza stanza){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1517_join)
-HXLINE(1518)				 ::Dynamic mavAttr =  ::Dynamic(::hx::Anon_obj::Create(1)
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1626_join)
+HXLINE(1627)				 ::Dynamic mavAttr =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:muc:affiliations:1",75,28,1f,fe)));
-HXLINE(1519)				if (::hx::IsNotNull( _gthis->mavUntil )) {
-HXLINE(1519)					::Reflect_obj::setField(mavAttr,HX_("since",ba,eb,cf,7c),_gthis->mavUntil);
+HXLINE(1628)				if (::hx::IsNotNull( _gthis->mavUntil )) {
+HXLINE(1628)					::Reflect_obj::setField(mavAttr,HX_("since",ba,eb,cf,7c),_gthis->mavUntil);
             				}
-HXLINE(1520)				stanza->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc",07,b2,7f,c6))))->tag(HX_("mav",a2,0a,53,00),mavAttr)->up();
-HXLINE(1522)				if (_gthis->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da))) {
-HXLINE(1522)					stanza->tag(HX_("history",54,35,47,64), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("maxchars",b9,7f,a3,5c),HX_("0",30,00,00,00))))->up();
+HXLINE(1629)				stanza->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc",07,b2,7f,c6))),null())->tag(HX_("mav",a2,0a,53,00),mavAttr,null())->up();
+HXLINE(1631)				if (_gthis->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da))) {
+HXLINE(1631)					stanza->tag(HX_("history",54,35,47,64), ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("maxchars",b9,7f,a3,5c),HX_("0",30,00,00,00))),null())->up();
             				}
-HXLINE(1524)				stanza->up();
-HXLINE(1525)				return stanza;
+HXLINE(1633)				stanza->up();
+HXLINE(1634)				return stanza;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis) HXARGC(1)
             			void _hx_run( ::borogove::ChatMessage point){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1528_join)
-HXLINE(1528)				_gthis->doSync(point,null());
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1637_join)
+HXLINE(1637)				_gthis->doSync(point,null());
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1509_join)
-HXLINE(1510)			_gthis->self = null();
-HXLINE(1511)			_gthis->outbox->pause();
-HXLINE(1512)			_gthis->inSync = false;
-HXLINE(1513)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
-HXLINE(1514)			 ::borogove::JID desiredFullJid = ::borogove::JID_obj::parse(_gthis->chatId);
-HXDLIN(1514)			 ::borogove::JID desiredFullJid1 = desiredFullJid->withResource(_gthis->client->displayName());
-HXLINE(1515)			 ::borogove::Client _gthis1 = _gthis->client;
-HXDLIN(1515)			_gthis1->sendPresence(desiredFullJid1->asString(), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(1528)			::Dynamic _gthis2 = _gthis->persistence;
-HXDLIN(1528)			::String _hx_tmp = _gthis->client->accountId();
-HXDLIN(1528)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::syncPoint(_gthis2,_hx_tmp,_gthis->chatId), ::Dynamic(new _hx_Closure_1(_gthis)),null());
-HXLINE(1530)			return null();
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1613_join)
+HXLINE(1614)			_gthis->joinFailed = null();
+HXLINE(1615)			_gthis->self = null();
+HXLINE(1616)			_gthis->outbox->pause();
+HXLINE(1617)			_gthis->inSync = false;
+HXLINE(1618)			::haxe::Log_obj::trace(HX_("SYNC: channel inSync",1e,d0,1c,33), ::Dynamic(::hx::Anon_obj::Create(5)
+            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
+            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
+            					->setFixed(0,HX_("inSync",e0,98,c5,88),_gthis->inSync)
+            					->setFixed(1,HX_("chatId",d3,04,77,b7),_gthis->chatId)
+            					->setFixed(2,HX_("reason",c4,0f,9d,fc),HX_("join",ea,33,65,46)))))
+            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("join",ea,33,65,46))
+            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            				->setFixed(4,HX_("lineNumber",dd,81,22,76),1618)));
+HXLINE(1622)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXLINE(1623)			 ::borogove::JID desiredFullJid = ::borogove::JID_obj::parse(_gthis->chatId);
+HXDLIN(1623)			 ::borogove::JID desiredFullJid1 = desiredFullJid->withResource(_gthis->client->displayName());
+HXLINE(1624)			 ::borogove::Client _gthis1 = _gthis->client;
+HXDLIN(1624)			_gthis1->sendPresence(desiredFullJid1->asString(), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(1637)			::Dynamic _gthis2 = _gthis->persistence;
+HXDLIN(1637)			::String _hx_tmp = _gthis->client->accountId();
+HXDLIN(1637)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::syncPoint(_gthis2,_hx_tmp,_gthis->chatId), ::Dynamic(new _hx_Closure_1(_gthis)),null());
+HXLINE(1639)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1503_join)
-HXDLIN(1503)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1504)		bool _hx_tmp;
-HXDLIN(1504)		if ((this->uiState != 3)) {
-HXLINE(1504)			_hx_tmp = (this->uiState == 2);
+            		bool justCleared = __o_justCleared.Default(false);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1607_join)
+HXDLIN(1607)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1608)		bool _hx_tmp;
+HXDLIN(1608)		if ((this->uiState != 3)) {
+HXLINE(1608)			_hx_tmp = (this->uiState == 2);
             		}
             		else {
-HXLINE(1504)			_hx_tmp = true;
+HXLINE(1608)			_hx_tmp = true;
+            		}
+HXDLIN(1608)		if (_hx_tmp) {
+HXLINE(1610)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
-HXDLIN(1504)		if (_hx_tmp) {
-HXLINE(1506)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE(1613)		::Dynamic _hx_tmp1;
+HXDLIN(1613)		if (justCleared) {
+HXLINE(1613)			_hx_tmp1 = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            		}
+            		else {
+HXLINE(1613)			::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1613)			::String _hx_tmp3 = this->client->accountId();
+HXDLIN(1613)			_hx_tmp1 = ::borogove::Persistence_obj::clearMemberPresence(_hx_tmp2,_hx_tmp3,this->chatId);
             		}
-HXLINE(1509)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1509)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN(1509)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::clearMemberPresence(_hx_tmp1,_hx_tmp2,this->chatId), ::Dynamic(new _hx_Closure_2(_gthis)),null());
+HXDLIN(1613)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp1, ::Dynamic(new _hx_Closure_2(_gthis)),null());
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,join,return )
+HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,join,return )
 
 void Channel_obj::selfPingSuccess(){
-            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(1)
-            		void _hx_run( ::borogove::ChatMessage point){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1542_selfPingSuccess)
-HXLINE(1542)			_gthis->doSync(point,null());
-            		}
-            		HX_END_LOCAL_FUNC1((void))
-
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1534_selfPingSuccess)
-HXDLIN(1534)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1535)		::String _hx_tmp = this->nickInUse();
-HXDLIN(1535)		if ((_hx_tmp != this->client->displayName())) {
-HXLINE(1536)			 ::borogove::JID desiredFullJid = ::borogove::JID_obj::parse(this->chatId);
-HXDLIN(1536)			 ::borogove::JID desiredFullJid1 = desiredFullJid->withResource(this->client->displayName());
-HXLINE(1537)			 ::borogove::Client _hx_tmp1 = this->client;
-HXDLIN(1537)			_hx_tmp1->sendPresence(desiredFullJid1->asString(),null());
-            		}
-HXLINE(1541)		this->inSync = false;
-HXLINE(1542)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1542)		::String _hx_tmp3 = this->client->accountId();
-HXDLIN(1542)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::syncPoint(_hx_tmp2,_hx_tmp3,this->chatId), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1643_selfPingSuccess)
+HXLINE(1644)		::String _hx_tmp = this->nickInUse();
+HXDLIN(1644)		if ((_hx_tmp != this->client->displayName())) {
+HXLINE(1645)			 ::borogove::JID desiredFullJid = ::borogove::JID_obj::parse(this->chatId);
+HXDLIN(1645)			 ::borogove::JID desiredFullJid1 = desiredFullJid->withResource(this->client->displayName());
+HXLINE(1646)			 ::borogove::Client _hx_tmp1 = this->client;
+HXDLIN(1646)			_hx_tmp1->sendPresence(desiredFullJid1->asString(),null());
+            		}
+HXLINE(1648)		this->client->channelPinger->schedule(::hx::ObjectPtr<OBJ_>(this),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,selfPingSuccess,(void))
 
 ::String Channel_obj::getDisplayName(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1545_getDisplayName)
-HXLINE(1546)		::String name = this->super::getDisplayName();
-HXLINE(1547)		if ((name == this->chatId)) {
-HXLINE(1548)			 ::borogove::Stanza tmp = this->info();
-HXDLIN(1548)			 ::borogove::Stanza tmp1;
-HXDLIN(1548)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1548)				tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roomconfig_roomname",c0,87,9a,72));
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1651_getDisplayName)
+HXLINE(1652)		::String name = this->super::getDisplayName();
+HXLINE(1653)		if ((name == this->chatId)) {
+HXLINE(1654)			 ::borogove::Stanza tmp = this->info();
+HXDLIN(1654)			 ::borogove::Stanza tmp1;
+HXDLIN(1654)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1654)				tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roomconfig_roomname",c0,87,9a,72));
             			}
             			else {
-HXLINE(1548)				tmp1 = null();
+HXLINE(1654)				tmp1 = null();
             			}
-HXDLIN(1548)			::Array< ::String > tmp2;
-HXDLIN(1548)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1548)				tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
+HXDLIN(1654)			::Array< ::String > tmp2;
+HXDLIN(1654)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1654)				tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
             			}
             			else {
-HXLINE(1548)				tmp2 = null();
+HXLINE(1654)				tmp2 = null();
             			}
-HXDLIN(1548)			::Array< ::String > title;
-HXDLIN(1548)			if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1548)				title = tmp2;
+HXDLIN(1654)			::Array< ::String > title;
+HXDLIN(1654)			if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1654)				title = tmp2;
             			}
             			else {
-HXLINE(1548)				title = ::Array_obj< ::String >::__new(0);
+HXLINE(1654)				title = ::Array_obj< ::String >::__new(0);
             			}
-HXDLIN(1548)			::String title1 = title->join(HX_("\n",0a,00,00,00));
-HXLINE(1549)			bool _hx_tmp;
-HXDLIN(1549)			if (::hx::IsNotNull( title1 )) {
-HXLINE(1549)				_hx_tmp = (title1 != HX_("",00,00,00,00));
+HXDLIN(1654)			::String title1 = title->join(HX_("\n",0a,00,00,00));
+HXLINE(1655)			bool _hx_tmp;
+HXDLIN(1655)			if (::hx::IsNotNull( title1 )) {
+HXLINE(1655)				_hx_tmp = (title1 != HX_("",00,00,00,00));
             			}
             			else {
-HXLINE(1549)				_hx_tmp = false;
+HXLINE(1655)				_hx_tmp = false;
             			}
-HXDLIN(1549)			if (_hx_tmp) {
-HXLINE(1549)				return title1;
+HXDLIN(1655)			if (_hx_tmp) {
+HXLINE(1655)				return title1;
             			}
-HXLINE(1551)			bool _hx_tmp1;
-HXDLIN(1551)			bool _hx_tmp2;
-HXDLIN(1551)			if (::hx::IsNotNull( this->membersForName )) {
-HXLINE(1551)				_hx_tmp2 = (this->membersForName->length > 0);
+HXLINE(1657)			bool _hx_tmp1;
+HXDLIN(1657)			bool _hx_tmp2;
+HXDLIN(1657)			if (::hx::IsNotNull( this->membersForName )) {
+HXLINE(1657)				_hx_tmp2 = (this->membersForName->length > 0);
             			}
             			else {
-HXLINE(1551)				_hx_tmp2 = false;
+HXLINE(1657)				_hx_tmp2 = false;
             			}
-HXDLIN(1551)			if (_hx_tmp2) {
-HXLINE(1551)				_hx_tmp1 = (this->membersForName->length < 20);
+HXDLIN(1657)			if (_hx_tmp2) {
+HXLINE(1657)				_hx_tmp1 = (this->membersForName->length < 20);
             			}
             			else {
-HXLINE(1551)				_hx_tmp1 = false;
-            			}
-HXDLIN(1551)			if (_hx_tmp1) {
-HXLINE(1551)				::Array< ::Dynamic> _this = this->membersForName;
-HXDLIN(1551)				::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN(1551)				{
-HXLINE(1551)					int _g = 0;
-HXDLIN(1551)					int _g1 = _this->length;
-HXDLIN(1551)					while((_g < _g1)){
-HXLINE(1551)						_g = (_g + 1);
-HXDLIN(1551)						int i = (_g - 1);
-HXDLIN(1551)						{
-HXLINE(1551)							::String inValue = ( (::String)(_hx_array_unsafe_get(_this,i)->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)) );
-HXDLIN(1551)							result->__unsafe_set(i,inValue);
+HXLINE(1657)				_hx_tmp1 = false;
+            			}
+HXDLIN(1657)			if (_hx_tmp1) {
+HXLINE(1657)				::Array< ::Dynamic> _this = this->membersForName;
+HXDLIN(1657)				::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN(1657)				{
+HXLINE(1657)					int _g = 0;
+HXDLIN(1657)					int _g1 = _this->length;
+HXDLIN(1657)					while((_g < _g1)){
+HXLINE(1657)						_g = (_g + 1);
+HXDLIN(1657)						int i = (_g - 1);
+HXDLIN(1657)						{
+HXLINE(1657)							::String inValue = ( (::String)(_hx_array_unsafe_get(_this,i)->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)) );
+HXDLIN(1657)							result->__unsafe_set(i,inValue);
             						}
             					}
             				}
-HXDLIN(1551)				return result->join(HX_(", ",74,26,00,00));
+HXDLIN(1657)				return result->join(HX_(", ",74,26,00,00));
             			}
             		}
-HXLINE(1554)		return name;
+HXLINE(1660)		return name;
             	}
 
 
 ::String Channel_obj::subject(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1561_subject)
-HXDLIN(1561)		::String tmp = this->threads->get_string(::borogove::_Chat::Chat_Fields__obj::nullSentinel);
-HXDLIN(1561)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1561)			return tmp;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1667_subject)
+HXDLIN(1667)		::String tmp = this->threads->get_string(::borogove::_Chat::Chat_Fields__obj::nullSentinel);
+HXDLIN(1667)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1667)			return tmp;
             		}
             		else {
-HXDLIN(1561)			return HX_("",00,00,00,00);
+HXDLIN(1667)			return HX_("",00,00,00,00);
             		}
-HXDLIN(1561)		return null();
+HXDLIN(1667)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,subject,return )
 
+bool Channel_obj::canSetSubject(){
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1673_canSetSubject)
+HXLINE(1674)		bool _hx_tmp;
+HXDLIN(1674)		if (::hx::IsNotNull( this->self )) {
+HXLINE(1674)			_hx_tmp = ::hx::IsNull( this->disco );
+            		}
+            		else {
+HXLINE(1674)			_hx_tmp = true;
+            		}
+HXDLIN(1674)		if (_hx_tmp) {
+HXLINE(1674)			return false;
+            		}
+HXLINE(1676)		 ::Dynamic it = this->self->presence->iterator();
+HXLINE(1677)		if (!(( (bool)(it->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) ))) {
+HXLINE(1677)			return false;
+            		}
+HXLINE(1679)		 ::borogove::Stanza tmp = this->info();
+HXDLIN(1679)		 ::borogove::Stanza tmp1;
+HXDLIN(1679)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1679)			tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roominfo_subjectmod",84,dd,70,4a));
+            		}
+            		else {
+HXLINE(1679)			tmp1 = null();
+            		}
+HXDLIN(1679)		::Array< ::String > tmp2;
+HXDLIN(1679)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1679)			tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
+            		}
+            		else {
+HXLINE(1679)			tmp2 = null();
+            		}
+HXDLIN(1679)		::Array< ::String > subjectmod;
+HXDLIN(1679)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1679)			subjectmod = tmp2;
+            		}
+            		else {
+HXLINE(1679)			subjectmod = ::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_16,1);
+            		}
+HXDLIN(1679)		::String subjectmod1 = subjectmod->join(HX_("",00,00,00,00));
+HXLINE(1680)		if (::borogove::Stanza_obj::parseXmlBool(subjectmod1)) {
+HXLINE(1681)			return true;
+            		}
+HXLINE(1684)		::String _hx_tmp1;
+HXDLIN(1684)		 ::borogove::Stanza tmp3 = ( ( ::borogove::Stanza)(it->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))->getChild(HX_("item",13,c5,bf,45),null());
+HXDLIN(1684)		 ::haxe::ds::StringMap tmp4;
+HXDLIN(1684)		if (::hx::IsNotNull( tmp3 )) {
+HXLINE(1684)			tmp4 = tmp3->attr;
+            		}
+            		else {
+HXLINE(1684)			tmp4 = null();
+            		}
+HXDLIN(1684)		::String tmp5;
+HXDLIN(1684)		if (::hx::IsNotNull( tmp4 )) {
+HXLINE(1684)			tmp5 = tmp4->get_string(HX_("role",76,eb,ae,4b));
+            		}
+            		else {
+HXLINE(1684)			tmp5 = null();
+            		}
+HXDLIN(1684)		if (::hx::IsNotNull( tmp5 )) {
+HXLINE(1684)			_hx_tmp1 = tmp5;
+            		}
+            		else {
+HXLINE(1684)			_hx_tmp1 = HX_("none",b8,12,0a,49);
+            		}
+HXDLIN(1684)		return (_hx_tmp1 == HX_("moderator",05,40,3b,22));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,canSetSubject,return )
+
+void Channel_obj::setSubject(::String subject,::String threadId){
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1690_setSubject)
+HXLINE(1691)		 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("to",7b,65,00,00),this->chatId)),null())->textTag(HX_("subject",ac,01,88,29),subject,null(),null());
+HXLINE(1692)		if (::hx::IsNotNull( threadId )) {
+HXLINE(1692)			stanza->textTag(HX_("thread",ca,7a,b9,8e),threadId,null(),null());
+            		}
+HXLINE(1693)		this->sendMessageStanza(stanza,null(),null());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Channel_obj,setSubject,(void))
+
 ::String Channel_obj::description(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1568_description)
-HXDLIN(1568)		 ::borogove::Stanza tmp = this->info();
-HXDLIN(1568)		 ::borogove::Stanza tmp1;
-HXDLIN(1568)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1568)			tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roominfo_description",4e,e4,04,f2));
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1700_description)
+HXDLIN(1700)		 ::borogove::Stanza tmp = this->info();
+HXDLIN(1700)		 ::borogove::Stanza tmp1;
+HXDLIN(1700)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1700)			tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roominfo_description",4e,e4,04,f2));
             		}
             		else {
-HXDLIN(1568)			tmp1 = null();
+HXDLIN(1700)			tmp1 = null();
             		}
-HXDLIN(1568)		::Array< ::String > tmp2;
-HXDLIN(1568)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1568)			tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
+HXDLIN(1700)		::Array< ::String > tmp2;
+HXDLIN(1700)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1700)			tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
             		}
             		else {
-HXDLIN(1568)			tmp2 = null();
+HXDLIN(1700)			tmp2 = null();
             		}
-HXDLIN(1568)		::Array< ::String > _hx_tmp;
-HXDLIN(1568)		if (::hx::IsNotNull( tmp2 )) {
-HXDLIN(1568)			_hx_tmp = tmp2;
+HXDLIN(1700)		::Array< ::String > _hx_tmp;
+HXDLIN(1700)		if (::hx::IsNotNull( tmp2 )) {
+HXDLIN(1700)			_hx_tmp = tmp2;
             		}
             		else {
-HXDLIN(1568)			_hx_tmp = ::Array_obj< ::String >::__new(0);
+HXDLIN(1700)			_hx_tmp = ::Array_obj< ::String >::__new(0);
             		}
-HXDLIN(1568)		return _hx_tmp->join(HX_("\n",0a,00,00,00));
+HXDLIN(1700)		return _hx_tmp->join(HX_("\n",0a,00,00,00));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,description,return )
 
  ::borogove::Stanza Channel_obj::info(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1572_info)
-HXDLIN(1572)		 ::borogove::Caps tmp = this->disco;
-HXDLIN(1572)		::Array< ::Dynamic> tmp1;
-HXDLIN(1572)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1572)			tmp1 = tmp->data;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1704_info)
+HXDLIN(1704)		 ::borogove::Caps tmp = this->disco;
+HXDLIN(1704)		::Array< ::Dynamic> tmp1;
+HXDLIN(1704)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1704)			tmp1 = tmp->data;
             		}
             		else {
-HXDLIN(1572)			tmp1 = null();
+HXDLIN(1704)			tmp1 = null();
             		}
-HXDLIN(1572)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1704)		if (::hx::IsNotNull( tmp1 )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			bool _hx_run( ::borogove::Stanza d){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1572_info)
-HXDLIN(1572)				 ::borogove::Stanza tmp = ::borogove::_DataForm::DataForm_Impl__obj::field(d,HX_("FORM_TYPE",d5,96,c9,5a));
-HXDLIN(1572)				::Array< ::String > tmp1;
-HXDLIN(1572)				if (::hx::IsNotNull( tmp )) {
-HXDLIN(1572)					tmp1 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp);
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1704_info)
+HXDLIN(1704)				 ::borogove::Stanza tmp = ::borogove::_DataForm::DataForm_Impl__obj::field(d,HX_("FORM_TYPE",d5,96,c9,5a));
+HXDLIN(1704)				::Array< ::String > tmp1;
+HXDLIN(1704)				if (::hx::IsNotNull( tmp )) {
+HXDLIN(1704)					tmp1 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp);
             				}
             				else {
-HXDLIN(1572)					tmp1 = null();
+HXDLIN(1704)					tmp1 = null();
             				}
-HXDLIN(1572)				::String _hx_tmp;
-HXDLIN(1572)				if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1572)					_hx_tmp = tmp1->__get(0);
+HXDLIN(1704)				::String _hx_tmp;
+HXDLIN(1704)				if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1704)					_hx_tmp = tmp1->__get(0);
             				}
             				else {
-HXDLIN(1572)					_hx_tmp = null();
+HXDLIN(1704)					_hx_tmp = null();
             				}
-HXDLIN(1572)				return (_hx_tmp == HX_("http://jabber.org/protocol/muc#roominfo",45,80,4f,bc));
+HXDLIN(1704)				return (_hx_tmp == HX_("http://jabber.org/protocol/muc#roominfo",45,80,4f,bc));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXDLIN(1572)			return ( ( ::borogove::Stanza)(::Lambda_obj::find(tmp1, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN(1704)			return ( ( ::borogove::Stanza)(::Lambda_obj::find(tmp1, ::Dynamic(new _hx_Closure_0()))) );
             		}
             		else {
-HXDLIN(1572)			return null();
+HXDLIN(1704)			return null();
             		}
-HXDLIN(1572)		return null();
+HXDLIN(1704)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,info,return )
 
 void Channel_obj::invite( ::borogove::Chat chat,::String threadId){
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1575_invite)
-HXLINE(1576)		if (this->isPrivate()) {
-HXLINE(1577)			 ::borogove::Client _hx_tmp = this->client;
-HXDLIN(1577)			_hx_tmp->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("to",7b,65,00,00),this->chatId)))->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#admin",d3,be,2f,5a))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1707_invite)
+HXLINE(1708)		if (this->isPrivate()) {
+HXLINE(1709)			 ::borogove::Client _hx_tmp = this->client;
+HXDLIN(1709)			_hx_tmp->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(0,HX_("to",7b,65,00,00),this->chatId)
+            				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#admin",d3,be,2f,5a))),null())->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("affiliation",b0,1a,35,a1),HX_("member",5a,e2,b5,04))
-            				->setFixed(1,HX_("jid",c5,ca,50,00),chat->chatId)))->up()->up());
+            				->setFixed(1,HX_("jid",c5,ca,50,00),chat->chatId)),null())->up()->up());
             		}
-HXLINE(1585)		this->super::invite(chat,threadId);
+HXLINE(1717)		this->super::invite(chat,threadId);
             	}
 
 
 bool Channel_obj::canInvite(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1588_canInvite)
-HXLINE(1589)		if (!(this->isPrivate())) {
-HXLINE(1589)			return true;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1720_canInvite)
+HXLINE(1721)		if (!(this->isPrivate())) {
+HXLINE(1721)			return true;
             		}
-HXLINE(1590)		if (::hx::IsNull( this->self )) {
-HXLINE(1590)			return false;
+HXLINE(1722)		if (::hx::IsNull( this->self )) {
+HXLINE(1722)			return false;
             		}
-HXLINE(1592)		 ::Dynamic it = this->self->presence->iterator();
-HXLINE(1593)		if (!(( (bool)(it->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) ))) {
-HXLINE(1593)			return false;
+HXLINE(1724)		 ::Dynamic it = this->self->presence->iterator();
+HXLINE(1725)		if (!(( (bool)(it->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) ))) {
+HXLINE(1725)			return false;
             		}
-HXLINE(1595)		::String _hx_tmp;
-HXDLIN(1595)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(it->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))->getChild(HX_("item",13,c5,bf,45),null());
-HXDLIN(1595)		 ::Dynamic tmp1;
-HXDLIN(1595)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1595)			tmp1 = tmp->attr;
+HXLINE(1727)		::String _hx_tmp;
+HXDLIN(1727)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(it->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))->getChild(HX_("item",13,c5,bf,45),null());
+HXDLIN(1727)		 ::haxe::ds::StringMap tmp1;
+HXDLIN(1727)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1727)			tmp1 = tmp->attr;
             		}
             		else {
-HXLINE(1595)			tmp1 = null();
+HXLINE(1727)			tmp1 = null();
             		}
-HXDLIN(1595)		::String tmp2;
-HXDLIN(1595)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1595)			tmp2 = ( (::String)(::Reflect_obj::field(tmp1,HX_("role",76,eb,ae,4b))) );
+HXDLIN(1727)		::String tmp2;
+HXDLIN(1727)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1727)			tmp2 = tmp1->get_string(HX_("role",76,eb,ae,4b));
             		}
             		else {
-HXLINE(1595)			tmp2 = null();
+HXLINE(1727)			tmp2 = null();
             		}
-HXDLIN(1595)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1595)			_hx_tmp = tmp2;
+HXDLIN(1727)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1727)			_hx_tmp = tmp2;
             		}
             		else {
-HXLINE(1595)			_hx_tmp = HX_("none",b8,12,0a,49);
+HXLINE(1727)			_hx_tmp = HX_("none",b8,12,0a,49);
             		}
-HXDLIN(1595)		if ((_hx_tmp == HX_("moderator",05,40,3b,22))) {
-HXLINE(1595)			return true;
+HXDLIN(1727)		if ((_hx_tmp == HX_("moderator",05,40,3b,22))) {
+HXLINE(1727)			return true;
             		}
-HXLINE(1597)		return false;
+HXLINE(1729)		return false;
             	}
 
 
 bool Channel_obj::canSend(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1600_canSend)
-HXLINE(1601)		if (!(this->super::canSend())) {
-HXLINE(1601)			return false;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1732_canSend)
+HXLINE(1733)		if (!(this->super::canSend())) {
+HXLINE(1733)			return false;
             		}
-HXLINE(1602)		if (::hx::IsNull( this->self )) {
-HXLINE(1602)			return true;
+HXLINE(1734)		if (::hx::IsNull( this->self )) {
+HXLINE(1734)			return true;
             		}
-HXLINE(1604)		 ::Dynamic it = this->self->presence->iterator();
-HXLINE(1605)		if (!(( (bool)(it->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) ))) {
-HXLINE(1605)			return true;
+HXLINE(1736)		 ::Dynamic it = this->self->presence->iterator();
+HXLINE(1737)		if (!(( (bool)(it->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) ))) {
+HXLINE(1737)			return true;
             		}
-HXLINE(1607)		::String _hx_tmp;
-HXDLIN(1607)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(it->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))->getChild(HX_("item",13,c5,bf,45),null());
-HXDLIN(1607)		 ::Dynamic tmp1;
-HXDLIN(1607)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1607)			tmp1 = tmp->attr;
+HXLINE(1739)		::String _hx_tmp;
+HXDLIN(1739)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(it->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))->getChild(HX_("item",13,c5,bf,45),null());
+HXDLIN(1739)		 ::haxe::ds::StringMap tmp1;
+HXDLIN(1739)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1739)			tmp1 = tmp->attr;
             		}
             		else {
-HXLINE(1607)			tmp1 = null();
+HXLINE(1739)			tmp1 = null();
             		}
-HXDLIN(1607)		::String tmp2;
-HXDLIN(1607)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1607)			tmp2 = ( (::String)(::Reflect_obj::field(tmp1,HX_("role",76,eb,ae,4b))) );
+HXDLIN(1739)		::String tmp2;
+HXDLIN(1739)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1739)			tmp2 = tmp1->get_string(HX_("role",76,eb,ae,4b));
             		}
             		else {
-HXLINE(1607)			tmp2 = null();
+HXLINE(1739)			tmp2 = null();
             		}
-HXDLIN(1607)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1607)			_hx_tmp = tmp2;
+HXDLIN(1739)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1739)			_hx_tmp = tmp2;
             		}
             		else {
-HXLINE(1607)			_hx_tmp = HX_("none",b8,12,0a,49);
+HXLINE(1739)			_hx_tmp = HX_("none",b8,12,0a,49);
             		}
-HXDLIN(1607)		return (_hx_tmp != HX_("visitor",ae,23,32,a3));
+HXDLIN(1739)		return (_hx_tmp != HX_("visitor",ae,23,32,a3));
             	}
 
 
 bool Channel_obj::canModerate(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1610_canModerate)
-HXLINE(1611)		bool _hx_tmp;
-HXDLIN(1611)		if (::hx::IsNotNull( this->self )) {
-HXLINE(1611)			_hx_tmp = ::hx::IsNull( this->disco );
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1742_canModerate)
+HXLINE(1743)		bool _hx_tmp;
+HXDLIN(1743)		if (::hx::IsNotNull( this->self )) {
+HXLINE(1743)			_hx_tmp = ::hx::IsNull( this->disco );
             		}
             		else {
-HXLINE(1611)			_hx_tmp = true;
+HXLINE(1743)			_hx_tmp = true;
             		}
-HXDLIN(1611)		if (_hx_tmp) {
-HXLINE(1611)			return false;
+HXDLIN(1743)		if (_hx_tmp) {
+HXLINE(1743)			return false;
             		}
-HXLINE(1613)		 ::Dynamic it = this->self->presence->iterator();
-HXLINE(1614)		if (!(( (bool)(it->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) ))) {
-HXLINE(1614)			return false;
+HXLINE(1745)		 ::Dynamic it = this->self->presence->iterator();
+HXLINE(1746)		if (!(( (bool)(it->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) ))) {
+HXLINE(1746)			return false;
             		}
-HXLINE(1616)		if (this->disco->features->contains(HX_("urn:xmpp:message-moderate:1",5c,30,1a,b9))) {
-HXLINE(1616)			::String _hx_tmp1;
-HXDLIN(1616)			 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(it->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))->getChild(HX_("item",13,c5,bf,45),null());
-HXDLIN(1616)			 ::Dynamic tmp1;
-HXDLIN(1616)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1616)				tmp1 = tmp->attr;
+HXLINE(1748)		if (this->disco->features->contains(HX_("urn:xmpp:message-moderate:1",5c,30,1a,b9))) {
+HXLINE(1748)			::String _hx_tmp1;
+HXDLIN(1748)			 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(it->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))->getChild(HX_("item",13,c5,bf,45),null());
+HXDLIN(1748)			 ::haxe::ds::StringMap tmp1;
+HXDLIN(1748)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1748)				tmp1 = tmp->attr;
             			}
             			else {
-HXLINE(1616)				tmp1 = null();
+HXLINE(1748)				tmp1 = null();
             			}
-HXDLIN(1616)			::String tmp2;
-HXDLIN(1616)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1616)				tmp2 = ( (::String)(::Reflect_obj::field(tmp1,HX_("role",76,eb,ae,4b))) );
+HXDLIN(1748)			::String tmp2;
+HXDLIN(1748)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1748)				tmp2 = tmp1->get_string(HX_("role",76,eb,ae,4b));
             			}
             			else {
-HXLINE(1616)				tmp2 = null();
+HXLINE(1748)				tmp2 = null();
             			}
-HXDLIN(1616)			if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1616)				_hx_tmp1 = tmp2;
+HXDLIN(1748)			if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1748)				_hx_tmp1 = tmp2;
             			}
             			else {
-HXLINE(1616)				_hx_tmp1 = HX_("none",b8,12,0a,49);
+HXLINE(1748)				_hx_tmp1 = HX_("none",b8,12,0a,49);
             			}
-HXDLIN(1616)			return (_hx_tmp1 == HX_("moderator",05,40,3b,22));
+HXDLIN(1748)			return (_hx_tmp1 == HX_("moderator",05,40,3b,22));
             		}
             		else {
-HXLINE(1616)			return false;
+HXLINE(1748)			return false;
             		}
-HXDLIN(1616)		return false;
+HXDLIN(1748)		return false;
             	}
 
 
+void Channel_obj::requestToSend(){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(0)
+            		void _hx_run(){
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1758_requestToSend)
+HXLINE(1758)			 ::borogove::Client _gthis1 = _gthis->client;
+HXDLIN(1758)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("to",7b,65,00,00),_gthis->chatId)),null())->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
+            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))),null())->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/muc#request",93,0a,86,93),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("var",e7,de,59,00),HX_("muc#role",3e,cf,d3,63))),null())->textTag(HX_("value",71,7f,b8,31),HX_("participant",b3,07,ea,7a),null(),null())->up());
+            		}
+            		HX_END_LOCAL_FUNC0((void))
+
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1754_requestToSend)
+HXDLIN(1754)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1758)		this->outbox->newItem()->handle( ::Dynamic(new _hx_Closure_0(_gthis)));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,requestToSend,(void))
+
+bool Channel_obj::isOwner(){
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            		bool _hx_run( ::borogove::Role r){
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1769_isOwner)
+HXLINE(1769)			return (r->id == HX_("owner",33,98,76,38));
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1766_isOwner)
+HXLINE(1767)		if (::hx::IsNull( this->self )) {
+HXLINE(1767)			return false;
+            		}
+HXLINE(1769)		return ::Lambda_obj::exists(this->self->roles, ::Dynamic(new _hx_Closure_0()));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,isOwner,return )
+
+::Dynamic Channel_obj::commands(){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(1)
+            		::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> cmds){
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1773_commands)
+HXLINE(1774)			if (_gthis->isOwner()) {
+HXLINE(1775)				 ::borogove::Client _gthis1 = _gthis->client;
+HXDLIN(1775)				cmds->push( ::borogove::MucSettingsCommand_obj::__alloc( HX_CTX ,_gthis1,::borogove::JID_obj::parse(_gthis->chatId)));
+            			}
+HXLINE(1777)			return cmds;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1772_commands)
+HXDLIN(1772)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1773)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->super::commands(), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+            	}
+
+
+bool Channel_obj::hasCommands(){
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1781_hasCommands)
+HXLINE(1782)		if (this->isOwner()) {
+HXLINE(1782)			return true;
+            		}
+HXLINE(1784)		return this->super::hasCommands();
+            	}
+
+
+bool Channel_obj::canSetPhoto(){
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1791_canSetPhoto)
+HXDLIN(1791)		return this->isOwner();
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,canSetPhoto,return )
+
+void Channel_obj::setPhoto( ::borogove::AttachmentSource source){
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1799_setPhoto)
+HXDLIN(1799)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1800)		if ((source->size > 128000)) {
+HXLINE(1800)			HX_STACK_DO_THROW(HX_("Size limit of 128KB",a9,c1,4c,64));
+            		}
+HXLINE(1801)		 ::haxe::io::BytesOutput out =  ::haxe::io::BytesOutput_obj::__alloc( HX_CTX );
+HXLINE(1802)		 ::haxe::io::BytesOutput out1 = out;
+HXDLIN(1802)		 ::tink::io::std::OutputSink sink =  ::tink::io::std::OutputSink_obj::__alloc( HX_CTX ,HX_("bytes",6b,08,98,bd),out1,::tink::io::_Worker::Worker_Impl__obj::get());
+HXLINE(1803)		{
+            			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::AttachmentSource,source, ::borogove::Channel,_gthis, ::haxe::io::BytesOutput,out) HXARGC(1)
+            			void _hx_run( ::tink::io::PipeResult _){
+            				HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1803_setPhoto)
+HXLINE(1805)				::String b64 = ::haxe::crypto::Base64_obj::encode(out->getBytes(),null());
+HXLINE(1807)				 ::borogove::Client _gthis1 = _gthis->client;
+HXDLIN(1807)				_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            					->setFixed(0,HX_("to",7b,65,00,00),_gthis->chatId)
+            					->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("vCard",66,bd,db,1d), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("vcard-temp",bb,ee,0c,98))),null())->tag(HX_("PHOTO",92,00,e2,3f),null(),null())->textTag(HX_("TYPE",ba,ba,c9,37),source->type,null(),null())->textTag(HX_("BINVAL",7a,48,9e,9f),b64,null(),null()));
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXLINE(1803)			::String name = source->name;
+HXDLIN(1803)			 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
+HXDLIN(1803)			 ::Dynamic options = null();
+HXDLIN(1803)			options =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXDLIN(1803)			::Dynamic this1 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
+HXDLIN(1803)			 ::Dynamic _g = options->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
+HXDLIN(1803)			int this2;
+HXDLIN(1803)			if (::hx::IsNull( _g )) {
+HXLINE(1803)				this2 = 65536;
+            			}
+            			else {
+HXLINE(1803)				this2 = ( (int)(_g) );
+            			}
+HXDLIN(1803)			::tink::io::_Source::Source_Impl__obj::pipeTo( ::tink::io::std::InputSource_obj::__alloc( HX_CTX ,name,input,this1,::haxe::io::Bytes_obj::alloc(this2),0),sink,null())->handle( ::Dynamic(new _hx_Closure_0(source,_gthis,out)));
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,setPhoto,(void))
+
  ::Dynamic Channel_obj::getCaps(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::Array< bool >,hasNext) HXARGC(0)
             		bool _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1623_getCaps)
-HXLINE(1623)			return hasNext->__get(0);
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1821_getCaps)
+HXLINE(1821)			return hasNext->__get(0);
             		}
             		HX_END_LOCAL_FUNC0(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis,::Array< bool >,hasNext) HXARGC(0)
             		 ::Dynamic _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1624_getCaps)
-HXLINE(1625)			hasNext[0] = false;
-HXLINE(1626)			return  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1822_getCaps)
+HXLINE(1823)			hasNext[0] = false;
+HXLINE(1824)			return  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("key",9f,89,51,00),null())
             				->setFixed(1,HX_("value",71,7f,b8,31),_gthis->disco));
             		}
             		HX_END_LOCAL_FUNC0(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1620_getCaps)
-HXDLIN(1620)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1621)		::Array< bool > hasNext = ::Array_obj< bool >::fromData( _hx_array_data_da6a8256_26,1);
-HXLINE(1622)		return  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1818_getCaps)
+HXDLIN(1818)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1819)		::Array< bool > hasNext = ::Array_obj< bool >::fromData( _hx_array_data_da6a8256_38,1);
+HXLINE(1820)		return  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("hasNext",6d,a5,46,18), ::Dynamic(new _hx_Closure_0(hasNext)))
             			->setFixed(1,HX_("next",f3,84,02,49), ::Dynamic(new _hx_Closure_1(_gthis,hasNext))));
             	}
 
 
 void Channel_obj::setPresence(::String resource, ::borogove::Stanza presence,bool noStore){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1632_setPresence)
-HXDLIN(1632)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1633)		 ::borogove::Stanza tmp;
-HXDLIN(1633)		if (::hx::IsNotNull( presence )) {
-HXLINE(1633)			tmp = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
-            		}
-            		else {
-HXLINE(1633)			tmp = null();
-            		}
-HXDLIN(1633)		::Array< ::String > tmp1;
-HXDLIN(1633)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1633)			::Array< ::Dynamic> _this = tmp->allTags(HX_("status",32,e7,fb,05),null());
-HXDLIN(1633)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN(1633)			{
-HXLINE(1633)				int _g = 0;
-HXDLIN(1633)				int _g1 = _this->length;
-HXDLIN(1633)				while((_g < _g1)){
-HXLINE(1633)					_g = (_g + 1);
-HXDLIN(1633)					int i = (_g - 1);
-HXDLIN(1633)					{
-HXLINE(1633)						::String inValue = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->attr,HX_("code",2d,b1,c4,41))) );
-HXDLIN(1633)						result->__unsafe_set(i,inValue);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1830_setPresence)
+HXDLIN(1830)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1831)		 ::borogove::Stanza tmp;
+HXDLIN(1831)		if (::hx::IsNotNull( presence )) {
+HXLINE(1831)			tmp = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+            		}
+            		else {
+HXLINE(1831)			tmp = null();
+            		}
+HXDLIN(1831)		::Array< ::String > tmp1;
+HXDLIN(1831)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1831)			::Array< ::Dynamic> _this = tmp->allTags(HX_("status",32,e7,fb,05),null());
+HXDLIN(1831)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN(1831)			{
+HXLINE(1831)				int _g = 0;
+HXDLIN(1831)				int _g1 = _this->length;
+HXDLIN(1831)				while((_g < _g1)){
+HXLINE(1831)					_g = (_g + 1);
+HXDLIN(1831)					int i = (_g - 1);
+HXDLIN(1831)					{
+HXLINE(1831)						::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->attr->get_string(HX_("code",2d,b1,c4,41));
+HXDLIN(1831)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN(1633)			tmp1 = result;
+HXDLIN(1831)			tmp1 = result;
             		}
             		else {
-HXLINE(1633)			tmp1 = null();
+HXLINE(1831)			tmp1 = null();
             		}
-HXDLIN(1633)		::String oneTen;
-HXDLIN(1633)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1831)		::String oneTen;
+HXDLIN(1831)		if (::hx::IsNotNull( tmp1 )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			bool _hx_run(::String status){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1633_setPresence)
-HXLINE(1633)				return (status == HX_("110",50,59,25,00));
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1831_setPresence)
+HXLINE(1831)				return (status == HX_("110",50,59,25,00));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1633)			oneTen = ( (::String)(::Lambda_obj::find(tmp1, ::Dynamic(new _hx_Closure_0()))) );
+HXLINE(1831)			oneTen = ( (::String)(::Lambda_obj::find(tmp1, ::Dynamic(new _hx_Closure_0()))) );
             		}
             		else {
-HXLINE(1633)			oneTen = null();
+HXLINE(1831)			oneTen = null();
             		}
-HXLINE(1634)		 ::borogove::Member member = this->buildMember(resource,presence);
-HXLINE(1635)		bool _hx_tmp;
-HXDLIN(1635)		bool _hx_tmp1;
-HXDLIN(1635)		if (::hx::IsNotNull( presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14)) )) {
-HXLINE(1635)			_hx_tmp1 = ::hx::IsNull( oneTen );
+HXLINE(1832)		 ::borogove::Member member = this->buildMember(resource,presence);
+HXLINE(1833)		bool _hx_tmp;
+HXDLIN(1833)		bool _hx_tmp1;
+HXDLIN(1833)		if (::hx::IsNotNull( presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14)) )) {
+HXLINE(1833)			_hx_tmp1 = ::hx::IsNull( oneTen );
             		}
             		else {
-HXLINE(1635)			_hx_tmp1 = false;
+HXLINE(1833)			_hx_tmp1 = false;
             		}
-HXDLIN(1635)		if (_hx_tmp1) {
-HXLINE(1635)			_hx_tmp = member->isSelf;
+HXDLIN(1833)		if (_hx_tmp1) {
+HXLINE(1833)			_hx_tmp = member->isSelf;
             		}
             		else {
-HXLINE(1635)			_hx_tmp = false;
+HXLINE(1833)			_hx_tmp = false;
             		}
-HXDLIN(1635)		if (_hx_tmp) {
-HXLINE(1637)			 ::borogove::Stanza mucUser = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
-HXLINE(1638)			mucUser->tag(HX_("status",32,e7,fb,05), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("code",2d,b1,c4,41),HX_("110",50,59,25,00))))->up();
-HXLINE(1639)			this->setPresence(resource,presence,noStore);
-HXLINE(1640)			return;
+HXDLIN(1833)		if (_hx_tmp) {
+HXLINE(1835)			 ::borogove::Stanza mucUser = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+HXLINE(1836)			mucUser->tag(HX_("status",32,e7,fb,05), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("code",2d,b1,c4,41),HX_("110",50,59,25,00))),null())->up();
+HXLINE(1837)			this->setPresence(resource,presence,noStore);
+HXLINE(1838)			return;
             		}
-HXLINE(1642)		 ::borogove::Stanza tmp2 = presence->getChild(HX_("occupant-id",2b,a5,8b,91),HX_("urn:xmpp:occupant-id:0",05,d7,05,11));
-HXDLIN(1642)		 ::Dynamic tmp3;
-HXDLIN(1642)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1642)			tmp3 = tmp2->attr;
+HXLINE(1840)		 ::borogove::Stanza tmp2 = presence->getChild(HX_("occupant-id",2b,a5,8b,91),HX_("urn:xmpp:occupant-id:0",05,d7,05,11));
+HXDLIN(1840)		 ::haxe::ds::StringMap tmp3;
+HXDLIN(1840)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1840)			tmp3 = tmp2->attr;
             		}
             		else {
-HXLINE(1642)			tmp3 = null();
+HXLINE(1840)			tmp3 = null();
             		}
-HXDLIN(1642)		::String occupantId;
-HXDLIN(1642)		if (::hx::IsNotNull( tmp3 )) {
-HXLINE(1642)			occupantId = ( (::String)(::Reflect_obj::field(tmp3,HX_("id",db,5b,00,00))) );
+HXDLIN(1840)		::String occupantId;
+HXDLIN(1840)		if (::hx::IsNotNull( tmp3 )) {
+HXLINE(1840)			occupantId = tmp3->get_string(HX_("id",db,5b,00,00));
             		}
             		else {
-HXLINE(1642)			occupantId = null();
+HXLINE(1840)			occupantId = null();
             		}
-HXLINE(1643)		bool _hx_tmp2;
-HXDLIN(1643)		if (!(noStore)) {
-HXLINE(1643)			bool _hx_tmp3;
-HXDLIN(1643)			if (this->disco->features->contains(HX_("urn:xmpp:occupant-id:0",05,d7,05,11))) {
-HXLINE(1643)				_hx_tmp3 = (member->id != ((this->chatId + HX_("/",2f,00,00,00)) + occupantId));
+HXLINE(1841)		bool _hx_tmp2;
+HXDLIN(1841)		if (!(noStore)) {
+HXLINE(1841)			bool _hx_tmp3;
+HXDLIN(1841)			if (this->disco->features->contains(HX_("urn:xmpp:occupant-id:0",05,d7,05,11))) {
+HXLINE(1841)				_hx_tmp3 = (member->id != ((this->chatId + HX_("/",2f,00,00,00)) + occupantId));
             			}
             			else {
-HXLINE(1643)				_hx_tmp3 = false;
+HXLINE(1841)				_hx_tmp3 = false;
             			}
-HXDLIN(1643)			_hx_tmp2 = !(_hx_tmp3);
+HXDLIN(1841)			_hx_tmp2 = !(_hx_tmp3);
             		}
             		else {
-HXLINE(1643)			_hx_tmp2 = false;
+HXLINE(1841)			_hx_tmp2 = false;
             		}
-HXDLIN(1643)		if (_hx_tmp2) {
-HXLINE(1644)			bool _hx_tmp4;
-HXDLIN(1644)			if ((( (::String)(::Reflect_obj::field(presence->attr,HX_("type",ba,f2,08,4d))) ) == HX_("unavailable",50,e0,29,fd))) {
-HXLINE(1644)				_hx_tmp4 = ::hx::IsNull( member->photoUri );
+HXDLIN(1841)		if (_hx_tmp2) {
+HXLINE(1842)			bool _hx_tmp4;
+HXDLIN(1842)			if (::hx::IsEq( presence->attr->get(HX_("type",ba,f2,08,4d)),HX_("unavailable",50,e0,29,fd) )) {
+HXLINE(1842)				_hx_tmp4 = ::hx::IsNull( member->photoUri );
             			}
             			else {
-HXLINE(1644)				_hx_tmp4 = false;
+HXLINE(1842)				_hx_tmp4 = false;
             			}
-HXDLIN(1644)			if (_hx_tmp4) {
+HXDLIN(1842)			if (_hx_tmp4) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis) HXARGC(1)
             				 ::borogove::EventResult _hx_run(::Array< ::Dynamic> members){
-            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1646_setPresence)
-HXLINE(1646)					return _gthis->trigger(HX_("members/update",bf,63,66,64),members);
+            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1844_setPresence)
+HXLINE(1844)					return _gthis->trigger(HX_("members/update",bf,63,66,64),members);
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1645)				::Array< ::Dynamic> memberUpdates = ::borogove::MemberUpdate_obj::extractUpdates(this->client->accountId(),::hx::ObjectPtr<OBJ_>(this),presence);
-HXLINE(1646)				::Dynamic _hx_tmp5 = this->persistence;
-HXDLIN(1646)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMemberUpdates(_hx_tmp5,this->client->accountId(),::hx::ObjectPtr<OBJ_>(this),memberUpdates,false), ::Dynamic(new _hx_Closure_1(_gthis)),null());
+HXLINE(1843)				::Array< ::Dynamic> memberUpdates = ::borogove::MemberUpdate_obj::extractUpdates(this->client->accountId(),::hx::ObjectPtr<OBJ_>(this),presence);
+HXLINE(1844)				::Dynamic _hx_tmp5 = this->persistence;
+HXDLIN(1844)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMemberUpdates(_hx_tmp5,this->client->accountId(),::hx::ObjectPtr<OBJ_>(this),memberUpdates,false), ::Dynamic(new _hx_Closure_1(_gthis)),null());
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::borogove::Channel,_gthis, ::borogove::Member,member) HXARGC(1)
             				 ::borogove::EventResult _hx_run(bool _){
-            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1650_setPresence)
-HXLINE(1650)					return _gthis->trigger(HX_("members/update",bf,63,66,64),::cpp::VirtualArray_obj::__new(1)->init(0,member));
+            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1848_setPresence)
+HXLINE(1848)					return _gthis->trigger(HX_("members/update",bf,63,66,64),::cpp::VirtualArray_obj::__new(1)->init(0,member));
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1650)				::Dynamic _hx_tmp6 = this->persistence;
-HXDLIN(1650)				::String _hx_tmp7 = this->client->accountId();
-HXDLIN(1650)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMembers(_hx_tmp6,_hx_tmp7,this->chatId,::Array_obj< ::Dynamic>::__new(1)->init(0,member)), ::Dynamic(new _hx_Closure_2(_gthis,member)),null());
+HXLINE(1848)				::Dynamic _hx_tmp6 = this->persistence;
+HXDLIN(1848)				::String _hx_tmp7 = this->client->accountId();
+HXDLIN(1848)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMembers(_hx_tmp6,_hx_tmp7,this->chatId,::Array_obj< ::Dynamic>::__new(1)->init(0,member)), ::Dynamic(new _hx_Closure_2(_gthis,member)),null());
             			}
             		}
-HXLINE(1655)		 ::borogove::Stanza mucUser1 = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
-HXLINE(1656)		if (::hx::IsNotNull( mucUser1 )) {
-HXLINE(1657)			 ::borogove::Stanza mav = mucUser1->getChild(HX_("mav",a2,0a,53,00),HX_("urn:xmpp:muc:affiliations:1",75,28,1f,fe));
-HXLINE(1658)			bool _hx_tmp8;
-HXDLIN(1658)			 ::Dynamic tmp4;
-HXDLIN(1658)			if (::hx::IsNotNull( mav )) {
-HXLINE(1658)				tmp4 = mav->attr;
+HXLINE(1853)		 ::borogove::Stanza mucUser1 = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+HXLINE(1854)		if (::hx::IsNotNull( mucUser1 )) {
+HXLINE(1855)			 ::borogove::Stanza mav = mucUser1->getChild(HX_("mav",a2,0a,53,00),HX_("urn:xmpp:muc:affiliations:1",75,28,1f,fe));
+HXLINE(1856)			bool _hx_tmp8;
+HXDLIN(1856)			 ::haxe::ds::StringMap tmp4;
+HXDLIN(1856)			if (::hx::IsNotNull( mav )) {
+HXLINE(1856)				tmp4 = mav->attr;
             			}
             			else {
-HXLINE(1658)				tmp4 = null();
+HXLINE(1856)				tmp4 = null();
             			}
-HXDLIN(1658)			::String _hx_tmp9;
-HXDLIN(1658)			if (::hx::IsNotNull( tmp4 )) {
-HXLINE(1658)				_hx_tmp9 = ( (::String)(::Reflect_obj::field(tmp4,HX_("since",ba,eb,cf,7c))) );
+HXDLIN(1856)			::String _hx_tmp9;
+HXDLIN(1856)			if (::hx::IsNotNull( tmp4 )) {
+HXLINE(1856)				_hx_tmp9 = tmp4->get_string(HX_("since",ba,eb,cf,7c));
             			}
             			else {
-HXLINE(1658)				_hx_tmp9 = null();
+HXLINE(1856)				_hx_tmp9 = null();
             			}
-HXDLIN(1658)			if (::hx::IsNotNull( _hx_tmp9 )) {
-HXLINE(1658)				 ::Dynamic tmp5;
-HXDLIN(1658)				if (::hx::IsNotNull( mav )) {
-HXLINE(1658)					tmp5 = mav->attr;
+HXDLIN(1856)			if (::hx::IsNotNull( _hx_tmp9 )) {
+HXLINE(1856)				 ::haxe::ds::StringMap tmp5;
+HXDLIN(1856)				if (::hx::IsNotNull( mav )) {
+HXLINE(1856)					tmp5 = mav->attr;
             				}
             				else {
-HXLINE(1658)					tmp5 = null();
+HXLINE(1856)					tmp5 = null();
             				}
-HXDLIN(1658)				::String _hx_tmp10;
-HXDLIN(1658)				if (::hx::IsNotNull( tmp5 )) {
-HXLINE(1658)					_hx_tmp10 = ( (::String)(::Reflect_obj::field(tmp5,HX_("since",ba,eb,cf,7c))) );
+HXDLIN(1856)				::String _hx_tmp10;
+HXDLIN(1856)				if (::hx::IsNotNull( tmp5 )) {
+HXLINE(1856)					_hx_tmp10 = tmp5->get_string(HX_("since",ba,eb,cf,7c));
             				}
             				else {
-HXLINE(1658)					_hx_tmp10 = null();
+HXLINE(1856)					_hx_tmp10 = null();
             				}
-HXDLIN(1658)				_hx_tmp8 = (_hx_tmp10 != this->mavUntil);
+HXDLIN(1856)				_hx_tmp8 = (_hx_tmp10 != this->mavUntil);
             			}
             			else {
-HXLINE(1658)				_hx_tmp8 = false;
+HXLINE(1856)				_hx_tmp8 = false;
             			}
-HXDLIN(1658)			if (_hx_tmp8) {
-HXLINE(1659)				::haxe::Log_obj::trace(HX_("MAV update with unknown previous version",e6,80,1b,7e), ::Dynamic(::hx::Anon_obj::Create(5)
+HXDLIN(1856)			if (_hx_tmp8) {
+HXLINE(1857)				::haxe::Log_obj::trace(HX_("MAV update with unknown previous version",e6,80,1b,7e), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,this->mavUntil)->init(1,presence))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("setPresence",fd,1b,38,97))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1659)));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1857)));
             			}
-HXLINE(1661)			bool _hx_tmp11;
-HXDLIN(1661)			 ::Dynamic tmp6;
-HXDLIN(1661)			if (::hx::IsNotNull( mav )) {
-HXLINE(1661)				tmp6 = mav->attr;
+HXLINE(1859)			bool _hx_tmp11;
+HXDLIN(1859)			 ::haxe::ds::StringMap tmp6;
+HXDLIN(1859)			if (::hx::IsNotNull( mav )) {
+HXLINE(1859)				tmp6 = mav->attr;
             			}
             			else {
-HXLINE(1661)				tmp6 = null();
+HXLINE(1859)				tmp6 = null();
             			}
-HXDLIN(1661)			::String _hx_tmp12;
-HXDLIN(1661)			if (::hx::IsNotNull( tmp6 )) {
-HXLINE(1661)				_hx_tmp12 = ( (::String)(::Reflect_obj::field(tmp6,HX_("until",9e,b8,ef,a6))) );
+HXDLIN(1859)			::String _hx_tmp12;
+HXDLIN(1859)			if (::hx::IsNotNull( tmp6 )) {
+HXLINE(1859)				_hx_tmp12 = tmp6->get_string(HX_("until",9e,b8,ef,a6));
+            			}
+            			else {
+HXLINE(1859)				_hx_tmp12 = null();
+            			}
+HXDLIN(1859)			if (::hx::IsNotNull( _hx_tmp12 )) {
+HXLINE(1859)				::String _hx_tmp13 = this->mavUntil;
+HXDLIN(1859)				 ::haxe::ds::StringMap tmp7;
+HXDLIN(1859)				if (::hx::IsNotNull( mav )) {
+HXLINE(1859)					tmp7 = mav->attr;
+            				}
+            				else {
+HXLINE(1859)					tmp7 = null();
+            				}
+HXDLIN(1859)				::String _hx_tmp14;
+HXDLIN(1859)				if (::hx::IsNotNull( tmp7 )) {
+HXLINE(1859)					_hx_tmp14 = tmp7->get_string(HX_("until",9e,b8,ef,a6));
+            				}
+            				else {
+HXLINE(1859)					_hx_tmp14 = null();
+            				}
+HXDLIN(1859)				_hx_tmp11 = (_hx_tmp13 != _hx_tmp14);
             			}
             			else {
-HXLINE(1661)				_hx_tmp12 = null();
+HXLINE(1859)				_hx_tmp11 = false;
             			}
-HXDLIN(1661)			if (::hx::IsNotNull( _hx_tmp12 )) {
-HXLINE(1661)				::String _hx_tmp13 = this->mavUntil;
-HXDLIN(1661)				 ::Dynamic tmp7;
-HXDLIN(1661)				if (::hx::IsNotNull( mav )) {
-HXLINE(1661)					tmp7 = mav->attr;
+HXDLIN(1859)			if (_hx_tmp11) {
+HXLINE(1860)				 ::haxe::ds::StringMap tmp8;
+HXDLIN(1860)				if (::hx::IsNotNull( mav )) {
+HXLINE(1860)					tmp8 = mav->attr;
             				}
             				else {
-HXLINE(1661)					tmp7 = null();
+HXLINE(1860)					tmp8 = null();
             				}
-HXDLIN(1661)				::String _hx_tmp14;
-HXDLIN(1661)				if (::hx::IsNotNull( tmp7 )) {
-HXLINE(1661)					_hx_tmp14 = ( (::String)(::Reflect_obj::field(tmp7,HX_("until",9e,b8,ef,a6))) );
+HXDLIN(1860)				::String _hx_tmp15;
+HXDLIN(1860)				if (::hx::IsNotNull( tmp8 )) {
+HXLINE(1860)					_hx_tmp15 = tmp8->get_string(HX_("until",9e,b8,ef,a6));
             				}
             				else {
-HXLINE(1661)					_hx_tmp14 = null();
+HXLINE(1860)					_hx_tmp15 = null();
             				}
-HXDLIN(1661)				_hx_tmp11 = (_hx_tmp13 != _hx_tmp14);
+HXDLIN(1860)				this->mavUntil = _hx_tmp15;
+HXLINE(1861)				if (!(noStore)) {
+HXLINE(1861)					::Dynamic _hx_tmp16 = this->persistence;
+HXDLIN(1861)					::borogove::Persistence_obj::storeChats(_hx_tmp16,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+            				}
+            			}
+HXLINE(1863)			bool _hx_tmp17;
+HXDLIN(1863)			bool _hx_tmp18;
+HXDLIN(1863)			if (!(noStore)) {
+HXLINE(1863)				 ::borogove::Stanza tmp9 = mucUser1->getChild(HX_("item",13,c5,bf,45),null());
+HXDLIN(1863)				 ::haxe::ds::StringMap tmp10;
+HXDLIN(1863)				if (::hx::IsNotNull( tmp9 )) {
+HXLINE(1863)					tmp10 = tmp9->attr;
+            				}
+            				else {
+HXLINE(1863)					tmp10 = null();
+            				}
+HXDLIN(1863)				::String tmp11;
+HXDLIN(1863)				if (::hx::IsNotNull( tmp10 )) {
+HXLINE(1863)					tmp11 = tmp10->get_string(HX_("role",76,eb,ae,4b));
+            				}
+            				else {
+HXLINE(1863)					tmp11 = null();
+            				}
+HXDLIN(1863)				::String _hx_tmp19;
+HXDLIN(1863)				if (::hx::IsNotNull( tmp11 )) {
+HXLINE(1863)					_hx_tmp19 = tmp11;
+            				}
+            				else {
+HXLINE(1863)					_hx_tmp19 = HX_("none",b8,12,0a,49);
+            				}
+HXDLIN(1863)				_hx_tmp18 = (_hx_tmp19 != HX_("visitor",ae,23,32,a3));
             			}
             			else {
-HXLINE(1661)				_hx_tmp11 = false;
+HXLINE(1863)				_hx_tmp18 = false;
             			}
-HXDLIN(1661)			if (_hx_tmp11) {
-HXLINE(1662)				 ::Dynamic tmp8;
-HXDLIN(1662)				if (::hx::IsNotNull( mav )) {
-HXLINE(1662)					tmp8 = mav->attr;
+HXDLIN(1863)			if (_hx_tmp18) {
+HXLINE(1863)				 ::borogove::Stanza tmp12 = mucUser1->getChild(HX_("item",13,c5,bf,45),null());
+HXDLIN(1863)				 ::haxe::ds::StringMap tmp13;
+HXDLIN(1863)				if (::hx::IsNotNull( tmp12 )) {
+HXLINE(1863)					tmp13 = tmp12->attr;
+            				}
+            				else {
+HXLINE(1863)					tmp13 = null();
+            				}
+HXDLIN(1863)				::String jid;
+HXDLIN(1863)				if (::hx::IsNotNull( tmp13 )) {
+HXLINE(1863)					jid = tmp13->get_string(HX_("jid",c5,ca,50,00));
             				}
             				else {
-HXLINE(1662)					tmp8 = null();
+HXLINE(1863)					jid = null();
             				}
-HXDLIN(1662)				::String _hx_tmp15;
-HXDLIN(1662)				if (::hx::IsNotNull( tmp8 )) {
-HXLINE(1662)					_hx_tmp15 = ( (::String)(::Reflect_obj::field(tmp8,HX_("until",9e,b8,ef,a6))) );
+HXDLIN(1863)				 ::borogove::JID _hx_tmp20;
+HXDLIN(1863)				if (::hx::IsNull( jid )) {
+HXLINE(1863)					_hx_tmp20 = null();
             				}
             				else {
-HXLINE(1662)					_hx_tmp15 = null();
+HXLINE(1863)					_hx_tmp20 = ::borogove::JID_obj::parse(jid);
             				}
-HXDLIN(1662)				this->mavUntil = _hx_tmp15;
-HXLINE(1663)				::Dynamic _hx_tmp16 = this->persistence;
-HXDLIN(1663)				::borogove::Persistence_obj::storeChats(_hx_tmp16,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXDLIN(1863)				_hx_tmp17 = ::hx::IsNotNull( _hx_tmp20 );
+            			}
+            			else {
+HXLINE(1863)				_hx_tmp17 = false;
+            			}
+HXDLIN(1863)			if (_hx_tmp17) {
+            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::Channel,_gthis) HXARGC(1)
+            				 ::borogove::EventResult _hx_run(bool _){
+            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1865_setPresence)
+HXLINE(1865)					return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+HXLINE(1865)				::Dynamic _hx_tmp21 = this->persistence;
+HXDLIN(1865)				::String _hx_tmp22 = this->client->accountId();
+HXDLIN(1865)				 ::borogove::Stanza tmp14 = mucUser1->getChild(HX_("item",13,c5,bf,45),null());
+HXDLIN(1865)				 ::haxe::ds::StringMap tmp15;
+HXDLIN(1865)				if (::hx::IsNotNull( tmp14 )) {
+HXLINE(1865)					tmp15 = tmp14->attr;
+            				}
+            				else {
+HXLINE(1865)					tmp15 = null();
+            				}
+HXDLIN(1865)				::String jid1;
+HXDLIN(1865)				if (::hx::IsNotNull( tmp15 )) {
+HXLINE(1865)					jid1 = tmp15->get_string(HX_("jid",c5,ca,50,00));
+            				}
+            				else {
+HXLINE(1865)					jid1 = null();
+            				}
+HXDLIN(1865)				 ::borogove::JID _hx_tmp23;
+HXDLIN(1865)				if (::hx::IsNull( jid1 )) {
+HXLINE(1865)					_hx_tmp23 = null();
+            				}
+            				else {
+HXLINE(1865)					_hx_tmp23 = ::borogove::JID_obj::parse(jid1);
+            				}
+HXDLIN(1865)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeVoiceRequest(_hx_tmp21,_hx_tmp22,::hx::ObjectPtr<OBJ_>(this),_hx_tmp23->asBare()->asString(),false), ::Dynamic(new _hx_Closure_3(_gthis)),null());
             			}
             		}
-HXLINE(1666)		if (member->isSelf) {
-HXLINE(1667)			if ((( (::String)(::Reflect_obj::field(presence->attr,HX_("type",ba,f2,08,4d))) ) == HX_("unavailable",50,e0,29,fd))) {
-HXLINE(1668)				this->self = null();
-HXLINE(1669)				this->outbox->pause();
+HXLINE(1870)		if (member->isSelf) {
+HXLINE(1871)			if (::hx::IsEq( presence->attr->get(HX_("type",ba,f2,08,4d)),HX_("unavailable",50,e0,29,fd) )) {
+HXLINE(1872)				this->self = null();
+HXLINE(1873)				this->outbox->pause();
             			}
             			else {
-HXLINE(1671)				this->self = member;
-HXLINE(1672)				this->outbox->start();
+HXLINE(1875)				this->self = member;
+HXLINE(1876)				this->outbox->start();
+HXLINE(1877)				this->client->channelPinger->schedule(::hx::ObjectPtr<OBJ_>(this),null());
+            			}
+HXLINE(1879)			if (!(noStore)) {
+HXLINE(1879)				this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             			}
-HXLINE(1674)			this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             		}
-HXLINE(1676)		bool _hx_tmp17;
-HXDLIN(1676)		bool _hx_tmp18;
-HXDLIN(1676)		if (!(member->isSelf)) {
-HXLINE(1676)			_hx_tmp18 = (member->id != this->chatId);
+HXLINE(1881)		bool _hx_tmp24;
+HXDLIN(1881)		bool _hx_tmp25;
+HXDLIN(1881)		if (!(member->isSelf)) {
+HXLINE(1881)			_hx_tmp25 = (member->id != this->chatId);
             		}
             		else {
-HXLINE(1676)			_hx_tmp18 = false;
+HXLINE(1881)			_hx_tmp25 = false;
             		}
-HXDLIN(1676)		if (_hx_tmp18) {
-HXLINE(1676)			_hx_tmp17 = ::hx::IsNotNull( this->membersForName );
+HXDLIN(1881)		if (_hx_tmp25) {
+HXLINE(1881)			_hx_tmp24 = ::hx::IsNotNull( this->membersForName );
             		}
             		else {
-HXLINE(1676)			_hx_tmp17 = false;
+HXLINE(1881)			_hx_tmp24 = false;
             		}
-HXDLIN(1676)		if (_hx_tmp17) {
-            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(2)
+HXDLIN(1881)		if (_hx_tmp24) {
+            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(2)
             			int _hx_run( ::Dynamic a, ::Dynamic b){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1679_setPresence)
-HXLINE(1679)				return ::Reflect_obj::compare( ::Dynamic(a->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)), ::Dynamic(b->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)));
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1884_setPresence)
+HXLINE(1884)				return ::Reflect_obj::compare( ::Dynamic(a->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)), ::Dynamic(b->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)));
             			}
             			HX_END_LOCAL_FUNC2(return)
 
-HXLINE(1677)			::Array< ::Dynamic> _this1 = this->membersForName;
-HXDLIN(1677)			::Array< ::Dynamic> _g2 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN(1677)			{
-HXLINE(1677)				int _g3 = 0;
-HXDLIN(1677)				while((_g3 < _this1->length)){
-HXLINE(1677)					 ::Dynamic v = _this1->__get(_g3);
-HXDLIN(1677)					_g3 = (_g3 + 1);
-HXDLIN(1677)					if (::hx::IsNotEq( v->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic),member->id )) {
-HXLINE(1677)						_g2->push(v);
+HXLINE(1882)			::Array< ::Dynamic> _this1 = this->membersForName;
+HXDLIN(1882)			::Array< ::Dynamic> _g2 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(1882)			{
+HXLINE(1882)				int _g3 = 0;
+HXDLIN(1882)				while((_g3 < _this1->length)){
+HXLINE(1882)					 ::Dynamic v = _this1->__get(_g3);
+HXDLIN(1882)					_g3 = (_g3 + 1);
+HXDLIN(1882)					if (::hx::IsNotEq( v->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic),member->id )) {
+HXLINE(1882)						_g2->push(v);
             					}
             				}
             			}
-HXDLIN(1677)			this->membersForName = _g2;
-HXLINE(1678)			this->membersForName->push( ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN(1882)			this->membersForName = _g2;
+HXLINE(1883)			this->membersForName->push( ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("id",db,5b,00,00),member->id)
             				->setFixed(1,HX_("displayName",ad,11,f2,30),member->displayName)));
-HXLINE(1679)			this->membersForName->sort( ::Dynamic(new _hx_Closure_3()));
-HXLINE(1680)			if ((this->membersForName->length > 20)) {
-HXLINE(1680)				this->membersForName = null();
-            			}
-HXLINE(1681)			if ((this->displayName == this->chatId)) {
-HXLINE(1681)				this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-            			}
-            		}
-HXLINE(1683)		 ::borogove::Stanza tmp9;
-HXDLIN(1683)		if (::hx::IsNotNull( presence )) {
-HXLINE(1683)			tmp9 = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
-            		}
-            		else {
-HXLINE(1683)			tmp9 = null();
-            		}
-HXDLIN(1683)		::Array< ::String > tmp10;
-HXDLIN(1683)		if (::hx::IsNotNull( tmp9 )) {
-HXLINE(1683)			::Array< ::Dynamic> _this2 = tmp9->allTags(HX_("status",32,e7,fb,05),null());
-HXDLIN(1683)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this2->length);
-HXDLIN(1683)			{
-HXLINE(1683)				int _g4 = 0;
-HXDLIN(1683)				int _g5 = _this2->length;
-HXDLIN(1683)				while((_g4 < _g5)){
-HXLINE(1683)					_g4 = (_g4 + 1);
-HXDLIN(1683)					int i1 = (_g4 - 1);
-HXDLIN(1683)					{
-HXLINE(1683)						::String inValue1 = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this2,i1)) )->attr,HX_("code",2d,b1,c4,41))) );
-HXDLIN(1683)						result1->__unsafe_set(i1,inValue1);
+HXLINE(1884)			this->membersForName->sort( ::Dynamic(new _hx_Closure_4()));
+HXLINE(1885)			if ((this->membersForName->length > 20)) {
+HXLINE(1885)				this->membersForName = null();
+            			}
+HXLINE(1886)			bool _hx_tmp26;
+HXDLIN(1886)			if ((this->displayName == this->chatId)) {
+HXLINE(1886)				_hx_tmp26 = !(noStore);
+            			}
+            			else {
+HXLINE(1886)				_hx_tmp26 = false;
+            			}
+HXDLIN(1886)			if (_hx_tmp26) {
+HXLINE(1886)				this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+            			}
+            		}
+HXLINE(1888)		 ::borogove::Stanza tmp16;
+HXDLIN(1888)		if (::hx::IsNotNull( presence )) {
+HXLINE(1888)			tmp16 = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+            		}
+            		else {
+HXLINE(1888)			tmp16 = null();
+            		}
+HXDLIN(1888)		::Array< ::String > tmp17;
+HXDLIN(1888)		if (::hx::IsNotNull( tmp16 )) {
+HXLINE(1888)			::Array< ::Dynamic> _this2 = tmp16->allTags(HX_("status",32,e7,fb,05),null());
+HXDLIN(1888)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this2->length);
+HXDLIN(1888)			{
+HXLINE(1888)				int _g4 = 0;
+HXDLIN(1888)				int _g5 = _this2->length;
+HXDLIN(1888)				while((_g4 < _g5)){
+HXLINE(1888)					_g4 = (_g4 + 1);
+HXDLIN(1888)					int i1 = (_g4 - 1);
+HXDLIN(1888)					{
+HXLINE(1888)						::String inValue1 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this2,i1)) )->attr->get_string(HX_("code",2d,b1,c4,41));
+HXDLIN(1888)						result1->__unsafe_set(i1,inValue1);
             					}
             				}
             			}
-HXDLIN(1683)			tmp10 = result1;
+HXDLIN(1888)			tmp17 = result1;
             		}
             		else {
-HXLINE(1683)			tmp10 = null();
+HXLINE(1888)			tmp17 = null();
             		}
-HXDLIN(1683)		::String tripleThree;
-HXDLIN(1683)		if (::hx::IsNotNull( tmp10 )) {
-            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
+HXDLIN(1888)		::String tripleThree;
+HXDLIN(1888)		if (::hx::IsNotNull( tmp17 )) {
+            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_5) HXARGC(1)
             			bool _hx_run(::String status){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1683_setPresence)
-HXLINE(1683)				return (status == HX_("333",93,df,26,00));
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1888_setPresence)
+HXLINE(1888)				return (status == HX_("333",93,df,26,00));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1683)			tripleThree = ( (::String)(::Lambda_obj::find(tmp10, ::Dynamic(new _hx_Closure_4()))) );
+HXLINE(1888)			tripleThree = ( (::String)(::Lambda_obj::find(tmp17, ::Dynamic(new _hx_Closure_5()))) );
             		}
             		else {
-HXLINE(1683)			tripleThree = null();
+HXLINE(1888)			tripleThree = null();
             		}
-HXLINE(1684)		bool _hx_tmp19;
-HXDLIN(1684)		if (member->isSelf) {
-HXLINE(1684)			_hx_tmp19 = ::hx::IsNotNull( tripleThree );
+HXLINE(1889)		bool _hx_tmp27;
+HXDLIN(1889)		if (member->isSelf) {
+HXLINE(1889)			_hx_tmp27 = ::hx::IsNotNull( tripleThree );
             		}
             		else {
-HXLINE(1684)			_hx_tmp19 = false;
+HXLINE(1889)			_hx_tmp27 = false;
             		}
-HXDLIN(1684)		if (_hx_tmp19) {
-            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_5, ::borogove::Channel,_gthis) HXARGC(0)
+HXDLIN(1889)		if (_hx_tmp27) {
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_6, ::borogove::Channel,_gthis) HXARGC(0)
             			void _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1685_setPresence)
-HXLINE(1685)				_gthis->selfPing(true);
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1890_setPresence)
+HXLINE(1890)				_gthis->selfPing(true);
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1685)			::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_5(_gthis)),5000);
+HXLINE(1890)			::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_6(_gthis)),5000);
             		}
             	}
 
@@ -1223,10 +1666,10 @@ HXLINE(1685)			::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_5(_gthis)),50
 void Channel_obj::doSync( ::borogove::ChatMessage syncPoint,::String sortA){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(2)
             		 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1714_doSync)
-HXLINE(1715)			builder = _gthis->prepareIncomingMessage(builder,stanza);
-HXLINE(1716)			builder->syncPoint = true;
-HXLINE(1717)			return builder;
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1944_doSync)
+HXLINE(1945)			builder = _gthis->prepareIncomingMessage(builder,stanza);
+HXLINE(1946)			builder->syncPoint = true;
+HXLINE(1947)			return builder;
             		}
             		HX_END_LOCAL_FUNC2(return)
 
@@ -1234,170 +1677,179 @@ HXLINE(1717)			return builder;
             		void _hx_run( ::Dynamic messageList){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_9, ::borogove::Channel,_gthis,::Array< ::Dynamic>,chatMessages) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> stored){
-            				HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1750_doSync)
-HXLINE(1751)				{
-HXLINE(1751)					int _g = 0;
-HXDLIN(1751)					while((_g < stored->length)){
-HXLINE(1751)						::Array< ::Dynamic> messages = stored->__get(_g).StaticCast< ::Array< ::Dynamic> >();
-HXDLIN(1751)						_g = (_g + 1);
-HXLINE(1752)						if (::hx::IsNotNull( messages )) {
-HXLINE(1753)							int _g1 = 0;
-HXDLIN(1753)							while((_g1 < messages->length)){
-HXLINE(1753)								 ::borogove::ChatMessage message = messages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1753)								_g1 = (_g1 + 1);
-HXLINE(1754)								_gthis->client->notifySyncMessageHandlers(message);
-HXLINE(1755)								bool _hx_tmp;
-HXDLIN(1755)								if (::hx::IsNotNull( message )) {
-HXLINE(1755)									::String _hx_tmp1 = message->chatId();
-HXDLIN(1755)									_hx_tmp = (_hx_tmp1 == _gthis->chatId);
+            				HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1980_doSync)
+HXLINE(1981)				{
+HXLINE(1981)					int _g = 0;
+HXDLIN(1981)					while((_g < stored->length)){
+HXLINE(1981)						::Array< ::Dynamic> messages = stored->__get(_g).StaticCast< ::Array< ::Dynamic> >();
+HXDLIN(1981)						_g = (_g + 1);
+HXLINE(1982)						if (::hx::IsNotNull( messages )) {
+HXLINE(1983)							int _g1 = 0;
+HXDLIN(1983)							while((_g1 < messages->length)){
+HXLINE(1983)								 ::borogove::ChatMessage message = messages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1983)								_g1 = (_g1 + 1);
+HXLINE(1984)								_gthis->client->notifySyncMessageHandlers(message);
+HXLINE(1985)								bool _hx_tmp;
+HXDLIN(1985)								if (::hx::IsNotNull( message )) {
+HXLINE(1985)									::String _hx_tmp1 = message->chatId();
+HXDLIN(1985)									_hx_tmp = (_hx_tmp1 == _gthis->chatId);
             								}
             								else {
-HXLINE(1755)									_hx_tmp = false;
+HXLINE(1985)									_hx_tmp = false;
             								}
-HXDLIN(1755)								if (_hx_tmp) {
-HXLINE(1755)									chatMessages->push(message);
+HXDLIN(1985)								if (_hx_tmp) {
+HXLINE(1985)									chatMessages->push(message);
             								}
-HXLINE(1756)								if ((chatMessages->length > 1000)) {
-HXLINE(1756)									chatMessages->shift().StaticCast<  ::borogove::ChatMessage >();
+HXLINE(1986)								if ((chatMessages->length > 1000)) {
+HXLINE(1986)									chatMessages->shift().StaticCast<  ::borogove::ChatMessage >();
             								}
             							}
             						}
             					}
             				}
-HXLINE(1760)				if (_gthis->sync->hasMore()) {
-HXLINE(1761)					_gthis->sync->fetchNext();
+HXLINE(1990)				if (_gthis->sync->hasMore()) {
+HXLINE(1991)					_gthis->sync->fetchNext();
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_6) HXARGC(2)
             					int _hx_run( ::borogove::ChatMessage x, ::borogove::ChatMessage y){
-            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1777_doSync)
-HXLINE(1777)						return ::Reflect_obj::compare(x->timestamp,y->timestamp);
+            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2011_doSync)
+HXLINE(2011)						return ::Reflect_obj::compare(x->timeReceived,y->timeReceived);
             					}
             					HX_END_LOCAL_FUNC2(return)
 
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::borogove::Channel,_gthis) HXARGC(1)
             					bool _hx_run( ::borogove::ChatMessage m){
-            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1779_doSync)
-HXLINE(1779)						if ((m->serverId != _gthis->readUpToId)) {
-HXLINE(1779)							return !(m->isIncoming());
+            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2013_doSync)
+HXLINE(2013)						if ((m->serverId != _gthis->readUpToId)) {
+HXLINE(2013)							return !(m->isIncoming());
             						}
             						else {
-HXLINE(1779)							return true;
+HXLINE(2013)							return true;
             						}
-HXDLIN(1779)						return false;
+HXDLIN(2013)						return false;
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1763)					_gthis->inSync = true;
-HXLINE(1764)					_gthis->sync = null();
-HXLINE(1766)					 ::haxe::ds::StringMap serverIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1767)					::Array< ::Dynamic> dedupedMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1768)					chatMessages->reverse();
-HXLINE(1769)					{
-HXLINE(1769)						int _g2 = 0;
-HXDLIN(1769)						while((_g2 < chatMessages->length)){
-HXLINE(1769)							 ::borogove::ChatMessage m = chatMessages->__get(_g2).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1769)							_g2 = (_g2 + 1);
-HXLINE(1770)							 ::Dynamic tmp = serverIds->get(m->serverId);
-HXDLIN(1770)							bool _hx_tmp2;
-HXDLIN(1770)							if (::hx::IsNotNull( tmp )) {
-HXLINE(1770)								_hx_tmp2 = ( (bool)(tmp) );
+HXLINE(1993)					_gthis->inSync = true;
+HXLINE(1994)					::haxe::Log_obj::trace(HX_("SYNC: channel inSync",1e,d0,1c,33), ::Dynamic(::hx::Anon_obj::Create(5)
+            						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
+            						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
+            							->setFixed(0,HX_("inSync",e0,98,c5,88),_gthis->inSync)
+            							->setFixed(1,HX_("chatId",d3,04,77,b7),_gthis->chatId)
+            							->setFixed(2,HX_("reason",c4,0f,9d,fc),HX_("MAM sync complete",37,d7,30,1f)))))
+            						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
+            						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),1994)));
+HXLINE(1998)					_gthis->sync = null();
+HXLINE(2000)					 ::haxe::ds::StringMap serverIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(2001)					::Array< ::Dynamic> dedupedMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2002)					chatMessages->reverse();
+HXLINE(2003)					{
+HXLINE(2003)						int _g2 = 0;
+HXDLIN(2003)						while((_g2 < chatMessages->length)){
+HXLINE(2003)							 ::borogove::ChatMessage m = chatMessages->__get(_g2).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(2003)							_g2 = (_g2 + 1);
+HXLINE(2004)							 ::Dynamic tmp = serverIds->get(m->serverId);
+HXDLIN(2004)							bool _hx_tmp2;
+HXDLIN(2004)							if (::hx::IsNotNull( tmp )) {
+HXLINE(2004)								_hx_tmp2 = ( (bool)(tmp) );
             							}
             							else {
-HXLINE(1770)								_hx_tmp2 = false;
+HXLINE(2004)								_hx_tmp2 = false;
             							}
-HXDLIN(1770)							if (!(_hx_tmp2)) {
-HXLINE(1771)								dedupedMessages->unshift(m);
-HXLINE(1772)								serverIds->set(m->serverId,true);
+HXDLIN(2004)							if (!(_hx_tmp2)) {
+HXLINE(2005)								dedupedMessages->unshift(m);
+HXLINE(2006)								serverIds->set(m->serverId,true);
             							}
             						}
             					}
-HXLINE(1777)					dedupedMessages->sort( ::Dynamic(new _hx_Closure_6()));
-HXLINE(1779)					int readIndex = ::borogove::Util_obj::findLastIndex(dedupedMessages, ::Dynamic(new _hx_Closure_7(_gthis)));
-HXLINE(1780)					if ((readIndex < 0)) {
-HXLINE(1781)						 ::borogove::Channel _gthis1 = _gthis;
-HXDLIN(1781)						int _hx_tmp3 = _gthis->unreadCount();
-HXDLIN(1781)						_gthis1->setUnreadCount((_hx_tmp3 + dedupedMessages->length));
+HXLINE(2011)					dedupedMessages->sort( ::Dynamic(new _hx_Closure_6()));
+HXLINE(2013)					int readIndex = ::borogove::Util_obj::findLastIndex(dedupedMessages, ::Dynamic(new _hx_Closure_7(_gthis)));
+HXLINE(2014)					if ((readIndex < 0)) {
+HXLINE(2015)						 ::borogove::Channel _gthis1 = _gthis;
+HXDLIN(2015)						int _hx_tmp3 = _gthis->unreadCount();
+HXDLIN(2015)						_gthis1->setUnreadCount((_hx_tmp3 + dedupedMessages->length));
             					}
             					else {
-HXLINE(1783)						_gthis->setUnreadCount(((dedupedMessages->length - readIndex) - 1));
+HXLINE(2017)						_gthis->setUnreadCount(((dedupedMessages->length - readIndex) - 1));
             					}
-HXLINE(1786)					 ::borogove::ChatMessage lastFromSync = dedupedMessages->__get((dedupedMessages->length - 1)).StaticCast<  ::borogove::ChatMessage >();
-HXLINE(1787)					bool _hx_tmp4;
-HXDLIN(1787)					if (::hx::IsNotNull( lastFromSync )) {
-HXLINE(1787)						if (::hx::IsNotNull( _gthis->lastMessage )) {
-HXLINE(1787)							_hx_tmp4 = (lastFromSync->sortId > _gthis->lastMessage->sortId);
+HXLINE(2020)					 ::borogove::ChatMessage lastFromSync = dedupedMessages->__get((dedupedMessages->length - 1)).StaticCast<  ::borogove::ChatMessage >();
+HXLINE(2021)					bool _hx_tmp4;
+HXDLIN(2021)					if (::hx::IsNotNull( lastFromSync )) {
+HXLINE(2021)						if (::hx::IsNotNull( _gthis->lastMessage )) {
+HXLINE(2021)							_hx_tmp4 = (lastFromSync->sortId > _gthis->lastMessage->sortId);
             						}
             						else {
-HXLINE(1787)							_hx_tmp4 = true;
+HXLINE(2021)							_hx_tmp4 = true;
             						}
             					}
             					else {
-HXLINE(1787)						_hx_tmp4 = false;
+HXLINE(2021)						_hx_tmp4 = false;
             					}
-HXDLIN(1787)					if (_hx_tmp4) {
+HXDLIN(2021)					if (_hx_tmp4) {
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_8, ::borogove::Channel,_gthis) HXARGC(1)
             						 ::borogove::EventResult _hx_run( ::Dynamic _){
-            							HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1788_doSync)
-HXLINE(1789)							_gthis->client->sortChats();
-HXLINE(1790)							return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+            							HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2022_doSync)
+HXLINE(2023)							_gthis->client->sortChats();
+HXLINE(2024)							return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1788)						::thenshim::_Promise::Promise_Impl__obj::then(_gthis->setLastMessage(lastFromSync), ::Dynamic(new _hx_Closure_8(_gthis)),null());
+HXLINE(2022)						::thenshim::_Promise::Promise_Impl__obj::then(_gthis->setLastMessage(lastFromSync), ::Dynamic(new _hx_Closure_8(_gthis)),null());
             					}
             					else {
-HXLINE(1793)						::thenshim::_Promise::Promise_Impl__obj::resolve(_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis)));
+HXLINE(2027)						::thenshim::_Promise::Promise_Impl__obj::resolve(_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis)));
             					}
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1720_doSync)
-HXLINE(1721)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1722)			::Array< ::Dynamic> pageChatMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1723)			{
-HXLINE(1723)				int _g = 0;
-HXDLIN(1723)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
-HXDLIN(1723)				while((_g < _g1->length)){
-HXLINE(1723)					 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
-HXDLIN(1723)					_g = (_g + 1);
-HXLINE(1724)					{
-HXLINE(1724)						 ::borogove::MessageStanza _g2 = m->parsed;
-HXDLIN(1724)						switch((int)(_g2->_hx_getIndex())){
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1950_doSync)
+HXLINE(1951)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1952)			::Array< ::Dynamic> pageChatMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1953)			{
+HXLINE(1953)				int _g = 0;
+HXDLIN(1953)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
+HXDLIN(1953)				while((_g < _g1->length)){
+HXLINE(1953)					 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
+HXDLIN(1953)					_g = (_g + 1);
+HXLINE(1954)					{
+HXLINE(1954)						 ::borogove::MessageStanza _g2 = m->parsed;
+HXDLIN(1954)						switch((int)(_g2->_hx_getIndex())){
             							case (int)0: {
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             								::Array< ::Dynamic> _hx_run( ::borogove::ChatMessage m){
-            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1744_doSync)
-HXLINE(1744)									return ::Array_obj< ::Dynamic>::__new(1)->init(0,m);
+            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1974_doSync)
+HXLINE(1974)									return ::Array_obj< ::Dynamic>::__new(1)->init(0,m);
             								}
             								HX_END_LOCAL_FUNC1(return)
 
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             								::Array< ::Dynamic> _hx_run( ::Dynamic _){
-            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1744_doSync)
-HXLINE(1744)									return ::Array_obj< ::Dynamic>::__new(0);
+            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1974_doSync)
+HXLINE(1974)									return ::Array_obj< ::Dynamic>::__new(0);
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1739)								::Dynamic _gthis1 = _gthis->persistence;
-HXLINE(1740)								::String _hx_tmp = _gthis->client->accountId();
-HXLINE(1739)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2())));
+HXLINE(1969)								::Dynamic _gthis1 = _gthis->persistence;
+HXLINE(1970)								::String _hx_tmp = _gthis->client->accountId();
+HXLINE(1969)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2())));
             							}
             							break;
             							case (int)1: {
-HXLINE(1725)								 ::borogove::ChatMessage _g3 = _g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1725)								{
-HXLINE(1726)									{
-HXLINE(1726)										int _g4 = 0;
-HXDLIN(1726)										::Array< ::Dynamic> _g5 = _g3->inlineHashReferences();
-HXDLIN(1726)										while((_g4 < _g5->length)){
-HXLINE(1726)											 ::borogove::Hash hash = _g5->__get(_g4).StaticCast<  ::borogove::Hash >();
-HXDLIN(1726)											_g4 = (_g4 + 1);
-HXLINE(1727)											_gthis->client->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,_g3->from));
+HXLINE(1955)								 ::borogove::ChatMessage _g3 = _g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1955)								{
+HXLINE(1956)									{
+HXLINE(1956)										int _g4 = 0;
+HXDLIN(1956)										::Array< ::Dynamic> _g5 = _g3->inlineHashReferences();
+HXDLIN(1956)										while((_g4 < _g5->length)){
+HXLINE(1956)											 ::borogove::Hash hash = _g5->__get(_g4).StaticCast<  ::borogove::Hash >();
+HXDLIN(1956)											_g4 = (_g4 + 1);
+HXLINE(1957)											_gthis->client->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,_g3->from));
             										}
             									}
-HXLINE(1729)									pageChatMessages->push(_g3);
+HXLINE(1959)									pageChatMessages->push(_g3);
             								}
             							}
             							break;
@@ -1406,30 +1858,30 @@ HXLINE(1729)									pageChatMessages->push(_g3);
             								void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,resolve) HXARGC(1)
             									void _hx_run( ::borogove::ChatMessage _){
-            										HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1736_doSync)
-HXLINE(1736)										resolve(null());
+            										HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1966_doSync)
+HXLINE(1966)										resolve(null());
             									}
             									HX_END_LOCAL_FUNC1((void))
 
-            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1736_doSync)
-HXLINE(1736)									::thenshim::_Promise::Promise_Impl__obj::then(_gthis->client->moderateMessage(action), ::Dynamic(new _hx_Closure_3(resolve)),null());
+            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1966_doSync)
+HXLINE(1966)									::thenshim::_Promise::Promise_Impl__obj::then(_gthis->client->moderateMessage(action), ::Dynamic(new _hx_Closure_3(resolve)),null());
             								}
             								HX_END_LOCAL_FUNC2((void))
 
-HXLINE(1734)								 ::borogove::ModerationAction action = _g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >();
-HXLINE(1735)								promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_4(_gthis,action))));
+HXLINE(1964)								 ::borogove::ModerationAction action = _g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >();
+HXLINE(1965)								promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_4(_gthis,action))));
             							}
             							break;
             							case (int)4: {
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_5) HXARGC(1)
             								::Dynamic _hx_run( ::borogove::ChatMessage _){
-            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1732_doSync)
-HXLINE(1732)									return null();
+            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1962_doSync)
+HXLINE(1962)									return null();
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1732)								::Dynamic _gthis2 = _gthis->persistence;
-HXLINE(1731)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->client->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_5()),null()));
+HXLINE(1962)								::Dynamic _gthis2 = _gthis->persistence;
+HXLINE(1961)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->client->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_5()),null()));
             							}
             							break;
             							default:{
@@ -1438,137 +1890,215 @@ HXLINE(1731)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then
             					}
             				}
             			}
-HXLINE(1749)			promises->push(_gthis->client->storeMessages(pageChatMessages));
-HXLINE(1750)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_9(_gthis,chatMessages)),null());
+HXLINE(1979)			promises->push(_gthis->client->storeMessages(pageChatMessages));
+HXLINE(1980)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_9(_gthis,chatMessages)),null());
             		}
             		HX_END_LOCAL_FUNC1((void))
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_11, ::borogove::Channel,_gthis, ::borogove::ChatMessage,syncPoint) HXARGC(1)
             		void _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1798_doSync)
-HXLINE(1799)			_gthis->sync = null();
-HXLINE(1800)			if (::hx::IsNotNull( syncPoint )) {
-HXLINE(1802)				_gthis->doSync(null(),syncPoint->sortId);
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2032_doSync)
+HXLINE(2033)			_gthis->sync = null();
+HXLINE(2034)			if (::hx::IsNotNull( syncPoint )) {
+HXLINE(2036)				_gthis->doSync(null(),syncPoint->sortId);
             			}
             			else {
-HXLINE(1804)				::haxe::Log_obj::trace(HX_("SYNC failed",e2,ec,6f,fa), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(2038)				::haxe::Log_obj::trace(HX_("SYNC failed",e2,ec,6f,fa), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,_gthis->chatId)->init(1,stanza))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1804)));
-HXLINE(1805)				_gthis->joinFailed = stanza;
-HXLINE(1806)				_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),2038)));
+HXLINE(2039)				_gthis->joinFailed = stanza;
+HXLINE(2040)				_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1689_doSync)
-HXDLIN(1689)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1690)		if (!(this->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da)))) {
-HXLINE(1691)			this->inSync = true;
-HXLINE(1692)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1894_doSync)
+HXDLIN(1894)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1895)		bool _hx_tmp;
+HXDLIN(1895)		::String _hx_tmp1;
+HXDLIN(1895)		if (::hx::IsNotNull( syncPoint )) {
+HXLINE(1895)			_hx_tmp1 = syncPoint->sortId;
             		}
-HXLINE(1694)		if (::hx::IsNotNull( this->sync )) {
-HXLINE(1694)			return;
+            		else {
+HXLINE(1895)			_hx_tmp1 = null();
+            		}
+HXDLIN(1895)		if (::hx::IsNotNull( _hx_tmp1 )) {
+HXLINE(1895)			if (::hx::IsNotNull( this->sortId )) {
+HXLINE(1895)				_hx_tmp = (syncPoint->sortId > this->sortId);
+            			}
+            			else {
+HXLINE(1895)				_hx_tmp = true;
+            			}
             		}
-HXLINE(1697)		::String sortFrom;
-HXDLIN(1697)		if (::hx::IsNotNull( sortA )) {
-HXLINE(1697)			sortFrom = sortA;
+            		else {
+HXLINE(1895)			_hx_tmp = false;
+            		}
+HXDLIN(1895)		if (_hx_tmp) {
+HXLINE(1896)			this->sortId = syncPoint->sortId;
+            		}
+HXLINE(1898)		if (!(this->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da)))) {
+HXLINE(1899)			this->inSync = true;
+HXLINE(1900)			::haxe::Log_obj::trace(HX_("SYNC: channel inSync",1e,d0,1c,33), ::Dynamic(::hx::Anon_obj::Create(5)
+            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
+            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
+            					->setFixed(0,HX_("inSync",e0,98,c5,88),this->inSync)
+            					->setFixed(1,HX_("chatId",d3,04,77,b7),this->chatId)
+            					->setFixed(2,HX_("reason",c4,0f,9d,fc),HX_("MAM unsupported",8e,f8,34,0b)))))
+            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
+            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            				->setFixed(4,HX_("lineNumber",dd,81,22,76),1900)));
+HXLINE(1904)			return;
+            		}
+HXLINE(1906)		if (::hx::IsNotNull( this->sync )) {
+HXLINE(1907)			 ::Dynamic _hx_tmp2 = ::haxe::Log_obj::trace;
+HXLINE(1910)			::String _hx_tmp3 = this->chatId;
+HXLINE(1911)			bool _hx_tmp4 = this->inSync;
+HXLINE(1912)			::String _hx_tmp5 = ::borogove::Date_obj::format(::Date_obj::fromTime(this->sync->startedAt));
+HXLINE(1913)			Float _hx_tmp6 = ::Date_obj::now()->getTime();
+HXDLIN(1913)			Float _hx_tmp7 = (_hx_tmp6 - this->sync->startedAt);
+HXLINE(1914)			int _hx_tmp8 = this->sync->progress;
+HXLINE(1915)			 ::Dynamic _hx_tmp9 = this->sync->lastPage;
+HXLINE(1907)			_hx_tmp2(HX_("SYNC: channel doSync skipped, sync already exists",c1,a0,ef,cf), ::Dynamic(::hx::Anon_obj::Create(5)
+            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
+            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(7)
+            					->setFixed(0,HX_("progress",ad,f7,2a,86),_hx_tmp8)
+            					->setFixed(1,HX_("inSync",e0,98,c5,88),_hx_tmp4)
+            					->setFixed(2,HX_("chatId",d3,04,77,b7),_hx_tmp3)
+            					->setFixed(3,HX_("lastPage",c5,f3,9a,dd),_hx_tmp9)
+            					->setFixed(4,HX_("startedAt",94,f4,28,11),_hx_tmp5)
+            					->setFixed(5,HX_("hasMore",0f,00,a5,17),this->sync->hasMore())
+            					->setFixed(6,HX_("elapsedMs",c2,62,44,5e),_hx_tmp7))))
+            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
+            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            				->setFixed(4,HX_("lineNumber",dd,81,22,76),1907)));
+HXLINE(1919)			return;
+            		}
+HXLINE(1923)		::String sortFrom;
+HXDLIN(1923)		if (::hx::IsNotNull( sortA )) {
+HXLINE(1923)			sortFrom = sortA;
             		}
             		else {
-HXLINE(1697)			if (::hx::IsNotNull( syncPoint )) {
-HXLINE(1697)				sortFrom = syncPoint->sortId;
+HXLINE(1923)			if (::hx::IsNotNull( syncPoint )) {
+HXLINE(1923)				sortFrom = syncPoint->sortId;
             			}
             			else {
-HXLINE(1697)				sortFrom = null();
+HXLINE(1923)				sortFrom = null();
             			}
             		}
-HXLINE(1698)		::String sortNext = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(sortFrom,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
-HXLINE(1699)		::String tmp = this->sortId;
-HXDLIN(1699)		::String sortIdNext;
-HXDLIN(1699)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1699)			sortIdNext = tmp;
+HXLINE(1924)		::String sortNext = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(sortFrom,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
+HXLINE(1925)		::String tmp = this->sortId;
+HXDLIN(1925)		::String sortIdNext;
+HXDLIN(1925)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1925)			sortIdNext = tmp;
             		}
             		else {
-HXLINE(1699)			sortIdNext = sortNext;
+HXLINE(1925)			sortIdNext = sortNext;
             		}
-HXDLIN(1699)		::String sortIdNext1 = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(sortIdNext,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
-HXLINE(1700)		::String sortTo;
-HXDLIN(1700)		if ((sortNext < sortIdNext1)) {
-HXLINE(1700)			sortTo = sortNext;
+HXDLIN(1925)		::String sortIdNext1 = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(sortIdNext,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
+HXLINE(1926)		::String sortTo;
+HXDLIN(1926)		if ((sortNext < sortIdNext1)) {
+HXLINE(1926)			sortTo = sortNext;
             		}
             		else {
-HXLINE(1700)			sortTo = sortIdNext1;
+HXLINE(1926)			sortTo = sortIdNext1;
+            		}
+HXLINE(1927)		bool _hx_tmp10;
+HXDLIN(1927)		if (::hx::IsNotNull( this->sortId )) {
+HXLINE(1927)			_hx_tmp10 = (this->sortId <= sortTo);
+            		}
+            		else {
+HXLINE(1927)			_hx_tmp10 = true;
+            		}
+HXDLIN(1927)		if (_hx_tmp10) {
+HXLINE(1927)			this->sortId = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(sortTo,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
             		}
-HXLINE(1701)		bool _hx_tmp;
-HXDLIN(1701)		if (::hx::IsNotNull( this->sortId )) {
-HXLINE(1701)			_hx_tmp = (this->sortId <= sortTo);
+HXLINE(1929)		::String threeDaysAgo = ::borogove::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-259200000.))));
+HXLINE(1934)		::String _hx_tmp11;
+HXDLIN(1934)		if (::hx::IsNotNull( syncPoint )) {
+HXLINE(1934)			_hx_tmp11 = syncPoint->serverId;
             		}
             		else {
-HXLINE(1701)			_hx_tmp = true;
+HXLINE(1934)			_hx_tmp11 = null();
             		}
-HXDLIN(1701)		if (_hx_tmp) {
-HXLINE(1701)			this->sortId = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(sortTo,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
+HXDLIN(1934)		::String _hx_tmp12;
+HXDLIN(1934)		if (::hx::IsNotNull( syncPoint )) {
+HXLINE(1934)			_hx_tmp12 = syncPoint->sortId;
             		}
-HXLINE(1703)		::String threeDaysAgo = ::borogove::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-259200000.))));
-HXLINE(1709)		 ::Dynamic _hx_tmp1;
-HXDLIN(1709)		if (::hx::IsNull( syncPoint )) {
-HXLINE(1709)			_hx_tmp1 =  ::Dynamic(::hx::Anon_obj::Create(1)
+            		else {
+HXLINE(1934)			_hx_tmp12 = null();
+            		}
+HXLINE(1932)		::haxe::Log_obj::trace(HX_("SYNC: initialize MessageSync",53,9b,9a,5d), ::Dynamic(::hx::Anon_obj::Create(5)
+            			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
+            			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(6)
+            				->setFixed(0,HX_("chatId",d3,04,77,b7),this->chatId)
+            				->setFixed(1,HX_("reason",c4,0f,9d,fc),HX_("channel doSync",43,25,ed,31))
+            				->setFixed(2,HX_("sortTo",79,84,37,30),sortTo)
+            				->setFixed(3,HX_("sortFrom",e8,ff,3d,47),sortFrom)
+            				->setFixed(4,HX_("syncPointSortId",ae,d4,b4,51),_hx_tmp12)
+            				->setFixed(5,HX_("syncPointServerId",93,3a,99,61),_hx_tmp11))))
+            			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
+            			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),1932)));
+HXLINE(1939)		 ::Dynamic _hx_tmp13;
+HXDLIN(1939)		if (::hx::IsNull( syncPoint )) {
+HXLINE(1939)			_hx_tmp13 =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("startTime",8f,45,f0,05),threeDaysAgo));
             		}
             		else {
-HXLINE(1709)			_hx_tmp1 =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1939)			_hx_tmp13 =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("after",1c,66,a2,1d),syncPoint->serverId))));
             		}
-HXLINE(1706)		this->sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,this->client,this->stream,_hx_tmp1,sortFrom,sortTo,this->chatId);
-HXLINE(1714)		this->sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(1719)		::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1720)		this->sync->onMessages( ::Dynamic(new _hx_Closure_10(_gthis,chatMessages)));
-HXLINE(1798)		this->sync->onError( ::Dynamic(new _hx_Closure_11(_gthis,syncPoint)));
-HXLINE(1809)		this->sync->fetchNext();
+HXLINE(1936)		this->sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,this->client,this->stream,_hx_tmp13,sortFrom,sortTo,this->chatId);
+HXLINE(1944)		this->sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(1949)		::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1950)		this->sync->onMessages( ::Dynamic(new _hx_Closure_10(_gthis,chatMessages)));
+HXLINE(2032)		this->sync->onError( ::Dynamic(new _hx_Closure_11(_gthis,syncPoint)));
+HXLINE(2043)		this->sync->fetchNext();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Channel_obj,doSync,(void))
 
 void Channel_obj::setTrusted(bool trusted){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1812_setTrusted)
-HXLINE(1813)		this->super::setTrusted(trusted);
-HXLINE(1814)		if (trusted) {
-HXLINE(1814)			this->selfPing(true);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2046_setTrusted)
+HXLINE(2047)		this->super::setTrusted(trusted);
+HXLINE(2048)		if (trusted) {
+HXLINE(2048)			this->selfPing(true);
             		}
             	}
 
 
 bool Channel_obj::isTrusted(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1818_isTrusted)
-HXDLIN(1818)		if ((this->uiState != 2)) {
-HXDLIN(1818)			return (this->uiState != 3);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2052_isTrusted)
+HXDLIN(2052)		if ((this->uiState != 2)) {
+HXDLIN(2052)			return (this->uiState != 3);
             		}
             		else {
-HXDLIN(1818)			return false;
+HXDLIN(2052)			return false;
             		}
-HXDLIN(1818)		return false;
+HXDLIN(2052)		return false;
             	}
 
 
 bool Channel_obj::isPrivate(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1825_isPrivate)
-HXDLIN(1825)		return this->disco->features->contains(HX_("muc_membersonly",41,e9,70,b7));
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2059_isPrivate)
+HXDLIN(2059)		return this->disco->features->contains(HX_("muc_membersonly",41,e9,70,b7));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,isPrivate,return )
 
 void Channel_obj::setupNotifications(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1829_setupNotifications)
-HXLINE(1830)		if (::hx::IsNull( this->disco )) {
-HXLINE(1830)			return;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2063_setupNotifications)
+HXLINE(2064)		if (::hx::IsNull( this->disco )) {
+HXLINE(2064)			return;
             		}
-HXLINE(1831)		if (!(this->isPrivate())) {
-HXLINE(1831)			this->notificationSettings =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2065)		if (!(this->isPrivate())) {
+HXLINE(2065)			this->notificationSettings =  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("mention",ea,9e,bf,b9),true)
             				->setFixed(1,HX_("reply",2a,09,c6,e6),false));
             		}
@@ -1580,127 +2110,133 @@ HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,setupNotifications,(void))
 void Channel_obj::refreshDisco( ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_3, ::borogove::Channel,_gthis, ::borogove::queries::DiscoInfoGet,discoGet, ::Dynamic,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1837_refreshDisco)
-HXLINE(1838)			if (::hx::IsNotNull( discoGet->getResult() )) {
-HXLINE(1839)				 ::borogove::CapsRepo _gthis1 = _gthis->client->capsRepo;
-HXDLIN(1839)				 ::borogove::Caps _hx_tmp = discoGet->getResult();
-HXDLIN(1839)				_gthis->disco = _gthis1->add(_hx_tmp,null());
-HXLINE(1840)				::Dynamic _gthis2 = _gthis->persistence;
-HXDLIN(1840)				::String _hx_tmp1 = _gthis->client->accountId();
-HXDLIN(1840)				::borogove::Persistence_obj::storeChats(_gthis2,_hx_tmp1,::Array_obj< ::Dynamic>::__new(1)->init(0,_gthis));
-            			}
-HXLINE(1842)			if (::hx::IsNotNull( callback )) {
-HXLINE(1842)				callback();
-            			}
-HXLINE(1843)			 ::borogove::Stanza tmp = _gthis->info();
-HXDLIN(1843)			 ::borogove::Stanza tmp1;
-HXDLIN(1843)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1843)				tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roominfo_avatarhash",55,a5,67,00));
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2071_refreshDisco)
+HXLINE(2072)			if (::hx::IsNotNull( discoGet->getResult() )) {
+HXLINE(2073)				 ::borogove::CapsRepo _gthis1 = _gthis->client->capsRepo;
+HXDLIN(2073)				 ::borogove::Caps _hx_tmp = discoGet->getResult();
+HXDLIN(2073)				_gthis->disco = _gthis1->add(_hx_tmp,null());
+HXLINE(2074)				::Dynamic _gthis2 = _gthis->persistence;
+HXDLIN(2074)				::String _hx_tmp1 = _gthis->client->accountId();
+HXDLIN(2074)				::borogove::Persistence_obj::storeChats(_gthis2,_hx_tmp1,::Array_obj< ::Dynamic>::__new(1)->init(0,_gthis));
+            			}
+HXLINE(2076)			if (::hx::IsNotNull( callback )) {
+HXLINE(2076)				callback();
+            			}
+HXLINE(2077)			 ::borogove::Stanza tmp = _gthis->info();
+HXDLIN(2077)			 ::borogove::Stanza tmp1;
+HXDLIN(2077)			if (::hx::IsNotNull( tmp )) {
+HXLINE(2077)				tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roominfo_avatarhash",55,a5,67,00));
             			}
             			else {
-HXLINE(1843)				tmp1 = null();
+HXLINE(2077)				tmp1 = null();
             			}
-HXDLIN(1843)			::Array< ::String > tmp2;
-HXDLIN(1843)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1843)				tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
+HXDLIN(2077)			::Array< ::String > tmp2;
+HXDLIN(2077)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(2077)				tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
             			}
             			else {
-HXLINE(1843)				tmp2 = null();
+HXLINE(2077)				tmp2 = null();
             			}
-HXDLIN(1843)			::String avatarSha1Hex;
-HXDLIN(1843)			if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1843)				avatarSha1Hex = tmp2->join(HX_("",00,00,00,00));
+HXDLIN(2077)			::String avatarSha1Hex;
+HXDLIN(2077)			if (::hx::IsNotNull( tmp2 )) {
+HXLINE(2077)				avatarSha1Hex = tmp2->join(HX_("",00,00,00,00));
             			}
             			else {
-HXLINE(1843)				avatarSha1Hex = null();
+HXLINE(2077)				avatarSha1Hex = null();
             			}
-HXLINE(1844)			bool _hx_tmp2;
-HXDLIN(1844)			if (::hx::IsNotNull( avatarSha1Hex )) {
-HXLINE(1844)				_hx_tmp2 = (avatarSha1Hex != HX_("",00,00,00,00));
+HXLINE(2078)			bool _hx_tmp2;
+HXDLIN(2078)			if (::hx::IsNotNull( avatarSha1Hex )) {
+HXLINE(2078)				_hx_tmp2 = (avatarSha1Hex != HX_("",00,00,00,00));
             			}
             			else {
-HXLINE(1844)				_hx_tmp2 = false;
+HXLINE(2078)				_hx_tmp2 = false;
             			}
-HXDLIN(1844)			if (_hx_tmp2) {
+HXDLIN(2078)			if (_hx_tmp2) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Channel,_gthis) HXARGC(1)
-            				void _hx_run(bool has){
-            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1848_refreshDisco)
-HXLINE(1848)					if (!(has)) {
+            				void _hx_run(::String has){
+            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2082_refreshDisco)
+HXLINE(2082)					if (::hx::IsNull( has )) {
             						HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis, ::borogove::queries::VcardTempGet,vcardGet) HXARGC(0)
             						void _hx_run(){
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(1)
-            							 ::borogove::EventResult _hx_run(bool _){
-            								HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1853_refreshDisco)
-HXLINE(1853)								return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+            							 ::borogove::EventResult _hx_run(::String _){
+            								HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2087_refreshDisco)
+HXLINE(2087)								return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-            							HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1850_refreshDisco)
-HXLINE(1851)							 ::Dynamic vcard = vcardGet->getResult();
-HXLINE(1852)							if (::hx::IsNull( vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic) )) {
-HXLINE(1852)								return;
+            							HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2084_refreshDisco)
+HXLINE(2085)							 ::Dynamic vcard = vcardGet->getResult();
+HXLINE(2086)							if (::hx::IsNull( vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic) )) {
+HXLINE(2086)								return;
             							}
-HXLINE(1853)							::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis->persistence, ::Dynamic( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)),( ( ::haxe::io::Bytes)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) )->b), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+HXLINE(2087)							::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(2087)							::String vcard1 = ( (::String)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)) );
+HXDLIN(2087)							::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis1,vcard1,::borogove::_Source::Source_Impl__obj::ofTinkSource( ::tink::streams::Single_obj::__alloc( HX_CTX , ::tink::core::_Lazy::LazyConst_obj::__alloc( HX_CTX ,::tink::chunk::ByteChunk_obj::of(( ( ::haxe::io::Bytes)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) )))))), ::Dynamic(new _hx_Closure_0(_gthis)),null());
             						}
             						HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1849)						 ::borogove::queries::VcardTempGet vcardGet =  ::borogove::queries::VcardTempGet_obj::__alloc( HX_CTX ,::borogove::JID_obj::parse(_gthis->chatId));
-HXLINE(1850)						vcardGet->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,vcardGet)));
-HXLINE(1857)						_gthis->client->sendQueryLazy(vcardGet);
+HXLINE(2083)						 ::borogove::queries::VcardTempGet vcardGet =  ::borogove::queries::VcardTempGet_obj::__alloc( HX_CTX ,::borogove::JID_obj::parse(_gthis->chatId));
+HXLINE(2084)						vcardGet->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,vcardGet)));
+HXLINE(2091)						_gthis->client->sendQueryLazy(vcardGet);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1845)				 ::borogove::Hash hash = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
-HXLINE(1846)				_gthis->avatarSha1 = hash->hash;
-HXLINE(1847)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(_gthis->persistence,HX_("sha-1",90,a8,1c,7c),_gthis->avatarSha1), ::Dynamic(new _hx_Closure_2(_gthis)),null());
+HXLINE(2079)				 ::borogove::Hash hash = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
+HXLINE(2080)				_gthis->avatarSha1 = hash->hash;
+HXLINE(2081)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(_gthis->persistence,hash), ::Dynamic(new _hx_Closure_2(_gthis)),null());
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1835_refreshDisco)
-HXDLIN(1835)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1836)		 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,this->chatId,null());
-HXLINE(1837)		discoGet->onFinished( ::Dynamic(new _hx_Closure_3(_gthis,discoGet,callback)));
-HXLINE(1862)		this->client->sendQuery(discoGet);
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2069_refreshDisco)
+HXDLIN(2069)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2070)		 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,this->chatId,null());
+HXLINE(2071)		discoGet->onFinished( ::Dynamic(new _hx_Closure_3(_gthis,discoGet,callback)));
+HXLINE(2096)		this->client->sendQuery(discoGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,refreshDisco,(void))
 
 ::String Channel_obj::preview(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1865_preview)
-HXLINE(1866)		if (::hx::IsNull( this->lastMessage )) {
-HXLINE(1866)			return this->super::preview();
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2099_preview)
+HXLINE(2100)		if (::hx::IsNull( this->lastMessage )) {
+HXLINE(2100)			return this->super::preview();
             		}
-HXLINE(1868)		::String _hx_tmp = (this->lastMessageSenderName + HX_(": ",a6,32,00,00));
-HXDLIN(1868)		return (_hx_tmp + this->super::preview());
+HXLINE(2102)		::String _hx_tmp = (this->lastMessageSenderName + HX_(": ",a6,32,00,00));
+HXDLIN(2102)		return (_hx_tmp + this->super::preview());
             	}
 
 
 bool Channel_obj::livePresence(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1872_livePresence)
-HXLINE(1873)		if (this->forceLive) {
-HXLINE(1873)			return true;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2106_livePresence)
+HXLINE(2107)		if (this->forceLive) {
+HXLINE(2107)			return true;
             		}
-HXLINE(1875)		return ::hx::IsNotNull( this->self );
+HXLINE(2109)		return ::hx::IsNotNull( this->self );
             	}
 
 
 bool Channel_obj::syncing(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1879_syncing)
-HXDLIN(1879)		if (::hx::IsNull( this->sync )) {
-HXDLIN(1879)			if (!(this->livePresence())) {
-HXDLIN(1879)				return ::hx::IsNull( this->joinFailed );
-            			}
-            			else {
-HXDLIN(1879)				return false;
-            			}
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2112_syncing)
+HXLINE(2113)		if (::hx::IsNotNull( this->joinFailed )) {
+HXLINE(2113)			return false;
+            		}
+HXLINE(2115)		if (::hx::IsNull( this->sync )) {
+HXLINE(2115)			return !(this->livePresence());
             		}
             		else {
-HXDLIN(1879)			return true;
+HXLINE(2115)			return true;
             		}
-HXDLIN(1879)		return false;
+HXDLIN(2115)		return false;
+            	}
+
+
+bool Channel_obj::inMessageSync(){
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2119_inMessageSync)
+HXDLIN(2119)		return ::hx::IsNotNull( this->sync );
             	}
 
 
@@ -1709,135 +2245,142 @@ HXDLIN(1879)		return false;
             		::Dynamic _hx_run( ::Dynamic _){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis, ::borogove::ChatMessage,message) HXARGC(1)
             			::Dynamic _hx_run(::Array< ::Dynamic> sender){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1887_setLastMessage)
-HXLINE(1888)				::String _hx_tmp;
-HXDLIN(1888)				if (::hx::IsNotNull( sender->__get(0).StaticCast<  ::borogove::Member >() )) {
-HXLINE(1888)					_hx_tmp = sender->__get(0).StaticCast<  ::borogove::Member >()->displayName;
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2127_setLastMessage)
+HXLINE(2128)				::String _hx_tmp;
+HXDLIN(2128)				if (::hx::IsNotNull( sender->__get(0).StaticCast<  ::borogove::Member >() )) {
+HXLINE(2128)					_hx_tmp = sender->__get(0).StaticCast<  ::borogove::Member >()->displayName;
             				}
             				else {
-HXLINE(1888)					_hx_tmp = message->senderMemberStub()->displayName;
+HXLINE(2128)					_hx_tmp = message->senderMemberStub()->displayName;
             				}
-HXDLIN(1888)				_gthis->lastMessageSenderName = _hx_tmp;
-HXLINE(1889)				return null();
+HXDLIN(2128)				_gthis->lastMessageSenderName = _hx_tmp;
+HXLINE(2129)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1883_setLastMessage)
-HXLINE(1884)			bool _hx_tmp;
-HXDLIN(1884)			bool _hx_tmp1;
-HXDLIN(1884)			if (::hx::IsNotNull( message )) {
-HXLINE(1884)				_hx_tmp1 = (message->type == 2);
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2123_setLastMessage)
+HXLINE(2124)			bool _hx_tmp;
+HXDLIN(2124)			bool _hx_tmp1;
+HXDLIN(2124)			::String _hx_tmp2;
+HXDLIN(2124)			if (::hx::IsNotNull( message )) {
+HXLINE(2124)				_hx_tmp2 = message->sortId;
             			}
             			else {
-HXLINE(1884)				_hx_tmp1 = false;
+HXLINE(2124)				_hx_tmp2 = null();
+            			}
+HXDLIN(2124)			if (::hx::IsNotNull( _hx_tmp2 )) {
+HXLINE(2124)				_hx_tmp1 = (message->type == 2);
             			}
-HXDLIN(1884)			if (_hx_tmp1) {
-HXLINE(1884)				if (::hx::IsNotNull( _gthis->sortId )) {
-HXLINE(1884)					_hx_tmp = (_gthis->sortId < message->sortId);
+            			else {
+HXLINE(2124)				_hx_tmp1 = false;
+            			}
+HXDLIN(2124)			if (_hx_tmp1) {
+HXLINE(2124)				if (::hx::IsNotNull( _gthis->sortId )) {
+HXLINE(2124)					_hx_tmp = (_gthis->sortId < message->sortId);
             				}
             				else {
-HXLINE(1884)					_hx_tmp = true;
+HXLINE(2124)					_hx_tmp = true;
             				}
             			}
             			else {
-HXLINE(1884)				_hx_tmp = false;
+HXLINE(2124)				_hx_tmp = false;
             			}
-HXDLIN(1884)			if (_hx_tmp) {
-HXLINE(1884)				_gthis->sortId = message->sortId;
+HXDLIN(2124)			if (_hx_tmp) {
+HXLINE(2124)				_gthis->sortId = message->sortId;
             			}
-HXLINE(1885)			if (::hx::IsNull( message )) {
-HXLINE(1885)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE(2125)			if (::hx::IsNull( message )) {
+HXLINE(2125)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             			}
-HXLINE(1887)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->getMemberDetails(::Array_obj< ::String >::__new(1)->init(0,message->senderId)), ::Dynamic(new _hx_Closure_0(_gthis,message)),null());
+HXLINE(2127)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->getMemberDetails(::Array_obj< ::String >::__new(1)->init(0,message->senderId)), ::Dynamic(new _hx_Closure_0(_gthis,message)),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1882_setLastMessage)
-HXDLIN(1882)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1883)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->super::setLastMessage(message), ::Dynamic(new _hx_Closure_1(_gthis,message)),null());
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2122_setLastMessage)
+HXDLIN(2122)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2123)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->super::setLastMessage(message), ::Dynamic(new _hx_Closure_1(_gthis,message)),null());
             	}
 
 
 bool Channel_obj::canAudioCall(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1895_canAudioCall)
-HXDLIN(1895)		 ::borogove::Caps tmp = this->disco;
-HXDLIN(1895)		::Array< ::String > tmp1;
-HXDLIN(1895)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1895)			tmp1 = tmp->features;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2135_canAudioCall)
+HXDLIN(2135)		 ::borogove::Caps tmp = this->disco;
+HXDLIN(2135)		::Array< ::String > tmp1;
+HXDLIN(2135)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(2135)			tmp1 = tmp->features;
             		}
             		else {
-HXDLIN(1895)			tmp1 = null();
+HXDLIN(2135)			tmp1 = null();
             		}
-HXDLIN(1895)		 ::Dynamic tmp2;
-HXDLIN(1895)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1895)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
+HXDLIN(2135)		 ::Dynamic tmp2;
+HXDLIN(2135)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(2135)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
             		}
             		else {
-HXDLIN(1895)			tmp2 = null();
+HXDLIN(2135)			tmp2 = null();
             		}
-HXDLIN(1895)		if (::hx::IsNotNull( tmp2 )) {
-HXDLIN(1895)			return ( (bool)(tmp2) );
+HXDLIN(2135)		if (::hx::IsNotNull( tmp2 )) {
+HXDLIN(2135)			return ( (bool)(tmp2) );
             		}
             		else {
-HXDLIN(1895)			return false;
+HXDLIN(2135)			return false;
             		}
-HXDLIN(1895)		return false;
+HXDLIN(2135)		return false;
             	}
 
 
 bool Channel_obj::canVideoCall(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1899_canVideoCall)
-HXDLIN(1899)		 ::borogove::Caps tmp = this->disco;
-HXDLIN(1899)		::Array< ::String > tmp1;
-HXDLIN(1899)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1899)			tmp1 = tmp->features;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2139_canVideoCall)
+HXDLIN(2139)		 ::borogove::Caps tmp = this->disco;
+HXDLIN(2139)		::Array< ::String > tmp1;
+HXDLIN(2139)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(2139)			tmp1 = tmp->features;
             		}
             		else {
-HXDLIN(1899)			tmp1 = null();
+HXDLIN(2139)			tmp1 = null();
             		}
-HXDLIN(1899)		 ::Dynamic tmp2;
-HXDLIN(1899)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1899)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
+HXDLIN(2139)		 ::Dynamic tmp2;
+HXDLIN(2139)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(2139)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
             		}
             		else {
-HXDLIN(1899)			tmp2 = null();
+HXDLIN(2139)			tmp2 = null();
             		}
-HXDLIN(1899)		if (::hx::IsNotNull( tmp2 )) {
-HXDLIN(1899)			return ( (bool)(tmp2) );
+HXDLIN(2139)		if (::hx::IsNotNull( tmp2 )) {
+HXDLIN(2139)			return ( (bool)(tmp2) );
             		}
             		else {
-HXDLIN(1899)			return false;
+HXDLIN(2139)			return false;
             		}
-HXDLIN(1899)		return false;
+HXDLIN(2139)		return false;
             	}
 
 
 ::String Channel_obj::nickInUse(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1903_nickInUse)
-HXDLIN(1903)		 ::borogove::Member tmp = this->self;
-HXDLIN(1903)		::String tmp1;
-HXDLIN(1903)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1903)			tmp1 = tmp->displayName;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2143_nickInUse)
+HXDLIN(2143)		 ::borogove::Member tmp = this->self;
+HXDLIN(2143)		::String tmp1;
+HXDLIN(2143)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(2143)			tmp1 = tmp->displayName;
             		}
             		else {
-HXDLIN(1903)			tmp1 = null();
+HXDLIN(2143)			tmp1 = null();
             		}
-HXDLIN(1903)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1903)			return tmp1;
+HXDLIN(2143)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(2143)			return tmp1;
             		}
             		else {
-HXDLIN(1903)			return this->client->displayName();
+HXDLIN(2143)			return this->client->displayName();
             		}
-HXDLIN(1903)		return null();
+HXDLIN(2143)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,nickInUse,return )
 
  ::borogove::JID Channel_obj::getFullJid(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1908_getFullJid)
-HXDLIN(1908)		 ::borogove::JID _hx_tmp = ::borogove::JID_obj::parse(this->chatId);
-HXDLIN(1908)		return _hx_tmp->withResource(this->nickInUse());
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2148_getFullJid)
+HXDLIN(2148)		 ::borogove::JID _hx_tmp = ::borogove::JID_obj::parse(this->chatId);
+HXDLIN(2148)		return _hx_tmp->withResource(this->nickInUse());
             	}
 
 
@@ -1846,356 +2389,451 @@ HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,getFullJid,return )
 ::Dynamic Channel_obj::members(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis) HXARGC(1)
             		::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> members){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1915_members)
-HXLINE(1915)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN(1915)			{
-HXLINE(1915)				int _g1 = 0;
-HXDLIN(1915)				while((_g1 < members->length)){
-HXLINE(1915)					 ::borogove::Member v = members->__get(_g1).StaticCast<  ::borogove::Member >();
-HXDLIN(1915)					_g1 = (_g1 + 1);
-HXDLIN(1915)					if ((v->id != _gthis->chatId)) {
-HXLINE(1915)						_g->push(v);
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2155_members)
+HXLINE(2155)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(2155)			{
+HXLINE(2155)				int _g1 = 0;
+HXDLIN(2155)				while((_g1 < members->length)){
+HXLINE(2155)					 ::borogove::Member v = members->__get(_g1).StaticCast<  ::borogove::Member >();
+HXDLIN(2155)					_g1 = (_g1 + 1);
+HXDLIN(2155)					if ((v->id != _gthis->chatId)) {
+HXLINE(2155)						_g->push(v);
             					}
             				}
             			}
-HXDLIN(1915)			return _g;
+HXDLIN(2155)			return _g;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1912_members)
-HXDLIN(1912)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1913)		::Dynamic _hx_tmp = this->persistence;
-HXLINE(1914)		::String _hx_tmp1 = this->client->accountId();
-HXDLIN(1914)		bool _hx_tmp2;
-HXDLIN(1914)		if (::hx::IsNull( this->self )) {
-HXLINE(1914)			_hx_tmp2 = false;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2152_members)
+HXDLIN(2152)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2153)		::Dynamic _hx_tmp = this->persistence;
+HXLINE(2154)		::String _hx_tmp1 = this->client->accountId();
+HXDLIN(2154)		bool _hx_tmp2;
+HXDLIN(2154)		if (::hx::IsNull( this->self )) {
+HXLINE(2154)			_hx_tmp2 = false;
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			bool _hx_run( ::borogove::Role r){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1914_members)
-HXLINE(1914)				return ::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_78,2)->contains(r->id);
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2154_members)
+HXLINE(2154)				return ::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_92,2)->contains(r->id);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1914)			_hx_tmp2 = ::Lambda_obj::exists(this->self->roles, ::Dynamic(new _hx_Closure_0()));
+HXLINE(2154)			_hx_tmp2 = ::Lambda_obj::exists(this->self->roles, ::Dynamic(new _hx_Closure_0()));
             		}
-HXLINE(1913)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMembers(_hx_tmp,_hx_tmp1,::hx::ObjectPtr<OBJ_>(this),_hx_tmp2), ::Dynamic(new _hx_Closure_1(_gthis)),null());
+HXLINE(2153)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMembers(_hx_tmp,_hx_tmp1,::hx::ObjectPtr<OBJ_>(this),_hx_tmp2), ::Dynamic(new _hx_Closure_1(_gthis)),null());
             	}
 
 
 ::Dynamic Channel_obj::getMemberDetails(::Array< ::String > memberIds){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1919_getMemberDetails)
-HXLINE(1920)		bool _hx_tmp;
-HXDLIN(1920)		bool _hx_tmp1;
-HXDLIN(1920)		if ((memberIds->length == 1)) {
-HXLINE(1920)			_hx_tmp1 = ::hx::IsNotNull( this->self );
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2159_getMemberDetails)
+HXLINE(2160)		bool _hx_tmp;
+HXDLIN(2160)		bool _hx_tmp1;
+HXDLIN(2160)		if ((memberIds->length == 1)) {
+HXLINE(2160)			_hx_tmp1 = ::hx::IsNotNull( this->self );
+            		}
+            		else {
+HXLINE(2160)			_hx_tmp1 = false;
+            		}
+HXDLIN(2160)		if (_hx_tmp1) {
+HXLINE(2160)			_hx_tmp = (memberIds->__get(0) == this->self->id);
             		}
             		else {
-HXLINE(1920)			_hx_tmp1 = false;
+HXLINE(2160)			_hx_tmp = false;
+            		}
+HXDLIN(2160)		if (_hx_tmp) {
+HXLINE(2160)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,this->self));
             		}
-HXDLIN(1920)		if (_hx_tmp1) {
-HXLINE(1920)			_hx_tmp = (memberIds->__get(0) == this->self->id);
+HXLINE(2162)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(2162)		return ::borogove::Persistence_obj::getMemberDetails(_hx_tmp2,this->client->accountId(),::hx::ObjectPtr<OBJ_>(this),memberIds);
+            	}
+
+
+::Dynamic Channel_obj::voiceRequests(){
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2169_voiceRequests)
+HXDLIN(2169)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN(2169)		return ::borogove::Persistence_obj::listVoiceRequests(_hx_tmp,this->client->accountId(),::hx::ObjectPtr<OBJ_>(this));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,voiceRequests,return )
+
+void Channel_obj::voiceRequests__fromC(::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_76be2635117be6b6_365_voiceRequests__fromC)
+HXDLIN( 365)		if (::hx::IsNull( handler )) {
+HXDLIN( 365)			this->voiceRequests();
             		}
             		else {
-HXLINE(1920)			_hx_tmp = false;
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::Array< ::Dynamic> v){
+            				HX_STACKFRAME(&_hx_pos_76be2635117be6b6_365_voiceRequests__fromC)
+HXDLIN( 365)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
+HXDLIN( 365)				handler1(::_HaxeCBridge::HaxeArray_Impl__obj::fromNullableArrayT(v),( (size_t)(v->length) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_76be2635117be6b6_365_voiceRequests__fromC)
+HXDLIN( 365)				handler(null(),( (size_t)(0) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->voiceRequests(), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void Channel_obj::voiceRequestRespond( ::borogove::Member member,bool canSend){
+            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_2, ::borogove::Channel,_gthis,bool,canSend, ::borogove::Member,member) HXARGC(0)
+            		void _hx_run(){
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis) HXARGC(1)
+            			 ::borogove::EventResult _hx_run(bool _){
+            				HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2198_voiceRequestRespond)
+HXLINE(2198)				return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2179_voiceRequestRespond)
+HXLINE(2180)			 ::borogove::Client _gthis1 = _gthis->client;
+HXLINE(2187)			::String _hx_tmp;
+HXDLIN(2187)			if (canSend) {
+HXLINE(2187)				_hx_tmp = HX_("1",31,00,00,00);
+            			}
+            			else {
+HXLINE(2187)				_hx_tmp = HX_("0",30,00,00,00);
+            			}
+HXLINE(2180)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("to",7b,65,00,00),_gthis->chatId)),null())->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
+            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))),null())->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/muc#request",93,0a,86,93),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("var",e7,de,59,00),HX_("muc#role",3e,cf,d3,63))),null())->textTag(HX_("value",71,7f,b8,31),HX_("participant",b3,07,ea,7a),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("var",e7,de,59,00),HX_("muc#jid",fd,77,83,94))),null())->textTag(HX_("value",71,7f,b8,31),member->chat->chatId,null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("var",e7,de,59,00),HX_("muc#roomnick",06,7b,8b,05))),null())->textTag(HX_("value",71,7f,b8,31),member->displayName,null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("var",e7,de,59,00),HX_("muc#request_allow",91,13,65,aa))),null())->textTag(HX_("value",71,7f,b8,31),_hx_tmp,null(),null())->up());
+HXLINE(2189)			if (canSend) {
+            				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            				void _hx_run( ::borogove::Stanza response){
+            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2195_voiceRequestRespond)
+            				}
+            				HX_END_LOCAL_FUNC1((void))
+
+HXLINE(2190)				 ::borogove::GenericStream _gthis2 = _gthis->stream;
+HXDLIN(2190)				_gthis2->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            					->setFixed(0,HX_("to",7b,65,00,00),_gthis->chatId)
+            					->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#admin",d3,be,2f,5a))),null())->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(2)
+            					->setFixed(0,HX_("nick",a3,7b,05,49),member->displayName)
+            					->setFixed(1,HX_("role",76,eb,ae,4b),HX_("participant",b3,07,ea,7a))),null())->textTag(HX_("reason",c4,0f,9d,fc),HX_("Approve voice request",ae,08,74,08),null(),null()), ::Dynamic(new _hx_Closure_0()));
+            			}
+HXLINE(2198)			::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN(2198)			::String _hx_tmp1 = _gthis->client->accountId();
+HXDLIN(2198)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeVoiceRequest(_gthis3,_hx_tmp1,_gthis,member->chat->chatId,false), ::Dynamic(new _hx_Closure_1(_gthis)),null());
             		}
-HXDLIN(1920)		if (_hx_tmp) {
-HXLINE(1920)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,this->self));
+            		HX_END_LOCAL_FUNC0((void))
+
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2175_voiceRequestRespond)
+HXDLIN(2175)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2176)		if (::hx::IsNull( member->chat )) {
+HXLINE(2176)			return;
             		}
-HXLINE(1922)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1922)		return ::borogove::Persistence_obj::getMemberDetails(_hx_tmp2,this->client->accountId(),::hx::ObjectPtr<OBJ_>(this),memberIds);
+HXLINE(2179)		this->outbox->newItem()->handle( ::Dynamic(new _hx_Closure_2(_gthis,canSend,member)));
             	}
 
 
+HX_DEFINE_DYNAMIC_FUNC2(Channel_obj,voiceRequestRespond,(void))
+
  ::borogove::Member Channel_obj::buildMember(::String resource, ::borogove::Stanza presence){
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1925_buildMember)
-HXLINE(1926)		 ::borogove::Stanza tmp;
-HXDLIN(1926)		if (::hx::IsNotNull( presence )) {
-HXLINE(1926)			tmp = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
-            		}
-            		else {
-HXLINE(1926)			tmp = null();
-            		}
-HXDLIN(1926)		::Array< ::String > tmp1;
-HXDLIN(1926)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1926)			::Array< ::Dynamic> _this = tmp->allTags(HX_("status",32,e7,fb,05),null());
-HXDLIN(1926)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN(1926)			{
-HXLINE(1926)				int _g = 0;
-HXDLIN(1926)				int _g1 = _this->length;
-HXDLIN(1926)				while((_g < _g1)){
-HXLINE(1926)					_g = (_g + 1);
-HXDLIN(1926)					int i = (_g - 1);
-HXDLIN(1926)					{
-HXLINE(1926)						::String inValue = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->attr,HX_("code",2d,b1,c4,41))) );
-HXDLIN(1926)						result->__unsafe_set(i,inValue);
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2204_buildMember)
+HXLINE(2205)		 ::borogove::Stanza tmp;
+HXDLIN(2205)		if (::hx::IsNotNull( presence )) {
+HXLINE(2205)			tmp = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+            		}
+            		else {
+HXLINE(2205)			tmp = null();
+            		}
+HXDLIN(2205)		::Array< ::String > tmp1;
+HXDLIN(2205)		if (::hx::IsNotNull( tmp )) {
+HXLINE(2205)			::Array< ::Dynamic> _this = tmp->allTags(HX_("status",32,e7,fb,05),null());
+HXDLIN(2205)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN(2205)			{
+HXLINE(2205)				int _g = 0;
+HXDLIN(2205)				int _g1 = _this->length;
+HXDLIN(2205)				while((_g < _g1)){
+HXLINE(2205)					_g = (_g + 1);
+HXDLIN(2205)					int i = (_g - 1);
+HXDLIN(2205)					{
+HXLINE(2205)						::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->attr->get_string(HX_("code",2d,b1,c4,41));
+HXDLIN(2205)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN(1926)			tmp1 = result;
+HXDLIN(2205)			tmp1 = result;
             		}
             		else {
-HXLINE(1926)			tmp1 = null();
+HXLINE(2205)			tmp1 = null();
             		}
-HXDLIN(1926)		::String oneTen;
-HXDLIN(1926)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(2205)		::String oneTen;
+HXDLIN(2205)		if (::hx::IsNotNull( tmp1 )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			bool _hx_run(::String status){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1926_buildMember)
-HXLINE(1926)				return (status == HX_("110",50,59,25,00));
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2205_buildMember)
+HXLINE(2205)				return (status == HX_("110",50,59,25,00));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1926)			oneTen = ( (::String)(::Lambda_obj::find(tmp1, ::Dynamic(new _hx_Closure_0()))) );
+HXLINE(2205)			oneTen = ( (::String)(::Lambda_obj::find(tmp1, ::Dynamic(new _hx_Closure_0()))) );
             		}
             		else {
-HXLINE(1926)			oneTen = null();
+HXLINE(2205)			oneTen = null();
             		}
-HXLINE(1927)		 ::borogove::JID jid = ::borogove::JID_obj::parse(this->chatId)->withResource(resource);
-HXLINE(1928)		::String nick;
-HXDLIN(1928)		if (::hx::IsNotNull( resource )) {
-HXLINE(1928)			nick = resource;
+HXLINE(2206)		 ::borogove::JID jid = ::borogove::JID_obj::parse(this->chatId)->withResource(resource);
+HXLINE(2207)		::String nick;
+HXDLIN(2207)		if (::hx::IsNotNull( resource )) {
+HXLINE(2207)			nick = resource;
             		}
             		else {
-HXLINE(1928)			nick = this->getDisplayName();
+HXLINE(2207)			nick = this->getDisplayName();
             		}
-HXLINE(1929)		::Array< ::Dynamic> roles;
-HXDLIN(1929)		::Array< ::Dynamic> tmp2;
-HXDLIN(1929)		if (::hx::IsNotNull( presence )) {
-HXLINE(1929)			::Array< ::Dynamic> _this1;
-HXDLIN(1929)			 ::borogove::Stanza tmp3 = presence->getChild(HX_("hats",b8,30,08,45),HX_("urn:xmpp:hats:0",8a,fe,c7,65));
-HXDLIN(1929)			::Array< ::Dynamic> tmp4;
-HXDLIN(1929)			if (::hx::IsNotNull( tmp3 )) {
-HXLINE(1929)				tmp4 = tmp3->allTags(HX_("hat",5b,3f,4f,00),null());
+HXLINE(2208)		::Array< ::Dynamic> roles;
+HXDLIN(2208)		::Array< ::Dynamic> tmp2;
+HXDLIN(2208)		if (::hx::IsNotNull( presence )) {
+HXLINE(2208)			::Array< ::Dynamic> _this1;
+HXDLIN(2208)			 ::borogove::Stanza tmp3 = presence->getChild(HX_("hats",b8,30,08,45),HX_("urn:xmpp:hats:0",8a,fe,c7,65));
+HXDLIN(2208)			::Array< ::Dynamic> tmp4;
+HXDLIN(2208)			if (::hx::IsNotNull( tmp3 )) {
+HXLINE(2208)				tmp4 = tmp3->allTags(HX_("hat",5b,3f,4f,00),null());
             			}
             			else {
-HXLINE(1929)				tmp4 = null();
+HXLINE(2208)				tmp4 = null();
             			}
-HXDLIN(1929)			if (::hx::IsNotNull( tmp4 )) {
-HXLINE(1929)				_this1 = tmp4;
+HXDLIN(2208)			if (::hx::IsNotNull( tmp4 )) {
+HXLINE(2208)				_this1 = tmp4;
             			}
             			else {
-HXLINE(1929)				_this1 = ::Array_obj< ::Dynamic>::__new(0);
-            			}
-HXDLIN(1929)			::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this1->length);
-HXDLIN(1929)			{
-HXLINE(1929)				int _g2 = 0;
-HXDLIN(1929)				int _g3 = _this1->length;
-HXDLIN(1929)				while((_g2 < _g3)){
-HXLINE(1929)					_g2 = (_g2 + 1);
-HXDLIN(1929)					int i1 = (_g2 - 1);
-HXDLIN(1929)					{
-HXLINE(1929)						 ::borogove::Stanza hat = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this1,i1)) );
-HXDLIN(1929)						::String inValue1;
-HXDLIN(1929)						::String tmp5 = ( (::String)(::Reflect_obj::field(hat->attr,HX_("uri",6c,2b,59,00))) );
-HXDLIN(1929)						if (::hx::IsNotNull( tmp5 )) {
-HXLINE(1929)							inValue1 = tmp5;
+HXLINE(2208)				_this1 = ::Array_obj< ::Dynamic>::__new(0);
+            			}
+HXDLIN(2208)			::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this1->length);
+HXDLIN(2208)			{
+HXLINE(2208)				int _g2 = 0;
+HXDLIN(2208)				int _g3 = _this1->length;
+HXDLIN(2208)				while((_g2 < _g3)){
+HXLINE(2208)					_g2 = (_g2 + 1);
+HXDLIN(2208)					int i1 = (_g2 - 1);
+HXDLIN(2208)					{
+HXLINE(2208)						 ::borogove::Stanza hat = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this1,i1)) );
+HXDLIN(2208)						::String inValue1;
+HXDLIN(2208)						::String tmp5 = hat->attr->get_string(HX_("uri",6c,2b,59,00));
+HXDLIN(2208)						if (::hx::IsNotNull( tmp5 )) {
+HXLINE(2208)							inValue1 = tmp5;
             						}
             						else {
-HXLINE(1929)							inValue1 = HX_("",00,00,00,00);
+HXLINE(2208)							inValue1 = HX_("",00,00,00,00);
             						}
-HXDLIN(1929)						::String tmp6 = ( (::String)(::Reflect_obj::field(hat->attr,HX_("title",98,15,3b,10))) );
-HXDLIN(1929)						::String inValue2;
-HXDLIN(1929)						if (::hx::IsNotNull( tmp6 )) {
-HXLINE(1929)							inValue2 = tmp6;
+HXDLIN(2208)						::String tmp6 = hat->attr->get_string(HX_("title",98,15,3b,10));
+HXDLIN(2208)						::String inValue2;
+HXDLIN(2208)						if (::hx::IsNotNull( tmp6 )) {
+HXLINE(2208)							inValue2 = tmp6;
             						}
             						else {
-HXLINE(1929)							inValue2 = HX_("",00,00,00,00);
+HXLINE(2208)							inValue2 = HX_("",00,00,00,00);
             						}
-HXDLIN(1929)						result1->__unsafe_set(i1, ::borogove::Role_obj::__alloc( HX_CTX ,inValue1,inValue2));
+HXDLIN(2208)						result1->__unsafe_set(i1, ::borogove::Role_obj::__alloc( HX_CTX ,inValue1,inValue2));
             					}
             				}
             			}
-HXDLIN(1929)			tmp2 = result1;
+HXDLIN(2208)			tmp2 = result1;
             		}
             		else {
-HXLINE(1929)			tmp2 = null();
+HXLINE(2208)			tmp2 = null();
             		}
-HXDLIN(1929)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1929)			roles = tmp2;
+HXDLIN(2208)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE(2208)			roles = tmp2;
             		}
             		else {
-HXLINE(1929)			roles = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2208)			roles = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXLINE(1930)		 ::borogove::Stanza tmp7 = presence->getChild(HX_("occupant-id",2b,a5,8b,91),HX_("urn:xmpp:occupant-id:0",05,d7,05,11));
-HXDLIN(1930)		 ::Dynamic tmp8;
-HXDLIN(1930)		if (::hx::IsNotNull( tmp7 )) {
-HXLINE(1930)			tmp8 = tmp7->attr;
+HXLINE(2209)		 ::borogove::Stanza tmp7 = presence->getChild(HX_("occupant-id",2b,a5,8b,91),HX_("urn:xmpp:occupant-id:0",05,d7,05,11));
+HXDLIN(2209)		 ::haxe::ds::StringMap tmp8;
+HXDLIN(2209)		if (::hx::IsNotNull( tmp7 )) {
+HXLINE(2209)			tmp8 = tmp7->attr;
             		}
             		else {
-HXLINE(1930)			tmp8 = null();
+HXLINE(2209)			tmp8 = null();
             		}
-HXDLIN(1930)		::String occupantId;
-HXDLIN(1930)		if (::hx::IsNotNull( tmp8 )) {
-HXLINE(1930)			occupantId = ( (::String)(::Reflect_obj::field(tmp8,HX_("id",db,5b,00,00))) );
+HXDLIN(2209)		::String occupantId;
+HXDLIN(2209)		if (::hx::IsNotNull( tmp8 )) {
+HXLINE(2209)			occupantId = tmp8->get_string(HX_("id",db,5b,00,00));
             		}
             		else {
-HXLINE(1930)			occupantId = null();
+HXLINE(2209)			occupantId = null();
             		}
-HXLINE(1931)		::String id;
-HXDLIN(1931)		if (::hx::IsNull( occupantId )) {
-HXLINE(1931)			id = jid->asString();
+HXLINE(2210)		::String id;
+HXDLIN(2210)		if (::hx::IsNull( occupantId )) {
+HXLINE(2210)			id = jid->asString();
             		}
             		else {
-HXLINE(1931)			id = ((this->chatId + HX_("/",2f,00,00,00)) + occupantId);
+HXLINE(2210)			id = ((this->chatId + HX_("/",2f,00,00,00)) + occupantId);
             		}
-HXLINE(1932)		 ::borogove::Stanza _hx_tmp;
-HXDLIN(1932)		if (::hx::IsNotNull( presence )) {
-HXLINE(1932)			_hx_tmp = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+HXLINE(2211)		 ::borogove::Stanza _hx_tmp;
+HXDLIN(2211)		if (::hx::IsNotNull( presence )) {
+HXLINE(2211)			_hx_tmp = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
             		}
             		else {
-HXLINE(1932)			_hx_tmp = null();
+HXLINE(2211)			_hx_tmp = null();
             		}
-HXDLIN(1932)		if (::hx::IsNotNull( _hx_tmp )) {
-HXLINE(1933)			::String affRole;
-HXDLIN(1933)			 ::borogove::Stanza tmp9 = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))->getChild(HX_("item",13,c5,bf,45),null());
-HXDLIN(1933)			 ::Dynamic tmp10;
-HXDLIN(1933)			if (::hx::IsNotNull( tmp9 )) {
-HXLINE(1933)				tmp10 = tmp9->attr;
+HXDLIN(2211)		if (::hx::IsNotNull( _hx_tmp )) {
+HXLINE(2212)			::String affRole;
+HXDLIN(2212)			 ::borogove::Stanza tmp9 = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))->getChild(HX_("item",13,c5,bf,45),null());
+HXDLIN(2212)			 ::haxe::ds::StringMap tmp10;
+HXDLIN(2212)			if (::hx::IsNotNull( tmp9 )) {
+HXLINE(2212)				tmp10 = tmp9->attr;
             			}
             			else {
-HXLINE(1933)				tmp10 = null();
+HXLINE(2212)				tmp10 = null();
             			}
-HXDLIN(1933)			::String tmp11;
-HXDLIN(1933)			if (::hx::IsNotNull( tmp10 )) {
-HXLINE(1933)				tmp11 = ( (::String)(::Reflect_obj::field(tmp10,HX_("affiliation",b0,1a,35,a1))) );
+HXDLIN(2212)			::String tmp11;
+HXDLIN(2212)			if (::hx::IsNotNull( tmp10 )) {
+HXLINE(2212)				tmp11 = tmp10->get_string(HX_("affiliation",b0,1a,35,a1));
             			}
             			else {
-HXLINE(1933)				tmp11 = null();
+HXLINE(2212)				tmp11 = null();
             			}
-HXDLIN(1933)			if (::hx::IsNotNull( tmp11 )) {
-HXLINE(1933)				affRole = tmp11;
+HXDLIN(2212)			if (::hx::IsNotNull( tmp11 )) {
+HXLINE(2212)				affRole = tmp11;
             			}
             			else {
-HXLINE(1933)				affRole = HX_("none",b8,12,0a,49);
+HXLINE(2212)				affRole = HX_("none",b8,12,0a,49);
             			}
-HXDLIN(1933)			 ::borogove::Role affRole1 = ::borogove::Role_obj::forAffiliation(affRole);
-HXLINE(1934)			if (::hx::IsNotNull( affRole1 )) {
-HXLINE(1934)				roles->unshift(affRole1);
+HXDLIN(2212)			 ::borogove::Role affRole1 = ::borogove::Role_obj::forAffiliation(affRole);
+HXLINE(2213)			if (::hx::IsNotNull( affRole1 )) {
+HXLINE(2213)				roles->unshift(affRole1);
             			}
             		}
-HXLINE(1936)		bool _hx_tmp1;
-HXDLIN(1936)		if (::hx::IsNull( oneTen )) {
-HXLINE(1936)			 ::borogove::Member tmp12 = this->self;
-HXDLIN(1936)			::String _hx_tmp2;
-HXDLIN(1936)			if (::hx::IsNotNull( tmp12 )) {
-HXLINE(1936)				_hx_tmp2 = tmp12->id;
+HXLINE(2215)		bool _hx_tmp1;
+HXDLIN(2215)		if (::hx::IsNull( oneTen )) {
+HXLINE(2215)			 ::borogove::Member tmp12 = this->self;
+HXDLIN(2215)			::String _hx_tmp2;
+HXDLIN(2215)			if (::hx::IsNotNull( tmp12 )) {
+HXLINE(2215)				_hx_tmp2 = tmp12->id;
             			}
             			else {
-HXLINE(1936)				_hx_tmp2 = null();
+HXLINE(2215)				_hx_tmp2 = null();
             			}
-HXDLIN(1936)			_hx_tmp1 = (id == _hx_tmp2);
+HXDLIN(2215)			_hx_tmp1 = (id == _hx_tmp2);
             		}
             		else {
-HXLINE(1936)			_hx_tmp1 = true;
-            		}
-HXDLIN(1936)		if (_hx_tmp1) {
-HXLINE(1937)			 ::borogove::Client chat = this->client;
-HXDLIN(1937)			 ::borogove::DirectChat chat1 = chat->getDirectChat(this->client->accountId(),false);
-HXLINE(1941)			::String _hx_tmp3 = chat1->getPhoto();
-HXLINE(1944)			 ::borogove::JID _hx_tmp4 = ::borogove::JID_obj::parse(chat1->chatId);
-HXLINE(1945)			 ::haxe::ds::StringMap _g4 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXDLIN(1945)			_g4->set(nick,presence);
-HXLINE(1946)			::String chat2 = chat1->chatId;
-HXDLIN(1946)			::String _hx_tmp5 = chat1->getDisplayName();
-HXLINE(1938)			return  ::borogove::Member_obj::__alloc( HX_CTX ,id,nick,_hx_tmp3,true,roles,_hx_tmp4,_g4, ::borogove::AvailableChat_obj::__alloc( HX_CTX ,chat2,_hx_tmp5,chat1->chatId,::borogove::CapsRepo_obj::empty));
+HXLINE(2215)			_hx_tmp1 = true;
+            		}
+HXDLIN(2215)		if (_hx_tmp1) {
+HXLINE(2216)			 ::borogove::Client chat = this->client;
+HXDLIN(2216)			 ::borogove::DirectChat chat1 = chat->getDirectChat(this->client->accountId(),false);
+HXLINE(2220)			::String _hx_tmp3 = chat1->getPhoto();
+HXLINE(2223)			 ::borogove::JID _hx_tmp4 = ::borogove::JID_obj::parse(chat1->chatId);
+HXLINE(2224)			 ::haxe::ds::StringMap _g4 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXDLIN(2224)			_g4->set(nick,presence);
+HXLINE(2225)			::String chat2 = chat1->chatId;
+HXDLIN(2225)			::String _hx_tmp5 = chat1->getDisplayName();
+HXLINE(2217)			return  ::borogove::Member_obj::__alloc( HX_CTX ,id,nick,_hx_tmp3,true,roles,_hx_tmp4,_g4, ::borogove::AvailableChat_obj::__alloc( HX_CTX ,chat2,_hx_tmp5,chat1->chatId,::borogove::CapsRepo_obj::empty,null()));
             		}
             		else {
-HXLINE(1949)			 ::borogove::Stanza tmp13;
-HXDLIN(1949)			if (::hx::IsNotNull( presence )) {
-HXLINE(1949)				tmp13 = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+HXLINE(2228)			 ::borogove::Stanza tmp13;
+HXDLIN(2228)			if (::hx::IsNotNull( presence )) {
+HXLINE(2228)				tmp13 = presence->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
             			}
             			else {
-HXLINE(1949)				tmp13 = null();
-            			}
-HXDLIN(1949)			 ::borogove::JID tmp14;
-HXDLIN(1949)			if (::hx::IsNotNull( tmp13 )) {
-HXLINE(1949)				 ::borogove::Stanza tmp15 = tmp13->getChild(HX_("item",13,c5,bf,45),null());
-HXDLIN(1949)				 ::Dynamic tmp16;
-HXDLIN(1949)				if (::hx::IsNotNull( tmp15 )) {
-HXLINE(1949)					tmp16 = tmp15->attr;
+HXLINE(2228)				tmp13 = null();
+            			}
+HXDLIN(2228)			 ::borogove::JID tmp14;
+HXDLIN(2228)			if (::hx::IsNotNull( tmp13 )) {
+HXLINE(2228)				 ::borogove::Stanza tmp15 = tmp13->getChild(HX_("item",13,c5,bf,45),null());
+HXDLIN(2228)				 ::haxe::ds::StringMap tmp16;
+HXDLIN(2228)				if (::hx::IsNotNull( tmp15 )) {
+HXLINE(2228)					tmp16 = tmp15->attr;
             				}
             				else {
-HXLINE(1949)					tmp16 = null();
+HXLINE(2228)					tmp16 = null();
             				}
-HXDLIN(1949)				::String jid1;
-HXDLIN(1949)				if (::hx::IsNotNull( tmp16 )) {
-HXLINE(1949)					jid1 = ( (::String)(::Reflect_obj::field(tmp16,HX_("jid",c5,ca,50,00))) );
+HXDLIN(2228)				::String jid1;
+HXDLIN(2228)				if (::hx::IsNotNull( tmp16 )) {
+HXLINE(2228)					jid1 = tmp16->get_string(HX_("jid",c5,ca,50,00));
             				}
             				else {
-HXLINE(1949)					jid1 = null();
+HXLINE(2228)					jid1 = null();
             				}
-HXDLIN(1949)				if (::hx::IsNull( jid1 )) {
-HXLINE(1949)					tmp14 = null();
+HXDLIN(2228)				if (::hx::IsNull( jid1 )) {
+HXLINE(2228)					tmp14 = null();
             				}
             				else {
-HXLINE(1949)					tmp14 = ::borogove::JID_obj::parse(jid1);
+HXLINE(2228)					tmp14 = ::borogove::JID_obj::parse(jid1);
             				}
             			}
             			else {
-HXLINE(1949)				tmp14 = null();
+HXLINE(2228)				tmp14 = null();
             			}
-HXDLIN(1949)			 ::borogove::JID tmp17;
-HXDLIN(1949)			if (::hx::IsNotNull( tmp14 )) {
-HXLINE(1949)				tmp17 = tmp14->asBare();
+HXDLIN(2228)			 ::borogove::JID tmp17;
+HXDLIN(2228)			if (::hx::IsNotNull( tmp14 )) {
+HXLINE(2228)				tmp17 = tmp14->asBare();
             			}
             			else {
-HXLINE(1949)				tmp17 = null();
+HXLINE(2228)				tmp17 = null();
             			}
-HXDLIN(1949)			::String trueJid;
-HXDLIN(1949)			if (::hx::IsNotNull( tmp17 )) {
-HXLINE(1949)				trueJid = tmp17->asString();
+HXDLIN(2228)			::String trueJid;
+HXDLIN(2228)			if (::hx::IsNotNull( tmp17 )) {
+HXLINE(2228)				trueJid = tmp17->asString();
             			}
             			else {
-HXLINE(1949)				trueJid = null();
-            			}
-HXLINE(1953)			 ::borogove::Hash tmp18;
-HXDLIN(1953)			if (::hx::IsNotNull( presence )) {
-HXLINE(1953)				::String avatarSha1Hex = presence->findText(HX_("{vcard-temp:x:update}x/photo#",f6,a1,33,28));
-HXDLIN(1953)				bool tmp19;
-HXDLIN(1953)				if (::hx::IsNotNull( avatarSha1Hex )) {
-HXLINE(1953)					tmp19 = (avatarSha1Hex == HX_("",00,00,00,00));
+HXLINE(2228)				trueJid = null();
+            			}
+HXLINE(2232)			 ::borogove::Hash tmp18;
+HXDLIN(2232)			if (::hx::IsNotNull( presence )) {
+HXLINE(2232)				::String avatarSha1Hex = presence->findText(HX_("{vcard-temp:x:update}x/photo#",f6,a1,33,28));
+HXDLIN(2232)				bool tmp19;
+HXDLIN(2232)				if (::hx::IsNotNull( avatarSha1Hex )) {
+HXLINE(2232)					tmp19 = (avatarSha1Hex == HX_("",00,00,00,00));
             				}
             				else {
-HXLINE(1953)					tmp19 = true;
+HXLINE(2232)					tmp19 = true;
             				}
-HXDLIN(1953)				if (tmp19) {
-HXLINE(1953)					tmp18 = null();
+HXDLIN(2232)				if (tmp19) {
+HXLINE(2232)					tmp18 = null();
             				}
             				else {
-HXLINE(1953)					tmp18 = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
+HXLINE(2232)					tmp18 = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
             				}
             			}
             			else {
-HXLINE(1953)				tmp18 = null();
+HXLINE(2232)				tmp18 = null();
             			}
-HXDLIN(1953)			::String _hx_tmp6;
-HXDLIN(1953)			if (::hx::IsNotNull( tmp18 )) {
-HXLINE(1953)				_hx_tmp6 = tmp18->toUri();
+HXDLIN(2232)			::String _hx_tmp6;
+HXDLIN(2232)			if (::hx::IsNotNull( tmp18 )) {
+HXLINE(2232)				_hx_tmp6 = tmp18->toUri();
             			}
             			else {
-HXLINE(1953)				_hx_tmp6 = null();
+HXLINE(2232)				_hx_tmp6 = null();
             			}
-HXLINE(1956)			 ::borogove::JID _hx_tmp7;
-HXDLIN(1956)			if (::hx::IsNull( trueJid )) {
-HXLINE(1956)				_hx_tmp7 = jid;
+HXLINE(2235)			 ::borogove::JID _hx_tmp7;
+HXDLIN(2235)			if (::hx::IsNull( trueJid )) {
+HXLINE(2235)				_hx_tmp7 = jid;
             			}
             			else {
-HXLINE(1956)				_hx_tmp7 = ::borogove::JID_obj::parse(trueJid);
+HXLINE(2235)				_hx_tmp7 = ::borogove::JID_obj::parse(trueJid);
             			}
-HXLINE(1957)			 ::haxe::ds::StringMap _g5 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXDLIN(1957)			_g5->set(nick,presence);
-HXLINE(1958)			 ::borogove::AvailableChat _hx_tmp8;
-HXDLIN(1958)			if (::hx::IsNull( trueJid )) {
-HXLINE(1958)				_hx_tmp8 = null();
+HXLINE(2236)			 ::haxe::ds::StringMap _g5 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXDLIN(2236)			_g5->set(nick,presence);
+HXLINE(2237)			 ::borogove::AvailableChat _hx_tmp8;
+HXDLIN(2237)			if (::hx::IsNull( trueJid )) {
+HXLINE(2237)				_hx_tmp8 = null();
             			}
             			else {
-HXLINE(1958)				_hx_tmp8 =  ::borogove::AvailableChat_obj::__alloc( HX_CTX ,trueJid,nick,((((HX_("",00,00,00,00) + trueJid) + HX_(" (via ",9a,ee,c1,21)) + this->displayName) + HX_(")",29,00,00,00)),::borogove::CapsRepo_obj::empty);
+HXLINE(2237)				_hx_tmp8 =  ::borogove::AvailableChat_obj::__alloc( HX_CTX ,trueJid,nick,((((HX_("",00,00,00,00) + trueJid) + HX_(" (via ",9a,ee,c1,21)) + this->displayName) + HX_(")",29,00,00,00)),::borogove::CapsRepo_obj::empty,null());
             			}
-HXLINE(1950)			return  ::borogove::Member_obj::__alloc( HX_CTX ,id,nick,_hx_tmp6,false,roles,_hx_tmp7,_g5,_hx_tmp8);
+HXLINE(2229)			return  ::borogove::Member_obj::__alloc( HX_CTX ,id,nick,_hx_tmp6,false,roles,_hx_tmp7,_g5,_hx_tmp8);
             		}
-HXLINE(1936)		return null();
+HXLINE(2215)		return null();
             	}
 
 
@@ -2204,472 +2842,578 @@ HX_DEFINE_DYNAMIC_FUNC2(Channel_obj,buildMember,return )
 ::Array< ::Dynamic> Channel_obj::availableRoles( ::borogove::Member member){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::Role r){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1966_availableRoles)
-HXLINE(1966)			return (r->id == HX_("owner",33,98,76,38));
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2245_availableRoles)
+HXLINE(2245)			return (r->id == HX_("owner",33,98,76,38));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             		bool _hx_run( ::borogove::Role r){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1970_availableRoles)
-HXLINE(1970)			return (r->id == HX_("admin",8f,ac,4a,1c));
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2249_availableRoles)
+HXLINE(2249)			return (r->id == HX_("admin",8f,ac,4a,1c));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1963_availableRoles)
-HXLINE(1964)		if (::hx::IsNull( this->self )) {
-HXLINE(1964)			return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2242_availableRoles)
+HXLINE(2243)		if (::hx::IsNull( this->self )) {
+HXLINE(2243)			return ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXLINE(1966)		if (::Lambda_obj::exists(this->self->roles, ::Dynamic(new _hx_Closure_0()))) {
-HXLINE(1967)			::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
-HXDLIN(1967)			{
-HXLINE(1967)				int _g1 = 0;
-HXDLIN(1967)				::Array< ::String > _g2 = ::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_91,4);
-HXDLIN(1967)				while((_g1 < _g2->length)){
+HXLINE(2245)		if (::Lambda_obj::exists(this->self->roles, ::Dynamic(new _hx_Closure_0()))) {
+HXLINE(2246)			::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
+HXDLIN(2246)			{
+HXLINE(2246)				int _g1 = 0;
+HXDLIN(2246)				::Array< ::String > _g2 = ::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_113,4);
+HXDLIN(2246)				while((_g1 < _g2->length)){
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1,::String,aff) HXARGC(1)
             					bool _hx_run( ::borogove::Role r){
-            						HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1967_availableRoles)
-HXLINE(1967)						return (r->id == aff);
+            						HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2246_availableRoles)
+HXLINE(2246)						return (r->id == aff);
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1967)					::String v = _g2->__get(_g1);
-HXDLIN(1967)					_g1 = (_g1 + 1);
-HXDLIN(1967)					::String aff = v;
-HXDLIN(1967)					if (!(::Lambda_obj::exists(member->roles, ::Dynamic(new _hx_Closure_1(aff))))) {
-HXLINE(1967)						_g->push(v);
+HXLINE(2246)					::String v = _g2->__get(_g1);
+HXDLIN(2246)					_g1 = (_g1 + 1);
+HXDLIN(2246)					::String aff = v;
+HXDLIN(2246)					if (!(::Lambda_obj::exists(member->roles, ::Dynamic(new _hx_Closure_1(aff))))) {
+HXLINE(2246)						_g->push(v);
             					}
             				}
             			}
-HXDLIN(1967)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
-HXDLIN(1967)			{
-HXLINE(1967)				int _g3 = 0;
-HXDLIN(1967)				int _g4 = _g->length;
-HXDLIN(1967)				while((_g3 < _g4)){
-HXLINE(1967)					_g3 = (_g3 + 1);
-HXDLIN(1967)					int i = (_g3 - 1);
-HXDLIN(1967)					{
-HXLINE(1967)						 ::borogove::Role inValue = ::borogove::Role_obj::forAffiliation(( (::String)(_hx_array_unsafe_get(_g,i)) ));
-HXDLIN(1967)						result->__unsafe_set(i,inValue);
+HXDLIN(2246)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
+HXDLIN(2246)			{
+HXLINE(2246)				int _g3 = 0;
+HXDLIN(2246)				int _g4 = _g->length;
+HXDLIN(2246)				while((_g3 < _g4)){
+HXLINE(2246)					_g3 = (_g3 + 1);
+HXDLIN(2246)					int i = (_g3 - 1);
+HXDLIN(2246)					{
+HXLINE(2246)						 ::borogove::Role inValue = ::borogove::Role_obj::forAffiliation(( (::String)(_hx_array_unsafe_get(_g,i)) ));
+HXDLIN(2246)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN(1967)			return result;
+HXDLIN(2246)			return result;
             		}
-HXLINE(1970)		if (::Lambda_obj::exists(this->self->roles, ::Dynamic(new _hx_Closure_2()))) {
+HXLINE(2249)		if (::Lambda_obj::exists(this->self->roles, ::Dynamic(new _hx_Closure_2()))) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             			bool _hx_run( ::borogove::Role r){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1971_availableRoles)
-HXLINE(1971)				return (r->id == HX_("owner",33,98,76,38));
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2250_availableRoles)
+HXLINE(2250)				return (r->id == HX_("owner",33,98,76,38));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1971)			if (::Lambda_obj::exists(member->roles, ::Dynamic(new _hx_Closure_3()))) {
-HXLINE(1971)				return ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2250)			if (::Lambda_obj::exists(member->roles, ::Dynamic(new _hx_Closure_3()))) {
+HXLINE(2250)				return ::Array_obj< ::Dynamic>::__new(0);
             			}
-HXLINE(1973)			::Array< ::String > _g5 = ::Array_obj< ::String >::__new(0);
-HXDLIN(1973)			{
-HXLINE(1973)				int _g6 = 0;
-HXDLIN(1973)				::Array< ::String > _g7 = ::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_94,2);
-HXDLIN(1973)				while((_g6 < _g7->length)){
+HXLINE(2252)			::Array< ::String > _g5 = ::Array_obj< ::String >::__new(0);
+HXDLIN(2252)			{
+HXLINE(2252)				int _g6 = 0;
+HXDLIN(2252)				::Array< ::String > _g7 = ::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_116,2);
+HXDLIN(2252)				while((_g6 < _g7->length)){
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4,::String,aff1) HXARGC(1)
             					bool _hx_run( ::borogove::Role r){
-            						HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1973_availableRoles)
-HXLINE(1973)						return (r->id == aff1);
+            						HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2252_availableRoles)
+HXLINE(2252)						return (r->id == aff1);
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1973)					::String v1 = _g7->__get(_g6);
-HXDLIN(1973)					_g6 = (_g6 + 1);
-HXDLIN(1973)					::String aff1 = v1;
-HXDLIN(1973)					if (!(::Lambda_obj::exists(member->roles, ::Dynamic(new _hx_Closure_4(aff1))))) {
-HXLINE(1973)						_g5->push(v1);
+HXLINE(2252)					::String v1 = _g7->__get(_g6);
+HXDLIN(2252)					_g6 = (_g6 + 1);
+HXDLIN(2252)					::String aff1 = v1;
+HXDLIN(2252)					if (!(::Lambda_obj::exists(member->roles, ::Dynamic(new _hx_Closure_4(aff1))))) {
+HXLINE(2252)						_g5->push(v1);
             					}
             				}
             			}
-HXDLIN(1973)			::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_g5->length);
-HXDLIN(1973)			{
-HXLINE(1973)				int _g8 = 0;
-HXDLIN(1973)				int _g9 = _g5->length;
-HXDLIN(1973)				while((_g8 < _g9)){
-HXLINE(1973)					_g8 = (_g8 + 1);
-HXDLIN(1973)					int i1 = (_g8 - 1);
-HXDLIN(1973)					{
-HXLINE(1973)						 ::borogove::Role inValue1 = ::borogove::Role_obj::forAffiliation(( (::String)(_hx_array_unsafe_get(_g5,i1)) ));
-HXDLIN(1973)						result1->__unsafe_set(i1,inValue1);
+HXDLIN(2252)			::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_g5->length);
+HXDLIN(2252)			{
+HXLINE(2252)				int _g8 = 0;
+HXDLIN(2252)				int _g9 = _g5->length;
+HXDLIN(2252)				while((_g8 < _g9)){
+HXLINE(2252)					_g8 = (_g8 + 1);
+HXDLIN(2252)					int i1 = (_g8 - 1);
+HXDLIN(2252)					{
+HXLINE(2252)						 ::borogove::Role inValue1 = ::borogove::Role_obj::forAffiliation(( (::String)(_hx_array_unsafe_get(_g5,i1)) ));
+HXDLIN(2252)						result1->__unsafe_set(i1,inValue1);
             					}
             				}
             			}
-HXDLIN(1973)			return result1;
+HXDLIN(2252)			return result1;
             		}
-HXLINE(1976)		return ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2255)		return ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 
 bool Channel_obj::canRemoveRole( ::borogove::Member member, ::borogove::Role role){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::Role r){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1982_canRemoveRole)
-HXLINE(1982)			return (r->id == HX_("owner",33,98,76,38));
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2261_canRemoveRole)
+HXLINE(2261)			return (r->id == HX_("owner",33,98,76,38));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run( ::borogove::Role r){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1986_canRemoveRole)
-HXLINE(1986)			return (r->id == HX_("admin",8f,ac,4a,1c));
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2265_canRemoveRole)
+HXLINE(2265)			return (r->id == HX_("admin",8f,ac,4a,1c));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1979_canRemoveRole)
-HXLINE(1980)		if (::hx::IsNull( this->self )) {
-HXLINE(1980)			return false;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2258_canRemoveRole)
+HXLINE(2259)		if (::hx::IsNull( this->self )) {
+HXLINE(2259)			return false;
             		}
-HXLINE(1982)		if (::Lambda_obj::exists(this->self->roles, ::Dynamic(new _hx_Closure_0()))) {
-HXLINE(1983)			return ::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_99,4)->contains(role->id);
+HXLINE(2261)		if (::Lambda_obj::exists(this->self->roles, ::Dynamic(new _hx_Closure_0()))) {
+HXLINE(2262)			return ::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_121,4)->contains(role->id);
             		}
-HXLINE(1986)		if (::Lambda_obj::exists(this->self->roles, ::Dynamic(new _hx_Closure_1()))) {
+HXLINE(2265)		if (::Lambda_obj::exists(this->self->roles, ::Dynamic(new _hx_Closure_1()))) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             			bool _hx_run( ::borogove::Role r){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1987_canRemoveRole)
-HXLINE(1987)				return (r->id == HX_("owner",33,98,76,38));
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2266_canRemoveRole)
+HXLINE(2266)				return (r->id == HX_("owner",33,98,76,38));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1987)			if (::Lambda_obj::exists(member->roles, ::Dynamic(new _hx_Closure_2()))) {
-HXLINE(1987)				return false;
+HXLINE(2266)			if (::Lambda_obj::exists(member->roles, ::Dynamic(new _hx_Closure_2()))) {
+HXLINE(2266)				return false;
             			}
-HXLINE(1989)			return ::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_101,3)->contains(role->id);
+HXLINE(2268)			return ::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_123,3)->contains(role->id);
             		}
-HXLINE(1992)		return false;
+HXLINE(2271)		return false;
             	}
 
 
 void Channel_obj::addRole( ::borogove::Member member, ::borogove::Role role){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		void _hx_run( ::borogove::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2001_addRole)
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2280_addRole)
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1995_addRole)
-HXLINE(1996)		if (::hx::IsNull( member->chat )) {
-HXLINE(1996)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2274_addRole)
+HXLINE(2275)		if (::hx::IsNull( member->chat )) {
+HXLINE(2275)			return;
             		}
-HXLINE(1998)		 ::borogove::Stanza iq =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2277)		 ::borogove::Stanza iq =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("to",7b,65,00,00),this->chatId)
-            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#admin",d3,be,2f,5a))))->textTag(HX_("item",13,c5,bf,45),HX_("",00,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#admin",d3,be,2f,5a))),null())->textTag(HX_("item",13,c5,bf,45),HX_("",00,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("affiliation",b0,1a,35,a1),role->id)
-            			->setFixed(1,HX_("jid",c5,ca,50,00),member->chat->chatId)));
-HXLINE(2001)		this->stream->sendIq(iq, ::Dynamic(new _hx_Closure_0()));
+            			->setFixed(1,HX_("jid",c5,ca,50,00),member->chat->chatId)),null());
+HXLINE(2280)		this->stream->sendIq(iq, ::Dynamic(new _hx_Closure_0()));
             	}
 
 
 void Channel_obj::removeRole( ::borogove::Member member, ::borogove::Role role){
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2006_removeRole)
-HXDLIN(2006)		this->addRole(member, ::borogove::Role_obj::__alloc( HX_CTX ,HX_("member",5a,e2,b5,04),HX_("",00,00,00,00)));
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2285_removeRole)
+HXDLIN(2285)		this->addRole(member, ::borogove::Role_obj::__alloc( HX_CTX ,HX_("member",5a,e2,b5,04),HX_("",00,00,00,00)));
             	}
 
 
 ::Dynamic Channel_obj::getMessagesBefore( ::borogove::ChatMessage before){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis, ::borogove::ChatMessage,before) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2014_getMessagesBefore)
-HXLINE(2014)			bool _hx_tmp;
-HXDLIN(2014)			if ((messages->length <= 0)) {
-HXLINE(2014)				if (::hx::IsNotNull( before )) {
-HXLINE(2014)					_hx_tmp = ::hx::IsNull( before->serverId );
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2293_getMessagesBefore)
+HXLINE(2293)			bool _hx_tmp;
+HXDLIN(2293)			if ((messages->length <= 0)) {
+HXLINE(2293)				if (::hx::IsNotNull( before )) {
+HXLINE(2293)					_hx_tmp = ::hx::IsNull( before->serverId );
             				}
             				else {
-HXLINE(2014)					_hx_tmp = false;
+HXLINE(2293)					_hx_tmp = false;
             				}
             			}
             			else {
-HXLINE(2014)				_hx_tmp = true;
+HXLINE(2293)				_hx_tmp = true;
             			}
-HXDLIN(2014)			if (_hx_tmp) {
-HXLINE(2015)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+HXDLIN(2293)			if (_hx_tmp) {
+HXLINE(2294)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(2)
             				 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2020_getMessagesBefore)
-HXLINE(2021)					builder = _gthis->prepareIncomingMessage(builder,stanza);
-HXLINE(2022)					builder->syncPoint = false;
-HXLINE(2023)					return builder;
+            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2303_getMessagesBefore)
+HXLINE(2304)					builder = _gthis->prepareIncomingMessage(builder,stanza);
+HXLINE(2305)					builder->syncPoint = false;
+HXLINE(2306)					return builder;
             				}
             				HX_END_LOCAL_FUNC2(return)
 
-HXLINE(2017)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE(2018)				::String tmp;
-HXDLIN(2018)				if (::hx::IsNotNull( before )) {
-HXLINE(2018)					tmp = before->serverId;
+HXLINE(2296)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE(2297)				::String tmp;
+HXDLIN(2297)				if (::hx::IsNotNull( before )) {
+HXLINE(2297)					tmp = before->serverId;
             				}
             				else {
-HXLINE(2018)					tmp = null();
+HXLINE(2297)					tmp = null();
             				}
-HXDLIN(2018)				::String _hx_tmp1;
-HXDLIN(2018)				if (::hx::IsNotNull( tmp )) {
-HXLINE(2018)					_hx_tmp1 = tmp;
+HXDLIN(2297)				::String _hx_tmp1;
+HXDLIN(2297)				if (::hx::IsNotNull( tmp )) {
+HXLINE(2297)					_hx_tmp1 = tmp;
             				}
             				else {
-HXLINE(2018)					_hx_tmp1 = HX_("",00,00,00,00);
+HXLINE(2297)					_hx_tmp1 = HX_("",00,00,00,00);
             				}
-HXDLIN(2018)				filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN(2297)				filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("before",7f,54,32,9a),_hx_tmp1)),::hx::paccDynamic);
-HXLINE(2019)				::String sync;
-HXDLIN(2019)				if (::hx::IsNotNull( before )) {
-HXLINE(2019)					sync = before->sortId;
+HXLINE(2300)				::String _hx_tmp2;
+HXDLIN(2300)				if (::hx::IsNotNull( before )) {
+HXLINE(2300)					_hx_tmp2 = before->serverId;
+            				}
+            				else {
+HXLINE(2300)					_hx_tmp2 = null();
+            				}
+HXDLIN(2300)				::String _hx_tmp3;
+HXDLIN(2300)				if (::hx::IsNotNull( before )) {
+HXLINE(2300)					_hx_tmp3 = before->sortId;
+            				}
+            				else {
+HXLINE(2300)					_hx_tmp3 = null();
+            				}
+HXLINE(2298)				::haxe::Log_obj::trace(HX_("SYNC: initialize MessageSync",53,9b,9a,5d), ::Dynamic(::hx::Anon_obj::Create(5)
+            					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
+            					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(4)
+            						->setFixed(0,HX_("beforeServerId",1d,29,cd,b4),_hx_tmp2)
+            						->setFixed(1,HX_("chatId",d3,04,77,b7),_gthis->chatId)
+            						->setFixed(2,HX_("reason",c4,0f,9d,fc),HX_("channel getMessagesBefore local result empty",7b,92,11,db))
+            						->setFixed(3,HX_("beforeSortId",b8,2c,9b,5c),_hx_tmp3))))
+            					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("getMessagesBefore",a1,f1,44,11))
+            					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),2298)));
+HXLINE(2302)				::String sync;
+HXDLIN(2302)				if (::hx::IsNotNull( before )) {
+HXLINE(2302)					sync = before->sortId;
             				}
             				else {
-HXLINE(2019)					sync = null();
+HXLINE(2302)					sync = null();
             				}
-HXDLIN(2019)				 ::borogove::MessageSync sync1 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null(),sync,_gthis->chatId);
-HXLINE(2020)				sync1->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(2025)				return _gthis->fetchFromSync(sync1);
+HXDLIN(2302)				 ::borogove::MessageSync sync1 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null(),sync,_gthis->chatId);
+HXLINE(2303)				sync1->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(2308)				return _gthis->fetchFromSync(sync1);
             			}
-HXLINE(2014)			return null();
+HXLINE(2293)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2010_getMessagesBefore)
-HXDLIN(2010)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(2011)		bool _hx_tmp;
-HXDLIN(2011)		if (::hx::IsNotNull( before )) {
-HXLINE(2011)			::String _hx_tmp1 = before->chatId();
-HXDLIN(2011)			_hx_tmp = (_hx_tmp1 != this->chatId);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2289_getMessagesBefore)
+HXDLIN(2289)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2290)		bool _hx_tmp;
+HXDLIN(2290)		if (::hx::IsNotNull( before )) {
+HXLINE(2290)			::String _hx_tmp1 = before->chatId();
+HXDLIN(2290)			_hx_tmp = (_hx_tmp1 != this->chatId);
             		}
             		else {
-HXLINE(2011)			_hx_tmp = false;
+HXLINE(2290)			_hx_tmp = false;
             		}
-HXDLIN(2011)		if (_hx_tmp) {
-HXLINE(2011)			HX_STACK_DO_THROW(HX_("Cannot look before from a different chat",f7,e6,d9,fa));
+HXDLIN(2290)		if (_hx_tmp) {
+HXLINE(2290)			HX_STACK_DO_THROW(HX_("Cannot look before from a different chat",f7,e6,d9,fa));
             		}
-HXLINE(2013)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(2013)		::String _hx_tmp3 = this->client->accountId();
-HXDLIN(2013)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp2,_hx_tmp3,this->chatId,before), ::Dynamic(new _hx_Closure_1(_gthis,before)),null());
+HXLINE(2292)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(2292)		::String _hx_tmp3 = this->client->accountId();
+HXDLIN(2292)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp2,_hx_tmp3,this->chatId,before), ::Dynamic(new _hx_Closure_1(_gthis,before)),null());
             	}
 
 
 ::Dynamic Channel_obj::getMessagesAfter( ::borogove::ChatMessage after){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::ChatMessage,after, ::borogove::Channel,_gthis) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2038_getMessagesAfter)
-HXLINE(2038)			bool _hx_tmp;
-HXDLIN(2038)			if ((messages->length <= 0)) {
-HXLINE(2038)				if (::hx::IsNotNull( after )) {
-HXLINE(2038)					_hx_tmp = ::hx::IsNull( after->serverId );
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2322_getMessagesAfter)
+HXLINE(2322)			bool _hx_tmp;
+HXDLIN(2322)			if ((messages->length <= 0)) {
+HXLINE(2322)				if (::hx::IsNotNull( after )) {
+HXLINE(2322)					_hx_tmp = ::hx::IsNull( after->serverId );
             				}
             				else {
-HXLINE(2038)					_hx_tmp = false;
+HXLINE(2322)					_hx_tmp = false;
             				}
             			}
             			else {
-HXLINE(2038)				_hx_tmp = true;
+HXLINE(2322)				_hx_tmp = true;
             			}
-HXDLIN(2038)			if (_hx_tmp) {
-HXLINE(2039)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+HXDLIN(2322)			if (_hx_tmp) {
+HXLINE(2323)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(2)
             				 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2044_getMessagesAfter)
-HXLINE(2045)					builder = _gthis->prepareIncomingMessage(builder,stanza);
-HXLINE(2046)					builder->syncPoint = false;
-HXLINE(2047)					return builder;
+            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2332_getMessagesAfter)
+HXLINE(2333)					builder = _gthis->prepareIncomingMessage(builder,stanza);
+HXLINE(2334)					builder->syncPoint = false;
+HXLINE(2335)					return builder;
             				}
             				HX_END_LOCAL_FUNC2(return)
 
-HXLINE(2041)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE(2042)				::String _hx_tmp1;
-HXDLIN(2042)				if (::hx::IsNotNull( after )) {
-HXLINE(2042)					_hx_tmp1 = after->serverId;
+HXLINE(2325)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE(2326)				::String _hx_tmp1;
+HXDLIN(2326)				if (::hx::IsNotNull( after )) {
+HXLINE(2326)					_hx_tmp1 = after->serverId;
             				}
             				else {
-HXLINE(2042)					_hx_tmp1 = null();
+HXLINE(2326)					_hx_tmp1 = null();
             				}
-HXDLIN(2042)				if (::hx::IsNotNull( _hx_tmp1 )) {
-HXLINE(2042)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN(2326)				if (::hx::IsNotNull( _hx_tmp1 )) {
+HXLINE(2326)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("after",1c,66,a2,1d),after->serverId)),::hx::paccDynamic);
             				}
-HXLINE(2043)				::String sync;
-HXDLIN(2043)				if (::hx::IsNotNull( after )) {
-HXLINE(2043)					sync = after->sortId;
+HXLINE(2329)				::String _hx_tmp2;
+HXDLIN(2329)				if (::hx::IsNotNull( after )) {
+HXLINE(2329)					_hx_tmp2 = after->serverId;
             				}
             				else {
-HXLINE(2043)					sync = null();
+HXLINE(2329)					_hx_tmp2 = null();
             				}
-HXDLIN(2043)				 ::borogove::MessageSync sync1 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,sync,null(),_gthis->chatId);
-HXLINE(2044)				sync1->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(2049)				return _gthis->fetchFromSync(sync1);
+HXDLIN(2329)				::String _hx_tmp3;
+HXDLIN(2329)				if (::hx::IsNotNull( after )) {
+HXLINE(2329)					_hx_tmp3 = after->sortId;
+            				}
+            				else {
+HXLINE(2329)					_hx_tmp3 = null();
+            				}
+HXLINE(2327)				::haxe::Log_obj::trace(HX_("SYNC: initialize MessageSync",53,9b,9a,5d), ::Dynamic(::hx::Anon_obj::Create(5)
+            					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
+            					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(4)
+            						->setFixed(0,HX_("afterSortId",15,d2,97,81),_hx_tmp3)
+            						->setFixed(1,HX_("afterServerId",ba,9f,43,8e),_hx_tmp2)
+            						->setFixed(2,HX_("chatId",d3,04,77,b7),_gthis->chatId)
+            						->setFixed(3,HX_("reason",c4,0f,9d,fc),HX_("channel getMessagesAfter local result empty",28,a2,c6,d4)))))
+            					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("getMessagesAfter",3a,43,91,57))
+            					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),2327)));
+HXLINE(2331)				::String sync;
+HXDLIN(2331)				if (::hx::IsNotNull( after )) {
+HXLINE(2331)					sync = after->sortId;
+            				}
+            				else {
+HXLINE(2331)					sync = null();
+            				}
+HXDLIN(2331)				 ::borogove::MessageSync sync1 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,sync,null(),_gthis->chatId);
+HXLINE(2332)				sync1->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(2337)				return _gthis->fetchFromSync(sync1);
             			}
-HXLINE(2038)			return null();
+HXLINE(2322)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2031_getMessagesAfter)
-HXDLIN(2031)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(2032)		bool _hx_tmp;
-HXDLIN(2032)		if (::hx::IsNotNull( after )) {
-HXLINE(2032)			::String _hx_tmp1 = after->chatId();
-HXDLIN(2032)			_hx_tmp = (_hx_tmp1 != this->chatId);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2314_getMessagesAfter)
+HXDLIN(2314)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2315)		bool _hx_tmp;
+HXDLIN(2315)		if (::hx::IsNotNull( after )) {
+HXLINE(2315)			::String _hx_tmp1 = after->chatId();
+HXDLIN(2315)			_hx_tmp = (_hx_tmp1 != this->chatId);
             		}
             		else {
-HXLINE(2032)			_hx_tmp = false;
+HXLINE(2315)			_hx_tmp = false;
             		}
-HXDLIN(2032)		if (_hx_tmp) {
-HXLINE(2032)			HX_STACK_DO_THROW(HX_("Cannot look after from a different chat",8c,1a,5f,f4));
+HXDLIN(2315)		if (_hx_tmp) {
+HXLINE(2315)			HX_STACK_DO_THROW(HX_("Cannot look after from a different chat",8c,1a,5f,f4));
             		}
-HXLINE(2033)		bool _hx_tmp2;
-HXDLIN(2033)		bool _hx_tmp3;
-HXDLIN(2033)		bool _hx_tmp4;
-HXDLIN(2033)		if (::hx::IsNotNull( after )) {
-HXLINE(2033)			_hx_tmp4 = ::hx::IsNotNull( this->lastMessage );
+HXLINE(2316)		bool _hx_tmp2;
+HXDLIN(2316)		bool _hx_tmp3;
+HXDLIN(2316)		bool _hx_tmp4;
+HXDLIN(2316)		if (::hx::IsNotNull( after )) {
+HXLINE(2316)			_hx_tmp4 = ::hx::IsNotNull( this->lastMessage );
             		}
             		else {
-HXLINE(2033)			_hx_tmp4 = false;
+HXLINE(2316)			_hx_tmp4 = false;
             		}
-HXDLIN(2033)		if (_hx_tmp4) {
-HXLINE(2033)			_hx_tmp3 = this->lastMessage->canReplace(after);
+HXDLIN(2316)		if (_hx_tmp4) {
+HXLINE(2316)			_hx_tmp3 = this->lastMessage->canReplace(after);
             		}
             		else {
-HXLINE(2033)			_hx_tmp3 = false;
+HXLINE(2316)			_hx_tmp3 = false;
             		}
-HXDLIN(2033)		if (_hx_tmp3) {
-HXLINE(2033)			_hx_tmp2 = this->inSync;
+HXDLIN(2316)		if (_hx_tmp3) {
+HXLINE(2316)			_hx_tmp2 = this->inSync;
             		}
             		else {
-HXLINE(2033)			_hx_tmp2 = false;
-            		}
-HXDLIN(2033)		if (_hx_tmp2) {
-HXLINE(2034)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
-            		}
-HXLINE(2037)		::Dynamic _hx_tmp5 = this->persistence;
-HXDLIN(2037)		::String _hx_tmp6 = this->client->accountId();
-HXDLIN(2037)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesAfter(_hx_tmp5,_hx_tmp6,this->chatId,after), ::Dynamic(new _hx_Closure_1(after,_gthis)),null());
+HXLINE(2316)			_hx_tmp2 = false;
+            		}
+HXDLIN(2316)		if (_hx_tmp2) {
+HXLINE(2317)			::haxe::Log_obj::trace(HX_("SYNC: getMessagesAfter returning empty",fa,ce,a8,a8), ::Dynamic(::hx::Anon_obj::Create(5)
+            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
+            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(6)
+            					->setFixed(0,HX_("afterSortId",15,d2,97,81),after->sortId)
+            					->setFixed(1,HX_("afterServerId",ba,9f,43,8e),after->serverId)
+            					->setFixed(2,HX_("chatId",d3,04,77,b7),this->chatId)
+            					->setFixed(3,HX_("lastMessageSortId",ca,3b,01,ca),this->lastMessage->sortId)
+            					->setFixed(4,HX_("lastMessageServerId",af,a0,22,d3),this->lastMessage->serverId)
+            					->setFixed(5,HX_("reason",c4,0f,9d,fc),HX_("channel is synced and cursor matches last message",3e,4d,1d,d9)))))
+            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("getMessagesAfter",3a,43,91,57))
+            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            				->setFixed(4,HX_("lineNumber",dd,81,22,76),2317)));
+HXLINE(2318)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+            		}
+HXLINE(2321)		::Dynamic _hx_tmp5 = this->persistence;
+HXDLIN(2321)		::String _hx_tmp6 = this->client->accountId();
+HXDLIN(2321)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesAfter(_hx_tmp5,_hx_tmp6,this->chatId,after), ::Dynamic(new _hx_Closure_1(after,_gthis)),null());
             	}
 
 
 ::Dynamic Channel_obj::getMessagesAround( ::borogove::ChatMessage around){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2055_getMessagesAround)
-HXLINE(2056)		::String _hx_tmp = around->chatId();
-HXDLIN(2056)		if ((_hx_tmp != this->chatId)) {
-HXLINE(2056)			HX_STACK_DO_THROW(HX_("Cannot look around from a different chat",45,55,1b,ba));
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2343_getMessagesAround)
+HXLINE(2344)		::String _hx_tmp = around->chatId();
+HXDLIN(2344)		if ((_hx_tmp != this->chatId)) {
+HXLINE(2344)			HX_STACK_DO_THROW(HX_("Cannot look around from a different chat",45,55,1b,ba));
             		}
-HXLINE(2059)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(2059)		return ::borogove::Persistence_obj::getMessagesAround(_hx_tmp1,this->client->accountId(),around);
+HXLINE(2347)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(2347)		return ::borogove::Persistence_obj::getMessagesAround(_hx_tmp1,this->client->accountId(),around);
             	}
 
 
  ::borogove::ChatMessageBuilder Channel_obj::prepareIncomingMessage( ::borogove::ChatMessageBuilder message, ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2063_prepareIncomingMessage)
-HXLINE(2064)		message->syncPoint = this->inSync;
-HXLINE(2065)		if ((message->type == 0)) {
-HXLINE(2065)			message->type = 3;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2351_prepareIncomingMessage)
+HXLINE(2352)		message->syncPoint = this->inSync;
+HXLINE(2353)		if ((message->type == 0)) {
+HXLINE(2353)			message->type = 3;
             		}
-HXLINE(2066)		if (::hx::IsNull( message->sortId )) {
-HXLINE(2067)			bool _hx_tmp;
-HXDLIN(2067)			if (::hx::IsNotNull( this->sortId )) {
-HXLINE(2067)				_hx_tmp = (message->type == 2);
+HXLINE(2354)		bool _hx_tmp;
+HXDLIN(2354)		if (::hx::IsNull( message->sortId )) {
+HXLINE(2354)			if (::hx::IsNull( message->text )) {
+HXLINE(2354)				_hx_tmp = (message->attachments->length > 0);
             			}
             			else {
-HXLINE(2067)				_hx_tmp = false;
+HXLINE(2354)				_hx_tmp = true;
             			}
-HXDLIN(2067)			if (_hx_tmp) {
-HXLINE(2068)				this->sortId = (message->sortId = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(this->sortId,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a)));
+            		}
+            		else {
+HXLINE(2354)			_hx_tmp = false;
+            		}
+HXDLIN(2354)		if (_hx_tmp) {
+HXLINE(2355)			bool _hx_tmp1;
+HXDLIN(2355)			if (::hx::IsNotNull( this->sortId )) {
+HXLINE(2355)				_hx_tmp1 = (message->type == 2);
             			}
             			else {
-HXLINE(2070)				message->sortId = this->client->nextSortId();
+HXLINE(2355)				_hx_tmp1 = false;
+            			}
+HXDLIN(2355)			if (_hx_tmp1) {
+HXLINE(2356)				::String lower = this->sortId;
+HXLINE(2357)				this->sortId = (message->sortId = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(lower,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a)));
+HXLINE(2361)				::String _hx_tmp2 = ::borogove::Date_obj::format(::Date_obj::now());
+HXLINE(2358)				message->debug =  ::Dynamic(::hx::Anon_obj::Create(4)
+            					->setFixed(0,HX_("now",16,d9,53,00),_hx_tmp2)
+            					->setFixed(1,HX_("sortId",d9,7a,37,30), ::Dynamic(::hx::Anon_obj::Create(3)
+            						->setFixed(0,HX_("upper",62,19,3f,a8),null())
+            						->setFixed(1,HX_("method",e1,f6,5a,09),HX_("between",c8,91,b3,66))
+            						->setFixed(2,HX_("lower",01,fa,ff,78),lower)))
+            					->setFixed(2,HX_("source",db,b0,31,32),HX_("live",ec,1e,b3,47))
+            					->setFixed(3,HX_("path",a5,e5,51,4a),HX_("Channel#prepareIncomingMessage sortId != null && message.type == MessageChannel",27,8c,53,ba)));
             			}
-            		}
-HXLINE(2073)		 ::borogove::Stanza tmp = stanza->getChild(HX_("occupant-id",2b,a5,8b,91),HX_("urn:xmpp:occupant-id:0",05,d7,05,11));
-HXDLIN(2073)		 ::Dynamic tmp1;
-HXDLIN(2073)		if (::hx::IsNotNull( tmp )) {
-HXLINE(2073)			tmp1 = tmp->attr;
+            			else {
+HXLINE(2365)				if ((message->type == 2)) {
+HXLINE(2366)					HX_STACK_DO_THROW(HX_("Cannot store message before we know sortId",28,59,94,fe));
+            				}
+HXLINE(2368)				::String lower1 = this->client->sortId;
+HXLINE(2369)				message->sortId = this->client->nextSortId();
+HXLINE(2373)				::String _hx_tmp3 = ::borogove::Date_obj::format(::Date_obj::now());
+HXLINE(2370)				message->debug =  ::Dynamic(::hx::Anon_obj::Create(4)
+            					->setFixed(0,HX_("now",16,d9,53,00),_hx_tmp3)
+            					->setFixed(1,HX_("sortId",d9,7a,37,30), ::Dynamic(::hx::Anon_obj::Create(3)
+            						->setFixed(0,HX_("upper",62,19,3f,a8),null())
+            						->setFixed(1,HX_("method",e1,f6,5a,09),HX_("between",c8,91,b3,66))
+            						->setFixed(2,HX_("lower",01,fa,ff,78),lower1)))
+            					->setFixed(2,HX_("source",db,b0,31,32),HX_("live",ec,1e,b3,47))
+            					->setFixed(3,HX_("path",a5,e5,51,4a),HX_("Channel#prepareIncomingMessage else (probably PM?)",dd,38,4f,1f)));
+            			}
+            		}
+HXLINE(2378)		 ::borogove::Stanza tmp = stanza->getChild(HX_("occupant-id",2b,a5,8b,91),HX_("urn:xmpp:occupant-id:0",05,d7,05,11));
+HXDLIN(2378)		 ::haxe::ds::StringMap tmp1;
+HXDLIN(2378)		if (::hx::IsNotNull( tmp )) {
+HXLINE(2378)			tmp1 = tmp->attr;
             		}
             		else {
-HXLINE(2073)			tmp1 = null();
+HXLINE(2378)			tmp1 = null();
             		}
-HXDLIN(2073)		::String occupantId;
-HXDLIN(2073)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE(2073)			occupantId = ( (::String)(::Reflect_obj::field(tmp1,HX_("id",db,5b,00,00))) );
+HXDLIN(2378)		::String occupantId;
+HXDLIN(2378)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(2378)			occupantId = tmp1->get_string(HX_("id",db,5b,00,00));
             		}
             		else {
-HXLINE(2073)			occupantId = null();
+HXLINE(2378)			occupantId = null();
             		}
-HXLINE(2074)		::String _hx_tmp1;
-HXDLIN(2074)		if (::hx::IsNull( occupantId )) {
-HXLINE(2074)			_hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXLINE(2379)		::String _hx_tmp4;
+HXDLIN(2379)		if (::hx::IsNull( occupantId )) {
+HXLINE(2379)			_hx_tmp4 = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
             		}
             		else {
-HXLINE(2074)			_hx_tmp1 = ((this->chatId + HX_("/",2f,00,00,00)) + occupantId);
+HXLINE(2379)			_hx_tmp4 = ((this->chatId + HX_("/",2f,00,00,00)) + occupantId);
             		}
-HXDLIN(2074)		message->senderId = _hx_tmp1;
-HXLINE(2075)		::String _hx_tmp2 = message->get_senderId();
-HXDLIN(2075)		 ::borogove::Member tmp2 = this->self;
-HXDLIN(2075)		::String _hx_tmp3;
-HXDLIN(2075)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE(2075)			_hx_tmp3 = tmp2->id;
+HXDLIN(2379)		message->senderId = _hx_tmp4;
+HXLINE(2380)		::String _hx_tmp5 = message->get_senderId();
+HXDLIN(2380)		 ::borogove::Member tmp2 = this->self;
+HXDLIN(2380)		::String _hx_tmp6;
+HXDLIN(2380)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE(2380)			_hx_tmp6 = tmp2->id;
             		}
             		else {
-HXLINE(2075)			_hx_tmp3 = null();
+HXLINE(2380)			_hx_tmp6 = null();
             		}
-HXDLIN(2075)		if ((_hx_tmp2 == _hx_tmp3)) {
-HXLINE(2076)			message->recipients = message->replyTo;
-HXLINE(2077)			message->direction = 1;
+HXDLIN(2380)		if ((_hx_tmp5 == _hx_tmp6)) {
+HXLINE(2381)			message->recipients = message->replyTo;
+HXLINE(2382)			message->direction = 1;
             		}
-HXLINE(2079)		return message;
+HXLINE(2384)		return message;
             	}
 
 
  ::borogove::ChatMessageBuilder Channel_obj::prepareOutgoingMessage( ::borogove::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2082_prepareOutgoingMessage)
-HXLINE(2083)		message->type = 2;
-HXLINE(2084)		::String tmp = message->timestamp;
-HXDLIN(2084)		::String _hx_tmp;
-HXDLIN(2084)		if (::hx::IsNotNull( tmp )) {
-HXLINE(2084)			_hx_tmp = tmp;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2387_prepareOutgoingMessage)
+HXLINE(2388)		message->type = 2;
+HXLINE(2389)		::String tmp = message->timeSent;
+HXDLIN(2389)		::String _hx_tmp;
+HXDLIN(2389)		if (::hx::IsNotNull( tmp )) {
+HXLINE(2389)			_hx_tmp = tmp;
             		}
             		else {
-HXLINE(2084)			_hx_tmp = ::borogove::Date_obj::format(::Date_obj::now());
+HXLINE(2389)			_hx_tmp = ::borogove::Date_obj::format(::Date_obj::now());
             		}
-HXDLIN(2084)		message->timestamp = _hx_tmp;
-HXLINE(2085)		message->direction = 1;
-HXLINE(2086)		message->from = this->client->jid;
-HXLINE(2087)		 ::borogove::Member tmp1 = this->self;
-HXDLIN(2087)		::String tmp2;
-HXDLIN(2087)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE(2087)			tmp2 = tmp1->id;
+HXDLIN(2389)		message->timeSent = _hx_tmp;
+HXLINE(2390)		message->timeReceived = ::borogove::Date_obj::format(::Date_obj::now());
+HXLINE(2391)		message->direction = 1;
+HXLINE(2392)		message->from = this->client->jid;
+HXLINE(2393)		 ::borogove::Member tmp1 = this->self;
+HXDLIN(2393)		::String tmp2;
+HXDLIN(2393)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(2393)			tmp2 = tmp1->id;
             		}
             		else {
-HXLINE(2087)			tmp2 = null();
+HXLINE(2393)			tmp2 = null();
             		}
-HXDLIN(2087)		::String _hx_tmp1;
-HXDLIN(2087)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE(2087)			_hx_tmp1 = tmp2;
+HXDLIN(2393)		::String _hx_tmp1;
+HXDLIN(2393)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE(2393)			_hx_tmp1 = tmp2;
             		}
             		else {
-HXLINE(2087)			_hx_tmp1 = this->getFullJid()->asString();
+HXLINE(2393)			_hx_tmp1 = this->getFullJid()->asString();
             		}
-HXDLIN(2087)		message->senderId = _hx_tmp1;
-HXLINE(2088)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,this->getFullJid());
-HXLINE(2089)		message->to = ::borogove::JID_obj::parse(this->chatId);
-HXLINE(2090)		message->recipients = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->to);
-HXLINE(2091)		if (::hx::IsNull( message->localId )) {
-HXLINE(2091)			message->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXDLIN(2393)		message->senderId = _hx_tmp1;
+HXLINE(2394)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,this->getFullJid());
+HXLINE(2395)		message->to = ::borogove::JID_obj::parse(this->chatId);
+HXLINE(2396)		message->recipients = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->to);
+HXLINE(2397)		if (::hx::IsNull( message->localId )) {
+HXLINE(2397)			message->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
             		}
-HXLINE(2092)		bool _hx_tmp2;
-HXDLIN(2092)		if (::hx::IsNotNull( this->sortId )) {
-HXLINE(2092)			_hx_tmp2 = ::hx::IsNull( message->sortId );
+HXLINE(2398)		bool _hx_tmp2;
+HXDLIN(2398)		if (::hx::IsNotNull( this->sortId )) {
+HXLINE(2398)			_hx_tmp2 = ::hx::IsNull( message->sortId );
             		}
             		else {
-HXLINE(2092)			_hx_tmp2 = false;
-            		}
-HXDLIN(2092)		if (_hx_tmp2) {
-HXLINE(2092)			this->sortId = (message->sortId = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(this->sortId,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a)));
-            		}
-HXLINE(2093)		return message;
+HXLINE(2398)			_hx_tmp2 = false;
+            		}
+HXDLIN(2398)		if (_hx_tmp2) {
+HXLINE(2399)			::String lower = this->sortId;
+HXLINE(2400)			this->sortId = (message->sortId = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(lower,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a)));
+HXLINE(2404)			::String _hx_tmp3 = ::borogove::Date_obj::format(::Date_obj::now());
+HXLINE(2401)			message->debug =  ::Dynamic(::hx::Anon_obj::Create(4)
+            				->setFixed(0,HX_("now",16,d9,53,00),_hx_tmp3)
+            				->setFixed(1,HX_("sortId",d9,7a,37,30), ::Dynamic(::hx::Anon_obj::Create(3)
+            					->setFixed(0,HX_("upper",62,19,3f,a8),null())
+            					->setFixed(1,HX_("method",e1,f6,5a,09),HX_("between",c8,91,b3,66))
+            					->setFixed(2,HX_("lower",01,fa,ff,78),lower)))
+            				->setFixed(2,HX_("source",db,b0,31,32),HX_("outgoing",6c,18,89,c7))
+            				->setFixed(3,HX_("path",a5,e5,51,4a),HX_("Channel#prepareOutgoingMessage",14,af,e9,48)));
+            		}
+HXLINE(2408)		return message;
             	}
 
 
@@ -2678,151 +3422,148 @@ HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,prepareOutgoingMessage,return )
 void Channel_obj::correctMessage( ::borogove::ChatMessage correct, ::borogove::ChatMessageBuilder message){
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis,::Array< ::Dynamic>,message1,::String,toSendId, ::borogove::OutboxItem,outboxItem, ::borogove::ChatMessage,correct) HXARGC(1)
             		void _hx_run( ::borogove::ChatMessage corrected){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2103_correctMessage)
-HXLINE(2104)			::Array< ::Dynamic> _hx_tmp;
-HXDLIN(2104)			 ::borogove::ChatMessage tmp = corrected->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(2104)			::String _hx_tmp1;
-HXDLIN(2104)			if (::hx::IsNotNull( tmp )) {
-HXLINE(2104)				_hx_tmp1 = tmp->localId;
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2418_correctMessage)
+HXLINE(2419)			::Array< ::Dynamic> _hx_tmp;
+HXDLIN(2419)			 ::borogove::ChatMessage tmp = corrected->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(2419)			::String _hx_tmp1;
+HXDLIN(2419)			if (::hx::IsNotNull( tmp )) {
+HXLINE(2419)				_hx_tmp1 = tmp->localId;
             			}
             			else {
-HXLINE(2104)				_hx_tmp1 = null();
+HXLINE(2419)				_hx_tmp1 = null();
             			}
-HXDLIN(2104)			if ((_hx_tmp1 == correct->localId)) {
-HXLINE(2104)				_hx_tmp = corrected->versions;
+HXDLIN(2419)			if ((_hx_tmp1 == correct->localId)) {
+HXLINE(2419)				_hx_tmp = corrected->versions;
             			}
             			else {
-HXLINE(2104)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build());
-            			}
-HXDLIN(2104)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = _hx_tmp;
-HXLINE(2105)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = toSendId;
-HXLINE(2106)			 ::borogove::Channel _gthis1 = _gthis;
-HXDLIN(2106)			 ::borogove::Stanza _hx_tmp2 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
-HXDLIN(2106)			_gthis1->sendMessageStanza(_hx_tmp2,outboxItem);
-HXLINE(2107)			_gthis->client->notifyMessageHandlers(corrected,1);
-HXLINE(2108)			bool _hx_tmp3;
-HXDLIN(2108)			if (::hx::IsNotNull( _gthis->lastMessage )) {
-HXLINE(2108)				_hx_tmp3 = corrected->canReplace(_gthis->lastMessage);
+HXLINE(2419)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build());
+            			}
+HXDLIN(2419)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = _hx_tmp;
+HXLINE(2420)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = toSendId;
+HXLINE(2421)			 ::borogove::Channel _gthis1 = _gthis;
+HXDLIN(2421)			 ::borogove::Stanza _hx_tmp2 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
+HXDLIN(2421)			_gthis1->sendMessageStanza(_hx_tmp2,outboxItem,null());
+HXLINE(2422)			_gthis->client->notifyMessageHandlers(corrected,1);
+HXLINE(2423)			bool _hx_tmp3;
+HXDLIN(2423)			if (::hx::IsNotNull( _gthis->lastMessage )) {
+HXLINE(2423)				_hx_tmp3 = corrected->canReplace(_gthis->lastMessage);
             			}
             			else {
-HXLINE(2108)				_hx_tmp3 = true;
+HXLINE(2423)				_hx_tmp3 = true;
             			}
-HXDLIN(2108)			if (_hx_tmp3) {
+HXDLIN(2423)			if (_hx_tmp3) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(1)
             				 ::borogove::EventResult _hx_run( ::Dynamic _){
-            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2110_correctMessage)
-HXLINE(2110)					return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2425_correctMessage)
+HXLINE(2425)					return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE(2109)				::thenshim::_Promise::Promise_Impl__obj::then(_gthis->setLastMessage(corrected), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+HXLINE(2424)				::thenshim::_Promise::Promise_Impl__obj::then(_gthis->setLastMessage(corrected), ::Dynamic(new _hx_Closure_0(_gthis)),null());
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2097_correctMessage)
-HXDLIN(2097)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
-HXDLIN(2097)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(2098)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
-HXLINE(2099)		::String toSendId = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId;
-HXLINE(2100)		 ::borogove::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build();
-HXDLIN(2100)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
-HXLINE(2101)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = correct->localId;
-HXLINE(2102)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(2103)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessageBuilder(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()), ::Dynamic(new _hx_Closure_1(_gthis,message1,toSendId,outboxItem,correct)),null());
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2412_correctMessage)
+HXDLIN(2412)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
+HXDLIN(2412)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2413)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
+HXLINE(2414)		::String toSendId = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId;
+HXLINE(2415)		 ::borogove::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build();
+HXDLIN(2415)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
+HXLINE(2416)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = correct->localId;
+HXLINE(2417)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(2418)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessageBuilder(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()), ::Dynamic(new _hx_Closure_1(_gthis,message1,toSendId,outboxItem,correct)),null());
             	}
 
 
-void Channel_obj::sendMessage( ::borogove::ChatMessageBuilder message){
+void Channel_obj::sendMessage( ::borogove::ChatMessageBuilder message,::hx::Null< int >  __o_e2eePreference){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,message1) HXARGC(2)
             		 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza _){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2125_sendMessage)
-HXLINE(2126)			if (::hx::IsNotNull( message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->get_senderId() )) {
-HXLINE(2126)				builder->senderId = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->get_senderId();
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2439_sendMessage)
+HXLINE(2440)			if (::hx::IsNotNull( message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->get_senderId() )) {
+HXLINE(2440)				builder->senderId = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->get_senderId();
             			}
-HXLINE(2127)			return builder;
+HXLINE(2441)			return builder;
             		}
             		HX_END_LOCAL_FUNC2(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2117_sendMessage)
-HXDLIN(2117)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
-HXDLIN(2117)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(2118)		if ((this->uiState == 3)) {
-HXLINE(2118)			this->uiState = 1;
-            		}
-HXLINE(2119)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE(2119)			this->typingTimer->stop();
-            		}
-HXLINE(2120)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
-HXLINE(2121)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
-HXLINE(2122)		 ::borogove::Stanza stanza = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
-HXLINE(2124)		{
-HXLINE(2124)			 ::Dynamic this1 = stanza->attr;
-HXDLIN(2124)			::Reflect_obj::setField(this1,HX_("from",6a,a5,c2,43),this->getFullJid()->asString());
-            		}
-HXLINE(2125)		 ::borogove::MessageStanza fromStanza = ::borogove::Message_obj::fromStanza(stanza,this->client->jid, ::Dynamic(new _hx_Closure_0(message1)),null(),null())->parsed;
-HXLINE(2129)		{
-HXLINE(2129)			 ::Dynamic this2 = stanza->attr;
-HXDLIN(2129)			::Reflect_obj::setField(this2,HX_("from",6a,a5,c2,43),this->client->jid->asString());
-            		}
-HXLINE(2130)		switch((int)(fromStanza->_hx_getIndex())){
+            		int e2eePreference = __o_e2eePreference.Default(0);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2431_sendMessage)
+HXDLIN(2431)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
+HXDLIN(2431)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2432)		if ((this->uiState == 3)) {
+HXLINE(2432)			this->uiState = 1;
+            		}
+HXLINE(2433)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE(2433)			this->typingTimer->stop();
+            		}
+HXLINE(2434)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
+HXLINE(2435)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
+HXLINE(2436)		 ::borogove::Stanza stanza = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
+HXLINE(2438)		 ::haxe::ds::StringMap stanza1 = stanza->attr;
+HXDLIN(2438)		stanza1->set(HX_("from",6a,a5,c2,43),this->getFullJid()->asString());
+HXLINE(2439)		 ::borogove::MessageStanza fromStanza = ::borogove::Message_obj::fromStanza(stanza,this->client->jid, ::Dynamic(new _hx_Closure_0(message1)),null(),null())->parsed;
+HXLINE(2443)		 ::haxe::ds::StringMap stanza2 = stanza->attr;
+HXDLIN(2443)		stanza2->set(HX_("from",6a,a5,c2,43),this->client->jid->asString());
+HXLINE(2444)		switch((int)(fromStanza->_hx_getIndex())){
             			case (int)1: {
             				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_2, ::borogove::Channel,_gthis, ::borogove::OutboxItem,outboxItem, ::borogove::Stanza,stanza) HXARGC(1)
             				::Dynamic _hx_run( ::borogove::ChatMessage stored){
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis, ::borogove::ChatMessage,stored) HXARGC(1)
             					 ::borogove::EventResult _hx_run( ::Dynamic _){
-            						HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2140_sendMessage)
-HXLINE(2141)						int _hx_tmp;
-HXDLIN(2141)						if ((stored->versions->length > 1)) {
-HXLINE(2141)							_hx_tmp = 1;
+            						HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2454_sendMessage)
+HXLINE(2455)						int _hx_tmp;
+HXDLIN(2455)						if ((stored->versions->length > 1)) {
+HXLINE(2455)							_hx_tmp = 1;
             						}
             						else {
-HXLINE(2141)							_hx_tmp = 0;
+HXLINE(2455)							_hx_tmp = 0;
             						}
-HXDLIN(2141)						_gthis->client->notifyMessageHandlers(stored,_hx_tmp);
-HXLINE(2142)						return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXDLIN(2455)						_gthis->client->notifyMessageHandlers(stored,_hx_tmp);
+HXLINE(2456)						return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2138_sendMessage)
-HXLINE(2139)					_gthis->sendMessageStanza(stanza,outboxItem);
-HXLINE(2140)					return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->setLastMessage(stored), ::Dynamic(new _hx_Closure_1(_gthis,stored)),null());
+            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2452_sendMessage)
+HXLINE(2453)					_gthis->sendMessageStanza(stanza,outboxItem,null());
+HXLINE(2454)					return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->setLastMessage(stored), ::Dynamic(new _hx_Closure_1(_gthis,stored)),null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE(2132)				if (::hx::IsNotNull( this->isActive )) {
-HXLINE(2133)					this->isActive = true;
-HXLINE(2134)					this->activeThread = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->threadId;
-HXLINE(2135)					stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
+HXLINE(2446)				if (::hx::IsNotNull( this->isActive )) {
+HXLINE(2447)					this->isActive = true;
+HXLINE(2448)					this->activeThread = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->threadId;
+HXLINE(2449)					stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))),null())->up();
             				}
-HXLINE(2137)				 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(2138)				::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessageBuilder(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()), ::Dynamic(new _hx_Closure_2(_gthis,outboxItem,stanza)),null());
+HXLINE(2451)				 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(2452)				::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessageBuilder(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()), ::Dynamic(new _hx_Closure_2(_gthis,outboxItem,stanza)),null());
             			}
             			break;
             			case (int)4: {
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::borogove::Channel,_gthis, ::borogove::Stanza,stanza) HXARGC(1)
             				void _hx_run( ::borogove::ChatMessage stored){
-            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2146_sendMessage)
-HXLINE(2147)					_gthis->client->sendStanza(stanza);
-HXLINE(2148)					if (::hx::IsNotNull( stored )) {
-HXLINE(2148)						_gthis->client->notifyMessageHandlers(stored,2);
+            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2460_sendMessage)
+HXLINE(2461)					_gthis->client->sendStanza(stanza);
+HXLINE(2462)					if (::hx::IsNotNull( stored )) {
+HXLINE(2462)						_gthis->client->notifyMessageHandlers(stored,2);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE(2146)				::Dynamic _hx_tmp = this->persistence;
-HXDLIN(2146)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp,this->client->accountId(),fromStanza->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_3(_gthis,stanza)),null());
+HXLINE(2460)				::Dynamic _hx_tmp = this->persistence;
+HXDLIN(2460)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp,this->client->accountId(),fromStanza->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_3(_gthis,stanza)),null());
             			}
             			break;
             			default:{
-HXLINE(2151)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(2465)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,fromStanza))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("sendMessage",5f,89,1d,24))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),2151)));
-HXLINE(2152)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),2465)));
+HXLINE(2466)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
             			}
             		}
             	}
@@ -2831,292 +3572,278 @@ HXLINE(2152)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0
 void Channel_obj::removeReaction( ::borogove::ChatMessage m, ::borogove::Reaction reaction){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis, ::borogove::ReactionUpdate,update4, ::borogove::OutboxItem,outboxItem) HXARGC(1)
             		void _hx_run( ::borogove::ChatMessage stored){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2181_removeReaction)
-HXLINE(2182)			 ::borogove::Channel _gthis1 = _gthis;
-HXDLIN(2182)			 ::borogove::Stanza _hx_tmp = update4->asStanza();
-HXDLIN(2182)			_gthis1->sendMessageStanza(_hx_tmp,outboxItem);
-HXLINE(2183)			if (::hx::IsNotNull( stored )) {
-HXLINE(2183)				_gthis->client->notifyMessageHandlers(stored,2);
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2495_removeReaction)
+HXLINE(2496)			 ::borogove::Channel _gthis1 = _gthis;
+HXDLIN(2496)			 ::borogove::Stanza _hx_tmp = update4->asStanza();
+HXDLIN(2496)			_gthis1->sendMessageStanza(_hx_tmp,outboxItem,null());
+HXLINE(2497)			if (::hx::IsNotNull( stored )) {
+HXLINE(2497)				_gthis->client->notifyMessageHandlers(stored,2);
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2157_removeReaction)
-HXDLIN(2157)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(2158)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::borogove::CustomEmojiReaction >())) {
-HXLINE(2159)			if (::hx::IsNull( reaction->envelopeId )) {
-HXLINE(2159)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
-            			}
-HXLINE(2160)			 ::borogove::ChatMessageBuilder correct = m->reply();
-HXLINE(2161)			correct->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXLINE(2162)			correct->setBody(null());
-HXLINE(2164)			 ::borogove::ChatMessageBuilder fakeEnvelope =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
-HXLINE(2165)			fakeEnvelope->localId = reaction->envelopeId;
-HXLINE(2166)			fakeEnvelope->senderId = reaction->senderId;
-HXLINE(2167)			this->correctMessage(fakeEnvelope->build(),correct);
-HXLINE(2168)			return;
-            		}
-HXLINE(2172)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(2173)		{
-HXLINE(2173)			::Dynamic this1 = m->reactions;
-HXDLIN(2173)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN(2173)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(2173)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(2173)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(this1,key)) );
-HXLINE(2174)				if ((key != reaction->key)) {
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2471_removeReaction)
+HXDLIN(2471)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2472)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::borogove::CustomEmojiReaction >())) {
+HXLINE(2473)			if (::hx::IsNull( reaction->envelopeId )) {
+HXLINE(2473)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
+            			}
+HXLINE(2474)			 ::borogove::ChatMessageBuilder correct = m->reply();
+HXLINE(2475)			correct->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE(2476)			correct->setBody(null());
+HXLINE(2478)			 ::borogove::ChatMessageBuilder fakeEnvelope =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
+HXLINE(2479)			fakeEnvelope->localId = reaction->envelopeId;
+HXLINE(2480)			fakeEnvelope->senderId = reaction->senderId;
+HXLINE(2481)			this->correctMessage(fakeEnvelope->build(),correct);
+HXLINE(2482)			return;
+            		}
+HXLINE(2486)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2487)		{
+HXLINE(2487)			::Dynamic this1 = m->reactions;
+HXDLIN(2487)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN(2487)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(2487)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(2487)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(this1,key)) );
+HXLINE(2488)				if ((key != reaction->key)) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(1)
             					bool _hx_run( ::borogove::Reaction r){
-            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2175_removeReaction)
-HXLINE(2175)						 ::borogove::Member tmp = _gthis->self;
-HXDLIN(2175)						::String react;
-HXDLIN(2175)						if (::hx::IsNotNull( tmp )) {
-HXLINE(2175)							react = tmp->id;
+            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2489_removeReaction)
+HXLINE(2489)						 ::borogove::Member tmp = _gthis->self;
+HXDLIN(2489)						::String react;
+HXDLIN(2489)						if (::hx::IsNotNull( tmp )) {
+HXLINE(2489)							react = tmp->id;
             						}
             						else {
-HXLINE(2175)							react = null();
+HXLINE(2489)							react = null();
             						}
-HXDLIN(2175)						return (r->senderId == react);
+HXDLIN(2489)						return (r->senderId == react);
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(2175)					 ::borogove::Reaction react = ( ( ::borogove::Reaction)(::Lambda_obj::find(_g_value, ::Dynamic(new _hx_Closure_0(_gthis)))) );
-HXLINE(2176)					bool _hx_tmp;
-HXDLIN(2176)					if (::hx::IsNotNull( react )) {
-HXLINE(2176)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::borogove::CustomEmojiReaction >()));
+HXLINE(2489)					 ::borogove::Reaction react = ( ( ::borogove::Reaction)(::Lambda_obj::find(_g_value, ::Dynamic(new _hx_Closure_0(_gthis)))) );
+HXLINE(2490)					bool _hx_tmp;
+HXDLIN(2490)					if (::hx::IsNotNull( react )) {
+HXLINE(2490)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::borogove::CustomEmojiReaction >()));
             					}
             					else {
-HXLINE(2176)						_hx_tmp = false;
+HXLINE(2490)						_hx_tmp = false;
             					}
-HXDLIN(2176)					if (_hx_tmp) {
-HXLINE(2176)						reactions->push(react);
+HXDLIN(2490)					if (_hx_tmp) {
+HXLINE(2490)						reactions->push(react);
             					}
             				}
             			}
             		}
-HXLINE(2179)		::String update = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXDLIN(2179)		::String m1 = m->serverId;
-HXDLIN(2179)		::String update1 = m->chatId();
-HXDLIN(2179)		::String update2 = m->chatId();
-HXDLIN(2179)		 ::borogove::Member tmp = this->self;
-HXDLIN(2179)		::String update3;
-HXDLIN(2179)		if (::hx::IsNotNull( tmp )) {
-HXLINE(2179)			update3 = tmp->id;
+HXLINE(2493)		::String update = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXDLIN(2493)		::String m1 = m->serverId;
+HXDLIN(2493)		::String update1 = m->chatId();
+HXDLIN(2493)		::String update2 = m->chatId();
+HXDLIN(2493)		 ::borogove::Member tmp = this->self;
+HXDLIN(2493)		::String update3;
+HXDLIN(2493)		if (::hx::IsNotNull( tmp )) {
+HXLINE(2493)			update3 = tmp->id;
             		}
             		else {
-HXLINE(2179)			update3 = null();
+HXLINE(2493)			update3 = null();
+            		}
+HXDLIN(2493)		 ::borogove::ReactionUpdate update4 =  ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,update,m1,update1,null(),update2,update3,::borogove::Date_obj::format(::Date_obj::now()),reactions,0);
+HXLINE(2494)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(2495)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(2495)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN(2495)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update4), ::Dynamic(new _hx_Closure_1(_gthis,update4,outboxItem)),null());
+            	}
+
+
+int Channel_obj::defaultE2ee(){
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            		bool _hx_run(int p){
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2503_defaultE2ee)
+HXLINE(2503)			return (p == 1);
             		}
-HXDLIN(2179)		 ::borogove::ReactionUpdate update4 =  ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,update,m1,update1,null(),update2,update3,::borogove::Date_obj::format(::Date_obj::now()),reactions,0);
-HXLINE(2180)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(2181)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(2181)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN(2181)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update4), ::Dynamic(new _hx_Closure_1(_gthis,update4,outboxItem)),null());
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2502_defaultE2ee)
+HXLINE(2503)		if (!(::Lambda_obj::exists(this->client->outgoingE2EEPreference, ::Dynamic(new _hx_Closure_0())))) {
+HXLINE(2505)			return this->client->outgoingE2EEPreference->__get(0);
+            		}
+HXLINE(2508)		if (!(this->isPrivate())) {
+HXLINE(2508)			return 1;
+            		}
+HXLINE(2510)		return this->client->outgoingE2EEPreference->__get(0);
             	}
 
 
-void Channel_obj::sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem){
+HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,defaultE2ee,return )
+
+void Channel_obj::sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem,::hx::Null< int >  __o_e2eePreference){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis, ::borogove::Stanza,stanza) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2193_sendMessageStanza)
-HXLINE(2193)			_gthis->client->sendStanza(stanza);
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2525_sendMessageStanza)
+HXLINE(2525)			_gthis->client->sendStanza(stanza);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2187_sendMessageStanza)
-HXDLIN(2187)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(2188)		if ((stanza->name != HX_("message",c7,35,11,9a))) {
-HXLINE(2188)			HX_STACK_DO_THROW(HX_("Can only send message stanza this way",cb,e1,b3,60));
+            		int e2eePreference = __o_e2eePreference.Default(0);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2513_sendMessageStanza)
+HXDLIN(2513)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2514)		if ((stanza->name != HX_("message",c7,35,11,9a))) {
+HXLINE(2514)			HX_STACK_DO_THROW(HX_("Can only send message stanza this way",cb,e1,b3,60));
             		}
-HXLINE(2190)		if (::hx::IsNull( outboxItem )) {
-HXLINE(2190)			outboxItem = this->outbox->newItem();
+HXLINE(2516)		if (::hx::IsNull( outboxItem )) {
+HXLINE(2516)			outboxItem = this->outbox->newItem();
             		}
-HXLINE(2191)		::Reflect_obj::setField(stanza->attr,HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5));
-HXLINE(2192)		::Reflect_obj::setField(stanza->attr,HX_("to",7b,65,00,00),this->chatId);
-HXLINE(2193)		outboxItem->handle( ::Dynamic(new _hx_Closure_0(_gthis,stanza)));
+HXLINE(2517)		stanza->attr->set(HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5));
+HXLINE(2518)		stanza->attr->set(HX_("to",7b,65,00,00),this->chatId);
+HXLINE(2522)		if ((e2eePreference == 0)) {
+HXLINE(2522)			e2eePreference = this->defaultE2ee();
+            		}
+HXLINE(2524)		if ((e2eePreference != 1)) {
+HXLINE(2524)			HX_STACK_DO_THROW(HX_("Selected E2EE preference unsupported",1e,73,4f,f3));
+            		}
+HXLINE(2525)		outboxItem->handle( ::Dynamic(new _hx_Closure_0(_gthis,stanza)));
             	}
 
 
 void Channel_obj::markReadUpTo( ::borogove::ChatMessage message){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis, ::borogove::ChatMessage,message) HXARGC(1)
             		void _hx_run( ::Dynamic _){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2198_markReadUpTo)
-HXLINE(2201)			bool _hx_tmp;
-HXDLIN(2201)			if (message->isIncoming()) {
-HXLINE(2201)				_hx_tmp = ::hx::IsNotNull( message->serverId );
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2547_markReadUpTo)
+HXLINE(2550)			bool _hx_tmp;
+HXDLIN(2550)			if (message->isIncoming()) {
+HXLINE(2550)				_hx_tmp = ::hx::IsNotNull( message->serverId );
             			}
             			else {
-HXLINE(2201)				_hx_tmp = false;
+HXLINE(2550)				_hx_tmp = false;
             			}
-HXDLIN(2201)			if (_hx_tmp) {
-HXLINE(2202)				::String _gthis1 = _gthis->chatId;
-HXDLIN(2202)				::String stanza = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXDLIN(2202)				 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN(2550)			if (_hx_tmp) {
+HXLINE(2551)				::String _gthis1 = _gthis->chatId;
+HXDLIN(2551)				::String stanza = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXDLIN(2551)				 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
             					->setFixed(0,HX_("id",db,5b,00,00),stanza)
             					->setFixed(1,HX_("to",7b,65,00,00),_gthis1)
-            					->setFixed(2,HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5))))->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(2)
+            					->setFixed(2,HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5))),null())->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("id",db,5b,00,00),message->serverId)
-            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:chat-markers:0",96,b8,66,e7))))->up();
-HXLINE(2204)				if (::hx::IsNotNull( message->threadId )) {
-HXLINE(2205)					stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null());
+            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:chat-markers:0",96,b8,66,e7))),null())->up();
+HXLINE(2553)				if (::hx::IsNotNull( message->threadId )) {
+HXLINE(2554)					stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null(),null());
             				}
-HXLINE(2207)				_gthis->client->sendStanza(stanza1);
+HXLINE(2556)				_gthis->client->sendStanza(stanza1);
             			}
-HXLINE(2210)			_gthis->publishMds();
-HXLINE(2211)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXLINE(2559)			_gthis->publishMds();
+HXLINE(2560)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic e){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2213_markReadUpTo)
-HXLINE(2213)			if (::hx::IsNotNull( e )) {
-HXLINE(2213)				return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2562_markReadUpTo)
+HXLINE(2562)			if (::hx::IsNotNull( e )) {
+HXLINE(2562)				return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
             			}
             			else {
-HXLINE(2213)				return null();
+HXLINE(2562)				return null();
             			}
-HXDLIN(2213)			return null();
+HXDLIN(2562)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2197_markReadUpTo)
-HXDLIN(2197)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(2198)		::thenshim::_Promise::Promise_Impl__obj::then(this->markReadUpToMessage(message), ::Dynamic(new _hx_Closure_0(_gthis,message)), ::Dynamic(new _hx_Closure_1()));
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2546_markReadUpTo)
+HXDLIN(2546)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2547)		::thenshim::_Promise::Promise_Impl__obj::then(this->markReadUpToMessage(message), ::Dynamic(new _hx_Closure_0(_gthis,message)), ::Dynamic(new _hx_Closure_1()));
             	}
 
 
 void Channel_obj::bookmark(){
-            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis) HXARGC(1)
-            		void _hx_run( ::borogove::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2239_bookmark)
-HXLINE(2239)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE(2240)				 ::borogove::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
-HXDLIN(2240)				 ::borogove::Stanza preconditionError;
-HXDLIN(2240)				if (::hx::IsNotNull( tmp )) {
-HXLINE(2240)					preconditionError = tmp->getChild(HX_("precondition-not-met",2d,db,78,db),HX_("http://jabber.org/protocol/pubsub#errors",97,74,3a,a8));
-            				}
-            				else {
-HXLINE(2240)					preconditionError = null();
-            				}
-HXLINE(2241)				if (::hx::IsNotNull( preconditionError )) {
-            					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(1)
-            					void _hx_run( ::borogove::Stanza response){
-            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2257_bookmark)
-HXLINE(2257)						if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("result",dd,68,84,08))) {
-HXLINE(2258)							_gthis->bookmark();
-            						}
-            					}
-            					HX_END_LOCAL_FUNC1((void))
-
-HXLINE(2243)					 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXDLIN(2243)					_gthis1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub#owner",c7,28,a3,08))))->tag(HX_("configure",e6,f9,5b,c0), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))))->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
-            						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
-            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))))->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
-            						->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
-            						->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))))->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/pubsub#publish-options",f4,9c,72,50),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#persist_items",75,44,6b,ad))))->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#max_items",05,69,9f,7c))))->textTag(HX_("value",71,7f,b8,31),HX_("max",a4,0a,53,00),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#send_last_published_item",b6,21,d2,0a))))->textTag(HX_("value",71,7f,b8,31),HX_("never",8c,3e,30,99),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#access_model",6e,cf,ac,1d))))->textTag(HX_("value",71,7f,b8,31),HX_("whitelist",87,6f,95,29),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#notify_delete",41,3a,35,54))))->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#notify_retract",2b,3b,48,44))))->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null())->up()->up()->up()->up(), ::Dynamic(new _hx_Closure_0(_gthis)));
-            				}
-            			}
-            		}
-            		HX_END_LOCAL_FUNC1((void))
-
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2217_bookmark)
-HXDLIN(2217)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(2218)		if ((this->uiState == 3)) {
-HXLINE(2218)			this->uiState = 1;
-            		}
-HXLINE(2219)		 ::borogove::GenericStream _hx_tmp = this->stream;
-HXLINE(2220)		 ::borogove::Stanza _hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("id",db,5b,00,00),this->chatId)));
-HXLINE(2224)		::String _hx_tmp2 = this->getDisplayName();
-HXDLIN(2224)		::String _hx_tmp3;
-HXDLIN(2224)		bool _hx_tmp4;
-HXDLIN(2224)		if ((this->uiState != 2)) {
-HXLINE(2224)			_hx_tmp4 = (this->uiState == 3);
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2566_bookmark)
+HXLINE(2567)		if ((this->uiState == 3)) {
+HXLINE(2567)			this->uiState = 1;
+            		}
+HXLINE(2569)		 ::borogove::Client _hx_tmp = this->client;
+HXLINE(2570)		 ::borogove::Stanza _hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))),null())->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))),null())->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("id",db,5b,00,00),this->chatId)),null());
+HXLINE(2574)		::String _hx_tmp2 = this->getDisplayName();
+HXDLIN(2574)		::String _hx_tmp3;
+HXDLIN(2574)		bool _hx_tmp4;
+HXDLIN(2574)		if ((this->uiState != 2)) {
+HXLINE(2574)			_hx_tmp4 = (this->uiState == 3);
             		}
             		else {
-HXLINE(2224)			_hx_tmp4 = true;
+HXLINE(2574)			_hx_tmp4 = true;
             		}
-HXDLIN(2224)		if (_hx_tmp4) {
-HXLINE(2224)			_hx_tmp3 = HX_("false",a3,35,4f,fb);
+HXDLIN(2574)		if (_hx_tmp4) {
+HXLINE(2574)			_hx_tmp3 = HX_("false",a3,35,4f,fb);
             		}
             		else {
-HXLINE(2224)			_hx_tmp3 = HX_("true",4e,a7,03,4d);
+HXLINE(2574)			_hx_tmp3 = HX_("true",4e,a7,03,4d);
             		}
-HXLINE(2220)		 ::borogove::Stanza _hx_tmp5 = _hx_tmp1->tag(HX_("conference",1c,2b,83,41), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE(2570)		 ::borogove::Stanza _hx_tmp5 = _hx_tmp1->tag(HX_("conference",1c,2b,83,41), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("autojoin",d9,f6,b1,3e),_hx_tmp3)
             			->setFixed(1,HX_("name",4b,72,ff,48),_hx_tmp2)
-            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))));
-HXLINE(2225)		::String _hx_tmp6 = this->client->displayName();
-HXLINE(2219)		_hx_tmp->sendIq(_hx_tmp5->textTag(HX_("nick",a3,7b,05,49),_hx_tmp6,null())->addChild(this->extensions)->up()->up()->tag(HX_("publish-options",60,0b,5c,74),null())->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))),null());
+HXLINE(2575)		::String _hx_tmp6 = this->client->displayName();
+HXLINE(2570)		 ::borogove::Stanza _hx_tmp7 = _hx_tmp5->textTag(HX_("nick",a3,7b,05,49),_hx_tmp6,null(),null())->addChild(this->extensions);
+HXLINE(2569)		_hx_tmp->publishWithOptions(_hx_tmp7, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))))->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
-            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))))->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/pubsub#publish-options",f4,9c,72,50),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#persist_items",75,44,6b,ad))))->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#max_items",05,69,9f,7c))))->textTag(HX_("value",71,7f,b8,31),HX_("max",a4,0a,53,00),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#send_last_published_item",b6,21,d2,0a))))->textTag(HX_("value",71,7f,b8,31),HX_("never",8c,3e,30,99),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#access_model",6e,cf,ac,1d))))->textTag(HX_("value",71,7f,b8,31),HX_("whitelist",87,6f,95,29),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#notify_delete",41,3a,35,54))))->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#notify_retract",2b,3b,48,44))))->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null())->up()->up()->up()->up()->up(), ::Dynamic(new _hx_Closure_1(_gthis)));
+            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/pubsub#publish-options",f4,9c,72,50),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#persist_items",75,44,6b,ad))),null())->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#max_items",05,69,9f,7c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("max",a4,0a,53,00),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#send_last_published_item",b6,21,d2,0a))),null())->textTag(HX_("value",71,7f,b8,31),HX_("never",8c,3e,30,99),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#access_model",6e,cf,ac,1d))),null())->textTag(HX_("value",71,7f,b8,31),HX_("whitelist",87,6f,95,29),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#notify_delete",41,3a,35,54))),null())->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#notify_retract",2b,3b,48,44))),null())->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null(),null())->up());
             	}
 
 
 void Channel_obj::sendChatState(::String state,::String threadId){
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2268_sendChatState)
-HXLINE(2270)		::String stanza = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXLINE(2272)		::String stanza1 = this->client->jid->asString();
-HXLINE(2269)		 ::borogove::Stanza stanza2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2588_sendChatState)
+HXLINE(2590)		::String stanza = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE(2592)		::String stanza1 = this->client->jid->asString();
+HXLINE(2589)		 ::borogove::Stanza stanza2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
             			->setFixed(0,HX_("id",db,5b,00,00),stanza)
             			->setFixed(1,HX_("to",7b,65,00,00),this->chatId)
             			->setFixed(2,HX_("from",6a,a5,c2,43),stanza1)
-            			->setFixed(3,HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5))))->tag(state, ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
-HXLINE(2277)		if (::hx::IsNotNull( threadId )) {
-HXLINE(2278)			stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null());
+            			->setFixed(3,HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5))),null())->tag(state, ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))),null())->up();
+HXLINE(2597)		if (::hx::IsNotNull( threadId )) {
+HXLINE(2598)			stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null(),null());
             		}
-HXLINE(2280)		this->stream->sendStanza(stanza2);
+HXLINE(2600)		this->stream->sendStanza(stanza2);
             	}
 
 
 void Channel_obj::close(){
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2284_close)
-HXLINE(2285)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE(2285)			this->typingTimer->stop();
-            		}
-HXLINE(2286)		if ((this->uiState == 3)) {
-HXLINE(2287)			int _g = 0;
-HXDLIN(2287)			::Array< ::Dynamic> _g1 = this->invites();
-HXDLIN(2287)			while((_g < _g1->length)){
-HXLINE(2287)				 ::borogove::Stanza invite = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(2287)				_g = (_g + 1);
-HXLINE(2288)				 ::borogove::Client _hx_tmp = this->client;
-HXLINE(2289)				::String _hx_tmp1 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXDLIN(2289)				 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_2604_close)
+HXLINE(2605)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE(2605)			this->typingTimer->stop();
+            		}
+HXLINE(2606)		if ((this->uiState == 3)) {
+HXLINE(2607)			int _g = 0;
+HXDLIN(2607)			::Array< ::Dynamic> _g1 = this->invites();
+HXDLIN(2607)			while((_g < _g1->length)){
+HXLINE(2607)				 ::borogove::Stanza invite = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(2607)				_g = (_g + 1);
+HXLINE(2608)				 ::borogove::Client _hx_tmp = this->client;
+HXLINE(2609)				::String _hx_tmp1 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXDLIN(2609)				 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp1)
-            					->setFixed(1,HX_("to",7b,65,00,00),this->chatId)))->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))));
-HXLINE(2288)				_hx_tmp->sendStanza(_hx_tmp2->tag(HX_("decline",b6,5a,cc,e8), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("to",7b,65,00,00),( (::String)(::Reflect_obj::field(invite->attr,HX_("from",6a,a5,c2,43))) ))))->up()->up());
-            			}
-            		}
-HXLINE(2296)		this->uiState = 2;
-HXLINE(2297)		::Dynamic _hx_tmp3 = this->persistence;
-HXDLIN(2297)		::borogove::Persistence_obj::storeChats(_hx_tmp3,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE(2298)		this->selfPing(false);
-HXLINE(2299)		this->bookmark();
-HXLINE(2300)		this->sendChatState(HX_("gone",5f,94,69,44),null());
-HXLINE(2301)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+            					->setFixed(1,HX_("to",7b,65,00,00),this->chatId)),null())->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))),null());
+HXLINE(2608)				_hx_tmp->sendStanza(_hx_tmp2->tag(HX_("decline",b6,5a,cc,e8), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("to",7b,65,00,00),invite->attr->get(HX_("from",6a,a5,c2,43)))),null())->up()->up());
+            			}
+            		}
+HXLINE(2616)		this->uiState = 2;
+HXLINE(2617)		::Dynamic _hx_tmp3 = this->persistence;
+HXDLIN(2617)		::borogove::Persistence_obj::storeChats(_hx_tmp3,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(2618)		this->selfPing(false);
+HXLINE(2619)		this->bookmark();
+HXLINE(2620)		this->sendChatState(HX_("gone",5f,94,69,44),null());
+HXLINE(2621)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             	}
 
 
@@ -3192,6 +3919,7 @@ void Channel_obj::__Visit(HX_VISIT_PARAMS)
 	case 7:
 		if (HX_FIELD_EQ(inName,"subject") ) { return ::hx::Val( subject_dyn() ); }
 		if (HX_FIELD_EQ(inName,"canSend") ) { return ::hx::Val( canSend_dyn() ); }
+		if (HX_FIELD_EQ(inName,"isOwner") ) { return ::hx::Val( isOwner_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getCaps") ) { return ::hx::Val( getCaps_dyn() ); }
 		if (HX_FIELD_EQ(inName,"preview") ) { return ::hx::Val( preview_dyn() ); }
 		if (HX_FIELD_EQ(inName,"syncing") ) { return ::hx::Val( syncing_dyn() ); }
@@ -3201,6 +3929,8 @@ void Channel_obj::__Visit(HX_VISIT_PARAMS)
 	case 8:
 		if (HX_FIELD_EQ(inName,"mavUntil") ) { return ::hx::Val( mavUntil ); }
 		if (HX_FIELD_EQ(inName,"selfPing") ) { return ::hx::Val( selfPing_dyn() ); }
+		if (HX_FIELD_EQ(inName,"commands") ) { return ::hx::Val( commands_dyn() ); }
+		if (HX_FIELD_EQ(inName,"setPhoto") ) { return ::hx::Val( setPhoto_dyn() ); }
 		if (HX_FIELD_EQ(inName,"bookmark") ) { return ::hx::Val( bookmark_dyn() ); }
 		break;
 	case 9:
@@ -3212,6 +3942,7 @@ void Channel_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 10:
 		if (HX_FIELD_EQ(inName,"joinFailed") ) { return ::hx::Val( joinFailed ); }
+		if (HX_FIELD_EQ(inName,"setSubject") ) { return ::hx::Val( setSubject_dyn() ); }
 		if (HX_FIELD_EQ(inName,"setTrusted") ) { return ::hx::Val( setTrusted_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getFullJid") ) { return ::hx::Val( getFullJid_dyn() ); }
 		if (HX_FIELD_EQ(inName,"removeRole") ) { return ::hx::Val( removeRole_dyn() ); }
@@ -3219,9 +3950,12 @@ void Channel_obj::__Visit(HX_VISIT_PARAMS)
 	case 11:
 		if (HX_FIELD_EQ(inName,"description") ) { return ::hx::Val( description_dyn() ); }
 		if (HX_FIELD_EQ(inName,"canModerate") ) { return ::hx::Val( canModerate_dyn() ); }
+		if (HX_FIELD_EQ(inName,"hasCommands") ) { return ::hx::Val( hasCommands_dyn() ); }
+		if (HX_FIELD_EQ(inName,"canSetPhoto") ) { return ::hx::Val( canSetPhoto_dyn() ); }
 		if (HX_FIELD_EQ(inName,"setPresence") ) { return ::hx::Val( setPresence_dyn() ); }
 		if (HX_FIELD_EQ(inName,"buildMember") ) { return ::hx::Val( buildMember_dyn() ); }
 		if (HX_FIELD_EQ(inName,"sendMessage") ) { return ::hx::Val( sendMessage_dyn() ); }
+		if (HX_FIELD_EQ(inName,"defaultE2ee") ) { return ::hx::Val( defaultE2ee_dyn() ); }
 		break;
 	case 12:
 		if (HX_FIELD_EQ(inName,"refreshDisco") ) { return ::hx::Val( refreshDisco_dyn() ); }
@@ -3231,6 +3965,10 @@ void Channel_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"markReadUpTo") ) { return ::hx::Val( markReadUpTo_dyn() ); }
 		break;
 	case 13:
+		if (HX_FIELD_EQ(inName,"canSetSubject") ) { return ::hx::Val( canSetSubject_dyn() ); }
+		if (HX_FIELD_EQ(inName,"requestToSend") ) { return ::hx::Val( requestToSend_dyn() ); }
+		if (HX_FIELD_EQ(inName,"inMessageSync") ) { return ::hx::Val( inMessageSync_dyn() ); }
+		if (HX_FIELD_EQ(inName,"voiceRequests") ) { return ::hx::Val( voiceRequests_dyn() ); }
 		if (HX_FIELD_EQ(inName,"canRemoveRole") ) { return ::hx::Val( canRemoveRole_dyn() ); }
 		if (HX_FIELD_EQ(inName,"sendChatState") ) { return ::hx::Val( sendChatState_dyn() ); }
 		break;
@@ -3257,6 +3995,9 @@ void Channel_obj::__Visit(HX_VISIT_PARAMS)
 	case 18:
 		if (HX_FIELD_EQ(inName,"setupNotifications") ) { return ::hx::Val( setupNotifications_dyn() ); }
 		break;
+	case 19:
+		if (HX_FIELD_EQ(inName,"voiceRequestRespond") ) { return ::hx::Val( voiceRequestRespond_dyn() ); }
+		break;
 	case 21:
 		if (HX_FIELD_EQ(inName,"lastMessageSenderName") ) { return ::hx::Val( lastMessageSenderName ); }
 		break;
@@ -3347,12 +4088,20 @@ static ::String Channel_obj_sMemberFields[] = {
 	HX_("selfPingSuccess",45,4d,98,ab),
 	HX_("getDisplayName",b7,64,90,b8),
 	HX_("subject",ac,01,88,29),
+	HX_("canSetSubject",5a,52,a3,b5),
+	HX_("setSubject",2a,26,67,7c),
 	HX_("description",fc,08,1d,5f),
 	HX_("info",6e,38,bb,45),
 	HX_("invite",c9,f1,db,9f),
 	HX_("canInvite",f9,45,22,f2),
 	HX_("canSend",78,75,a8,6a),
 	HX_("canModerate",f3,d3,bd,00),
+	HX_("requestToSend",12,31,b4,3d),
+	HX_("isOwner",e9,3b,fc,d4),
+	HX_("commands",c8,b0,55,be),
+	HX_("hasCommands",42,96,0c,91),
+	HX_("canSetPhoto",e0,f1,cf,ff),
+	HX_("setPhoto",b0,31,28,d0),
 	HX_("getCaps",d7,cb,3c,14),
 	HX_("setPresence",fd,1b,38,97),
 	HX_("doSync",86,5f,63,1c),
@@ -3364,6 +4113,7 @@ static ::String Channel_obj_sMemberFields[] = {
 	HX_("preview",08,e0,da,3b),
 	HX_("livePresence",47,f9,16,b4),
 	HX_("syncing",67,fd,26,a7),
+	HX_("inMessageSync",dd,37,ad,3f),
 	HX_("setLastMessage",8f,25,7b,f6),
 	HX_("canAudioCall",64,4a,90,e4),
 	HX_("canVideoCall",89,1c,93,ea),
@@ -3371,6 +4121,8 @@ static ::String Channel_obj_sMemberFields[] = {
 	HX_("getFullJid",80,42,92,1f),
 	HX_("members",d9,2c,70,1a),
 	HX_("getMemberDetails",12,2b,2f,b3),
+	HX_("voiceRequests",16,6a,6f,a3),
+	HX_("voiceRequestRespond",18,77,eb,5d),
 	HX_("buildMember",28,c8,26,55),
 	HX_("availableRoles",b4,19,02,0f),
 	HX_("canRemoveRole",0a,52,0a,02),
@@ -3384,6 +4136,7 @@ static ::String Channel_obj_sMemberFields[] = {
 	HX_("correctMessage",7d,36,c3,f4),
 	HX_("sendMessage",5f,89,1d,24),
 	HX_("removeReaction",0d,24,0b,c1),
+	HX_("defaultE2ee",2e,cf,a7,14),
 	HX_("sendMessageStanza",b4,2c,6d,3d),
 	HX_("markReadUpTo",59,68,2d,ee),
 	HX_("bookmark",b6,8c,f1,32),
@@ -3419,65 +4172,77 @@ void Channel_obj::__register()
 void Channel_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1430_boot)
-HXDLIN(1430)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(28)
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1528_boot)
+HXDLIN(1528)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(34)
             				->setFixed(0,HX_("addRole",37,2e,ec,87), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(1,HX_("invite",c9,f1,db,9f), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(1,HX_("hasCommands",42,96,0c,91), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(2,HX_("invite",c9,f1,db,9f), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(3,HX_("voiceRequests",16,6a,6f,a3), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(4,HX_("syncing",67,fd,26,a7), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(5,HX_("getMemberDetails",12,2b,2f,b3), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(6,HX_("livePresence",47,f9,16,b4), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(7,HX_("getDisplayName",b7,64,90,b8), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(2,HX_("syncing",67,fd,26,a7), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(8,HX_("commands",c8,b0,55,be), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(3,HX_("getMemberDetails",12,2b,2f,b3), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(9,HX_("removeReaction",0d,24,0b,c1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(4,HX_("livePresence",47,f9,16,b4), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(10,HX_("removeRole",da,25,ce,c8), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(5,HX_("getDisplayName",b7,64,90,b8), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(11,HX_("canAudioCall",64,4a,90,e4), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(6,HX_("removeReaction",0d,24,0b,c1), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(12,HX_("canVideoCall",89,1c,93,ea), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(7,HX_("removeRole",da,25,ce,c8), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(13,HX_("markReadUpTo",59,68,2d,ee), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(8,HX_("canAudioCall",64,4a,90,e4), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(14,HX_("canInvite",f9,45,22,f2), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(9,HX_("canVideoCall",89,1c,93,ea), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(15,HX_("correctMessage",7d,36,c3,f4), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(10,HX_("markReadUpTo",59,68,2d,ee), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(16,HX_("setLastMessage",8f,25,7b,f6), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(11,HX_("canInvite",f9,45,22,f2), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(17,HX_("canModerate",f3,d3,bd,00), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(12,HX_("correctMessage",7d,36,c3,f4), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(18,HX_("canRemoveRole",0a,52,0a,02), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(13,HX_("setLastMessage",8f,25,7b,f6), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(19,HX_("availableRoles",b4,19,02,0f), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(14,HX_("canModerate",f3,d3,bd,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(20,HX_("getMessagesBefore",a1,f1,44,11), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(15,HX_("canRemoveRole",0a,52,0a,02), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(21,HX_("members",d9,2c,70,1a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(16,HX_("availableRoles",b4,19,02,0f), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(22,HX_("isTrusted",2d,35,a5,1a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(17,HX_("getMessagesBefore",a1,f1,44,11), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(23,HX_("sendMessage",5f,89,1d,24), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(18,HX_("members",d9,2c,70,1a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(24,HX_("getMessagesAround",6f,95,16,2d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(19,HX_("isTrusted",2d,35,a5,1a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(25,HX_("bookmark",b6,8c,f1,32), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(20,HX_("sendMessage",5f,89,1d,24), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(26,HX_("preview",08,e0,da,3b), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(21,HX_("getMessagesAround",6f,95,16,2d), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(27,HX_("sendMessageStanza",b4,2c,6d,3d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(22,HX_("bookmark",b6,8c,f1,32), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(28,HX_("inMessageSync",dd,37,ad,3f), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(23,HX_("preview",08,e0,da,3b), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(29,HX_("close",b8,17,63,48), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(24,HX_("close",b8,17,63,48), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(30,HX_("getMessagesAfter",3a,43,91,57), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(25,HX_("getMessagesAfter",3a,43,91,57), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(31,HX_("setTrusted",75,dc,85,69), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(26,HX_("setTrusted",75,dc,85,69), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(32,HX_("canSend",78,75,a8,6a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(27,HX_("canSend",78,75,a8,6a), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null()))))));
+            				->setFixed(33,HX_("voiceRequests__fromC",23,15,f4,76), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
             	}
 }
 
diff --git a/Sources/c_borogove/src/borogove/ChannelPinger.cpp b/Sources/c_borogove/src/borogove/ChannelPinger.cpp
new file mode 100644
index 0000000..6805d05
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/ChannelPinger.cpp
@@ -0,0 +1,325 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_Lambda
+#include <Lambda.h>
+#endif
+#ifndef INCLUDED_borogove_Channel
+#include <borogove/Channel.h>
+#endif
+#ifndef INCLUDED_borogove_ChannelPinger
+#include <borogove/ChannelPinger.h>
+#endif
+#ifndef INCLUDED_borogove_Chat
+#include <borogove/Chat.h>
+#endif
+#ifndef INCLUDED_borogove_EventEmitter
+#include <borogove/EventEmitter.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_Timer
+#include <haxe/Timer.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_57a57c165192b103_12_new,"borogove.ChannelPinger","new",0x0fa795c7,"borogove.ChannelPinger.new","borogove/ChannelPinger.hx",12,0x5640518a)
+HX_DEFINE_STACK_FRAME(_hx_pos_57a57c165192b103_23_new,"borogove.ChannelPinger","new",0x0fa795c7,"borogove.ChannelPinger.new","borogove/ChannelPinger.hx",23,0x5640518a)
+HX_LOCAL_STACK_FRAME(_hx_pos_57a57c165192b103_26_startTimer,"borogove.ChannelPinger","startTimer",0xd2775d7c,"borogove.ChannelPinger.startTimer","borogove/ChannelPinger.hx",26,0x5640518a)
+HX_LOCAL_STACK_FRAME(_hx_pos_57a57c165192b103_32_stopTimer,"borogove.ChannelPinger","stopTimer",0xaf90450a,"borogove.ChannelPinger.stopTimer","borogove/ChannelPinger.hx",32,0x5640518a)
+HX_LOCAL_STACK_FRAME(_hx_pos_57a57c165192b103_37_schedule,"borogove.ChannelPinger","schedule",0xc6230f90,"borogove.ChannelPinger.schedule","borogove/ChannelPinger.hx",37,0x5640518a)
+HX_LOCAL_STACK_FRAME(_hx_pos_57a57c165192b103_47_remove,"borogove.ChannelPinger","remove",0x8632f13d,"borogove.ChannelPinger.remove","borogove/ChannelPinger.hx",47,0x5640518a)
+HX_LOCAL_STACK_FRAME(_hx_pos_57a57c165192b103_51_pingPastDue,"borogove.ChannelPinger","pingPastDue",0xf16bb617,"borogove.ChannelPinger.pingPastDue","borogove/ChannelPinger.hx",51,0x5640518a)
+HX_LOCAL_STACK_FRAME(_hx_pos_57a57c165192b103_54_pingDueInWindow,"borogove.ChannelPinger","pingDueInWindow",0xefda301e,"borogove.ChannelPinger.pingDueInWindow","borogove/ChannelPinger.hx",54,0x5640518a)
+HX_LOCAL_STACK_FRAME(_hx_pos_57a57c165192b103_61_pingDueBy,"borogove.ChannelPinger","pingDueBy",0xd0448380,"borogove.ChannelPinger.pingDueBy","borogove/ChannelPinger.hx",61,0x5640518a)
+HX_LOCAL_STACK_FRAME(_hx_pos_57a57c165192b103_68_getDueBy,"borogove.ChannelPinger","getDueBy",0x42302b6e,"borogove.ChannelPinger.getDueBy","borogove/ChannelPinger.hx",68,0x5640518a)
+namespace borogove{
+
+void ChannelPinger_obj::__construct( ::Dynamic now){
+            	HX_GC_STACKFRAME(&_hx_pos_57a57c165192b103_12_new)
+HXLINE(  20)		this->timer = null();
+HXLINE(  19)		this->scheduledChannels =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(  23)		 ::Dynamic _hx_tmp;
+HXDLIN(  23)		if (::hx::IsNotNull( now )) {
+HXLINE(  23)			_hx_tmp = now;
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(0)
+            			Float _hx_run(){
+            				HX_GC_STACKFRAME(&_hx_pos_57a57c165192b103_23_new)
+HXLINE(  23)				return ( ::__time_stamp() * ( (Float)(1000) ));
+            			}
+            			HX_END_LOCAL_FUNC0(return)
+
+HXLINE(  23)			_hx_tmp =  ::Dynamic(new _hx_Closure_0());
+            		}
+HXDLIN(  23)		this->now = _hx_tmp;
+            	}
+
+Dynamic ChannelPinger_obj::__CreateEmpty() { return new ChannelPinger_obj; }
+
+void *ChannelPinger_obj::_hx_vtable = 0;
+
+Dynamic ChannelPinger_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< ChannelPinger_obj > _hx_result = new ChannelPinger_obj();
+	_hx_result->__construct(inArgs[0]);
+	return _hx_result;
+}
+
+bool ChannelPinger_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x6ea167fd;
+}
+
+void ChannelPinger_obj::startTimer(){
+            	HX_GC_STACKFRAME(&_hx_pos_57a57c165192b103_26_startTimer)
+HXLINE(  27)		if (::hx::IsNotNull( this->timer )) {
+HXLINE(  27)			HX_STACK_DO_THROW(HX_("ChannelPinger timer already exists",dd,03,08,09));
+            		}
+HXLINE(  28)		this->timer =  ::haxe::Timer_obj::__alloc( HX_CTX ,60000);
+HXLINE(  29)		this->timer->run = this->pingPastDue_dyn();
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(ChannelPinger_obj,startTimer,(void))
+
+void ChannelPinger_obj::stopTimer(){
+            	HX_STACKFRAME(&_hx_pos_57a57c165192b103_32_stopTimer)
+HXLINE(  33)		{
+HXLINE(  33)			 ::haxe::Timer tmp = this->timer;
+HXDLIN(  33)			if (::hx::IsNotNull( tmp )) {
+HXLINE(  33)				tmp->stop();
+            			}
+            		}
+HXLINE(  34)		this->timer = null();
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(ChannelPinger_obj,stopTimer,(void))
+
+void ChannelPinger_obj::schedule( ::borogove::Channel channel, ::Dynamic deadline){
+            	HX_STACKFRAME(&_hx_pos_57a57c165192b103_37_schedule)
+HXLINE(  38)		if ((channel->uiState != 1)) {
+HXLINE(  38)			return;
+            		}
+HXLINE(  40)		{
+HXLINE(  40)			::Dynamic this1 = this->scheduledChannels;
+HXDLIN(  40)			::String key = channel->chatId;
+HXLINE(  42)			Float value;
+HXDLIN(  42)			if (::hx::IsNotNull( deadline )) {
+HXLINE(  42)				value = ( (Float)(deadline) );
+            			}
+            			else {
+HXLINE(  42)				value = (this->now() + 300000);
+            			}
+HXLINE(  40)			( ( ::haxe::ds::StringMap)(this1) )->set(key, ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(0,HX_("channel",c3,00,d2,cc),channel)
+            				->setFixed(1,HX_("deadline",98,88,0f,64),value)));
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(ChannelPinger_obj,schedule,(void))
+
+void ChannelPinger_obj::remove( ::borogove::Channel channel){
+            	HX_STACKFRAME(&_hx_pos_57a57c165192b103_47_remove)
+HXDLIN(  47)		this->scheduledChannels->remove(channel->chatId);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(ChannelPinger_obj,remove,(void))
+
+void ChannelPinger_obj::pingPastDue(){
+            	HX_STACKFRAME(&_hx_pos_57a57c165192b103_51_pingPastDue)
+HXDLIN(  51)		this->pingDueBy(( (Float)(this->now()) ));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(ChannelPinger_obj,pingPastDue,(void))
+
+void ChannelPinger_obj::pingDueInWindow(){
+            	HX_STACKFRAME(&_hx_pos_57a57c165192b103_54_pingDueInWindow)
+HXLINE(  55)		Float currentTime = ( (Float)(this->now()) );
+HXLINE(  56)		if ((this->getDueBy((currentTime + 30000))->length > 0)) {
+HXLINE(  57)			this->pingDueBy((currentTime + 60000));
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(ChannelPinger_obj,pingDueInWindow,(void))
+
+void ChannelPinger_obj::pingDueBy(Float cutoff){
+            	HX_STACKFRAME(&_hx_pos_57a57c165192b103_61_pingDueBy)
+HXLINE(  62)		::Array< ::Dynamic> due = this->getDueBy(cutoff);
+HXLINE(  64)		{
+HXLINE(  64)			int _g = 0;
+HXDLIN(  64)			while((_g < due->length)){
+HXLINE(  64)				 ::Dynamic scheduled = due->__get(_g);
+HXDLIN(  64)				_g = (_g + 1);
+HXDLIN(  64)				( ( ::borogove::Channel)(scheduled->__Field(HX_("channel",c3,00,d2,cc),::hx::paccDynamic)) )->selfPing(false);
+            			}
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(ChannelPinger_obj,pingDueBy,(void))
+
+::Array< ::Dynamic> ChannelPinger_obj::getDueBy(Float cutoff){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,Float,cutoff) HXARGC(1)
+            		bool _hx_run( ::Dynamic sc){
+            			HX_STACKFRAME(&_hx_pos_57a57c165192b103_68_getDueBy)
+HXDLIN(  68)			return ::hx::IsLessEq( sc->__Field(HX_("deadline",98,88,0f,64),::hx::paccDynamic),cutoff );
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_57a57c165192b103_68_getDueBy)
+HXDLIN(  68)		return ::Lambda_obj::filter(this->scheduledChannels, ::Dynamic(new _hx_Closure_0(cutoff)));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(ChannelPinger_obj,getDueBy,return )
+
+
+::hx::ObjectPtr< ChannelPinger_obj > ChannelPinger_obj::__new( ::Dynamic now) {
+	::hx::ObjectPtr< ChannelPinger_obj > __this = new ChannelPinger_obj();
+	__this->__construct(now);
+	return __this;
+}
+
+::hx::ObjectPtr< ChannelPinger_obj > ChannelPinger_obj::__alloc(::hx::Ctx *_hx_ctx, ::Dynamic now) {
+	ChannelPinger_obj *__this = (ChannelPinger_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(ChannelPinger_obj), true, "borogove.ChannelPinger"));
+	*(void **)__this = ChannelPinger_obj::_hx_vtable;
+	__this->__construct(now);
+	return __this;
+}
+
+ChannelPinger_obj::ChannelPinger_obj()
+{
+}
+
+void ChannelPinger_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(ChannelPinger);
+	HX_MARK_MEMBER_NAME(now,"now");
+	HX_MARK_MEMBER_NAME(scheduledChannels,"scheduledChannels");
+	HX_MARK_MEMBER_NAME(timer,"timer");
+	HX_MARK_END_CLASS();
+}
+
+void ChannelPinger_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(now,"now");
+	HX_VISIT_MEMBER_NAME(scheduledChannels,"scheduledChannels");
+	HX_VISIT_MEMBER_NAME(timer,"timer");
+}
+
+::hx::Val ChannelPinger_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"now") ) { return ::hx::Val( now ); }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"timer") ) { return ::hx::Val( timer ); }
+		break;
+	case 6:
+		if (HX_FIELD_EQ(inName,"remove") ) { return ::hx::Val( remove_dyn() ); }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"schedule") ) { return ::hx::Val( schedule_dyn() ); }
+		if (HX_FIELD_EQ(inName,"getDueBy") ) { return ::hx::Val( getDueBy_dyn() ); }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"stopTimer") ) { return ::hx::Val( stopTimer_dyn() ); }
+		if (HX_FIELD_EQ(inName,"pingDueBy") ) { return ::hx::Val( pingDueBy_dyn() ); }
+		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"startTimer") ) { return ::hx::Val( startTimer_dyn() ); }
+		break;
+	case 11:
+		if (HX_FIELD_EQ(inName,"pingPastDue") ) { return ::hx::Val( pingPastDue_dyn() ); }
+		break;
+	case 15:
+		if (HX_FIELD_EQ(inName,"pingDueInWindow") ) { return ::hx::Val( pingDueInWindow_dyn() ); }
+		break;
+	case 17:
+		if (HX_FIELD_EQ(inName,"scheduledChannels") ) { return ::hx::Val( scheduledChannels ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+::hx::Val ChannelPinger_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"now") ) { now=inValue.Cast<  ::Dynamic >(); return inValue; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"timer") ) { timer=inValue.Cast<  ::haxe::Timer >(); return inValue; }
+		break;
+	case 17:
+		if (HX_FIELD_EQ(inName,"scheduledChannels") ) { scheduledChannels=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+void ChannelPinger_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("scheduledChannels",9d,1d,94,61));
+	outFields->push(HX_("timer",c5,bf,35,10));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo ChannelPinger_obj_sMemberStorageInfo[] = {
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(ChannelPinger_obj,now),HX_("now",16,d9,53,00)},
+	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(ChannelPinger_obj,scheduledChannels),HX_("scheduledChannels",9d,1d,94,61)},
+	{::hx::fsObject /*  ::haxe::Timer */ ,(int)offsetof(ChannelPinger_obj,timer),HX_("timer",c5,bf,35,10)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo *ChannelPinger_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String ChannelPinger_obj_sMemberFields[] = {
+	HX_("now",16,d9,53,00),
+	HX_("scheduledChannels",9d,1d,94,61),
+	HX_("timer",c5,bf,35,10),
+	HX_("startTimer",03,98,4c,2c),
+	HX_("stopTimer",63,f8,77,20),
+	HX_("schedule",57,ca,7e,c5),
+	HX_("remove",44,9c,88,04),
+	HX_("pingPastDue",b0,b1,29,32),
+	HX_("pingDueInWindow",37,6c,00,7f),
+	HX_("pingDueBy",d9,36,2c,41),
+	HX_("getDueBy",35,e6,8b,41),
+	::String(null()) };
+
+::hx::Class ChannelPinger_obj::__mClass;
+
+void ChannelPinger_obj::__register()
+{
+	ChannelPinger_obj _hx_dummy;
+	ChannelPinger_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.ChannelPinger",55,a6,11,1f);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(ChannelPinger_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< ChannelPinger_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = ChannelPinger_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = ChannelPinger_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/Chat.cpp b/Sources/c_borogove/src/borogove/Chat.cpp
index bcd7443..e1f3036 100644
--- a/Sources/c_borogove/src/borogove/Chat.cpp
+++ b/Sources/c_borogove/src/borogove/Chat.cpp
@@ -34,6 +34,9 @@
 #ifndef INCLUDED_borogove_Chat
 #include <borogove/Chat.h>
 #endif
+#ifndef INCLUDED_borogove_ChatAttachment
+#include <borogove/ChatAttachment.h>
+#endif
 #ifndef INCLUDED_borogove_ChatMessage
 #include <borogove/ChatMessage.h>
 #endif
@@ -148,6 +151,9 @@
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
+#ifndef INCLUDED_haxe_Log
+#include <haxe/Log.h>
+#endif
 #ifndef INCLUDED_haxe_Timer
 #include <haxe/Timer.h>
 #endif
@@ -167,7 +173,7 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_9cc1265c56ba593e_111_new,"borogove.Chat","new",0x8ce82ad7,"borogove.Chat.new","borogove/Chat.hx",111,0x1763ae98)
+HX_DEFINE_STACK_FRAME(_hx_pos_9cc1265c56ba593e_112_new,"borogove.Chat","new",0x8ce82ad7,"borogove.Chat.new","borogove/Chat.hx",112,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_426_status__fromC,"borogove.Chat","status__fromC",0x47d268be,"borogove.Chat.status__fromC","HaxeCBridge.hx",426,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_426_chatId__fromC,"borogove.Chat","chatId__fromC",0x3b5eb13d,"borogove.Chat.chatId__fromC","HaxeCBridge.hx",426,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_426_uiState__fromC,"borogove.Chat","uiState__fromC",0xeee409e5,"borogove.Chat.uiState__fromC","HaxeCBridge.hx",426,0xa18550d8)
@@ -177,160 +183,164 @@ HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_426_isBookmarked__fromC,"borogove.
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_365_getMessagesBefore__fromC,"borogove.Chat","getMessagesBefore__fromC",0x7fc75d21,"borogove.Chat.getMessagesBefore__fromC","HaxeCBridge.hx",365,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_365_getMessagesAfter__fromC,"borogove.Chat","getMessagesAfter__fromC",0xee116876,"borogove.Chat.getMessagesAfter__fromC","HaxeCBridge.hx",365,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_365_getMessagesAround__fromC,"borogove.Chat","getMessagesAround__fromC",0x1557ef13,"borogove.Chat.getMessagesAround__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_218_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",218,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_242_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",242,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_217_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",217,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_216_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",216,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_354_sendMessage__fromC,"borogove.Chat","sendMessage__fromC",0x32fe6463,"borogove.Chat.sendMessage__fromC","HaxeCBridge.hx",354,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_227_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",227,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_251_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",251,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_226_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",226,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_219_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",219,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_268_sendMessage,"borogove.Chat","sendMessage",0x51d3b2d6,"borogove.Chat.sendMessage","borogove/Chat.hx",268,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_272_sendMessageStanza,"borogove.Chat","sendMessageStanza",0xdc22496b,"borogove.Chat.sendMessageStanza","borogove/Chat.hx",272,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_354_markReadUpTo__fromC,"borogove.Chat","markReadUpTo__fromC",0x3f04adb7,"borogove.Chat.markReadUpTo__fromC","HaxeCBridge.hx",354,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_354_bookmark__fromC,"borogove.Chat","bookmark__fromC",0x618f377a,"borogove.Chat.bookmark__fromC","HaxeCBridge.hx",354,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_365_members__fromC,"borogove.Chat","members__fromC",0xdc4e5ba9,"borogove.Chat.members__fromC","HaxeCBridge.hx",365,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_365_getMemberDetails__fromC,"borogove.Chat","getMemberDetails__fromC",0xb79eab9e,"borogove.Chat.getMemberDetails__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_297_addMembersUpdatedListener,"borogove.Chat","addMembersUpdatedListener",0x143e1bae,"borogove.Chat.addMembersUpdatedListener","borogove/Chat.hx",297,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_310_addMembersUpdatedListener,"borogove.Chat","addMembersUpdatedListener",0x143e1bae,"borogove.Chat.addMembersUpdatedListener","borogove/Chat.hx",310,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_282_addMembersUpdatedListener__fromC,"borogove.Chat","addMembersUpdatedListener__fromC",0xb2c1468b,"borogove.Chat.addMembersUpdatedListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_367_addMembersUpdatedListener__fromC,"borogove.Chat","addMembersUpdatedListener__fromC",0xb2c1468b,"borogove.Chat.addMembersUpdatedListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_307_availableRoles,"borogove.Chat","availableRoles",0x3f73f49d,"borogove.Chat.availableRoles","borogove/Chat.hx",307,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_320_availableRoles,"borogove.Chat","availableRoles",0x3f73f49d,"borogove.Chat.availableRoles","borogove/Chat.hx",320,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_363_availableRoles__fromC,"borogove.Chat","availableRoles__fromC",0x7e8ef97c,"borogove.Chat.availableRoles__fromC","HaxeCBridge.hx",363,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_314_canRemoveRole,"borogove.Chat","canRemoveRole",0xa8b70741,"borogove.Chat.canRemoveRole","borogove/Chat.hx",314,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_323_addRole,"borogove.Chat","addRole",0x8364902e,"borogove.Chat.addRole","borogove/Chat.hx",323,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_331_removeRole,"borogove.Chat","removeRole",0x094c1843,"borogove.Chat.removeRole","borogove/Chat.hx",331,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_327_canRemoveRole,"borogove.Chat","canRemoveRole",0xa8b70741,"borogove.Chat.canRemoveRole","borogove/Chat.hx",327,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_336_addRole,"borogove.Chat","addRole",0x8364902e,"borogove.Chat.addRole","borogove/Chat.hx",336,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_344_removeRole,"borogove.Chat","removeRole",0x094c1843,"borogove.Chat.removeRole","borogove/Chat.hx",344,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_354_correctMessage__fromC,"borogove.Chat","correctMessage__fromC",0xb004f7d3,"borogove.Chat.correctMessage__fromC","HaxeCBridge.hx",354,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_354_moderate,"borogove.Chat","moderate",0xdef369ec,"borogove.Chat.moderate","borogove/Chat.hx",354,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_347_moderate,"borogove.Chat","moderate",0xdef369ec,"borogove.Chat.moderate","borogove/Chat.hx",347,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_367_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",367,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_371_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",371,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_363_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",363,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_367_moderate,"borogove.Chat","moderate",0xdef369ec,"borogove.Chat.moderate","borogove/Chat.hx",367,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_360_moderate,"borogove.Chat","moderate",0xdef369ec,"borogove.Chat.moderate","borogove/Chat.hx",360,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_380_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",380,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_384_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",384,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_376_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",376,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_354_removeReaction__fromC,"borogove.Chat","removeReaction__fromC",0xeaa4dc43,"borogove.Chat.removeReaction__fromC","HaxeCBridge.hx",354,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_419_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",419,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_398_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",398,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_413_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",413,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_437_setActive,"borogove.Chat","setActive",0x89bbc4bf,"borogove.Chat.setActive","borogove/Chat.hx",437,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_432_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",432,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_411_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",411,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_426_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",426,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_450_setActive,"borogove.Chat","setActive",0x89bbc4bf,"borogove.Chat.setActive","borogove/Chat.hx",450,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_354_close__fromC,"borogove.Chat","close__fromC",0xc11a5e6a,"borogove.Chat.close__fromC","HaxeCBridge.hx",354,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_462_togglePinned,"borogove.Chat","togglePinned",0xfddcd475,"borogove.Chat.togglePinned","borogove/Chat.hx",462,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_472_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",472,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_491_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",491,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_519_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",519,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_526_unblock,"borogove.Chat","unblock",0xad05ce4b,"borogove.Chat.unblock","borogove/Chat.hx",526,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_536_unblock,"borogove.Chat","unblock",0xad05ce4b,"borogove.Chat.unblock","borogove/Chat.hx",536,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_543_setNotificationsInternal,"borogove.Chat","setNotificationsInternal",0x95c15fac,"borogove.Chat.setNotificationsInternal","borogove/Chat.hx",543,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_553_setNotifications,"borogove.Chat","setNotifications",0x82bcd54f,"borogove.Chat.setNotifications","borogove/Chat.hx",553,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_564_notificationsFiltered,"borogove.Chat","notificationsFiltered",0xcab45596,"borogove.Chat.notificationsFiltered","borogove/Chat.hx",564,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_571_notifyMention,"borogove.Chat","notifyMention",0x00cf7c58,"borogove.Chat.notifyMention","borogove/Chat.hx",571,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_578_notifyReply,"borogove.Chat","notifyReply",0x65560f18,"borogove.Chat.notifyReply","borogove/Chat.hx",578,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_582_updateFromBookmark,"borogove.Chat","updateFromBookmark",0x8ad9a752,"borogove.Chat.updateFromBookmark","borogove/Chat.hx",582,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_592_updateFromRoster,"borogove.Chat","updateFromRoster",0xec826927,"borogove.Chat.updateFromRoster","borogove/Chat.hx",592,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_606_getPhoto,"borogove.Chat","getPhoto",0x2fa82e65,"borogove.Chat.getPhoto","borogove/Chat.hx",606,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_615_getPlaceholder,"borogove.Chat","getPlaceholder",0x7303a166,"borogove.Chat.getPlaceholder","borogove/Chat.hx",615,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_624_readUpTo,"borogove.Chat","readUpTo",0x83806d55,"borogove.Chat.readUpTo","borogove/Chat.hx",624,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_621_readUpTo,"borogove.Chat","readUpTo",0x83806d55,"borogove.Chat.readUpTo","borogove/Chat.hx",621,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_475_togglePinned,"borogove.Chat","togglePinned",0xfddcd475,"borogove.Chat.togglePinned","borogove/Chat.hx",475,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_485_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",485,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_504_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",504,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_532_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",532,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_539_unblock,"borogove.Chat","unblock",0xad05ce4b,"borogove.Chat.unblock","borogove/Chat.hx",539,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_549_unblock,"borogove.Chat","unblock",0xad05ce4b,"borogove.Chat.unblock","borogove/Chat.hx",549,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_556_setNotificationsInternal,"borogove.Chat","setNotificationsInternal",0x95c15fac,"borogove.Chat.setNotificationsInternal","borogove/Chat.hx",556,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_566_setNotifications,"borogove.Chat","setNotifications",0x82bcd54f,"borogove.Chat.setNotifications","borogove/Chat.hx",566,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_577_notificationsFiltered,"borogove.Chat","notificationsFiltered",0xcab45596,"borogove.Chat.notificationsFiltered","borogove/Chat.hx",577,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_584_notifyMention,"borogove.Chat","notifyMention",0x00cf7c58,"borogove.Chat.notifyMention","borogove/Chat.hx",584,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_591_notifyReply,"borogove.Chat","notifyReply",0x65560f18,"borogove.Chat.notifyReply","borogove/Chat.hx",591,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_595_updateFromBookmark,"borogove.Chat","updateFromBookmark",0x8ad9a752,"borogove.Chat.updateFromBookmark","borogove/Chat.hx",595,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_605_updateFromRoster,"borogove.Chat","updateFromRoster",0xec826927,"borogove.Chat.updateFromRoster","borogove/Chat.hx",605,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_619_getPhoto,"borogove.Chat","getPhoto",0x2fa82e65,"borogove.Chat.getPhoto","borogove/Chat.hx",619,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_628_getPlaceholder,"borogove.Chat","getPlaceholder",0x7303a166,"borogove.Chat.getPlaceholder","borogove/Chat.hx",628,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_635_hasEverRead,"borogove.Chat","hasEverRead",0xf872dc85,"borogove.Chat.hasEverRead","borogove/Chat.hx",635,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_654_readUpTo,"borogove.Chat","readUpTo",0x83806d55,"borogove.Chat.readUpTo","borogove/Chat.hx",654,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_641_readUpTo,"borogove.Chat","readUpTo",0x83806d55,"borogove.Chat.readUpTo","borogove/Chat.hx",641,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_365_readUpTo__fromC,"borogove.Chat","readUpTo__fromC",0xd5c387c4,"borogove.Chat.readUpTo__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_637_unreadCount,"borogove.Chat","unreadCount",0xcea74197,"borogove.Chat.unreadCount","borogove/Chat.hx",637,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_642_setUnreadCount,"borogove.Chat","setUnreadCount",0x79212e87,"borogove.Chat.setUnreadCount","borogove/Chat.hx",642,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_648_preview,"borogove.Chat","preview",0x375341ff,"borogove.Chat.preview","borogove/Chat.hx",648,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_656_preview,"borogove.Chat","preview",0x375341ff,"borogove.Chat.preview","borogove/Chat.hx",656,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_661_setLastMessage,"borogove.Chat","setLastMessage",0x26ed0078,"borogove.Chat.setLastMessage","borogove/Chat.hx",661,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_671_setDisplayName,"borogove.Chat","setDisplayName",0x09222814,"borogove.Chat.setDisplayName","borogove/Chat.hx",671,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_679_getDisplayName,"borogove.Chat","getDisplayName",0xe9023fa0,"borogove.Chat.getDisplayName","borogove/Chat.hx",679,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_693_getTags,"borogove.Chat","getTags",0x1af1c686,"borogove.Chat.getTags","borogove/Chat.hx",693,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_677_unreadCount,"borogove.Chat","unreadCount",0xcea74197,"borogove.Chat.unreadCount","borogove/Chat.hx",677,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_682_setUnreadCount,"borogove.Chat","setUnreadCount",0x79212e87,"borogove.Chat.setUnreadCount","borogove/Chat.hx",682,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_688_preview,"borogove.Chat","preview",0x375341ff,"borogove.Chat.preview","borogove/Chat.hx",688,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_698_preview,"borogove.Chat","preview",0x375341ff,"borogove.Chat.preview","borogove/Chat.hx",698,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_703_setLastMessage,"borogove.Chat","setLastMessage",0x26ed0078,"borogove.Chat.setLastMessage","borogove/Chat.hx",703,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_713_setDisplayName,"borogove.Chat","setDisplayName",0x09222814,"borogove.Chat.setDisplayName","borogove/Chat.hx",713,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_721_getDisplayName,"borogove.Chat","getDisplayName",0xe9023fa0,"borogove.Chat.getDisplayName","borogove/Chat.hx",721,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_735_getTags,"borogove.Chat","getTags",0x1af1c686,"borogove.Chat.getTags","borogove/Chat.hx",735,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_363_getTags__fromC,"borogove.Chat","getTags__fromC",0xfac726b3,"borogove.Chat.getTags__fromC","HaxeCBridge.hx",363,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_698_setThreadSubject,"borogove.Chat","setThreadSubject",0x22a0ba29,"borogove.Chat.setThreadSubject","borogove/Chat.hx",698,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_709_setAvatarSha1,"borogove.Chat","setAvatarSha1",0x86f1e8b7,"borogove.Chat.setAvatarSha1","borogove/Chat.hx",709,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_717_setTrusted,"borogove.Chat","setTrusted",0xaa03cede,"borogove.Chat.setTrusted","borogove/Chat.hx",717,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_729_isTrusted,"borogove.Chat","isTrusted",0x2e7342e4,"borogove.Chat.isTrusted","borogove/Chat.hx",729,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_734_livePresence,"borogove.Chat","livePresence",0x85c517f0,"borogove.Chat.livePresence","borogove/Chat.hx",734,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_741_syncing,"borogove.Chat","syncing",0xa29f5f5e,"borogove.Chat.syncing","borogove/Chat.hx",741,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_747_canAudioCall,"borogove.Chat","canAudioCall",0xb63e690d,"borogove.Chat.canAudioCall","borogove/Chat.hx",747,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_759_canVideoCall,"borogove.Chat","canVideoCall",0xbc413b32,"borogove.Chat.canVideoCall","borogove/Chat.hx",759,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_775_startCall,"borogove.Chat","startCall",0x0e7b9fd7,"borogove.Chat.startCall","borogove/Chat.hx",775,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_789_addMedia,"borogove.Chat","addMedia",0x8cf6812c,"borogove.Chat.addMedia","borogove/Chat.hx",789,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_797_acceptCall,"borogove.Chat","acceptCall",0xf591ee2f,"borogove.Chat.acceptCall","borogove/Chat.hx",797,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_808_hangup,"borogove.Chat","hangup",0x0bc81c36,"borogove.Chat.hangup","borogove/Chat.hx",808,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_817_callStatus,"borogove.Chat","callStatus",0x71a9b0d9,"borogove.Chat.callStatus","borogove/Chat.hx",817,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_828_dtmf,"borogove.Chat","dtmf",0xb7ac8892,"borogove.Chat.dtmf","borogove/Chat.hx",828,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_841_videoTracks,"borogove.Chat","videoTracks",0xebdaebda,"borogove.Chat.videoTracks","borogove/Chat.hx",841,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_743_setTags,"borogove.Chat","setTags",0x0df35792,"borogove.Chat.setTags","borogove/Chat.hx",743,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_354_setTags__fromC,"borogove.Chat","setTags__fromC",0x1ae70f27,"borogove.Chat.setTags__fromC","HaxeCBridge.hx",354,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_752_setThreadSubject,"borogove.Chat","setThreadSubject",0x22a0ba29,"borogove.Chat.setThreadSubject","borogove/Chat.hx",752,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_763_setAvatarSha1,"borogove.Chat","setAvatarSha1",0x86f1e8b7,"borogove.Chat.setAvatarSha1","borogove/Chat.hx",763,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_771_setTrusted,"borogove.Chat","setTrusted",0xaa03cede,"borogove.Chat.setTrusted","borogove/Chat.hx",771,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_784_isTrusted,"borogove.Chat","isTrusted",0x2e7342e4,"borogove.Chat.isTrusted","borogove/Chat.hx",784,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_789_livePresence,"borogove.Chat","livePresence",0x85c517f0,"borogove.Chat.livePresence","borogove/Chat.hx",789,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_796_syncing,"borogove.Chat","syncing",0xa29f5f5e,"borogove.Chat.syncing","borogove/Chat.hx",796,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_800_inMessageSync,"borogove.Chat","inMessageSync",0xe659ed14,"borogove.Chat.inMessageSync","borogove/Chat.hx",800,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_806_canAudioCall,"borogove.Chat","canAudioCall",0xb63e690d,"borogove.Chat.canAudioCall","borogove/Chat.hx",806,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_826_canVideoCall,"borogove.Chat","canVideoCall",0xbc413b32,"borogove.Chat.canVideoCall","borogove/Chat.hx",826,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_842_startCall,"borogove.Chat","startCall",0x0e7b9fd7,"borogove.Chat.startCall","borogove/Chat.hx",842,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_856_addMedia,"borogove.Chat","addMedia",0x8cf6812c,"borogove.Chat.addMedia","borogove/Chat.hx",856,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_864_acceptCall,"borogove.Chat","acceptCall",0xf591ee2f,"borogove.Chat.acceptCall","borogove/Chat.hx",864,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_875_hangup,"borogove.Chat","hangup",0x0bc81c36,"borogove.Chat.hangup","borogove/Chat.hx",875,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_884_callStatus,"borogove.Chat","callStatus",0x71a9b0d9,"borogove.Chat.callStatus","borogove/Chat.hx",884,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_895_dtmf,"borogove.Chat","dtmf",0xb7ac8892,"borogove.Chat.dtmf","borogove/Chat.hx",895,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_908_videoTracks,"borogove.Chat","videoTracks",0xebdaebda,"borogove.Chat.videoTracks","borogove/Chat.hx",908,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_363_videoTracks__fromC,"borogove.Chat","videoTracks__fromC",0x180a13df,"borogove.Chat.videoTracks__fromC","HaxeCBridge.hx",363,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_848_encryptionMode,"borogove.Chat","encryptionMode",0xd881b46f,"borogove.Chat.encryptionMode","borogove/Chat.hx",848,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_860_canSend,"borogove.Chat","canSend",0x6620d76f,"borogove.Chat.canSend","borogove/Chat.hx",860,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_867_canModerate,"borogove.Chat","canModerate",0x2e73fd6a,"borogove.Chat.canModerate","borogove/Chat.hx",867,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_873_invite,"borogove.Chat","invite",0xf3a43bb2,"borogove.Chat.invite","borogove/Chat.hx",873,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_891_canInvite,"borogove.Chat","canInvite",0x05f053b0,"borogove.Chat.canInvite","borogove/Chat.hx",891,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_897_isApp,"borogove.Chat","isApp",0xdf814d0e,"borogove.Chat.isApp","borogove/Chat.hx",897,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_925_hasCommands,"borogove.Chat","hasCommands",0xbec2bfb9,"borogove.Chat.hasCommands","borogove/Chat.hx",925,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_943_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",943,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_931_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",931,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_934_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",934,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_932_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",932,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_916_canSend,"borogove.Chat","canSend",0x6620d76f,"borogove.Chat.canSend","borogove/Chat.hx",916,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_923_canModerate,"borogove.Chat","canModerate",0x2e73fd6a,"borogove.Chat.canModerate","borogove/Chat.hx",923,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_929_invite,"borogove.Chat","invite",0xf3a43bb2,"borogove.Chat.invite","borogove/Chat.hx",929,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_947_canInvite,"borogove.Chat","canInvite",0x05f053b0,"borogove.Chat.canInvite","borogove/Chat.hx",947,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_953_isApp,"borogove.Chat","isApp",0xdf814d0e,"borogove.Chat.isApp","borogove/Chat.hx",953,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_981_hasCommands,"borogove.Chat","hasCommands",0xbec2bfb9,"borogove.Chat.hasCommands","borogove/Chat.hx",981,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_999_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",999,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_987_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",987,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_990_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",990,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_988_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",988,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_365_commands__fromC,"borogove.Chat","commands__fromC",0xe84399a8,"borogove.Chat.commands__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_946_commandJids,"borogove.Chat","commandJids",0x11776a70,"borogove.Chat.commandJids","borogove/Chat.hx",946,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_977_invitedBy,"borogove.Chat","invitedBy",0x6066bae9,"borogove.Chat.invitedBy","borogove/Chat.hx",977,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_961_invitedBy,"borogove.Chat","invitedBy",0x6066bae9,"borogove.Chat.invitedBy","borogove/Chat.hx",961,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_972_invitedBy,"borogove.Chat","invitedBy",0x6066bae9,"borogove.Chat.invitedBy","borogove/Chat.hx",972,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_973_invitedBy,"borogove.Chat","invitedBy",0x6066bae9,"borogove.Chat.invitedBy","borogove/Chat.hx",973,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1002_commandJids,"borogove.Chat","commandJids",0x11776a70,"borogove.Chat.commandJids","borogove/Chat.hx",1002,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1033_invitedBy,"borogove.Chat","invitedBy",0x6066bae9,"borogove.Chat.invitedBy","borogove/Chat.hx",1033,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1017_invitedBy,"borogove.Chat","invitedBy",0x6066bae9,"borogove.Chat.invitedBy","borogove/Chat.hx",1017,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1028_invitedBy,"borogove.Chat","invitedBy",0x6066bae9,"borogove.Chat.invitedBy","borogove/Chat.hx",1028,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1029_invitedBy,"borogove.Chat","invitedBy",0x6066bae9,"borogove.Chat.invitedBy","borogove/Chat.hx",1029,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_365_invitedBy__fromC,"borogove.Chat","invitedBy__fromC",0x3f1ad4b0,"borogove.Chat.invitedBy__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_981_invites,"borogove.Chat","invites",0x3c100081,"borogove.Chat.invites","borogove/Chat.hx",981,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_990_recomputeUnread,"borogove.Chat","recomputeUnread",0x2d8f3a6a,"borogove.Chat.recomputeUnread","borogove/Chat.hx",990,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_984_recomputeUnread,"borogove.Chat","recomputeUnread",0x2d8f3a6a,"borogove.Chat.recomputeUnread","borogove/Chat.hx",984,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1000_markReadUpToId,"borogove.Chat","markReadUpToId",0x130d0b7d,"borogove.Chat.markReadUpToId","borogove/Chat.hx",1000,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1023_markReadUpToMessage,"borogove.Chat","markReadUpToMessage",0x357a9ae5,"borogove.Chat.markReadUpToMessage","borogove/Chat.hx",1023,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1012_markReadUpToMessage,"borogove.Chat","markReadUpToMessage",0x357a9ae5,"borogove.Chat.markReadUpToMessage","borogove/Chat.hx",1012,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1033_publishMds,"borogove.Chat","publishMds",0xb14bb956,"borogove.Chat.publishMds","borogove/Chat.hx",1033,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_111_boot,"borogove.Chat","boot",0xb65651db,"borogove.Chat.boot","borogove/Chat.hx",111,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1037_invites,"borogove.Chat","invites",0x3c100081,"borogove.Chat.invites","borogove/Chat.hx",1037,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1046_recomputeUnread,"borogove.Chat","recomputeUnread",0x2d8f3a6a,"borogove.Chat.recomputeUnread","borogove/Chat.hx",1046,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1040_recomputeUnread,"borogove.Chat","recomputeUnread",0x2d8f3a6a,"borogove.Chat.recomputeUnread","borogove/Chat.hx",1040,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1056_markReadUpToId,"borogove.Chat","markReadUpToId",0x130d0b7d,"borogove.Chat.markReadUpToId","borogove/Chat.hx",1056,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1082_markReadUpToMessage,"borogove.Chat","markReadUpToMessage",0x357a9ae5,"borogove.Chat.markReadUpToMessage","borogove/Chat.hx",1082,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1068_markReadUpToMessage,"borogove.Chat","markReadUpToMessage",0x357a9ae5,"borogove.Chat.markReadUpToMessage","borogove/Chat.hx",1068,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_1092_publishMds,"borogove.Chat","publishMds",0xb14bb956,"borogove.Chat.publishMds","borogove/Chat.hx",1092,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_112_boot,"borogove.Chat","boot",0xb65651db,"borogove.Chat.boot","borogove/Chat.hx",112,0x1763ae98)
 namespace borogove{
 
 void Chat_obj::__construct( ::borogove::Client client, ::borogove::GenericStream stream,::Dynamic persistence,::String chatId,::hx::Null< int >  __o_uiState,::hx::Null< bool >  __o_isBookmarked,::hx::Null< bool >  __o_isBlocked, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy,::Array< int > omemoContactDeviceIDs){
             		int uiState = __o_uiState.Default(1);
             		bool isBookmarked = __o_isBookmarked.Default(false);
             		bool isBlocked = __o_isBlocked.Default(false);
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_111_new)
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_112_new)
+HXLINE( 170)		this->omemoDeviceListRefreshed = false;
 HXLINE( 167)		this->omemoContactDeviceIDs = null();
-HXLINE( 164)		this->_encryptionMode = 0;
-HXLINE( 163)		this->outbox =  ::borogove::Outbox_obj::__alloc( HX_CTX );
-HXLINE( 162)		this->notificationSettings = null();
-HXLINE( 161)		this->activeThread = null();
-HXLINE( 160)		this->isActive = null();
-HXLINE( 159)		this->typingTimer = null();
-HXLINE( 158)		this->typingThread = null();
-HXLINE( 157)		this->isTyping = false;
-HXLINE( 156)		this->threads =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 150)		this->_unreadCount = 0;
-HXLINE( 147)		this->isBookmarked = false;
-HXLINE( 139)		this->isBlocked = false;
-HXLINE( 135)		this->uiState = 1;
-HXLINE( 127)		this->jingleSessions =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 120)		this->status =  ::borogove::Status_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),HX_("",00,00,00,00));
-HXLINE( 118)		this->trusted = false;
-HXLINE( 116)		this->avatarSha1 = null();
-HXLINE( 171)		super::__construct();
-HXLINE( 172)		bool _hx_tmp;
-HXDLIN( 172)		if (::hx::IsNotNull( chatId )) {
-HXLINE( 172)			_hx_tmp = (chatId == HX_("",00,00,00,00));
+HXLINE( 164)		this->outbox =  ::borogove::Outbox_obj::__alloc( HX_CTX );
+HXLINE( 163)		this->notificationSettings = null();
+HXLINE( 162)		this->activeThread = null();
+HXLINE( 161)		this->isActive = null();
+HXLINE( 160)		this->typingTimer = null();
+HXLINE( 159)		this->typingThread = null();
+HXLINE( 158)		this->isTyping = false;
+HXLINE( 157)		this->threads =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 151)		this->_unreadCount = 0;
+HXLINE( 148)		this->isBookmarked = false;
+HXLINE( 140)		this->isBlocked = false;
+HXLINE( 136)		this->uiState = 1;
+HXLINE( 128)		this->jingleSessions =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 121)		this->status =  ::borogove::Status_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),HX_("",00,00,00,00));
+HXLINE( 119)		this->trusted = false;
+HXLINE( 117)		this->avatarSha1 = null();
+HXLINE( 174)		super::__construct();
+HXLINE( 175)		bool _hx_tmp;
+HXDLIN( 175)		if (::hx::IsNotNull( chatId )) {
+HXLINE( 175)			_hx_tmp = (chatId == HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 172)			_hx_tmp = true;
-            		}
-HXDLIN( 172)		if (_hx_tmp) {
-HXLINE( 173)			HX_STACK_DO_THROW(HX_("chatId may not be empty",65,1d,3c,b1));
-            		}
-HXLINE( 175)		this->client = client;
-HXLINE( 176)		this->stream = stream;
-HXLINE( 177)		this->persistence = persistence;
-HXLINE( 178)		this->chatId = chatId;
-HXLINE( 179)		this->uiState = uiState;
-HXLINE( 180)		this->isBookmarked = isBookmarked;
-HXLINE( 181)		this->isBlocked = isBlocked;
-HXLINE( 182)		 ::borogove::Stanza _hx_tmp1;
-HXDLIN( 182)		if (::hx::IsNotNull( extensions )) {
-HXLINE( 182)			_hx_tmp1 = extensions;
+HXLINE( 175)			_hx_tmp = true;
+            		}
+HXDLIN( 175)		if (_hx_tmp) {
+HXLINE( 176)			HX_STACK_DO_THROW(HX_("chatId may not be empty",65,1d,3c,b1));
+            		}
+HXLINE( 178)		this->client = client;
+HXLINE( 179)		this->stream = stream;
+HXLINE( 180)		this->persistence = persistence;
+HXLINE( 181)		this->chatId = chatId;
+HXLINE( 182)		this->uiState = uiState;
+HXLINE( 183)		this->isBookmarked = isBookmarked;
+HXLINE( 184)		this->isBlocked = isBlocked;
+HXLINE( 185)		 ::borogove::Stanza _hx_tmp1;
+HXDLIN( 185)		if (::hx::IsNotNull( extensions )) {
+HXLINE( 185)			_hx_tmp1 = extensions;
             		}
             		else {
-HXLINE( 182)			_hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("extensions",14,7c,70,89), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))));
+HXLINE( 185)			_hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("extensions",14,7c,70,89), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))),null());
             		}
-HXDLIN( 182)		this->extensions = _hx_tmp1;
-HXLINE( 183)		this->readUpToId = readUpToId;
-HXLINE( 184)		this->readUpToBy = readUpToBy;
-HXLINE( 185)		this->displayName = chatId;
-HXLINE( 186)		this->omemoContactDeviceIDs = omemoContactDeviceIDs;
+HXDLIN( 185)		this->extensions = _hx_tmp1;
+HXLINE( 186)		this->readUpToId = readUpToId;
+HXLINE( 187)		this->readUpToBy = readUpToBy;
+HXLINE( 188)		this->displayName = chatId;
+HXLINE( 189)		this->omemoContactDeviceIDs = omemoContactDeviceIDs;
             	}
 
 bool Chat_obj::_hx_isInstanceOf(int inClassId) {
@@ -480,34 +490,34 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessagesAr
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::Chat,_gthis, ::borogove::MessageSync,sync, ::Dynamic,resolve) HXARGC(1)
             			void _hx_run( ::Dynamic messageList){
-            				HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_218_fetchFromSync)
-HXLINE( 219)				::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 220)				{
-HXLINE( 220)					int _g = 0;
-HXDLIN( 220)					::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
-HXDLIN( 220)					while((_g < _g1->length)){
-HXLINE( 220)						 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
-HXDLIN( 220)						_g = (_g + 1);
-HXLINE( 221)						{
-HXLINE( 221)							 ::borogove::MessageStanza _g2 = m->parsed;
-HXDLIN( 221)							switch((int)(_g2->_hx_getIndex())){
+            				HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_227_fetchFromSync)
+HXLINE( 228)				::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 229)				{
+HXLINE( 229)					int _g = 0;
+HXDLIN( 229)					::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
+HXDLIN( 229)					while((_g < _g1->length)){
+HXLINE( 229)						 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
+HXDLIN( 229)						_g = (_g + 1);
+HXLINE( 230)						{
+HXLINE( 230)							 ::borogove::MessageStanza _g2 = m->parsed;
+HXDLIN( 230)							switch((int)(_g2->_hx_getIndex())){
             								case (int)0: {
-HXLINE( 229)									::Dynamic _gthis1 = _gthis->persistence;
-HXLINE( 230)									::String _hx_tmp = _gthis->client->accountId();
-HXLINE( 229)									::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText());
+HXLINE( 238)									::Dynamic _gthis1 = _gthis->persistence;
+HXLINE( 239)									::String _hx_tmp = _gthis->client->accountId();
+HXLINE( 238)									::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText());
             								}
             								break;
             								case (int)1: {
-HXLINE( 223)									chatMessages->push(_g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >());
+HXLINE( 232)									chatMessages->push(_g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >());
             								}
             								break;
             								case (int)3: {
-HXLINE( 227)									_gthis->client->moderateMessage(_g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >());
+HXLINE( 236)									_gthis->client->moderateMessage(_g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >());
             								}
             								break;
             								case (int)4: {
-HXLINE( 225)									::Dynamic _gthis2 = _gthis->persistence;
-HXDLIN( 225)									::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->client->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >());
+HXLINE( 234)									::Dynamic _gthis2 = _gthis->persistence;
+HXDLIN( 234)									::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->client->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >());
             								}
             								break;
             								default:{
@@ -516,75 +526,82 @@ HXDLIN( 225)									::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->
             						}
             					}
             				}
-HXLINE( 239)				bool _hx_tmp1;
-HXDLIN( 239)				if ((chatMessages->length < 1)) {
-HXLINE( 239)					_hx_tmp1 = sync->hasMore();
+HXLINE( 248)				bool _hx_tmp1;
+HXDLIN( 248)				if ((chatMessages->length < 1)) {
+HXLINE( 248)					_hx_tmp1 = sync->hasMore();
             				}
             				else {
-HXLINE( 239)					_hx_tmp1 = false;
+HXLINE( 248)					_hx_tmp1 = false;
             				}
-HXDLIN( 239)				if (_hx_tmp1) {
-HXLINE( 240)					sync->fetchNext();
+HXDLIN( 248)				if (_hx_tmp1) {
+HXLINE( 249)					sync->fetchNext();
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Chat,_gthis, ::Dynamic,resolve) HXARGC(1)
             					void _hx_run(::Array< ::Dynamic> chatMessages){
-            						HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_242_fetchFromSync)
-HXLINE( 243)						 ::Dynamic resolve1 = resolve;
-HXDLIN( 243)						::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 243)						{
-HXLINE( 243)							int _g1 = 0;
-HXDLIN( 243)							while((_g1 < chatMessages->length)){
-HXLINE( 243)								 ::borogove::ChatMessage v = chatMessages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 243)								_g1 = (_g1 + 1);
-HXDLIN( 243)								bool _hx_tmp;
-HXDLIN( 243)								if (::hx::IsNotNull( v )) {
-HXLINE( 243)									::String _hx_tmp1 = v->chatId();
-HXDLIN( 243)									_hx_tmp = (_hx_tmp1 == _gthis->chatId);
+            						HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_251_fetchFromSync)
+HXLINE( 252)						 ::Dynamic resolve1 = resolve;
+HXDLIN( 252)						::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 252)						{
+HXLINE( 252)							int _g1 = 0;
+HXDLIN( 252)							while((_g1 < chatMessages->length)){
+HXLINE( 252)								 ::borogove::ChatMessage v = chatMessages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 252)								_g1 = (_g1 + 1);
+HXDLIN( 252)								bool _hx_tmp;
+HXDLIN( 252)								if (::hx::IsNotNull( v )) {
+HXLINE( 252)									::String _hx_tmp1 = v->chatId();
+HXDLIN( 252)									_hx_tmp = (_hx_tmp1 == _gthis->chatId);
             								}
             								else {
-HXLINE( 243)									_hx_tmp = false;
+HXLINE( 252)									_hx_tmp = false;
             								}
-HXDLIN( 243)								if (_hx_tmp) {
-HXLINE( 243)									_g->push(v);
+HXDLIN( 252)								if (_hx_tmp) {
+HXLINE( 252)									_g->push(v);
             								}
             							}
             						}
-HXDLIN( 243)						resolve1(_g);
+HXDLIN( 252)						resolve1(_g);
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 242)					::thenshim::_Promise::Promise_Impl__obj::then(_gthis->client->storeMessages(chatMessages), ::Dynamic(new _hx_Closure_0(_gthis,resolve)),null());
+HXLINE( 251)					::thenshim::_Promise::Promise_Impl__obj::then(_gthis->client->storeMessages(chatMessages), ::Dynamic(new _hx_Closure_0(_gthis,resolve)),null());
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_217_fetchFromSync)
-HXLINE( 218)			sync->onMessages( ::Dynamic(new _hx_Closure_1(_gthis,sync,resolve)));
-HXLINE( 247)			sync->onError(reject);
-HXLINE( 248)			sync->fetchNext();
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_226_fetchFromSync)
+HXLINE( 227)			sync->onMessages( ::Dynamic(new _hx_Closure_1(_gthis,sync,resolve)));
+HXLINE( 256)			sync->onError(reject);
+HXLINE( 257)			sync->fetchNext();
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_216_fetchFromSync)
-HXDLIN( 216)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 217)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,sync)));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_219_fetchFromSync)
+HXDLIN( 219)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 222)		if (this->inMessageSync()) {
+HXLINE( 223)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+            		}
+HXLINE( 226)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,sync)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,fetchFromSync,return )
 
-HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,sendMessage,(void))
-
-void Chat_obj::sendMessage__fromC( ::borogove::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_354_sendMessage__fromC)
-HXDLIN( 354)		this->sendMessage(message);
+void Chat_obj::sendMessage( ::borogove::ChatMessageBuilder message,::hx::Null< int >  __o_e2eePreference){
+            		int e2eePreference = __o_e2eePreference.Default(0);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_268_sendMessage)
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,sendMessage__fromC,(void))
+HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,sendMessage,(void))
+
+void Chat_obj::sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem,::hx::Null< int >  __o_e2eePreference){
+            		int e2eePreference = __o_e2eePreference.Default(0);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_272_sendMessageStanza)
+            	}
+
 
-HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,sendMessageStanza,(void))
+HX_DEFINE_DYNAMIC_FUNC3(Chat_obj,sendMessageStanza,(void))
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,markReadUpTo,(void))
 
@@ -717,14 +734,14 @@ HXLINE( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMemberDeta
 int Chat_obj::addMembersUpdatedListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run(::Array< ::Dynamic> data){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_297_addMembersUpdatedListener)
-HXLINE( 298)			handler(data);
-HXLINE( 299)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_310_addMembersUpdatedListener)
+HXLINE( 311)			handler(data);
+HXLINE( 312)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_297_addMembersUpdatedListener)
-HXDLIN( 297)		return this->on(HX_("members/update",bf,63,66,64), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_310_addMembersUpdatedListener)
+HXDLIN( 310)		return this->on(HX_("members/update",bf,63,66,64), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -759,8 +776,8 @@ HXDLIN( 367)		return this->addMembersUpdatedListener( ::Dynamic(new _hx_Closure_
 
 
 ::Array< ::Dynamic> Chat_obj::availableRoles( ::borogove::Member member){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_307_availableRoles)
-HXDLIN( 307)		return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_320_availableRoles)
+HXDLIN( 320)		return ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 
@@ -778,22 +795,22 @@ HXDLIN( 363)		return ( (size_t)(out->length) );
 
 
 bool Chat_obj::canRemoveRole( ::borogove::Member member, ::borogove::Role role){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_314_canRemoveRole)
-HXDLIN( 314)		return false;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_327_canRemoveRole)
+HXDLIN( 327)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,canRemoveRole,return )
 
 void Chat_obj::addRole( ::borogove::Member member, ::borogove::Role role){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_323_addRole)
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_336_addRole)
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,addRole,(void))
 
 void Chat_obj::removeRole( ::borogove::Member member, ::borogove::Role role){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_331_removeRole)
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_344_removeRole)
             	}
 
 
@@ -812,28 +829,28 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,correctMessage__fromC,(void))
 void Chat_obj::moderate( ::borogove::ChatMessage message,::String reason){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		void _hx_run( ::borogove::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_354_moderate)
+            			HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_367_moderate)
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_347_moderate)
-HXLINE( 348)		bool _hx_tmp;
-HXDLIN( 348)		if (::hx::IsNotNull( message->serverId )) {
-HXLINE( 348)			_hx_tmp = (message->serverIdBy != this->chatId);
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_360_moderate)
+HXLINE( 361)		bool _hx_tmp;
+HXDLIN( 361)		if (::hx::IsNotNull( message->serverId )) {
+HXLINE( 361)			_hx_tmp = (message->serverIdBy != this->chatId);
             		}
             		else {
-HXLINE( 348)			_hx_tmp = true;
+HXLINE( 361)			_hx_tmp = true;
             		}
-HXDLIN( 348)		if (_hx_tmp) {
-HXLINE( 348)			return;
+HXDLIN( 361)		if (_hx_tmp) {
+HXLINE( 361)			return;
             		}
-HXLINE( 350)		 ::borogove::Stanza iq =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 363)		 ::borogove::Stanza iq =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("to",7b,65,00,00),this->chatId)
-            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("moderate",c3,13,16,d1), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("moderate",c3,13,16,d1), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),message->serverId)
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:message-moderate:1",5c,30,1a,b9))))->textTag(HX_("retract",01,e2,b9,fc),HX_("",00,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:message-retract:1",16,5e,d8,d5))))->textTag(HX_("reason",c4,0f,9d,fc),reason,null());
-HXLINE( 354)		this->stream->sendIq(iq, ::Dynamic(new _hx_Closure_0()));
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:message-moderate:1",5c,30,1a,b9))),null())->textTag(HX_("retract",01,e2,b9,fc),HX_("",00,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:message-retract:1",16,5e,d8,d5))),null())->textTag(HX_("reason",c4,0f,9d,fc),reason,null(),null());
+HXLINE( 367)		this->stream->sendIq(iq, ::Dynamic(new _hx_Closure_0()));
             	}
 
 
@@ -842,37 +859,37 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,moderate,(void))
 void Chat_obj::addReaction( ::borogove::ChatMessage m, ::borogove::Reaction reaction){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::ChatMessageBuilder,toSend) HXARGC(1)
             		::String _hx_run(::String text){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_367_addReaction)
-HXLINE( 368)			 ::borogove::ChatMessageBuilder toSend1 = toSend;
-HXDLIN( 368)			toSend1->setBody(::borogove::Html_obj::text(text));
-HXLINE( 369)			return HX_("",00,00,00,00);
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_380_addReaction)
+HXLINE( 381)			 ::borogove::ChatMessageBuilder toSend1 = toSend;
+HXDLIN( 381)			toSend1->setBody(::borogove::Html_obj::text(text));
+HXLINE( 382)			return HX_("",00,00,00,00);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::ChatMessageBuilder,toSend) HXARGC(2)
             		::String _hx_run(::String text,::String uri){
-            			HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_371_addReaction)
-HXLINE( 372)			 ::borogove::Hash hash = ::borogove::Hash_obj::fromUri(uri);
-HXLINE( 373)			 ::borogove::ChatMessageBuilder toSend1 = toSend;
-HXLINE( 374)			::String _hx_tmp;
-HXDLIN( 374)			if (::hx::IsNull( hash )) {
-HXLINE( 374)				_hx_tmp = uri;
+            			HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_384_addReaction)
+HXLINE( 385)			 ::borogove::Hash hash = ::borogove::Hash_obj::fromUri(uri);
+HXLINE( 386)			 ::borogove::ChatMessageBuilder toSend1 = toSend;
+HXLINE( 387)			::String _hx_tmp;
+HXDLIN( 387)			if (::hx::IsNull( hash )) {
+HXLINE( 387)				_hx_tmp = uri;
             			}
             			else {
-HXLINE( 374)				_hx_tmp = hash->bobUri();
+HXLINE( 387)				_hx_tmp = hash->bobUri();
             			}
-HXLINE( 373)			toSend1->setBody( ::borogove::Html_obj::__alloc( HX_CTX ,::Array_obj< ::Dynamic>::__new(1)->init(0,::borogove::Node_obj::Element( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("img",03,0c,50,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 386)			toSend1->setBody( ::borogove::Html_obj::__alloc( HX_CTX ,::Array_obj< ::Dynamic>::__new(1)->init(0,::borogove::Node_obj::Element( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("img",03,0c,50,00), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("alt",29,f9,49,00),text)
-            				->setFixed(1,HX_("src",e4,a6,57,00),_hx_tmp))))),null()));
-HXLINE( 376)			return HX_("",00,00,00,00);
+            				->setFixed(1,HX_("src",e4,a6,57,00),_hx_tmp)),null()))),null()));
+HXLINE( 389)			return HX_("",00,00,00,00);
             		}
             		HX_END_LOCAL_FUNC2(return)
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_363_addReaction)
-HXLINE( 364)		 ::borogove::ChatMessageBuilder toSend = m->reply();
-HXLINE( 365)		toSend->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXLINE( 366)		reaction->render( ::Dynamic(new _hx_Closure_0(toSend)), ::Dynamic(new _hx_Closure_1(toSend)));
-HXLINE( 379)		this->sendMessage(toSend);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_376_addReaction)
+HXLINE( 377)		 ::borogove::ChatMessageBuilder toSend = m->reply();
+HXLINE( 378)		toSend->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE( 379)		reaction->render( ::Dynamic(new _hx_Closure_0(toSend)), ::Dynamic(new _hx_Closure_1(toSend)));
+HXLINE( 392)		this->sendMessage(toSend,null());
             	}
 
 
@@ -893,111 +910,111 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,sendChatState,(void))
 void Chat_obj::typing(::String threadId,::String content){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Chat,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_419_typing)
-HXLINE( 420)			_gthis->sendChatState(HX_("paused",ae,40,84,ef),_gthis->typingThread);
-HXLINE( 421)			_gthis->isTyping = false;
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_432_typing)
+HXLINE( 433)			_gthis->sendChatState(HX_("paused",ae,40,84,ef),_gthis->typingThread);
+HXLINE( 434)			_gthis->isTyping = false;
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_398_typing)
-HXDLIN( 398)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 399)		bool _hx_tmp;
-HXDLIN( 399)		if ((threadId != this->typingThread)) {
-HXLINE( 399)			_hx_tmp = this->isTyping;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_411_typing)
+HXDLIN( 411)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 412)		bool _hx_tmp;
+HXDLIN( 412)		if ((threadId != this->typingThread)) {
+HXLINE( 412)			_hx_tmp = this->isTyping;
             		}
             		else {
-HXLINE( 399)			_hx_tmp = false;
+HXLINE( 412)			_hx_tmp = false;
             		}
-HXDLIN( 399)		if (_hx_tmp) {
-HXLINE( 401)			this->sendChatState(HX_("paused",ae,40,84,ef),this->typingThread);
-HXLINE( 402)			this->isTyping = false;
+HXDLIN( 412)		if (_hx_tmp) {
+HXLINE( 414)			this->sendChatState(HX_("paused",ae,40,84,ef),this->typingThread);
+HXLINE( 415)			this->isTyping = false;
             		}
-HXLINE( 405)		this->typingThread = threadId;
-HXLINE( 406)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE( 406)			this->typingTimer->stop();
+HXLINE( 418)		this->typingThread = threadId;
+HXLINE( 419)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE( 419)			this->typingTimer->stop();
             		}
-HXLINE( 408)		if ((content == HX_("",00,00,00,00))) {
-HXLINE( 409)			this->isTyping = false;
-HXLINE( 410)			this->sendChatState(HX_("active",c6,41,46,16),this->typingThread);
-HXLINE( 411)			if (::hx::IsNull( this->isActive )) {
+HXLINE( 421)		if ((content == HX_("",00,00,00,00))) {
+HXLINE( 422)			this->isTyping = false;
+HXLINE( 423)			this->sendChatState(HX_("active",c6,41,46,16),this->typingThread);
+HXLINE( 424)			if (::hx::IsNull( this->isActive )) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Chat,_gthis) HXARGC(0)
             				void _hx_run(){
-            					HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_413_typing)
-HXLINE( 413)					_gthis->sendChatState(HX_("inactive",6b,17,30,6a),_gthis->typingThread);
+            					HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_426_typing)
+HXLINE( 426)					_gthis->sendChatState(HX_("inactive",6b,17,30,6a),_gthis->typingThread);
             				}
             				HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 412)				this->typingTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),30000);
+HXLINE( 425)				this->typingTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),30000);
             			}
-HXLINE( 416)			return;
+HXLINE( 429)			return;
             		}
-HXLINE( 419)		this->typingTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis)),10000);
-HXLINE( 424)		if (this->isTyping) {
-HXLINE( 424)			return;
+HXLINE( 432)		this->typingTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis)),10000);
+HXLINE( 437)		if (this->isTyping) {
+HXLINE( 437)			return;
             		}
-HXLINE( 425)		this->isTyping = true;
-HXLINE( 426)		this->sendChatState(HX_("composing",cf,0a,a5,12),this->typingThread);
+HXLINE( 438)		this->isTyping = true;
+HXLINE( 439)		this->sendChatState(HX_("composing",cf,0a,a5,12),this->typingThread);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,typing,(void))
 
 void Chat_obj::setActive(bool active,::String threadId){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_437_setActive)
-HXLINE( 438)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE( 438)			this->typingTimer->stop();
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_450_setActive)
+HXLINE( 451)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE( 451)			this->typingTimer->stop();
             		}
-HXLINE( 439)		this->isTyping = false;
-HXLINE( 441)		bool _hx_tmp;
-HXDLIN( 441)		bool _hx_tmp1;
-HXDLIN( 441)		if (( (bool)(this->isActive) )) {
-HXLINE( 441)			_hx_tmp1 = active;
+HXLINE( 452)		this->isTyping = false;
+HXLINE( 454)		bool _hx_tmp;
+HXDLIN( 454)		bool _hx_tmp1;
+HXDLIN( 454)		if (( (bool)(this->isActive) )) {
+HXLINE( 454)			_hx_tmp1 = active;
             		}
             		else {
-HXLINE( 441)			_hx_tmp1 = false;
+HXLINE( 454)			_hx_tmp1 = false;
             		}
-HXDLIN( 441)		if (_hx_tmp1) {
-HXLINE( 441)			_hx_tmp = (threadId != this->activeThread);
+HXDLIN( 454)		if (_hx_tmp1) {
+HXLINE( 454)			_hx_tmp = (threadId != this->activeThread);
             		}
             		else {
-HXLINE( 441)			_hx_tmp = false;
+HXLINE( 454)			_hx_tmp = false;
             		}
-HXDLIN( 441)		if (_hx_tmp) {
-HXLINE( 442)			this->sendChatState(HX_("inactive",6b,17,30,6a),this->activeThread);
-HXLINE( 443)			this->isActive = false;
+HXDLIN( 454)		if (_hx_tmp) {
+HXLINE( 455)			this->sendChatState(HX_("inactive",6b,17,30,6a),this->activeThread);
+HXLINE( 456)			this->isActive = false;
             		}
-HXLINE( 445)		if (::hx::IsNotNull( this->isActive )) {
-HXLINE( 446)			bool _hx_tmp2;
-HXDLIN( 446)			if (( (bool)(this->isActive) )) {
-HXLINE( 446)				_hx_tmp2 = active;
+HXLINE( 458)		if (::hx::IsNotNull( this->isActive )) {
+HXLINE( 459)			bool _hx_tmp2;
+HXDLIN( 459)			if (( (bool)(this->isActive) )) {
+HXLINE( 459)				_hx_tmp2 = active;
             			}
             			else {
-HXLINE( 446)				_hx_tmp2 = false;
+HXLINE( 459)				_hx_tmp2 = false;
             			}
-HXDLIN( 446)			if (_hx_tmp2) {
-HXLINE( 446)				return;
+HXDLIN( 459)			if (_hx_tmp2) {
+HXLINE( 459)				return;
             			}
-HXLINE( 447)			bool _hx_tmp3;
-HXDLIN( 447)			if (!(( (bool)(this->isActive) ))) {
-HXLINE( 447)				_hx_tmp3 = !(active);
+HXLINE( 460)			bool _hx_tmp3;
+HXDLIN( 460)			if (!(( (bool)(this->isActive) ))) {
+HXLINE( 460)				_hx_tmp3 = !(active);
             			}
             			else {
-HXLINE( 447)				_hx_tmp3 = false;
+HXLINE( 460)				_hx_tmp3 = false;
             			}
-HXDLIN( 447)			if (_hx_tmp3) {
-HXLINE( 447)				return;
+HXDLIN( 460)			if (_hx_tmp3) {
+HXLINE( 460)				return;
             			}
             		}
-HXLINE( 449)		this->isActive = active;
-HXLINE( 450)		this->activeThread = threadId;
-HXLINE( 451)		::String _hx_tmp4;
-HXDLIN( 451)		if (active) {
-HXLINE( 451)			_hx_tmp4 = HX_("active",c6,41,46,16);
+HXLINE( 462)		this->isActive = active;
+HXLINE( 463)		this->activeThread = threadId;
+HXLINE( 464)		::String _hx_tmp4;
+HXDLIN( 464)		if (active) {
+HXLINE( 464)			_hx_tmp4 = HX_("active",c6,41,46,16);
             		}
             		else {
-HXLINE( 451)			_hx_tmp4 = HX_("inactive",6b,17,30,6a);
+HXLINE( 464)			_hx_tmp4 = HX_("inactive",6b,17,30,6a);
             		}
-HXDLIN( 451)		this->sendChatState(_hx_tmp4,this->activeThread);
+HXDLIN( 464)		this->sendChatState(_hx_tmp4,this->activeThread);
             	}
 
 
@@ -1014,19 +1031,19 @@ HXDLIN( 354)		this->close();
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,close__fromC,(void))
 
 void Chat_obj::togglePinned(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_462_togglePinned)
-HXLINE( 463)		int _hx_tmp;
-HXDLIN( 463)		if ((this->uiState != 0)) {
-HXLINE( 463)			_hx_tmp = 0;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_475_togglePinned)
+HXLINE( 476)		int _hx_tmp;
+HXDLIN( 476)		if ((this->uiState != 0)) {
+HXLINE( 476)			_hx_tmp = 0;
             		}
             		else {
-HXLINE( 463)			_hx_tmp = 1;
+HXLINE( 476)			_hx_tmp = 1;
             		}
-HXDLIN( 463)		this->uiState = _hx_tmp;
-HXLINE( 464)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN( 464)		::borogove::Persistence_obj::storeChats(_hx_tmp1,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 465)		this->client->sortChats();
-HXLINE( 466)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXDLIN( 476)		this->uiState = _hx_tmp;
+HXLINE( 477)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN( 477)		::borogove::Persistence_obj::storeChats(_hx_tmp1,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 478)		this->client->sortChats();
+HXLINE( 479)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             	}
 
 
@@ -1035,129 +1052,129 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,togglePinned,(void))
 void Chat_obj::block(::hx::Null< bool >  __o_reportSpam, ::borogove::ChatMessage spamMessage,::hx::Null< bool >  __o_onServer){
             		bool reportSpam = __o_reportSpam.Default(false);
             		bool onServer = __o_onServer.Default(true);
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_472_block)
-HXLINE( 473)		bool _hx_tmp;
-HXDLIN( 473)		if (reportSpam) {
-HXLINE( 473)			_hx_tmp = !(onServer);
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_485_block)
+HXLINE( 486)		bool _hx_tmp;
+HXDLIN( 486)		if (reportSpam) {
+HXLINE( 486)			_hx_tmp = !(onServer);
             		}
             		else {
-HXLINE( 473)			_hx_tmp = false;
+HXLINE( 486)			_hx_tmp = false;
             		}
-HXDLIN( 473)		if (_hx_tmp) {
-HXLINE( 473)			HX_STACK_DO_THROW(HX_("Can't report SPAM if not sending to server",60,59,79,c5));
+HXDLIN( 486)		if (_hx_tmp) {
+HXLINE( 486)			HX_STACK_DO_THROW(HX_("Can't report SPAM if not sending to server",60,59,79,c5));
             		}
-HXLINE( 475)		bool _hx_tmp1;
-HXDLIN( 475)		bool _hx_tmp2;
-HXDLIN( 475)		if (onServer) {
-HXLINE( 475)			_hx_tmp2 = (this->invites()->length > 0);
+HXLINE( 488)		bool _hx_tmp1;
+HXDLIN( 488)		bool _hx_tmp2;
+HXDLIN( 488)		if (onServer) {
+HXLINE( 488)			_hx_tmp2 = (this->invites()->length > 0);
             		}
             		else {
-HXLINE( 475)			_hx_tmp2 = false;
+HXLINE( 488)			_hx_tmp2 = false;
             		}
-HXDLIN( 475)		if (_hx_tmp2) {
-HXLINE( 475)			_hx_tmp1 = (this->uiState == 3);
+HXDLIN( 488)		if (_hx_tmp2) {
+HXLINE( 488)			_hx_tmp1 = (this->uiState == 3);
             		}
             		else {
-HXLINE( 475)			_hx_tmp1 = false;
+HXLINE( 488)			_hx_tmp1 = false;
             		}
-HXDLIN( 475)		if (_hx_tmp1) {
-HXLINE( 477)			{
-HXLINE( 477)				int _g = 0;
-HXDLIN( 477)				::Array< ::Dynamic> _g1 = this->invites();
-HXDLIN( 477)				while((_g < _g1->length)){
+HXDLIN( 488)		if (_hx_tmp1) {
+HXLINE( 490)			{
+HXLINE( 490)				int _g = 0;
+HXDLIN( 490)				::Array< ::Dynamic> _g1 = this->invites();
+HXDLIN( 490)				while((_g < _g1->length)){
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             					void _hx_run( ::borogove::Stanza response){
-            						HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_491_block)
+            						HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_504_block)
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 477)					 ::borogove::Stanza invite = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 477)					_g = (_g + 1);
-HXLINE( 478)					 ::borogove::JID inviteFrom = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(invite->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 479)					 ::borogove::Client inviteFromBareChat = this->client;
-HXDLIN( 479)					 ::borogove::Chat inviteFromBareChat1 = inviteFromBareChat->getChat(inviteFrom->asBare()->asString());
-HXLINE( 480)					::String toBlock;
-HXDLIN( 480)					bool toBlock1;
-HXDLIN( 480)					if (::hx::IsNotNull( inviteFromBareChat1 )) {
-HXLINE( 480)						toBlock1 = ::Std_obj::isOfType(inviteFromBareChat1,::hx::ClassOf< ::borogove::Channel >());
+HXLINE( 490)					 ::borogove::Stanza invite = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 490)					_g = (_g + 1);
+HXLINE( 491)					 ::borogove::JID inviteFrom = ::borogove::JID_obj::parse(invite->attr->get_string(HX_("from",6a,a5,c2,43)));
+HXLINE( 492)					 ::borogove::Client inviteFromBareChat = this->client;
+HXDLIN( 492)					 ::borogove::Chat inviteFromBareChat1 = inviteFromBareChat->getChat(inviteFrom->asBare()->asString());
+HXLINE( 493)					::String toBlock;
+HXDLIN( 493)					bool toBlock1;
+HXDLIN( 493)					if (::hx::IsNotNull( inviteFromBareChat1 )) {
+HXLINE( 493)						toBlock1 = ::Std_obj::isOfType(inviteFromBareChat1,::hx::ClassOf< ::borogove::Channel >());
             					}
             					else {
-HXLINE( 480)						toBlock1 = false;
+HXLINE( 493)						toBlock1 = false;
             					}
-HXDLIN( 480)					if (toBlock1) {
-HXLINE( 480)						toBlock = inviteFrom->asString();
+HXDLIN( 493)					if (toBlock1) {
+HXLINE( 493)						toBlock = inviteFrom->asString();
             					}
             					else {
-HXLINE( 480)						toBlock = inviteFrom->asBare()->asString();
+HXLINE( 493)						toBlock = inviteFrom->asBare()->asString();
             					}
-HXLINE( 482)					::String iq = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXDLIN( 482)					 ::borogove::Stanza iq1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 495)					::String iq = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXDLIN( 495)					 ::borogove::Stanza iq1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("id",db,5b,00,00),iq)
-            						->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("block",4d,75,fc,b4), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:blocking",d1,a1,46,c3))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("jid",c5,ca,50,00),toBlock)));
-HXLINE( 485)					if (reportSpam) {
-HXLINE( 486)						 ::borogove::Stanza report = iq1->tag(HX_("report",b4,3c,84,06), ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("block",4d,75,fc,b4), ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:blocking",d1,a1,46,c3))),null())->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("jid",c5,ca,50,00),toBlock)),null());
+HXLINE( 498)					if (reportSpam) {
+HXLINE( 499)						 ::borogove::Stanza report = iq1->tag(HX_("report",b4,3c,84,06), ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("reason",c4,0f,9d,fc),HX_("urn:xmpp:reporting:spam",b1,09,15,35))
-            							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reporting:1",49,f0,16,fc))));
-HXLINE( 487)						 ::borogove::Stanza stanzaIdEl = invite->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
-HXLINE( 488)						if (::hx::IsNotNull( stanzaIdEl )) {
-HXLINE( 488)							report->addChild(stanzaIdEl);
+            							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reporting:1",49,f0,16,fc))),null());
+HXLINE( 500)						 ::borogove::Stanza stanzaIdEl = invite->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+HXLINE( 501)						if (::hx::IsNotNull( stanzaIdEl )) {
+HXLINE( 501)							report->addChild(stanzaIdEl);
             						}
-HXLINE( 489)						report->up();
+HXLINE( 502)						report->up();
             					}
-HXLINE( 491)					this->stream->sendIq(iq1, ::Dynamic(new _hx_Closure_0()));
+HXLINE( 504)					this->stream->sendIq(iq1, ::Dynamic(new _hx_Closure_0()));
             				}
             			}
-HXLINE( 493)			this->close();
-HXLINE( 494)			return;
+HXLINE( 506)			this->close();
+HXLINE( 507)			return;
             		}
-HXLINE( 497)		this->isBlocked = true;
-HXLINE( 498)		if ((this->uiState == 2)) {
-HXLINE( 499)			::Dynamic _hx_tmp3 = this->persistence;
-HXDLIN( 499)			::borogove::Persistence_obj::storeChats(_hx_tmp3,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 510)		this->isBlocked = true;
+HXLINE( 511)		if ((this->uiState == 2)) {
+HXLINE( 512)			::Dynamic _hx_tmp3 = this->persistence;
+HXDLIN( 512)			::borogove::Persistence_obj::storeChats(_hx_tmp3,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             		}
             		else {
-HXLINE( 501)			this->close();
+HXLINE( 514)			this->close();
             		}
-HXLINE( 503)		if (onServer) {
+HXLINE( 516)		if (onServer) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             			void _hx_run( ::borogove::Stanza response){
-            				HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_519_block)
+            				HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_532_block)
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 504)			::String iq2 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXDLIN( 504)			 ::borogove::Stanza iq3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 517)			::String iq2 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXDLIN( 517)			 ::borogove::Stanza iq3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("id",db,5b,00,00),iq2)
-            				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("block",4d,75,fc,b4), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:blocking",d1,a1,46,c3))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("jid",c5,ca,50,00),this->chatId)));
-HXLINE( 507)			if (reportSpam) {
-HXLINE( 508)				 ::borogove::Stanza report1 = iq3->tag(HX_("report",b4,3c,84,06), ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("block",4d,75,fc,b4), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:blocking",d1,a1,46,c3))),null())->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("jid",c5,ca,50,00),this->chatId)),null());
+HXLINE( 520)			if (reportSpam) {
+HXLINE( 521)				 ::borogove::Stanza report1 = iq3->tag(HX_("report",b4,3c,84,06), ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("reason",c4,0f,9d,fc),HX_("urn:xmpp:reporting:spam",b1,09,15,35))
-            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reporting:1",49,f0,16,fc))));
-HXLINE( 509)				if (::hx::IsNotNull( spamMessage )) {
-HXLINE( 510)					report1->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
+            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reporting:1",49,f0,16,fc))),null());
+HXLINE( 522)				if (::hx::IsNotNull( spamMessage )) {
+HXLINE( 523)					report1->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("by",d7,55,00,00),spamMessage->serverIdBy)
             						->setFixed(1,HX_("id",db,5b,00,00),spamMessage->serverId)
-            						->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sid:0",a8,4b,37,54))))->up();
+            						->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sid:0",a8,4b,37,54))),null())->up();
             				}
             				else {
-HXLINE( 512)					int _g2 = 0;
-HXDLIN( 512)					::Array< ::Dynamic> _g3 = this->invites();
-HXDLIN( 512)					while((_g2 < _g3->length)){
-HXLINE( 512)						 ::borogove::Stanza invite1 = _g3->__get(_g2).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 512)						_g2 = (_g2 + 1);
-HXLINE( 513)						 ::borogove::Stanza stanzaIdEl1 = invite1->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
-HXLINE( 514)						if (::hx::IsNotNull( stanzaIdEl1 )) {
-HXLINE( 514)							report1->addChild(stanzaIdEl1);
+HXLINE( 525)					int _g2 = 0;
+HXDLIN( 525)					::Array< ::Dynamic> _g3 = this->invites();
+HXDLIN( 525)					while((_g2 < _g3->length)){
+HXLINE( 525)						 ::borogove::Stanza invite1 = _g3->__get(_g2).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 525)						_g2 = (_g2 + 1);
+HXLINE( 526)						 ::borogove::Stanza stanzaIdEl1 = invite1->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+HXLINE( 527)						if (::hx::IsNotNull( stanzaIdEl1 )) {
+HXLINE( 527)							report1->addChild(stanzaIdEl1);
             						}
             					}
             				}
-HXLINE( 517)				report1->up();
+HXLINE( 530)				report1->up();
             			}
-HXLINE( 519)			this->stream->sendIq(iq3, ::Dynamic(new _hx_Closure_1()));
+HXLINE( 532)			this->stream->sendIq(iq3, ::Dynamic(new _hx_Closure_1()));
             		}
             	}
 
@@ -1166,26 +1183,26 @@ HX_DEFINE_DYNAMIC_FUNC3(Chat_obj,block,(void))
 
 void Chat_obj::unblock(::hx::Null< bool >  __o_onServer){
             		bool onServer = __o_onServer.Default(true);
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_526_unblock)
-HXLINE( 527)		this->isBlocked = false;
-HXLINE( 528)		this->uiState = 1;
-HXLINE( 529)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 529)		::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 530)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 531)		if (onServer) {
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_539_unblock)
+HXLINE( 540)		this->isBlocked = false;
+HXLINE( 541)		this->uiState = 1;
+HXLINE( 542)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 542)		::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 543)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 544)		if (onServer) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			void _hx_run( ::borogove::Stanza response){
-            				HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_536_unblock)
+            				HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_549_unblock)
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 532)			 ::borogove::GenericStream _hx_tmp1 = this->stream;
-HXLINE( 533)			::String _hx_tmp2 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXLINE( 532)			_hx_tmp1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 545)			 ::borogove::GenericStream _hx_tmp1 = this->stream;
+HXLINE( 546)			::String _hx_tmp2 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE( 545)			_hx_tmp1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp2)
-            				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("unblock",54,6c,8d,b1), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:blocking",d1,a1,46,c3))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("jid",c5,ca,50,00),this->chatId)))->up()->up(), ::Dynamic(new _hx_Closure_0()));
+            				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("unblock",54,6c,8d,b1), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:blocking",d1,a1,46,c3))),null())->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("jid",c5,ca,50,00),this->chatId)),null())->up()->up(), ::Dynamic(new _hx_Closure_0()));
             		}
             	}
 
@@ -1193,14 +1210,14 @@ HXLINE( 532)			_hx_tmp1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("i
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,unblock,(void))
 
 void Chat_obj::setNotificationsInternal(bool filtered,bool mention,bool reply){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_543_setNotificationsInternal)
-HXDLIN( 543)		if (filtered) {
-HXLINE( 544)			this->notificationSettings =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_556_setNotificationsInternal)
+HXDLIN( 556)		if (filtered) {
+HXLINE( 557)			this->notificationSettings =  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("mention",ea,9e,bf,b9),mention)
             				->setFixed(1,HX_("reply",2a,09,c6,e6),reply));
             		}
             		else {
-HXLINE( 546)			this->notificationSettings = null();
+HXLINE( 559)			this->notificationSettings = null();
             		}
             	}
 
@@ -1208,129 +1225,142 @@ HXLINE( 546)			this->notificationSettings = null();
 HX_DEFINE_DYNAMIC_FUNC3(Chat_obj,setNotificationsInternal,(void))
 
 void Chat_obj::setNotifications(bool filtered,bool mention,bool reply){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_553_setNotifications)
-HXLINE( 554)		this->setNotificationsInternal(filtered,mention,reply);
-HXLINE( 555)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 555)		::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 556)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 557)		this->client->updatePushIfEnabled();
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_566_setNotifications)
+HXLINE( 567)		this->setNotificationsInternal(filtered,mention,reply);
+HXLINE( 568)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 568)		::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 569)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 570)		this->client->updatePushIfEnabled();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Chat_obj,setNotifications,(void))
 
 bool Chat_obj::notificationsFiltered(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_564_notificationsFiltered)
-HXDLIN( 564)		return ::hx::IsNotNull( this->notificationSettings );
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_577_notificationsFiltered)
+HXDLIN( 577)		return ::hx::IsNotNull( this->notificationSettings );
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,notificationsFiltered,return )
 
 bool Chat_obj::notifyMention(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_571_notifyMention)
-HXDLIN( 571)		if (::hx::IsNotNull( this->notificationSettings )) {
-HXDLIN( 571)			return ( (bool)(this->notificationSettings->__Field(HX_("mention",ea,9e,bf,b9),::hx::paccDynamic)) );
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_584_notifyMention)
+HXDLIN( 584)		if (::hx::IsNotNull( this->notificationSettings )) {
+HXDLIN( 584)			return ( (bool)(this->notificationSettings->__Field(HX_("mention",ea,9e,bf,b9),::hx::paccDynamic)) );
             		}
             		else {
-HXDLIN( 571)			return true;
+HXDLIN( 584)			return true;
             		}
-HXDLIN( 571)		return false;
+HXDLIN( 584)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,notifyMention,return )
 
 bool Chat_obj::notifyReply(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_578_notifyReply)
-HXDLIN( 578)		if (::hx::IsNotNull( this->notificationSettings )) {
-HXDLIN( 578)			return ( (bool)(this->notificationSettings->__Field(HX_("reply",2a,09,c6,e6),::hx::paccDynamic)) );
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_591_notifyReply)
+HXDLIN( 591)		if (::hx::IsNotNull( this->notificationSettings )) {
+HXDLIN( 591)			return ( (bool)(this->notificationSettings->__Field(HX_("reply",2a,09,c6,e6),::hx::paccDynamic)) );
             		}
             		else {
-HXDLIN( 578)			return true;
+HXDLIN( 591)			return true;
             		}
-HXDLIN( 578)		return false;
+HXDLIN( 591)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,notifyReply,return )
 
 void Chat_obj::updateFromBookmark( ::borogove::Stanza item){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_582_updateFromBookmark)
-HXLINE( 583)		this->isBookmarked = true;
-HXLINE( 584)		 ::borogove::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
-HXLINE( 585)		::String fn = ( (::String)(::Reflect_obj::field(conf->attr,HX_("name",4b,72,ff,48))) );
-HXLINE( 586)		if (::hx::IsNotNull( fn )) {
-HXLINE( 586)			this->displayName = fn;
-            		}
-HXLINE( 587)		int _hx_tmp;
-HXDLIN( 587)		bool _hx_tmp1;
-HXDLIN( 587)		if ((( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) != HX_("1",31,00,00,00))) {
-HXLINE( 587)			_hx_tmp1 = (( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) == HX_("true",4e,a7,03,4d));
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_595_updateFromBookmark)
+HXLINE( 596)		this->isBookmarked = true;
+HXLINE( 597)		 ::borogove::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
+HXLINE( 598)		::String fn = conf->attr->get_string(HX_("name",4b,72,ff,48));
+HXLINE( 599)		if (::hx::IsNotNull( fn )) {
+HXLINE( 599)			this->displayName = fn;
+            		}
+HXLINE( 600)		int _hx_tmp;
+HXDLIN( 600)		bool _hx_tmp1;
+HXDLIN( 600)		if (::hx::IsNotEq( conf->attr->get(HX_("autojoin",d9,f6,b1,3e)),HX_("1",31,00,00,00) )) {
+HXLINE( 600)			_hx_tmp1 = ::hx::IsEq( conf->attr->get(HX_("autojoin",d9,f6,b1,3e)),HX_("true",4e,a7,03,4d) );
             		}
             		else {
-HXLINE( 587)			_hx_tmp1 = true;
+HXLINE( 600)			_hx_tmp1 = true;
             		}
-HXDLIN( 587)		if (_hx_tmp1) {
-HXLINE( 587)			if ((this->uiState == 0)) {
-HXLINE( 587)				_hx_tmp = 0;
+HXDLIN( 600)		if (_hx_tmp1) {
+HXLINE( 600)			if ((this->uiState == 0)) {
+HXLINE( 600)				_hx_tmp = 0;
             			}
             			else {
-HXLINE( 587)				_hx_tmp = 1;
+HXLINE( 600)				_hx_tmp = 1;
             			}
             		}
             		else {
-HXLINE( 587)			_hx_tmp = 2;
+HXLINE( 600)			_hx_tmp = 2;
             		}
-HXDLIN( 587)		this->uiState = _hx_tmp;
-HXLINE( 588)		 ::borogove::Stanza tmp = conf->getChild(HX_("extensions",14,7c,70,89),null());
-HXDLIN( 588)		 ::borogove::Stanza _hx_tmp2;
-HXDLIN( 588)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 588)			_hx_tmp2 = tmp;
+HXDLIN( 600)		this->uiState = _hx_tmp;
+HXLINE( 601)		 ::borogove::Stanza tmp = conf->getChild(HX_("extensions",14,7c,70,89),null());
+HXDLIN( 601)		 ::borogove::Stanza _hx_tmp2;
+HXDLIN( 601)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 601)			_hx_tmp2 = tmp;
             		}
             		else {
-HXLINE( 588)			_hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("extensions",14,7c,70,89), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))));
+HXLINE( 601)			_hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("extensions",14,7c,70,89), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))),null());
             		}
-HXDLIN( 588)		this->extensions = _hx_tmp2;
+HXDLIN( 601)		this->extensions = _hx_tmp2;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,updateFromBookmark,(void))
 
-void Chat_obj::updateFromRoster( ::Dynamic item){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_592_updateFromRoster)
-HXLINE( 593)		this->isBookmarked = true;
-HXLINE( 594)		bool _hx_tmp;
-HXDLIN( 594)		if (::hx::IsNotEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("both",81,88,1b,41) )) {
-HXLINE( 594)			_hx_tmp = ::hx::IsEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("from",6a,a5,c2,43) );
+void Chat_obj::updateFromRoster( ::borogove::Stanza item){
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_605_updateFromRoster)
+HXLINE( 606)		this->isBookmarked = true;
+HXLINE( 607)		bool _hx_tmp;
+HXDLIN( 607)		if (::hx::IsNotEq( item->attr->get(HX_("subscription",1d,ff,00,36)),HX_("both",81,88,1b,41) )) {
+HXLINE( 607)			_hx_tmp = ::hx::IsEq( item->attr->get(HX_("subscription",1d,ff,00,36)),HX_("from",6a,a5,c2,43) );
             		}
             		else {
-HXLINE( 594)			_hx_tmp = true;
+HXLINE( 607)			_hx_tmp = true;
             		}
-HXDLIN( 594)		this->setTrusted(_hx_tmp);
-HXLINE( 595)		bool _hx_tmp1;
-HXDLIN( 595)		if (::hx::IsNotNull( item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic) )) {
-HXLINE( 595)			_hx_tmp1 = ::hx::IsNotEq( item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic),HX_("",00,00,00,00) );
+HXDLIN( 607)		this->setTrusted(_hx_tmp);
+HXLINE( 608)		bool _hx_tmp1;
+HXDLIN( 608)		if (::hx::IsNotNull( item->attr->get(HX_("name",4b,72,ff,48)) )) {
+HXLINE( 608)			_hx_tmp1 = ::hx::IsNotEq( item->attr->get(HX_("name",4b,72,ff,48)),HX_("",00,00,00,00) );
             		}
             		else {
-HXLINE( 595)			_hx_tmp1 = false;
-            		}
-HXDLIN( 595)		if (_hx_tmp1) {
-HXLINE( 595)			this->displayName = ( (::String)(item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic)) );
-            		}
-HXLINE( 596)		if ((this->uiState == 3)) {
-HXLINE( 596)			this->uiState = 1;
-            		}
-HXLINE( 597)		this->extensions->removeChildren(HX_("group",3f,b3,f4,99),HX_("jabber:iq:roster",47,76,6e,06));
-HXLINE( 598)		{
-HXLINE( 598)			int _g = 0;
-HXDLIN( 598)			::Array< ::String > _g1 = ( (::Array< ::String >)(item->__Field(HX_("groups",54,24,28,1c),::hx::paccDynamic)) );
-HXDLIN( 598)			while((_g < _g1->length)){
-HXLINE( 598)				::String group = _g1->__get(_g);
-HXDLIN( 598)				_g = (_g + 1);
-HXLINE( 599)				this->extensions->textTag(HX_("group",3f,b3,f4,99),group, ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:iq:roster",47,76,6e,06))));
+HXLINE( 608)			_hx_tmp1 = false;
+            		}
+HXDLIN( 608)		if (_hx_tmp1) {
+HXLINE( 608)			this->displayName = item->attr->get_string(HX_("name",4b,72,ff,48));
+            		}
+HXLINE( 609)		if ((this->uiState == 3)) {
+HXLINE( 609)			this->uiState = 1;
+            		}
+HXLINE( 610)		this->extensions->removeChildren(HX_("group",3f,b3,f4,99),HX_("jabber:iq:roster",47,76,6e,06));
+HXLINE( 611)		{
+HXLINE( 611)			int _g = 0;
+HXDLIN( 611)			::Array< ::Dynamic> _this = item->allTags(HX_("group",3f,b3,f4,99),null());
+HXDLIN( 611)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 611)			{
+HXLINE( 611)				int _g1 = 0;
+HXDLIN( 611)				int _g2 = _this->length;
+HXDLIN( 611)				while((_g1 < _g2)){
+HXLINE( 611)					_g1 = (_g1 + 1);
+HXDLIN( 611)					int i = (_g1 - 1);
+HXDLIN( 611)					{
+HXLINE( 611)						::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->getText();
+HXDLIN( 611)						result->__unsafe_set(i,inValue);
+            					}
+            				}
+            			}
+HXDLIN( 611)			while((_g < result->length)){
+HXLINE( 611)				::String group = result->__get(_g);
+HXDLIN( 611)				_g = (_g + 1);
+HXLINE( 612)				this->extensions->textTag(HX_("group",3f,b3,f4,99),group, ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:iq:roster",47,76,6e,06))),null());
             			}
             		}
             	}
@@ -1339,57 +1369,149 @@ HXLINE( 599)				this->extensions->textTag(HX_("group",3f,b3,f4,99),group, ::Dyna
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,updateFromRoster,(void))
 
 ::String Chat_obj::getPhoto(){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_606_getPhoto)
-HXLINE( 607)		bool _hx_tmp;
-HXDLIN( 607)		if (::hx::IsNotNull( this->avatarSha1 )) {
-HXLINE( 607)			_hx_tmp = (::haxe::io::Bytes_obj::ofData(this->avatarSha1)->length < 1);
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_619_getPhoto)
+HXLINE( 620)		bool _hx_tmp;
+HXDLIN( 620)		if (::hx::IsNotNull( this->avatarSha1 )) {
+HXLINE( 620)			_hx_tmp = (::haxe::io::Bytes_obj::ofData(this->avatarSha1)->length < 1);
             		}
             		else {
-HXLINE( 607)			_hx_tmp = true;
+HXLINE( 620)			_hx_tmp = true;
             		}
-HXDLIN( 607)		if (_hx_tmp) {
-HXLINE( 607)			return null();
+HXDLIN( 620)		if (_hx_tmp) {
+HXLINE( 620)			return null();
             		}
-HXLINE( 608)		return  ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-1",90,a8,1c,7c),this->avatarSha1)->toUri();
+HXLINE( 621)		return  ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-1",90,a8,1c,7c),this->avatarSha1)->toUri();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getPhoto,return )
 
 ::String Chat_obj::getPlaceholder(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_615_getPlaceholder)
-HXDLIN( 615)		::String _hx_tmp = this->chatId;
-HXDLIN( 615)		return ::borogove::Color_obj::defaultPhoto(_hx_tmp,this->getDisplayName().charAt(0).toUpperCase());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_628_getPlaceholder)
+HXDLIN( 628)		::String _hx_tmp = this->chatId;
+HXDLIN( 628)		return ::borogove::Color_obj::defaultPhoto(_hx_tmp,this->getDisplayName().charAt(0).toUpperCase());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getPlaceholder,return )
 
+bool Chat_obj::hasEverRead(){
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_635_hasEverRead)
+HXDLIN( 635)		return ::hx::IsNotNull( this->readUpToId );
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,hasEverRead,return )
+
 ::Dynamic Chat_obj::readUpTo(){
-            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Chat,_gthis) HXARGC(1)
             		 ::borogove::ChatMessage _hx_run( ::borogove::ChatMessage m){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_624_readUpTo)
-HXLINE( 627)			 ::Dynamic _hx_tmp;
-HXDLIN( 627)			if (::hx::IsNotNull( m )) {
-HXLINE( 627)				_hx_tmp = m->type;
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_654_readUpTo)
+HXLINE( 657)			 ::Dynamic _hx_tmp;
+HXDLIN( 657)			if (::hx::IsNotNull( m )) {
+HXLINE( 657)				_hx_tmp = m->type;
+            			}
+            			else {
+HXLINE( 657)				_hx_tmp = null();
+            			}
+HXDLIN( 657)			if (::hx::IsEq( _hx_tmp,3 )) {
+HXLINE( 660)				::String _hx_tmp1;
+HXDLIN( 660)				if (::hx::IsNotNull( m )) {
+HXLINE( 660)					_hx_tmp1 = m->serverId;
+            				}
+            				else {
+HXLINE( 660)					_hx_tmp1 = null();
+            				}
+HXDLIN( 660)				::String _hx_tmp2;
+HXDLIN( 660)				if (::hx::IsNotNull( m )) {
+HXLINE( 660)					_hx_tmp2 = m->localId;
+            				}
+            				else {
+HXLINE( 660)					_hx_tmp2 = null();
+            				}
+HXLINE( 658)				::haxe::Log_obj::trace(HX_("READ: readUpTo returning null",ad,fd,31,f0), ::Dynamic(::hx::Anon_obj::Create(5)
+            					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Chat",65,73,fe,da))
+            					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(4)
+            						->setFixed(0,HX_("chatId",d3,04,77,b7),_gthis->chatId)
+            						->setFixed(1,HX_("serverId",7e,01,b2,e2),_hx_tmp1)
+            						->setFixed(2,HX_("reason",c4,0f,9d,fc),HX_("read marker resolved to a channel private message",f5,33,96,29))
+            						->setFixed(3,HX_("localId",26,7a,c6,2d),_hx_tmp2))))
+            					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("readUpTo",2c,17,a3,75))
+            					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),658)));
+HXLINE( 662)				return null();
+            			}
+HXLINE( 667)			::String _hx_tmp3;
+HXDLIN( 667)			if (::hx::IsNull( m )) {
+HXLINE( 667)				_hx_tmp3 = HX_("read marker message not found",00,fe,a3,40);
+            			}
+            			else {
+HXLINE( 667)				_hx_tmp3 = HX_("read marker message found",4d,27,05,35);
+            			}
+HXDLIN( 667)			::String _hx_tmp4;
+HXDLIN( 667)			if (::hx::IsNotNull( m )) {
+HXLINE( 667)				_hx_tmp4 = m->serverId;
+            			}
+            			else {
+HXLINE( 667)				_hx_tmp4 = null();
+            			}
+HXDLIN( 667)			::String _hx_tmp5;
+HXDLIN( 667)			if (::hx::IsNotNull( m )) {
+HXLINE( 667)				_hx_tmp5 = m->localId;
             			}
             			else {
-HXLINE( 627)				_hx_tmp = null();
+HXLINE( 667)				_hx_tmp5 = null();
             			}
-HXDLIN( 627)			if (::hx::IsEq( _hx_tmp,3 )) {
-HXLINE( 627)				return null();
+HXDLIN( 667)			::String _hx_tmp6;
+HXDLIN( 667)			if (::hx::IsNotNull( m )) {
+HXLINE( 667)				_hx_tmp6 = m->sortId;
             			}
-HXLINE( 629)			return m;
+            			else {
+HXLINE( 667)				_hx_tmp6 = null();
+            			}
+HXLINE( 665)			::haxe::Log_obj::trace(HX_("READ: readUpTo result",55,2b,04,ab), ::Dynamic(::hx::Anon_obj::Create(5)
+            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Chat",65,73,fe,da))
+            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(5)
+            					->setFixed(0,HX_("chatId",d3,04,77,b7),_gthis->chatId)
+            					->setFixed(1,HX_("serverId",7e,01,b2,e2),_hx_tmp4)
+            					->setFixed(2,HX_("reason",c4,0f,9d,fc),_hx_tmp3)
+            					->setFixed(3,HX_("localId",26,7a,c6,2d),_hx_tmp5)
+            					->setFixed(4,HX_("sortId",d9,7a,37,30),_hx_tmp6))))
+            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("readUpTo",2c,17,a3,75))
+            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            				->setFixed(4,HX_("lineNumber",dd,81,22,76),665)));
+HXLINE( 669)			return m;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_621_readUpTo)
-HXLINE( 622)		if (::hx::IsNull( this->readUpToId )) {
-HXLINE( 622)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
-            		}
-HXLINE( 624)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 624)		::String _hx_tmp1 = this->client->accountId();
-HXDLIN( 624)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessage(_hx_tmp,_hx_tmp1,this->chatId,this->readUpToId,null()), ::Dynamic(new _hx_Closure_0()),null());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_641_readUpTo)
+HXDLIN( 641)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 642)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXLINE( 644)		::String _hx_tmp1 = this->client->accountId();
+HXLINE( 642)		_hx_tmp(HX_("READ: readUpTo lookup",f2,64,35,04), ::Dynamic(::hx::Anon_obj::Create(5)
+            			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Chat",65,73,fe,da))
+            			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(4)
+            				->setFixed(0,HX_("chatId",d3,04,77,b7),this->chatId)
+            				->setFixed(1,HX_("accountId",e8,81,54,29),_hx_tmp1)
+            				->setFixed(2,HX_("readUpToBy",23,74,f8,75),this->readUpToBy)
+            				->setFixed(3,HX_("readUpToId",27,7a,f8,75),this->readUpToId))))
+            			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("readUpTo",2c,17,a3,75))
+            			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),642)));
+HXLINE( 646)		if (::hx::IsNull( this->readUpToId )) {
+HXLINE( 647)			::haxe::Log_obj::trace(HX_("READ: readUpTo returning null",ad,fd,31,f0), ::Dynamic(::hx::Anon_obj::Create(5)
+            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Chat",65,73,fe,da))
+            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(2)
+            					->setFixed(0,HX_("chatId",d3,04,77,b7),this->chatId)
+            					->setFixed(1,HX_("reason",c4,0f,9d,fc),HX_("no read marker",e5,aa,97,8f)))))
+            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("readUpTo",2c,17,a3,75))
+            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            				->setFixed(4,HX_("lineNumber",dd,81,22,76),647)));
+HXLINE( 651)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            		}
+HXLINE( 654)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN( 654)		::String _hx_tmp3 = this->client->accountId();
+HXDLIN( 654)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessage(_hx_tmp2,_hx_tmp3,this->chatId,this->readUpToId,null()), ::Dynamic(new _hx_Closure_0(_gthis)),null());
             	}
 
 
@@ -1437,118 +1559,135 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->readUpTo(), :
 
 
 int Chat_obj::unreadCount(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_637_unreadCount)
-HXDLIN( 637)		return this->_unreadCount;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_677_unreadCount)
+HXDLIN( 677)		return this->_unreadCount;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,unreadCount,return )
 
 void Chat_obj::setUnreadCount(int count){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_642_setUnreadCount)
-HXDLIN( 642)		this->_unreadCount = count;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_682_setUnreadCount)
+HXDLIN( 682)		this->_unreadCount = count;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setUnreadCount,(void))
 
 ::String Chat_obj::preview(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_648_preview)
-HXLINE( 649)		if (::hx::IsNull( this->lastMessage )) {
-HXLINE( 649)			return HX_("",00,00,00,00);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_688_preview)
+HXLINE( 689)		if (::hx::IsNull( this->lastMessage )) {
+HXLINE( 689)			return HX_("",00,00,00,00);
             		}
-HXLINE( 651)		if ((this->lastMessage->type == 1)) {
-HXLINE( 653)			if (this->lastMessage->isIncoming()) {
-HXLINE( 653)				return HX_("Incoming Call",18,e2,4d,47);
+HXLINE( 691)		if ((this->lastMessage->type == 1)) {
+HXLINE( 693)			if (this->lastMessage->isIncoming()) {
+HXLINE( 693)				return HX_("Incoming Call",18,e2,4d,47);
             			}
             			else {
-HXLINE( 653)				return HX_("Outgoing Call",d2,04,61,e8);
+HXLINE( 693)				return HX_("Outgoing Call",d2,04,61,e8);
             			}
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			bool _hx_run(::String line){
-            				HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_656_preview)
-HXLINE( 656)				return !( ::EReg_obj::__alloc( HX_CTX ,HX_("(^[ \n]*$)|(^>)",bc,88,8d,c7),HX_("",00,00,00,00))->match(line));
+            				HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_698_preview)
+HXLINE( 698)				return !( ::EReg_obj::__alloc( HX_CTX ,HX_("(^[ \n]*$)|(^>)",bc,88,8d,c7),HX_("",00,00,00,00))->match(line));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 655)			::String txt;
-HXDLIN( 655)			::String tmp = this->lastMessage->body(null())->toPlainText();
-HXDLIN( 655)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 655)				txt = tmp;
+HXLINE( 695)			::String txt;
+HXDLIN( 695)			::String tmp = this->lastMessage->body(null())->toPlainText();
+HXDLIN( 695)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 695)				txt = tmp;
+            			}
+            			else {
+HXLINE( 695)				txt = HX_("",00,00,00,00);
+            			}
+HXLINE( 696)			bool _hx_tmp;
+HXDLIN( 696)			if ((txt == HX_("",00,00,00,00))) {
+HXLINE( 696)				_hx_tmp = (this->lastMessage->attachments->length > 0);
             			}
             			else {
-HXLINE( 655)				txt = HX_("",00,00,00,00);
+HXLINE( 696)				_hx_tmp = false;
+            			}
+HXDLIN( 696)			if (_hx_tmp) {
+HXLINE( 696)				return HX_("Media",c4,74,e9,98);
             			}
-HXLINE( 656)			::String tmp1 = ( (::String)(::Lambda_obj::find(txt.split(HX_("\n",0a,00,00,00)), ::Dynamic(new _hx_Closure_0()))) );
-HXDLIN( 656)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 656)				return tmp1;
+HXLINE( 698)			::String tmp1 = ( (::String)(::Lambda_obj::find(txt.split(HX_("\n",0a,00,00,00)), ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN( 698)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 698)				return tmp1;
             			}
             			else {
-HXLINE( 656)				return txt;
+HXLINE( 698)				return txt;
             			}
             		}
-HXLINE( 651)		return null();
+HXLINE( 691)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,preview,return )
 
 ::Dynamic Chat_obj::setLastMessage( ::borogove::ChatMessage message){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_661_setLastMessage)
-HXLINE( 662)		this->lastMessage = message;
-HXLINE( 663)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_703_setLastMessage)
+HXLINE( 704)		this->lastMessage = message;
+HXLINE( 705)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setLastMessage,return )
 
 void Chat_obj::setDisplayName(::String displayName){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_671_setDisplayName)
-HXLINE( 672)		this->displayName = displayName;
-HXLINE( 673)		this->bookmark();
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_713_setDisplayName)
+HXLINE( 714)		::String _hx_tmp;
+HXDLIN( 714)		if ((displayName == HX_("",00,00,00,00))) {
+HXLINE( 714)			_hx_tmp = this->chatId;
+            		}
+            		else {
+HXLINE( 714)			_hx_tmp = displayName;
+            		}
+HXDLIN( 714)		this->displayName = _hx_tmp;
+HXLINE( 715)		this->bookmark();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setDisplayName,(void))
 
 ::String Chat_obj::getDisplayName(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_679_getDisplayName)
-HXLINE( 680)		if ((this->displayName == this->chatId)) {
-HXLINE( 681)			::String _hx_tmp = this->chatId;
-HXDLIN( 681)			if ((_hx_tmp == this->client->accountId())) {
-HXLINE( 681)				return this->client->displayName();
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_721_getDisplayName)
+HXLINE( 722)		if ((this->displayName == this->chatId)) {
+HXLINE( 723)			::String _hx_tmp = this->chatId;
+HXDLIN( 723)			if ((_hx_tmp == this->client->accountId())) {
+HXLINE( 723)				return this->client->displayName();
             			}
             		}
             		else {
-HXLINE( 682)			if ((this->uiState == 3)) {
-HXLINE( 683)				return ((((HX_("",00,00,00,00) + this->displayName) + HX_(" (",08,1c,00,00)) + this->chatId) + HX_(")",29,00,00,00));
+HXLINE( 724)			if ((this->uiState == 3)) {
+HXLINE( 725)				return ((((HX_("",00,00,00,00) + this->displayName) + HX_(" (",08,1c,00,00)) + this->chatId) + HX_(")",29,00,00,00));
             			}
             		}
-HXLINE( 686)		return this->displayName;
+HXLINE( 728)		return this->displayName;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getDisplayName,return )
 
 ::Array< ::String > Chat_obj::getTags(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_693_getTags)
-HXDLIN( 693)		::Array< ::Dynamic> _this = this->extensions->allTags(HX_("group",3f,b3,f4,99),HX_("jabber:iq:roster",47,76,6e,06));
-HXDLIN( 693)		::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 693)		{
-HXDLIN( 693)			int _g = 0;
-HXDLIN( 693)			int _g1 = _this->length;
-HXDLIN( 693)			while((_g < _g1)){
-HXDLIN( 693)				_g = (_g + 1);
-HXDLIN( 693)				int i = (_g - 1);
-HXDLIN( 693)				{
-HXDLIN( 693)					::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->getText();
-HXDLIN( 693)					result->__unsafe_set(i,inValue);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_735_getTags)
+HXDLIN( 735)		::Array< ::Dynamic> _this = this->extensions->allTags(HX_("group",3f,b3,f4,99),HX_("jabber:iq:roster",47,76,6e,06));
+HXDLIN( 735)		::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 735)		{
+HXDLIN( 735)			int _g = 0;
+HXDLIN( 735)			int _g1 = _this->length;
+HXDLIN( 735)			while((_g < _g1)){
+HXDLIN( 735)				_g = (_g + 1);
+HXDLIN( 735)				int i = (_g - 1);
+HXDLIN( 735)				{
+HXDLIN( 735)					::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->getText();
+HXDLIN( 735)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 693)		return result;
+HXDLIN( 735)		return result;
             	}
 
 
@@ -1565,16 +1704,67 @@ HXDLIN( 363)		return ( (size_t)(out->length) );
             	}
 
 
+void Chat_obj::setTags(::Array< ::String > tags){
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_743_setTags)
+HXLINE( 744)		this->extensions->removeChildren(HX_("group",3f,b3,f4,99),HX_("jabber:iq:roster",47,76,6e,06));
+HXLINE( 745)		{
+HXLINE( 745)			int _g = 0;
+HXDLIN( 745)			while((_g < tags->length)){
+HXLINE( 745)				::String tag = tags->__get(_g);
+HXDLIN( 745)				_g = (_g + 1);
+HXLINE( 746)				this->extensions->textTag(HX_("group",3f,b3,f4,99),tag, ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:iq:roster",47,76,6e,06))),null());
+            			}
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setTags,(void))
+
+void Chat_obj::setTags__fromC(::cpp::Pointer< const char* > tags,size_t tags__len){
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_354_setTags__fromC)
+HXLINE( 300)		::Array< ::String > _hx_tmp;
+HXDLIN( 300)		if (::hx::IsNull( tags )) {
+HXLINE( 300)			_hx_tmp = ::Array_obj< ::String >::__new(0);
+            		}
+            		else {
+HXLINE( 300)			::cpp::Pointer< ::cpp::Pointer< char > > _this = tags->reinterpret();
+HXDLIN( 300)			::Array< ::cpp::Pointer< char > > result = ::Array_obj< ::cpp::Pointer< char > >::__new();
+HXDLIN( 300)			::cpp::Pointer< ::cpp::Pointer< char > > tmp = _this;
+HXDLIN( 300)			result->setUnmanagedData(tmp,( (int)(tags__len) ));
+HXDLIN( 300)			 ::Dynamic f = ::cpp::_NativeString::NativeString_Impl__obj::fromPointer_dyn();
+HXDLIN( 300)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(result->length);
+HXDLIN( 300)			{
+HXLINE( 300)				int _g = 0;
+HXDLIN( 300)				int _g1 = result->length;
+HXDLIN( 300)				while((_g < _g1)){
+HXLINE( 300)					_g = (_g + 1);
+HXDLIN( 300)					int i = (_g - 1);
+HXDLIN( 300)					{
+HXLINE( 300)						::cpp::Pointer< char > tmp1 = _hx_array_unsafe_get(result,i);
+HXDLIN( 300)						::String inValue = ( (::String)(f(tmp1)) );
+HXDLIN( 300)						result1->__unsafe_set(i,inValue);
+            					}
+            				}
+            			}
+HXDLIN( 300)			_hx_tmp = result1->copy();
+            		}
+HXLINE( 354)		this->setTags(_hx_tmp);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,setTags__fromC,(void))
+
 void Chat_obj::setThreadSubject(::String threadId,::String subject){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_698_setThreadSubject)
-HXDLIN( 698)		::String _hx_tmp;
-HXDLIN( 698)		if (::hx::IsNull( threadId )) {
-HXDLIN( 698)			_hx_tmp = ::borogove::_Chat::Chat_Fields__obj::nullSentinel;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_752_setThreadSubject)
+HXDLIN( 752)		::String _hx_tmp;
+HXDLIN( 752)		if (::hx::IsNull( threadId )) {
+HXDLIN( 752)			_hx_tmp = ::borogove::_Chat::Chat_Fields__obj::nullSentinel;
             		}
             		else {
-HXDLIN( 698)			_hx_tmp = threadId;
+HXDLIN( 752)			_hx_tmp = threadId;
             		}
-HXDLIN( 698)		this->threads->set(_hx_tmp,subject);
+HXDLIN( 752)		this->threads->set(_hx_tmp,subject);
             	}
 
 
@@ -1585,26 +1775,36 @@ HX_DEFINE_DYNAMIC_FUNC3(Chat_obj,setPresence,(void))
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getCaps,return )
 
 void Chat_obj::setAvatarSha1(::Array< unsigned char > sha1){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_709_setAvatarSha1)
-HXDLIN( 709)		this->avatarSha1 = sha1;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_763_setAvatarSha1)
+HXDLIN( 763)		this->avatarSha1 = sha1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setAvatarSha1,(void))
 
 void Chat_obj::setTrusted(bool trusted){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_717_setTrusted)
-HXLINE( 718)		this->trusted = trusted;
-HXLINE( 719)		bool _hx_tmp;
-HXDLIN( 719)		if (trusted) {
-HXLINE( 719)			_hx_tmp = (this->uiState == 3);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_771_setTrusted)
+HXLINE( 772)		this->trusted = trusted;
+HXLINE( 773)		bool _hx_tmp;
+HXDLIN( 773)		if (trusted) {
+HXLINE( 773)			_hx_tmp = (this->uiState == 3);
+            		}
+            		else {
+HXLINE( 773)			_hx_tmp = false;
+            		}
+HXDLIN( 773)		if (_hx_tmp) {
+HXLINE( 774)			this->uiState = 1;
+HXLINE( 775)			this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+            		}
+HXLINE( 777)		bool _hx_tmp1;
+HXDLIN( 777)		if (this->isBlocked) {
+HXLINE( 777)			_hx_tmp1 = trusted;
             		}
             		else {
-HXLINE( 719)			_hx_tmp = false;
+HXLINE( 777)			_hx_tmp1 = false;
             		}
-HXDLIN( 719)		if (_hx_tmp) {
-HXLINE( 720)			this->uiState = 1;
-HXLINE( 721)			this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXDLIN( 777)		if (_hx_tmp1) {
+HXLINE( 777)			this->unblock(null());
             		}
             	}
 
@@ -1612,136 +1812,165 @@ HXLINE( 721)			this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::Virt
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setTrusted,(void))
 
 bool Chat_obj::isTrusted(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_729_isTrusted)
-HXDLIN( 729)		if (!(this->trusted)) {
-HXDLIN( 729)			::String _hx_tmp = this->chatId;
-HXDLIN( 729)			return (_hx_tmp == this->client->accountId());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_784_isTrusted)
+HXDLIN( 784)		if (!(this->trusted)) {
+HXDLIN( 784)			::String _hx_tmp = this->chatId;
+HXDLIN( 784)			return (_hx_tmp == this->client->accountId());
             		}
             		else {
-HXDLIN( 729)			return true;
+HXDLIN( 784)			return true;
             		}
-HXDLIN( 729)		return false;
+HXDLIN( 784)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,isTrusted,return )
 
 bool Chat_obj::livePresence(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_734_livePresence)
-HXDLIN( 734)		return true;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_789_livePresence)
+HXDLIN( 789)		return true;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,livePresence,return )
 
 bool Chat_obj::syncing(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_741_syncing)
-HXDLIN( 741)		return !(this->client->inSync);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_796_syncing)
+HXDLIN( 796)		return !(this->client->inSync);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,syncing,return )
 
+bool Chat_obj::inMessageSync(){
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_800_inMessageSync)
+HXDLIN( 800)		return !(this->client->inSync);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,inMessageSync,return )
+
 bool Chat_obj::canAudioCall(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_747_canAudioCall)
-HXLINE( 749)		{
-HXLINE( 749)			 ::Dynamic _g = this->getCaps();
-HXDLIN( 749)			while(( (bool)(_g->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 750)				bool _hx_tmp;
-HXDLIN( 750)				::Array< ::String > tmp = ( ( ::borogove::Caps)(_g->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) )->features;
-HXDLIN( 750)				 ::Dynamic tmp1;
-HXDLIN( 750)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 750)					tmp1 = tmp->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_806_canAudioCall)
+HXLINE( 808)		{
+HXLINE( 808)			 ::Dynamic _g = this->getCaps();
+HXDLIN( 808)			while(( (bool)(_g->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 809)				bool _hx_tmp;
+HXDLIN( 809)				::Array< ::String > tmp = ( ( ::borogove::Caps)(_g->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) )->features;
+HXDLIN( 809)				 ::Dynamic tmp1;
+HXDLIN( 809)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 809)					tmp1 = tmp->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
             				}
             				else {
-HXLINE( 750)					tmp1 = null();
+HXLINE( 809)					tmp1 = null();
             				}
-HXDLIN( 750)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 750)					_hx_tmp = ( (bool)(tmp1) );
+HXDLIN( 809)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 809)					_hx_tmp = ( (bool)(tmp1) );
             				}
             				else {
-HXLINE( 750)					_hx_tmp = false;
+HXLINE( 809)					_hx_tmp = false;
             				}
-HXDLIN( 750)				if (_hx_tmp) {
-HXLINE( 750)					return true;
+HXDLIN( 809)				if (_hx_tmp) {
+HXLINE( 809)					return true;
             				}
             			}
             		}
-HXLINE( 753)		return false;
+HXLINE( 812)		 ::borogove::JID jid = ::borogove::JID_obj::parse(this->chatId);
+HXLINE( 813)		bool _hx_tmp1;
+HXDLIN( 813)		if (::hx::IsNotNull( jid )) {
+HXLINE( 813)			_hx_tmp1 = !(jid->isDomain());
+            		}
+            		else {
+HXLINE( 813)			_hx_tmp1 = false;
+            		}
+HXDLIN( 813)		if (_hx_tmp1) {
+HXLINE( 814)			 ::borogove::Chat domainChat = this->client->getChat(jid->domain);
+HXLINE( 815)			bool _hx_tmp2;
+HXDLIN( 815)			if (::hx::IsNotNull( domainChat )) {
+HXLINE( 815)				_hx_tmp2 = ( (bool)(::borogove::Caps_obj::withIdentity(domainChat->getCaps(),HX_("gateway",04,40,59,91),HX_("pstn",3d,8e,5f,4a))->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
+            			}
+            			else {
+HXLINE( 815)				_hx_tmp2 = false;
+            			}
+HXDLIN( 815)			if (_hx_tmp2) {
+HXLINE( 816)				return true;
+            			}
+            		}
+HXLINE( 820)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,canAudioCall,return )
 
 bool Chat_obj::canVideoCall(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_759_canVideoCall)
-HXLINE( 761)		{
-HXLINE( 761)			 ::Dynamic _g = this->getCaps();
-HXDLIN( 761)			while(( (bool)(_g->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 762)				bool _hx_tmp;
-HXDLIN( 762)				::Array< ::String > tmp = ( ( ::borogove::Caps)(_g->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) )->features;
-HXDLIN( 762)				 ::Dynamic tmp1;
-HXDLIN( 762)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 762)					tmp1 = tmp->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_826_canVideoCall)
+HXLINE( 828)		{
+HXLINE( 828)			 ::Dynamic _g = this->getCaps();
+HXDLIN( 828)			while(( (bool)(_g->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 829)				bool _hx_tmp;
+HXDLIN( 829)				::Array< ::String > tmp = ( ( ::borogove::Caps)(_g->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) )->features;
+HXDLIN( 829)				 ::Dynamic tmp1;
+HXDLIN( 829)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 829)					tmp1 = tmp->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
             				}
             				else {
-HXLINE( 762)					tmp1 = null();
+HXLINE( 829)					tmp1 = null();
             				}
-HXDLIN( 762)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 762)					_hx_tmp = ( (bool)(tmp1) );
+HXDLIN( 829)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 829)					_hx_tmp = ( (bool)(tmp1) );
             				}
             				else {
-HXLINE( 762)					_hx_tmp = false;
+HXLINE( 829)					_hx_tmp = false;
             				}
-HXDLIN( 762)				if (_hx_tmp) {
-HXLINE( 762)					return true;
+HXDLIN( 829)				if (_hx_tmp) {
+HXLINE( 829)					return true;
             				}
             			}
             		}
-HXLINE( 765)		return false;
+HXLINE( 832)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,canVideoCall,return )
 
 ::Dynamic Chat_obj::startCall(bool audio,bool video){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_775_startCall)
-HXLINE( 776)		if ((this->uiState == 3)) {
-HXLINE( 776)			this->uiState = 1;
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_842_startCall)
+HXLINE( 843)		if ((this->uiState == 3)) {
+HXLINE( 843)			this->uiState = 1;
             		}
-HXLINE( 777)		 ::borogove::Client session = this->client;
-HXDLIN( 777)		 ::borogove::calls::OutgoingProposedSession session1 =  ::borogove::calls::OutgoingProposedSession_obj::__alloc( HX_CTX ,session,::borogove::JID_obj::parse(this->chatId));
-HXLINE( 778)		{
-HXLINE( 778)			::Dynamic this1 = this->jingleSessions;
-HXDLIN( 778)			( ( ::haxe::ds::StringMap)(this1) )->set(session1->get_sid(),session1);
+HXLINE( 844)		 ::borogove::Client session = this->client;
+HXDLIN( 844)		 ::borogove::calls::OutgoingProposedSession session1 =  ::borogove::calls::OutgoingProposedSession_obj::__alloc( HX_CTX ,session,::borogove::JID_obj::parse(this->chatId));
+HXLINE( 845)		{
+HXLINE( 845)			::Dynamic this1 = this->jingleSessions;
+HXDLIN( 845)			( ( ::haxe::ds::StringMap)(this1) )->set(session1->get_sid(),session1);
             		}
-HXLINE( 779)		session1->propose(audio,video);
-HXLINE( 780)		return session1;
+HXLINE( 846)		session1->propose(audio,video);
+HXLINE( 847)		return session1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,startCall,return )
 
 void Chat_obj::addMedia(::Array< ::Dynamic> streams){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_789_addMedia)
-HXLINE( 790)		if ((this->callStatus() != 4)) {
-HXLINE( 790)			HX_STACK_DO_THROW(HX_("cannot add media when no call ongoing",6a,0b,2b,6e));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_856_addMedia)
+HXLINE( 857)		if ((this->callStatus() != 4)) {
+HXLINE( 857)			HX_STACK_DO_THROW(HX_("cannot add media when no call ongoing",6a,0b,2b,6e));
             		}
-HXLINE( 791)		::borogove::calls::Session_obj::addMedia(this->jingleSessions->iterator()->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)(),streams);
+HXLINE( 858)		::borogove::calls::Session_obj::addMedia(this->jingleSessions->iterator()->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)(),streams);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,addMedia,(void))
 
 void Chat_obj::acceptCall(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_797_acceptCall)
-HXLINE( 798)		if ((this->uiState == 3)) {
-HXLINE( 798)			this->uiState = 1;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_864_acceptCall)
+HXLINE( 865)		if ((this->uiState == 3)) {
+HXLINE( 865)			this->uiState = 1;
             		}
-HXLINE( 799)		{
-HXLINE( 799)			 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 799)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 800)				::borogove::calls::Session_obj::accept(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+HXLINE( 866)		{
+HXLINE( 866)			 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 866)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 867)				::borogove::calls::Session_obj::accept(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             			}
             		}
             	}
@@ -1750,14 +1979,14 @@ HXLINE( 800)				::borogove::calls::Session_obj::accept(session->__Field(HX_("nex
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,acceptCall,(void))
 
 void Chat_obj::hangup(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_808_hangup)
-HXDLIN( 808)		 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 808)		while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 808)			::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE( 809)			::borogove::calls::Session_obj::hangup(session1);
-HXLINE( 810)			{
-HXLINE( 810)				::Dynamic this1 = this->jingleSessions;
-HXDLIN( 810)				( ( ::haxe::ds::StringMap)(this1) )->remove(::borogove::calls::Session_obj::get_sid(session1));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_875_hangup)
+HXDLIN( 875)		 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 875)		while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 875)			::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE( 876)			::borogove::calls::Session_obj::hangup(session1);
+HXLINE( 877)			{
+HXLINE( 877)				::Dynamic this1 = this->jingleSessions;
+HXDLIN( 877)				( ( ::haxe::ds::StringMap)(this1) )->remove(::borogove::calls::Session_obj::get_sid(session1));
             			}
             		}
             	}
@@ -1766,56 +1995,56 @@ HXDLIN( 810)				( ( ::haxe::ds::StringMap)(this1) )->remove(::borogove::calls::S
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,hangup,(void))
 
 int Chat_obj::callStatus(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_817_callStatus)
-HXLINE( 818)		{
-HXLINE( 818)			 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 818)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 819)				return ::borogove::calls::Session_obj::callStatus(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_884_callStatus)
+HXLINE( 885)		{
+HXLINE( 885)			 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 885)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 886)				return ::borogove::calls::Session_obj::callStatus(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             			}
             		}
-HXLINE( 822)		return 0;
+HXLINE( 889)		return 0;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,callStatus,return )
 
  ::borogove::calls::DTMFSender Chat_obj::dtmf(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_828_dtmf)
-HXLINE( 829)		{
-HXLINE( 829)			 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 829)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 830)				 ::borogove::calls::DTMFSender dtmf = ::borogove::calls::Session_obj::dtmf(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
-HXLINE( 831)				if (::hx::IsNotNull( dtmf )) {
-HXLINE( 831)					return dtmf;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_895_dtmf)
+HXLINE( 896)		{
+HXLINE( 896)			 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 896)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 897)				 ::borogove::calls::DTMFSender dtmf = ::borogove::calls::Session_obj::dtmf(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+HXLINE( 898)				if (::hx::IsNotNull( dtmf )) {
+HXLINE( 898)					return dtmf;
             				}
             			}
             		}
-HXLINE( 834)		return null();
+HXLINE( 901)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,dtmf,return )
 
 ::Array< ::Dynamic> Chat_obj::videoTracks(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_841_videoTracks)
-HXDLIN( 841)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 841)		{
-HXDLIN( 841)			 ::Dynamic x = this->jingleSessions->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 841)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 841)				_g->push(::borogove::calls::Session_obj::videoTracks(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()));
-            			}
-            		}
-HXDLIN( 841)		::Array< ::Dynamic> _g1 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 841)		{
-HXDLIN( 841)			 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 841)			while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 841)				 ::Dynamic x1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 841)				while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 841)					_g1->push(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_908_videoTracks)
+HXDLIN( 908)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 908)		{
+HXDLIN( 908)			 ::Dynamic x = this->jingleSessions->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 908)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 908)				_g->push(::borogove::calls::Session_obj::videoTracks(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()));
+            			}
+            		}
+HXDLIN( 908)		::Array< ::Dynamic> _g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 908)		{
+HXDLIN( 908)			 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 908)			while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 908)				 ::Dynamic x1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 908)				while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 908)					_g1->push(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             				}
             			}
             		}
-HXDLIN( 841)		return _g1;
+HXDLIN( 908)		return _g1;
             	}
 
 
@@ -1832,138 +2061,120 @@ HXDLIN( 363)		return ( (size_t)(out->length) );
             	}
 
 
-::String Chat_obj::encryptionMode(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_848_encryptionMode)
-HXDLIN( 848)		switch((int)(this->_encryptionMode)){
-            			case (int)0: {
-HXLINE( 850)				return HX_("unencrypted",8b,80,ea,f1);
-            			}
-            			break;
-            			case (int)1: {
-HXLINE( 852)				return HX_("omemo",a9,a8,d3,31);
-            			}
-            			break;
-            		}
-HXLINE( 848)		return null();
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,encryptionMode,return )
-
 bool Chat_obj::canSend(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_860_canSend)
-HXDLIN( 860)		return !(( (bool)(::borogove::Caps_obj::withFeature(this->getCaps(),HX_("urn:xmpp:noreply:0",a3,10,eb,d5))->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) ));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_916_canSend)
+HXDLIN( 916)		return !(( (bool)(::borogove::Caps_obj::withFeature(this->getCaps(),HX_("urn:xmpp:noreply:0",a3,10,eb,d5))->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) ));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,canSend,return )
 
 bool Chat_obj::canModerate(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_867_canModerate)
-HXDLIN( 867)		return false;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_923_canModerate)
+HXDLIN( 923)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,canModerate,return )
 
 void Chat_obj::invite( ::borogove::Chat other,::String threadId){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_873_invite)
-HXLINE( 874)		 ::Dynamic attr =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_929_invite)
+HXLINE( 930)		 ::Dynamic attr =  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("jid",c5,ca,50,00),this->chatId)
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:conference",b4,78,c2,fc)));
-HXLINE( 878)		if (::hx::IsNotNull( threadId )) {
-HXLINE( 879)			::Reflect_obj::setField(attr,HX_("continue",67,e0,c8,31),HX_("true",4e,a7,03,4d));
-HXLINE( 880)			::Reflect_obj::setField(attr,HX_("thread",ca,7a,b9,8e),threadId);
+HXLINE( 934)		if (::hx::IsNotNull( threadId )) {
+HXLINE( 935)			::Reflect_obj::setField(attr,HX_("continue",67,e0,c8,31),HX_("true",4e,a7,03,4d));
+HXLINE( 936)			::Reflect_obj::setField(attr,HX_("thread",ca,7a,b9,8e),threadId);
             		}
-HXLINE( 882)		other->sendMessageStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a),null())->tag(HX_("x",78,00,00,00),attr)->up(),null());
+HXLINE( 938)		other->sendMessageStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a),null(),null())->tag(HX_("x",78,00,00,00),attr,null())->up(),null(),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,invite,(void))
 
 bool Chat_obj::canInvite(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_891_canInvite)
-HXDLIN( 891)		return false;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_947_canInvite)
+HXDLIN( 947)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,canInvite,return )
 
 bool Chat_obj::isApp(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_897_isApp)
-HXLINE( 898)		if ((::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_953_isApp)
+HXLINE( 954)		if ((::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("iterator",ee,49,9a,93),this->getCaps_dyn())))->get_length() < 1)) {
-HXLINE( 900)			if ((this->chatId.indexOf(HX_("@",40,00,00,00),null()) < 0)) {
-HXLINE( 900)				return this->hasCommands();
+HXLINE( 956)			if ((this->chatId.indexOf(HX_("@",40,00,00,00),null()) < 0)) {
+HXLINE( 956)				return this->hasCommands();
             			}
             			else {
-HXLINE( 900)				return false;
+HXLINE( 956)				return false;
             			}
             		}
-HXLINE( 903)		bool bot = ( (bool)(::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("client",4b,ca,4f,0a),HX_("bot",07,be,4a,00))->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
-HXLINE( 904)		bool client = ( (bool)(::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("client",4b,ca,4f,0a),null())->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
-HXLINE( 905)		bool account = ( (bool)(::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("account",ad,fc,59,a1),null())->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
-HXLINE( 907)		bool _hx_tmp;
-HXDLIN( 907)		bool _hx_tmp1;
-HXDLIN( 907)		if (!(client)) {
-HXLINE( 907)			_hx_tmp1 = account;
+HXLINE( 959)		bool bot = ( (bool)(::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("client",4b,ca,4f,0a),HX_("bot",07,be,4a,00))->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
+HXLINE( 960)		bool client = ( (bool)(::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("client",4b,ca,4f,0a),null())->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
+HXLINE( 961)		bool account = ( (bool)(::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("account",ad,fc,59,a1),null())->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
+HXLINE( 963)		bool _hx_tmp;
+HXDLIN( 963)		bool _hx_tmp1;
+HXDLIN( 963)		if (!(client)) {
+HXLINE( 963)			_hx_tmp1 = account;
             		}
             		else {
-HXLINE( 907)			_hx_tmp1 = true;
+HXLINE( 963)			_hx_tmp1 = true;
             		}
-HXDLIN( 907)		if (_hx_tmp1) {
-HXLINE( 907)			_hx_tmp = !(bot);
+HXDLIN( 963)		if (_hx_tmp1) {
+HXLINE( 963)			_hx_tmp = !(bot);
             		}
             		else {
-HXLINE( 907)			_hx_tmp = false;
+HXLINE( 963)			_hx_tmp = false;
             		}
-HXDLIN( 907)		if (_hx_tmp) {
-HXLINE( 907)			return false;
+HXDLIN( 963)		if (_hx_tmp) {
+HXLINE( 963)			return false;
             		}
-HXLINE( 909)		bool noReply = ( (bool)(::borogove::Caps_obj::withFeature(this->getCaps(),HX_("urn:xmpp:noreply:0",a3,10,eb,d5))->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
-HXLINE( 911)		bool _hx_tmp2;
-HXDLIN( 911)		if (bot) {
-HXLINE( 911)			_hx_tmp2 = noReply;
+HXLINE( 965)		bool noReply = ( (bool)(::borogove::Caps_obj::withFeature(this->getCaps(),HX_("urn:xmpp:noreply:0",a3,10,eb,d5))->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
+HXLINE( 967)		bool _hx_tmp2;
+HXDLIN( 967)		if (bot) {
+HXLINE( 967)			_hx_tmp2 = noReply;
             		}
             		else {
-HXLINE( 911)			_hx_tmp2 = false;
+HXLINE( 967)			_hx_tmp2 = false;
             		}
-HXDLIN( 911)		if (_hx_tmp2) {
-HXLINE( 911)			return this->hasCommands();
+HXDLIN( 967)		if (_hx_tmp2) {
+HXLINE( 967)			return this->hasCommands();
             		}
-HXLINE( 913)		bool conference = ( (bool)(::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("conference",1c,2b,83,41),null())->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
-HXLINE( 915)		bool _hx_tmp3;
-HXDLIN( 915)		if (conference) {
-HXLINE( 915)			_hx_tmp3 = (this->chatId.indexOf(HX_("@",40,00,00,00),null()) < 0);
+HXLINE( 969)		bool conference = ( (bool)(::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("conference",1c,2b,83,41),null())->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
+HXLINE( 971)		bool _hx_tmp3;
+HXDLIN( 971)		if (conference) {
+HXLINE( 971)			_hx_tmp3 = (this->chatId.indexOf(HX_("@",40,00,00,00),null()) < 0);
             		}
             		else {
-HXLINE( 915)			_hx_tmp3 = false;
+HXLINE( 971)			_hx_tmp3 = false;
             		}
-HXDLIN( 915)		if (_hx_tmp3) {
-HXLINE( 915)			return this->hasCommands();
+HXDLIN( 971)		if (_hx_tmp3) {
+HXLINE( 971)			return this->hasCommands();
             		}
-HXLINE( 918)		bool _hx_tmp4;
-HXDLIN( 918)		if (!(client)) {
-HXLINE( 918)			_hx_tmp4 = !(conference);
+HXLINE( 974)		bool _hx_tmp4;
+HXDLIN( 974)		if (!(client)) {
+HXLINE( 974)			_hx_tmp4 = !(conference);
             		}
             		else {
-HXLINE( 918)			_hx_tmp4 = false;
+HXLINE( 974)			_hx_tmp4 = false;
             		}
-HXDLIN( 918)		if (_hx_tmp4) {
-HXLINE( 918)			return this->hasCommands();
+HXDLIN( 974)		if (_hx_tmp4) {
+HXLINE( 974)			return this->hasCommands();
             		}
             		else {
-HXLINE( 918)			return false;
+HXLINE( 974)			return false;
             		}
-HXDLIN( 918)		return false;
+HXDLIN( 974)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,isApp,return )
 
 bool Chat_obj::hasCommands(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_925_hasCommands)
-HXDLIN( 925)		return (this->commandJids()->length > 0);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_981_hasCommands)
+HXDLIN( 981)		return (this->commandJids()->length > 0);
             	}
 
 
@@ -1972,107 +2183,107 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,hasCommands,return )
 ::Dynamic Chat_obj::commands(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             		::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> commands){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_943_commands)
-HXLINE( 943)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 943)			{
-HXLINE( 943)				int _g_current = 0;
-HXDLIN( 943)				while((_g_current < commands->length)){
-HXLINE( 943)					_g_current = (_g_current + 1);
-HXDLIN( 943)					{
-HXLINE( 943)						 ::Dynamic x = commands->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 943)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 943)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_999_commands)
+HXLINE( 999)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 999)			{
+HXLINE( 999)				int _g_current = 0;
+HXDLIN( 999)				while((_g_current < commands->length)){
+HXLINE( 999)					_g_current = (_g_current + 1);
+HXDLIN( 999)					{
+HXLINE( 999)						 ::Dynamic x = commands->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 999)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 999)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             						}
             					}
             				}
             			}
-HXDLIN( 943)			return _g;
+HXDLIN( 999)			return _g;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_931_commands)
-HXDLIN( 931)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 932)		::Array< ::Dynamic> _this = this->commandJids();
-HXDLIN( 932)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 932)		{
-HXLINE( 932)			int _g = 0;
-HXDLIN( 932)			int _g1 = _this->length;
-HXDLIN( 932)			while((_g < _g1)){
-HXLINE( 932)				_g = (_g + 1);
-HXDLIN( 932)				int i = (_g - 1);
-HXDLIN( 932)				{
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_987_commands)
+HXDLIN( 987)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 988)		::Array< ::Dynamic> _this = this->commandJids();
+HXDLIN( 988)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 988)		{
+HXLINE( 988)			int _g = 0;
+HXDLIN( 988)			int _g1 = _this->length;
+HXDLIN( 988)			while((_g < _g1)){
+HXLINE( 988)				_g = (_g + 1);
+HXDLIN( 988)				int i = (_g - 1);
+HXDLIN( 988)				{
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Chat,_gthis, ::borogove::JID,jid) HXARGC(2)
             					void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             						HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_0, ::borogove::Chat,_gthis, ::Dynamic,resolve, ::borogove::JID,jid, ::borogove::queries::DiscoItemsGet,itemsGet) HXARGC(0)
             						void _hx_run(){
-            							HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_934_commands)
-HXLINE( 935)							jid->asBare();
-HXLINE( 936)							 ::Dynamic resolve1 = resolve;
-HXDLIN( 936)							::Array< ::Dynamic> _this;
-HXDLIN( 936)							::Array< ::Dynamic> tmp = itemsGet->getResult();
-HXDLIN( 936)							if (::hx::IsNotNull( tmp )) {
-HXLINE( 936)								_this = tmp;
+            							HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_990_commands)
+HXLINE( 991)							jid->asBare();
+HXLINE( 992)							 ::Dynamic resolve1 = resolve;
+HXDLIN( 992)							::Array< ::Dynamic> _this;
+HXDLIN( 992)							::Array< ::Dynamic> tmp = itemsGet->getResult();
+HXDLIN( 992)							if (::hx::IsNotNull( tmp )) {
+HXLINE( 992)								_this = tmp;
             							}
             							else {
-HXLINE( 936)								_this = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 992)								_this = ::Array_obj< ::Dynamic>::__new(0);
             							}
-HXDLIN( 936)							::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 936)							{
-HXLINE( 936)								int _g1 = 0;
-HXDLIN( 936)								::Array< ::Dynamic> _g2 = _this;
-HXDLIN( 936)								while((_g1 < _g2->length)){
-HXLINE( 936)									 ::Dynamic v = _g2->__get(_g1);
-HXDLIN( 936)									_g1 = (_g1 + 1);
-HXLINE( 939)									bool inValue;
-HXDLIN( 939)									bool inValue1;
-HXDLIN( 939)									if (::hx::IsNotNull( v->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) )) {
-HXLINE( 939)										inValue1 = ( ( ::borogove::JID)(v->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asBare()->equals(jid);
+HXDLIN( 992)							::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 992)							{
+HXLINE( 992)								int _g1 = 0;
+HXDLIN( 992)								::Array< ::Dynamic> _g2 = _this;
+HXDLIN( 992)								while((_g1 < _g2->length)){
+HXLINE( 992)									 ::Dynamic v = _g2->__get(_g1);
+HXDLIN( 992)									_g1 = (_g1 + 1);
+HXLINE( 995)									bool inValue;
+HXDLIN( 995)									bool inValue1;
+HXDLIN( 995)									if (::hx::IsNotNull( v->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) )) {
+HXLINE( 995)										inValue1 = ( ( ::borogove::JID)(v->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asBare()->equals(jid);
             									}
             									else {
-HXLINE( 939)										inValue1 = false;
+HXLINE( 995)										inValue1 = false;
             									}
-HXDLIN( 939)									if (inValue1) {
-HXLINE( 939)										inValue = ::hx::IsNotNull( v->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic) );
+HXDLIN( 995)									if (inValue1) {
+HXLINE( 995)										inValue = ::hx::IsNotNull( v->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic) );
             									}
             									else {
-HXLINE( 939)										inValue = false;
+HXLINE( 995)										inValue = false;
             									}
-HXLINE( 936)									if (inValue) {
-HXLINE( 936)										_g->push(v);
+HXLINE( 992)									if (inValue) {
+HXLINE( 992)										_g->push(v);
             									}
             								}
             							}
-HXDLIN( 936)							::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
-HXDLIN( 936)							{
-HXLINE( 936)								int _g3 = 0;
-HXDLIN( 936)								int _g4 = _g->length;
-HXDLIN( 936)								while((_g3 < _g4)){
-HXLINE( 936)									_g3 = (_g3 + 1);
-HXDLIN( 936)									int i = (_g3 - 1);
-HXDLIN( 936)									{
-HXLINE( 940)										 ::Dynamic item = _hx_array_unsafe_get(_g,i);
-HXLINE( 936)										result->__unsafe_set(i, ::borogove::Command_obj::__alloc( HX_CTX ,_gthis->client,item));
+HXDLIN( 992)							::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
+HXDLIN( 992)							{
+HXLINE( 992)								int _g3 = 0;
+HXDLIN( 992)								int _g4 = _g->length;
+HXDLIN( 992)								while((_g3 < _g4)){
+HXLINE( 992)									_g3 = (_g3 + 1);
+HXDLIN( 992)									int i = (_g3 - 1);
+HXDLIN( 992)									{
+HXLINE( 996)										 ::Dynamic item = _hx_array_unsafe_get(_g,i);
+HXLINE( 992)										result->__unsafe_set(i, ::borogove::Command_obj::__alloc( HX_CTX ,_gthis->client,item));
             									}
             								}
             							}
-HXDLIN( 936)							resolve1(result);
+HXDLIN( 992)							resolve1(result);
             						}
             						HX_END_LOCAL_FUNC0((void))
 
-            						HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_932_commands)
-HXLINE( 933)						 ::borogove::queries::DiscoItemsGet itemsGet =  ::borogove::queries::DiscoItemsGet_obj::__alloc( HX_CTX ,jid->asString(),HX_("http://jabber.org/protocol/commands",3c,af,11,6d));
-HXLINE( 934)						itemsGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,resolve,jid,itemsGet)));
-HXLINE( 942)						_gthis->client->sendQuery(itemsGet);
+            						HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_988_commands)
+HXLINE( 989)						 ::borogove::queries::DiscoItemsGet itemsGet =  ::borogove::queries::DiscoItemsGet_obj::__alloc( HX_CTX ,jid->asString(),HX_("http://jabber.org/protocol/commands",3c,af,11,6d));
+HXLINE( 990)						itemsGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,resolve,jid,itemsGet)));
+HXLINE( 998)						_gthis->client->sendQuery(itemsGet);
             					}
             					HX_END_LOCAL_FUNC2((void))
 
-HXLINE( 932)					 ::borogove::JID jid = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN( 932)					::Dynamic inValue = ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,jid)));
-HXDLIN( 932)					result->__unsafe_set(i,inValue);
+HXLINE( 988)					 ::borogove::JID jid = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) );
+HXDLIN( 988)					::Dynamic inValue = ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,jid)));
+HXDLIN( 988)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 932)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_2()),null());
+HXDLIN( 988)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_2()),null());
             	}
 
 
@@ -2105,34 +2316,34 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->commands(), :
 
 
 ::Array< ::Dynamic> Chat_obj::commandJids(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_946_commandJids)
-HXLINE( 947)		::Array< ::Dynamic> jids = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 948)		 ::borogove::JID jid = ::borogove::JID_obj::parse(this->chatId);
-HXLINE( 949)		{
-HXLINE( 949)			 ::Dynamic _g = ::borogove::Caps_obj::withFeature(this->getCaps(),HX_("http://jabber.org/protocol/commands",3c,af,11,6d));
-HXDLIN( 949)			while(( (bool)(_g->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 949)				::String resource = ( (::String)(_g->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) );
-HXLINE( 950)				 ::borogove::JID _hx_tmp;
-HXDLIN( 950)				if (::hx::IsNull( resource )) {
-HXLINE( 950)					_hx_tmp = jid;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1002_commandJids)
+HXLINE(1003)		::Array< ::Dynamic> jids = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1004)		 ::borogove::JID jid = ::borogove::JID_obj::parse(this->chatId);
+HXLINE(1005)		{
+HXLINE(1005)			 ::Dynamic _g = ::borogove::Caps_obj::withFeature(this->getCaps(),HX_("http://jabber.org/protocol/commands",3c,af,11,6d));
+HXDLIN(1005)			while(( (bool)(_g->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1005)				::String resource = ( (::String)(_g->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) );
+HXLINE(1006)				 ::borogove::JID _hx_tmp;
+HXDLIN(1006)				if (::hx::IsNull( resource )) {
+HXLINE(1006)					_hx_tmp = jid;
             				}
             				else {
-HXLINE( 950)					_hx_tmp = jid->withResource(resource);
+HXLINE(1006)					_hx_tmp = jid->withResource(resource);
             				}
-HXDLIN( 950)				jids->push(_hx_tmp);
+HXDLIN(1006)				jids->push(_hx_tmp);
             			}
             		}
-HXLINE( 952)		bool _hx_tmp1;
-HXDLIN( 952)		if ((jids->length < 1)) {
-HXLINE( 952)			_hx_tmp1 = jid->isDomain();
+HXLINE(1008)		bool _hx_tmp1;
+HXDLIN(1008)		if ((jids->length < 1)) {
+HXLINE(1008)			_hx_tmp1 = jid->isDomain();
             		}
             		else {
-HXLINE( 952)			_hx_tmp1 = false;
+HXLINE(1008)			_hx_tmp1 = false;
             		}
-HXDLIN( 952)		if (_hx_tmp1) {
-HXLINE( 953)			jids->push(jid);
+HXDLIN(1008)		if (_hx_tmp1) {
+HXLINE(1009)			jids->push(jid);
             		}
-HXLINE( 955)		return jids;
+HXLINE(1011)		return jids;
             	}
 
 
@@ -2141,69 +2352,69 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,commandJids,return )
 ::Dynamic Chat_obj::invitedBy(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             		 ::borogove::Member _hx_run(::Array< ::Dynamic> result){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_977_invitedBy)
-HXLINE( 977)			if (::hx::IsNotNull( result->__get(0).StaticCast<  ::borogove::Member >() )) {
-HXLINE( 977)				return result->__get(0).StaticCast<  ::borogove::Member >();
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1033_invitedBy)
+HXLINE(1033)			if (::hx::IsNotNull( result->__get(0).StaticCast<  ::borogove::Member >() )) {
+HXLINE(1033)				return result->__get(0).StaticCast<  ::borogove::Member >();
             			}
             			else {
-HXLINE( 977)				return null();
+HXLINE(1033)				return null();
             			}
-HXDLIN( 977)			return null();
+HXDLIN(1033)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_961_invitedBy)
-HXLINE( 962)		::Array< ::Dynamic> inviteEls = this->invites();
-HXLINE( 963)		if ((inviteEls->length < 1)) {
-HXLINE( 963)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1017_invitedBy)
+HXLINE(1018)		::Array< ::Dynamic> inviteEls = this->invites();
+HXLINE(1019)		if ((inviteEls->length < 1)) {
+HXLINE(1019)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
-HXLINE( 965)		 ::borogove::JID inviteFrom = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(inviteEls->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 966)		::String bare = inviteFrom->asBare()->asString();
-HXLINE( 967)		 ::borogove::Chat maybeChannel = this->client->getChat(bare);
-HXLINE( 968)		if (::hx::IsNotNull( maybeChannel )) {
-HXLINE( 970)			if (::hx::IsNotNull( ::borogove::_Util::Util_Fields__obj::downcast(maybeChannel,::hx::ClassOf< ::borogove::Channel >()) )) {
+HXLINE(1021)		 ::borogove::JID inviteFrom = ::borogove::JID_obj::parse(inviteEls->__get(0).StaticCast<  ::borogove::Stanza >()->attr->get_string(HX_("from",6a,a5,c2,43)));
+HXLINE(1022)		::String bare = inviteFrom->asBare()->asString();
+HXLINE(1023)		 ::borogove::Chat maybeChannel = this->client->getChat(bare);
+HXLINE(1024)		if (::hx::IsNotNull( maybeChannel )) {
+HXLINE(1026)			if (::hx::IsNotNull( ::borogove::_Util::Util_Fields__obj::downcast(maybeChannel,::hx::ClassOf< ::borogove::Channel >()) )) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::JID,inviteFrom) HXARGC(1)
             				::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> members){
-            					HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_972_invitedBy)
-HXLINE( 972)					::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 972)					{
-HXLINE( 972)						int _g1 = 0;
-HXDLIN( 972)						while((_g1 < members->length)){
-HXLINE( 972)							 ::borogove::Member v = members->__get(_g1).StaticCast<  ::borogove::Member >();
-HXDLIN( 972)							_g1 = (_g1 + 1);
-HXDLIN( 972)							if ((v->displayName == inviteFrom->resource)) {
-HXLINE( 972)								_g->push(v);
+            					HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1028_invitedBy)
+HXLINE(1028)					::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(1028)					{
+HXLINE(1028)						int _g1 = 0;
+HXDLIN(1028)						while((_g1 < members->length)){
+HXLINE(1028)							 ::borogove::Member v = members->__get(_g1).StaticCast<  ::borogove::Member >();
+HXDLIN(1028)							_g1 = (_g1 + 1);
+HXDLIN(1028)							if ((v->displayName == inviteFrom->resource)) {
+HXLINE(1028)								_g->push(v);
             							}
             						}
             					}
-HXDLIN( 972)					return _g;
+HXDLIN(1028)					return _g;
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             				 ::borogove::Member _hx_run(::Array< ::Dynamic> result){
-            					HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_973_invitedBy)
-HXLINE( 973)					if ((result->length > 0)) {
-HXLINE( 973)						return result->__get(0).StaticCast<  ::borogove::Member >();
+            					HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1029_invitedBy)
+HXLINE(1029)					if ((result->length > 0)) {
+HXLINE(1029)						return result->__get(0).StaticCast<  ::borogove::Member >();
             					}
             					else {
-HXLINE( 973)						return null();
+HXLINE(1029)						return null();
             					}
-HXDLIN( 973)					return null();
+HXDLIN(1029)					return null();
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 971)				::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->members(), ::Dynamic(new _hx_Closure_0(inviteFrom)),null()), ::Dynamic(new _hx_Closure_1()),null());
+HXLINE(1027)				::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->members(), ::Dynamic(new _hx_Closure_0(inviteFrom)),null()), ::Dynamic(new _hx_Closure_1()),null());
             			}
             		}
-HXLINE( 977)		 ::borogove::Chat _hx_tmp;
-HXDLIN( 977)		if (::hx::IsNotNull( maybeChannel )) {
-HXLINE( 977)			_hx_tmp = maybeChannel;
+HXLINE(1033)		 ::borogove::Chat _hx_tmp;
+HXDLIN(1033)		if (::hx::IsNotNull( maybeChannel )) {
+HXLINE(1033)			_hx_tmp = maybeChannel;
             		}
             		else {
-HXLINE( 977)			_hx_tmp = this->client->getDirectChat(bare,null());
+HXLINE(1033)			_hx_tmp = this->client->getDirectChat(bare,null());
             		}
-HXDLIN( 977)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->getMemberDetails(::Array_obj< ::String >::__new(1)->init(0,bare)), ::Dynamic(new _hx_Closure_2()),null());
+HXDLIN(1033)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->getMemberDetails(::Array_obj< ::String >::__new(1)->init(0,bare)), ::Dynamic(new _hx_Closure_2()),null());
             	}
 
 
@@ -2251,8 +2462,8 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->invitedBy(),
 
 
 ::Array< ::Dynamic> Chat_obj::invites(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_981_invites)
-HXDLIN( 981)		return this->extensions->allTags(HX_("invite",c9,f1,db,9f),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1037_invites)
+HXDLIN(1037)		return this->extensions->allTags(HX_("invite",c9,f1,db,9f),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
             	}
 
 
@@ -2261,45 +2472,45 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,invites,return )
 ::Dynamic Chat_obj::recomputeUnread(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Chat,_gthis) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> messages){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_990_recomputeUnread)
-HXLINE( 991)			int i = messages->length;
-HXLINE( 992)			while(true){
-HXLINE( 992)				i = (i - 1);
-HXDLIN( 992)				if (!((i >= 0))) {
-HXLINE( 992)					goto _hx_goto_142;
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1046_recomputeUnread)
+HXLINE(1047)			int i = messages->length;
+HXLINE(1048)			while(true){
+HXLINE(1048)				i = (i - 1);
+HXDLIN(1048)				if (!((i >= 0))) {
+HXLINE(1048)					goto _hx_goto_149;
             				}
-HXLINE( 993)				bool _hx_tmp;
-HXDLIN( 993)				if ((messages->__get(i).StaticCast<  ::borogove::ChatMessage >()->serverId != _gthis->readUpToId)) {
-HXLINE( 993)					_hx_tmp = !(messages->__get(i).StaticCast<  ::borogove::ChatMessage >()->isIncoming());
+HXLINE(1049)				bool _hx_tmp;
+HXDLIN(1049)				if ((messages->__get(i).StaticCast<  ::borogove::ChatMessage >()->serverId != _gthis->readUpToId)) {
+HXLINE(1049)					_hx_tmp = !(messages->__get(i).StaticCast<  ::borogove::ChatMessage >()->isIncoming());
             				}
             				else {
-HXLINE( 993)					_hx_tmp = true;
+HXLINE(1049)					_hx_tmp = true;
             				}
-HXDLIN( 993)				if (_hx_tmp) {
-HXLINE( 993)					goto _hx_goto_142;
+HXDLIN(1049)				if (_hx_tmp) {
+HXLINE(1049)					goto _hx_goto_149;
             				}
             			}
-            			_hx_goto_142:;
-HXLINE( 995)			_gthis->setUnreadCount((messages->length - (i + 1)));
+            			_hx_goto_149:;
+HXLINE(1051)			_gthis->setUnreadCount((messages->length - (i + 1)));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_984_recomputeUnread)
-HXDLIN( 984)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 985)		bool _hx_tmp;
-HXDLIN( 985)		if (::hx::IsNotNull( this->lastMessage )) {
-HXLINE( 985)			_hx_tmp = (this->lastMessage->serverId == this->readUpToId);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1040_recomputeUnread)
+HXDLIN(1040)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1041)		bool _hx_tmp;
+HXDLIN(1041)		if (::hx::IsNotNull( this->lastMessage )) {
+HXLINE(1041)			_hx_tmp = (this->lastMessage->serverId == this->readUpToId);
             		}
             		else {
-HXLINE( 985)			_hx_tmp = false;
+HXLINE(1041)			_hx_tmp = false;
             		}
-HXDLIN( 985)		if (_hx_tmp) {
-HXLINE( 986)			this->setUnreadCount(0);
-HXLINE( 987)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXDLIN(1041)		if (_hx_tmp) {
+HXLINE(1042)			this->setUnreadCount(0);
+HXLINE(1043)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
-HXLINE( 990)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN( 990)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN( 990)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp1,_hx_tmp2,this->chatId,null()), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+HXLINE(1046)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1046)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN(1046)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp1,_hx_tmp2,this->chatId,null()), ::Dynamic(new _hx_Closure_0(_gthis)),null());
             	}
 
 
@@ -2307,26 +2518,26 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,recomputeUnread,return )
 
 ::Dynamic Chat_obj::markReadUpToId(::String upTo,::String upToBy,::hx::Null< bool >  __o_recompute){
             		bool recompute = __o_recompute.Default(true);
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1000_markReadUpToId)
-HXLINE(1001)		if (::hx::IsNull( upTo )) {
-HXLINE(1001)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1056_markReadUpToId)
+HXLINE(1057)		if (::hx::IsNull( upTo )) {
+HXLINE(1057)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
             		}
-HXLINE(1002)		if ((this->readUpToId == upTo)) {
-HXLINE(1003)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
+HXLINE(1058)		if ((this->readUpToId == upTo)) {
+HXLINE(1059)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
             		}
-HXLINE(1006)		this->readUpToId = upTo;
-HXLINE(1007)		this->readUpToBy = upToBy;
-HXLINE(1008)		if (recompute) {
-HXLINE(1008)			::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1008)			::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(1062)		this->readUpToId = upTo;
+HXLINE(1063)		this->readUpToBy = upToBy;
+HXLINE(1064)		if (recompute) {
+HXLINE(1064)			::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1064)			::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             		}
-HXLINE(1009)		if (recompute) {
-HXLINE(1009)			return this->recomputeUnread();
+HXLINE(1065)		if (recompute) {
+HXLINE(1065)			return this->recomputeUnread();
             		}
             		else {
-HXLINE(1009)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE(1065)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
-HXDLIN(1009)		return null();
+HXDLIN(1065)		return null();
             	}
 
 
@@ -2335,77 +2546,85 @@ HX_DEFINE_DYNAMIC_FUNC3(Chat_obj,markReadUpToId,return )
 ::Dynamic Chat_obj::markReadUpToMessage( ::borogove::ChatMessage message){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Chat,_gthis, ::borogove::ChatMessage,message) HXARGC(1)
             		::Dynamic _hx_run( ::borogove::ChatMessage readMessage){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1023_markReadUpToMessage)
-HXLINE(1024)			bool _hx_tmp;
-HXDLIN(1024)			if (::hx::IsNotNull( readMessage )) {
-HXLINE(1024)				_hx_tmp = (message->sortId <= readMessage->sortId);
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1082_markReadUpToMessage)
+HXLINE(1083)			bool _hx_tmp;
+HXDLIN(1083)			if (::hx::IsNotNull( readMessage )) {
+HXLINE(1083)				_hx_tmp = (message->sortId <= readMessage->sortId);
             			}
             			else {
-HXLINE(1024)				_hx_tmp = false;
+HXLINE(1083)				_hx_tmp = false;
             			}
-HXDLIN(1024)			if (_hx_tmp) {
-HXLINE(1025)				return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
+HXDLIN(1083)			if (_hx_tmp) {
+HXLINE(1084)				return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
             			}
-HXLINE(1028)			return _gthis->markReadUpToId(message->serverId,message->serverIdBy,null());
+HXLINE(1087)			return _gthis->markReadUpToId(message->serverId,message->serverIdBy,null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1012_markReadUpToMessage)
-HXDLIN(1012)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1013)		bool _hx_tmp;
-HXDLIN(1013)		if (::hx::IsNotNull( message->serverId )) {
-HXLINE(1013)			::String _hx_tmp1 = message->chatId();
-HXDLIN(1013)			_hx_tmp = (_hx_tmp1 != this->chatId);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1068_markReadUpToMessage)
+HXDLIN(1068)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1069)		bool _hx_tmp;
+HXDLIN(1069)		if (::hx::IsNotNull( message->serverId )) {
+HXLINE(1069)			::String _hx_tmp1 = message->chatId();
+HXDLIN(1069)			_hx_tmp = (_hx_tmp1 != this->chatId);
             		}
             		else {
-HXLINE(1013)			_hx_tmp = true;
+HXLINE(1069)			_hx_tmp = true;
             		}
-HXDLIN(1013)		if (_hx_tmp) {
-HXLINE(1013)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
+HXDLIN(1069)		if (_hx_tmp) {
+HXLINE(1069)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
             		}
-HXLINE(1014)		if ((this->readUpToId == message->serverId)) {
-HXLINE(1015)			bool _hx_tmp2;
-HXDLIN(1015)			if (::hx::IsNotNull( this->lastMessage )) {
-HXLINE(1015)				_hx_tmp2 = (this->lastMessage->serverId == this->readUpToId);
+HXLINE(1070)		if ((this->readUpToId == message->serverId)) {
+HXLINE(1071)			bool _hx_tmp2;
+HXDLIN(1071)			bool _hx_tmp3;
+HXDLIN(1071)			if (::hx::IsNotNull( this->lastMessage )) {
+HXLINE(1071)				_hx_tmp3 = (this->lastMessage->serverId == this->readUpToId);
+            			}
+            			else {
+HXLINE(1071)				_hx_tmp3 = false;
+            			}
+HXDLIN(1071)			if (_hx_tmp3) {
+HXLINE(1071)				_hx_tmp2 = (this->unreadCount() > 0);
             			}
             			else {
-HXLINE(1015)				_hx_tmp2 = false;
+HXLINE(1071)				_hx_tmp2 = false;
             			}
-HXDLIN(1015)			if (_hx_tmp2) {
-HXLINE(1015)				this->setUnreadCount(0);
+HXDLIN(1071)			if (_hx_tmp2) {
+HXLINE(1072)				this->setUnreadCount(0);
+HXLINE(1073)				this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             			}
-HXLINE(1016)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
+HXLINE(1075)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
             		}
-HXLINE(1019)		if (::hx::IsNull( this->readUpToId )) {
-HXLINE(1020)			return this->markReadUpToId(message->serverId,message->serverIdBy,null());
+HXLINE(1078)		if (::hx::IsNull( this->readUpToId )) {
+HXLINE(1079)			return this->markReadUpToId(message->serverId,message->serverIdBy,null());
             		}
-HXLINE(1023)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->readUpTo(), ::Dynamic(new _hx_Closure_0(_gthis,message)),null());
+HXLINE(1082)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->readUpTo(), ::Dynamic(new _hx_Closure_0(_gthis,message)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,markReadUpToMessage,return )
 
 void Chat_obj::publishMds(){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1033_publishMds)
-HXDLIN(1033)		 ::borogove::Client _hx_tmp = this->client;
-HXLINE(1034)		 ::borogove::Stanza _hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("id",db,5b,00,00),this->chatId)))->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb))))->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_1092_publishMds)
+HXDLIN(1092)		 ::borogove::Client _hx_tmp = this->client;
+HXLINE(1093)		 ::borogove::Stanza _hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))),null())->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb))),null())->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("id",db,5b,00,00),this->chatId)),null())->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb))),null())->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("by",d7,55,00,00),this->readUpToBy)
             			->setFixed(1,HX_("id",db,5b,00,00),this->readUpToId)
-            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sid:0",a8,4b,37,54))))->up()->up()->up();
-HXLINE(1033)		_hx_tmp->publishWithOptions(_hx_tmp1, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sid:0",a8,4b,37,54))),null())->up()->up()->up();
+HXLINE(1092)		_hx_tmp->publishWithOptions(_hx_tmp1, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))))->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
-            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))))->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/pubsub#publish-options",f4,9c,72,50),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#persist_items",75,44,6b,ad))))->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#max_items",05,69,9f,7c))))->textTag(HX_("value",71,7f,b8,31),HX_("max",a4,0a,53,00),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#send_last_published_item",b6,21,d2,0a))))->textTag(HX_("value",71,7f,b8,31),HX_("never",8c,3e,30,99),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#access_model",6e,cf,ac,1d))))->textTag(HX_("value",71,7f,b8,31),HX_("whitelist",87,6f,95,29),null())->up());
+            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/pubsub#publish-options",f4,9c,72,50),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#persist_items",75,44,6b,ad))),null())->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#max_items",05,69,9f,7c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("max",a4,0a,53,00),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#send_last_published_item",b6,21,d2,0a))),null())->textTag(HX_("value",71,7f,b8,31),HX_("never",8c,3e,30,99),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#access_model",6e,cf,ac,1d))),null())->textTag(HX_("value",71,7f,b8,31),HX_("whitelist",87,6f,95,29),null(),null())->up());
             	}
 
 
@@ -2444,8 +2663,8 @@ void Chat_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(activeThread,"activeThread");
 	HX_MARK_MEMBER_NAME(notificationSettings,"notificationSettings");
 	HX_MARK_MEMBER_NAME(outbox,"outbox");
-	HX_MARK_MEMBER_NAME(_encryptionMode,"_encryptionMode");
 	HX_MARK_MEMBER_NAME(omemoContactDeviceIDs,"omemoContactDeviceIDs");
+	HX_MARK_MEMBER_NAME(omemoDeviceListRefreshed,"omemoDeviceListRefreshed");
 	 ::borogove::EventEmitter_obj::__Mark(HX_MARK_ARG);
 	HX_MARK_END_CLASS();
 }
@@ -2477,8 +2696,8 @@ void Chat_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(activeThread,"activeThread");
 	HX_VISIT_MEMBER_NAME(notificationSettings,"notificationSettings");
 	HX_VISIT_MEMBER_NAME(outbox,"outbox");
-	HX_VISIT_MEMBER_NAME(_encryptionMode,"_encryptionMode");
 	HX_VISIT_MEMBER_NAME(omemoContactDeviceIDs,"omemoContactDeviceIDs");
+	HX_VISIT_MEMBER_NAME(omemoDeviceListRefreshed,"omemoDeviceListRefreshed");
 	 ::borogove::EventEmitter_obj::__Visit(HX_VISIT_ARG);
 }
 
@@ -2512,6 +2731,7 @@ void Chat_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"unblock") ) { return ::hx::Val( unblock_dyn() ); }
 		if (HX_FIELD_EQ(inName,"preview") ) { return ::hx::Val( preview_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getTags") ) { return ::hx::Val( getTags_dyn() ); }
+		if (HX_FIELD_EQ(inName,"setTags") ) { return ::hx::Val( setTags_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getCaps") ) { return ::hx::Val( getCaps_dyn() ); }
 		if (HX_FIELD_EQ(inName,"syncing") ) { return ::hx::Val( syncing_dyn() ); }
 		if (HX_FIELD_EQ(inName,"canSend") ) { return ::hx::Val( canSend_dyn() ); }
@@ -2554,6 +2774,7 @@ void Chat_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"sendMessage") ) { return ::hx::Val( sendMessage_dyn() ); }
 		if (HX_FIELD_EQ(inName,"addReaction") ) { return ::hx::Val( addReaction_dyn() ); }
 		if (HX_FIELD_EQ(inName,"notifyReply") ) { return ::hx::Val( notifyReply_dyn() ); }
+		if (HX_FIELD_EQ(inName,"hasEverRead") ) { return ::hx::Val( hasEverRead_dyn() ); }
 		if (HX_FIELD_EQ(inName,"unreadCount") ) { return ::hx::Val( unreadCount_dyn() ); }
 		if (HX_FIELD_EQ(inName,"setPresence") ) { return ::hx::Val( setPresence_dyn() ); }
 		if (HX_FIELD_EQ(inName,"videoTracks") ) { return ::hx::Val( videoTracks_dyn() ); }
@@ -2581,6 +2802,7 @@ void Chat_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"sendChatState") ) { return ::hx::Val( sendChatState_dyn() ); }
 		if (HX_FIELD_EQ(inName,"notifyMention") ) { return ::hx::Val( notifyMention_dyn() ); }
 		if (HX_FIELD_EQ(inName,"setAvatarSha1") ) { return ::hx::Val( setAvatarSha1_dyn() ); }
+		if (HX_FIELD_EQ(inName,"inMessageSync") ) { return ::hx::Val( inMessageSync_dyn() ); }
 		break;
 	case 14:
 		if (HX_FIELD_EQ(inName,"jingleSessions") ) { return ::hx::Val( jingleSessions ); }
@@ -2593,11 +2815,10 @@ void Chat_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"setLastMessage") ) { return ::hx::Val( setLastMessage_dyn() ); }
 		if (HX_FIELD_EQ(inName,"setDisplayName") ) { return ::hx::Val( setDisplayName_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getDisplayName") ) { return ::hx::Val( getDisplayName_dyn() ); }
-		if (HX_FIELD_EQ(inName,"encryptionMode") ) { return ::hx::Val( encryptionMode_dyn() ); }
+		if (HX_FIELD_EQ(inName,"setTags__fromC") ) { return ::hx::Val( setTags__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"markReadUpToId") ) { return ::hx::Val( markReadUpToId_dyn() ); }
 		break;
 	case 15:
-		if (HX_FIELD_EQ(inName,"_encryptionMode") ) { return ::hx::Val( _encryptionMode ); }
 		if (HX_FIELD_EQ(inName,"bookmark__fromC") ) { return ::hx::Val( bookmark__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"recomputeUnread") ) { return ::hx::Val( recomputeUnread_dyn() ); }
 		break;
@@ -2616,7 +2837,6 @@ void Chat_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 18:
 		if (HX_FIELD_EQ(inName,"lastMessage__fromC") ) { return ::hx::Val( lastMessage__fromC_dyn() ); }
-		if (HX_FIELD_EQ(inName,"sendMessage__fromC") ) { return ::hx::Val( sendMessage__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"updateFromBookmark") ) { return ::hx::Val( updateFromBookmark_dyn() ); }
 		break;
 	case 19:
@@ -2637,6 +2857,7 @@ void Chat_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"prepareIncomingMessage") ) { return ::hx::Val( prepareIncomingMessage_dyn() ); }
 		break;
 	case 24:
+		if (HX_FIELD_EQ(inName,"omemoDeviceListRefreshed") ) { return ::hx::Val( omemoDeviceListRefreshed ); }
 		if (HX_FIELD_EQ(inName,"setNotificationsInternal") ) { return ::hx::Val( setNotificationsInternal_dyn() ); }
 		break;
 	case 25:
@@ -2688,14 +2909,14 @@ void Chat_obj::__Visit(HX_VISIT_PARAMS)
 	case 14:
 		if (HX_FIELD_EQ(inName,"jingleSessions") ) { jingleSessions=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
 		break;
-	case 15:
-		if (HX_FIELD_EQ(inName,"_encryptionMode") ) { _encryptionMode=inValue.Cast< int >(); return inValue; }
-		break;
 	case 20:
 		if (HX_FIELD_EQ(inName,"notificationSettings") ) { notificationSettings=inValue.Cast<  ::Dynamic >(); return inValue; }
 		break;
 	case 21:
 		if (HX_FIELD_EQ(inName,"omemoContactDeviceIDs") ) { omemoContactDeviceIDs=inValue.Cast< ::Array< int > >(); return inValue; }
+		break;
+	case 24:
+		if (HX_FIELD_EQ(inName,"omemoDeviceListRefreshed") ) { omemoDeviceListRefreshed=inValue.Cast< bool >(); return inValue; }
 	}
 	return super::__SetField(inName,inValue,inCallProp);
 }
@@ -2727,8 +2948,8 @@ void Chat_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("activeThread",30,c9,d4,ee));
 	outFields->push(HX_("notificationSettings",ee,92,7b,79));
 	outFields->push(HX_("outbox",3d,6a,76,0c));
-	outFields->push(HX_("_encryptionMode",25,22,70,f1));
 	outFields->push(HX_("omemoContactDeviceIDs",6b,7d,55,9d));
+	outFields->push(HX_("omemoDeviceListRefreshed",1d,31,d5,44));
 	super::__GetFields(outFields);
 };
 
@@ -2759,8 +2980,8 @@ static ::hx::StorageInfo Chat_obj_sMemberStorageInfo[] = {
 	{::hx::fsString,(int)offsetof(Chat_obj,activeThread),HX_("activeThread",30,c9,d4,ee)},
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(Chat_obj,notificationSettings),HX_("notificationSettings",ee,92,7b,79)},
 	{::hx::fsObject /*  ::borogove::Outbox */ ,(int)offsetof(Chat_obj,outbox),HX_("outbox",3d,6a,76,0c)},
-	{::hx::fsInt,(int)offsetof(Chat_obj,_encryptionMode),HX_("_encryptionMode",25,22,70,f1)},
 	{::hx::fsObject /* ::Array< int > */ ,(int)offsetof(Chat_obj,omemoContactDeviceIDs),HX_("omemoContactDeviceIDs",6b,7d,55,9d)},
+	{::hx::fsBool,(int)offsetof(Chat_obj,omemoDeviceListRefreshed),HX_("omemoDeviceListRefreshed",1d,31,d5,44)},
 	{ ::hx::fsUnknown, 0, null()}
 };
 static ::hx::StaticInfo *Chat_obj_sStaticStorageInfo = 0;
@@ -2798,15 +3019,14 @@ static ::String Chat_obj_sMemberFields[] = {
 	HX_("activeThread",30,c9,d4,ee),
 	HX_("notificationSettings",ee,92,7b,79),
 	HX_("outbox",3d,6a,76,0c),
-	HX_("_encryptionMode",25,22,70,f1),
 	HX_("omemoContactDeviceIDs",6b,7d,55,9d),
+	HX_("omemoDeviceListRefreshed",1d,31,d5,44),
 	HX_("prepareIncomingMessage",ba,eb,c6,e3),
 	HX_("getMessagesBefore",a1,f1,44,11),
 	HX_("getMessagesAfter",3a,43,91,57),
 	HX_("getMessagesAround",6f,95,16,2d),
 	HX_("fetchFromSync",3f,23,bd,b2),
 	HX_("sendMessage",5f,89,1d,24),
-	HX_("sendMessage__fromC",fa,60,3a,f3),
 	HX_("sendMessageStanza",b4,2c,6d,3d),
 	HX_("markReadUpTo",59,68,2d,ee),
 	HX_("markReadUpTo__fromC",40,b5,45,b3),
@@ -2842,6 +3062,7 @@ static ::String Chat_obj_sMemberFields[] = {
 	HX_("updateFromRoster",fe,41,b5,57),
 	HX_("getPhoto",3c,d8,ca,21),
 	HX_("getPlaceholder",7d,c6,91,42),
+	HX_("hasEverRead",0e,b3,bc,ca),
 	HX_("readUpTo",2c,17,a3,75),
 	HX_("unreadCount",20,18,f1,a0),
 	HX_("setUnreadCount",9e,53,af,48),
@@ -2850,6 +3071,8 @@ static ::String Chat_obj_sMemberFields[] = {
 	HX_("setDisplayName",2b,4d,b0,d8),
 	HX_("getDisplayName",b7,64,90,b8),
 	HX_("getTags",8f,64,79,1f),
+	HX_("setTags",9b,f5,7a,12),
+	HX_("setTags__fromC",3e,34,75,ea),
 	HX_("setThreadSubject",00,93,d3,8d),
 	HX_("setPresence",fd,1b,38,97),
 	HX_("getCaps",d7,cb,3c,14),
@@ -2858,6 +3081,7 @@ static ::String Chat_obj_sMemberFields[] = {
 	HX_("isTrusted",2d,35,a5,1a),
 	HX_("livePresence",47,f9,16,b4),
 	HX_("syncing",67,fd,26,a7),
+	HX_("inMessageSync",dd,37,ad,3f),
 	HX_("canAudioCall",64,4a,90,e4),
 	HX_("canVideoCall",89,1c,93,ea),
 	HX_("startCall",20,92,ad,fa),
@@ -2867,7 +3091,6 @@ static ::String Chat_obj_sMemberFields[] = {
 	HX_("callStatus",70,be,2b,31),
 	HX_("dtmf",e9,ba,71,42),
 	HX_("videoTracks",63,c2,24,be),
-	HX_("encryptionMode",86,d9,0f,a8),
 	HX_("canSend",78,75,a8,6a),
 	HX_("canModerate",f3,d3,bd,00),
 	HX_("invite",c9,f1,db,9f),
@@ -2908,8 +3131,8 @@ void Chat_obj::__register()
 void Chat_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_111_boot)
-HXDLIN( 111)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_112_boot)
+HXDLIN( 112)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(43)
             				->setFixed(0,HX_("getMemberDetails__fromC",a7,ab,54,90), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
@@ -2953,11 +3176,11 @@ HXDLIN( 111)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(20,HX_("getMessagesAround__fromC",ea,f6,e1,db), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(21,HX_("markReadUpTo",59,68,2d,ee), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(22,HX_("close__fromC",c1,3f,6c,ef), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(21,HX_("setTags__fromC",3e,34,75,ea), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(23,HX_("sendMessage__fromC",fa,60,3a,f3), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(22,HX_("markReadUpTo",59,68,2d,ee), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(23,HX_("close__fromC",c1,3f,6c,ef), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(24,HX_("correctMessage",7d,36,c3,f4), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
@@ -2969,11 +3192,11 @@ HXDLIN( 111)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
             				->setFixed(28,HX_("getMessagesBefore",a1,f1,44,11), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(29,HX_("members",d9,2c,70,1a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(29,HX_("setTags",9b,f5,7a,12), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(30,HX_("getTags",8f,64,79,1f), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(30,HX_("members",d9,2c,70,1a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(31,HX_("sendMessage",5f,89,1d,24), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(31,HX_("getTags",8f,64,79,1f), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
             				->setFixed(32,HX_("getMessagesAround",6f,95,16,2d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
diff --git a/Sources/c_borogove/src/borogove/ChatAttachment.cpp b/Sources/c_borogove/src/borogove/ChatAttachment.cpp
index 330cea2..66646bc 100644
--- a/Sources/c_borogove/src/borogove/ChatAttachment.cpp
+++ b/Sources/c_borogove/src/borogove/ChatAttachment.cpp
@@ -1,6 +1,12 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
+#ifndef INCLUDED_Std
+#include <Std.h>
+#endif
+#ifndef INCLUDED__HaxeCBridge_HaxeArray_Impl_
+#include <_HaxeCBridge/HaxeArray_Impl_.h>
+#endif
 #ifndef INCLUDED__HaxeCBridge_Internal
 #include <_HaxeCBridge/Internal.h>
 #endif
@@ -10,30 +16,57 @@
 #ifndef INCLUDED_borogove_Hash
 #include <borogove/Hash.h>
 #endif
+#ifndef INCLUDED_borogove_Persistence
+#include <borogove/Persistence.h>
+#endif
+#ifndef INCLUDED_borogove_Stanza
+#include <borogove/Stanza.h>
+#endif
 #ifndef INCLUDED_cpp_Int64Map
 #include <cpp/Int64Map.h>
 #endif
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
+#ifndef INCLUDED_haxe_crypto_Base64
+#include <haxe/crypto/Base64.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+#ifndef INCLUDED_thenshim_Thenable
+#include <thenshim/Thenable.h>
+#endif
+#ifndef INCLUDED_thenshim__Promise_Promise_Impl_
+#include <thenshim/_Promise/Promise_Impl_.h>
+#endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_eade94af8cfe154e_85_new,"borogove.ChatAttachment","new",0x0991249a,"borogove.ChatAttachment.new","borogove/ChatMessage.hx",85,0xe4a3cadd)
+HX_DEFINE_STACK_FRAME(_hx_pos_eade94af8cfe154e_91_new,"borogove.ChatAttachment","new",0x0991249a,"borogove.ChatAttachment.new","borogove/ChatMessage.hx",91,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_426_cachedAt__fromC,"borogove.ChatAttachment","cachedAt__fromC",0x57a326de,"borogove.ChatAttachment.cachedAt__fromC","HaxeCBridge.hx",426,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_478_name__fromC,"borogove.ChatAttachment","name__fromC",0x1dc9cbc8,"borogove.ChatAttachment.name__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_478_mime__fromC,"borogove.ChatAttachment","mime__fromC",0x9f3f1f7f,"borogove.ChatAttachment.mime__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_478_size__fromC,"borogove.ChatAttachment","size__fromC",0x5ab7f812,"borogove.ChatAttachment.size__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_452_uris__fromC,"borogove.ChatAttachment","uris__fromC",0x3dcd4a0c,"borogove.ChatAttachment.uris__fromC","HaxeCBridge.hx",452,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_452_hashes__fromC,"borogove.ChatAttachment","hashes__fromC",0xa2cd28f7,"borogove.ChatAttachment.hashes__fromC","HaxeCBridge.hx",452,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_eade94af8cfe154e_103_create,"borogove.ChatAttachment","create",0xc334f302,"borogove.ChatAttachment.create","borogove/ChatMessage.hx",103,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_eade94af8cfe154e_57_boot,"borogove.ChatAttachment","boot",0x4d87e2b8,"borogove.ChatAttachment.boot","borogove/ChatMessage.hx",57,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_eade94af8cfe154e_117_lookup,"borogove.ChatAttachment","lookup",0xa8db2e80,"borogove.ChatAttachment.lookup","borogove/ChatMessage.hx",117,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_eade94af8cfe154e_114_lookup,"borogove.ChatAttachment","lookup",0xa8db2e80,"borogove.ChatAttachment.lookup","borogove/ChatMessage.hx",114,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_eade94af8cfe154e_127_lookupHashes,"borogove.ChatAttachment","lookupHashes",0xd5101a5c,"borogove.ChatAttachment.lookupHashes","borogove/ChatMessage.hx",127,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_eade94af8cfe154e_123_lookupHashes,"borogove.ChatAttachment","lookupHashes",0xd5101a5c,"borogove.ChatAttachment.lookupHashes","borogove/ChatMessage.hx",123,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_eade94af8cfe154e_135_sims,"borogove.ChatAttachment","sims",0x58bff402,"borogove.ChatAttachment.sims","borogove/ChatMessage.hx",135,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_eade94af8cfe154e_109_create,"borogove.ChatAttachment","create",0xc334f302,"borogove.ChatAttachment.create","borogove/ChatMessage.hx",109,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_eade94af8cfe154e_58_boot,"borogove.ChatAttachment","boot",0x4d87e2b8,"borogove.ChatAttachment.boot","borogove/ChatMessage.hx",58,0xe4a3cadd)
 namespace borogove{
 
 void ChatAttachment_obj::__construct(::String name,::String mime, ::Dynamic size,::Array< ::String > uris,::Array< ::Dynamic> hashes){
-            	HX_STACKFRAME(&_hx_pos_eade94af8cfe154e_85_new)
-HXLINE(  86)		this->name = name;
-HXLINE(  87)		this->mime = mime;
-HXLINE(  88)		this->size = size;
-HXLINE(  89)		this->uris = uris;
-HXLINE(  90)		this->hashes = hashes;
+            	HX_STACKFRAME(&_hx_pos_eade94af8cfe154e_91_new)
+HXLINE(  92)		this->name = name;
+HXLINE(  93)		this->mime = mime;
+HXLINE(  94)		this->size = size;
+HXLINE(  95)		this->uris = uris;
+HXLINE(  96)		this->hashes = hashes;
             	}
 
 Dynamic ChatAttachment_obj::__CreateEmpty() { return new ChatAttachment_obj; }
@@ -51,6 +84,14 @@ bool ChatAttachment_obj::_hx_isInstanceOf(int inClassId) {
 	return inClassId==(int)0x00000001 || inClassId==(int)0x7dd0539c;
 }
 
+::String ChatAttachment_obj::cachedAt__fromC(){
+            	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_426_cachedAt__fromC)
+HXDLIN( 426)		return this->cachedAt;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(ChatAttachment_obj,cachedAt__fromC,return )
+
 ::String ChatAttachment_obj::name__fromC(){
             	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_478_name__fromC)
 HXDLIN( 478)		return this->name;
@@ -95,7 +136,7 @@ HXDLIN( 452)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
 HXDLIN( 452)						{
 HXDLIN( 452)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
 HXDLIN( 452)							if (::hx::IsNull( store )) {
-HXLINE(2390)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2391)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
 HXLINE( 452)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
@@ -114,7 +155,7 @@ HXDLIN( 452)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
 HXDLIN( 452)			{
 HXDLIN( 452)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
 HXDLIN( 452)				if (::hx::IsNull( store1 )) {
-HXLINE(2390)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2391)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
 HXLINE( 452)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
@@ -134,61 +175,113 @@ size_t ChatAttachment_obj::hashes__fromC(void*** outPtr){
 HXDLIN( 452)		::Array< ::Dynamic> x = this->hashes;
 HXDLIN( 452)		if (::hx::IsNotNull( outPtr )) {
 HXDLIN( 452)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 452)			::Array< ::Dynamic> x1 = x;
-HXDLIN( 452)			{
-HXDLIN( 452)				int _g = 0;
-HXDLIN( 452)				while((_g < x1->length)){
-HXDLIN( 452)					 ::borogove::Hash el = x1->__get(_g).StaticCast<  ::borogove::Hash >();
-HXDLIN( 452)					_g = (_g + 1);
-HXDLIN( 452)					{
-HXDLIN( 452)						 ::Dynamic haxeObject = el;
-HXDLIN( 452)						void* ptr = haxeObject.mPtr;
-HXDLIN( 452)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 452)						{
-HXDLIN( 452)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 452)							if (::hx::IsNull( store )) {
-HXDLIN( 452)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
-            									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
-            									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 452)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
-            							}
-            							else {
-HXDLIN( 452)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
-            							}
-            						}
-            					}
-            				}
+HXDLIN( 452)			_hx_tmp->set_ref(::_HaxeCBridge::HaxeArray_Impl__obj::fromNullableArrayT(x));
+            		}
+HXDLIN( 452)		return ( (size_t)(x->length) );
+            	}
+
+
+::Dynamic ChatAttachment_obj::lookup(::Dynamic persistence){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::ChatAttachment,_gthis) HXARGC(1)
+            		 ::borogove::ChatAttachment _hx_run(::String id){
+            			HX_STACKFRAME(&_hx_pos_eade94af8cfe154e_117_lookup)
+HXLINE( 118)			_gthis->cachedAt = id;
+HXLINE( 119)			return _gthis;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_eade94af8cfe154e_114_lookup)
+HXDLIN( 114)		 ::borogove::ChatAttachment _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 115)		if (::hx::IsNotNull( this->cachedAt )) {
+HXLINE( 115)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::hx::ObjectPtr<OBJ_>(this));
+            		}
+HXLINE( 117)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->lookupHashes(persistence,this->hashes->copy()), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(ChatAttachment_obj,lookup,return )
+
+::Dynamic ChatAttachment_obj::lookupHashes(::Dynamic persistence,::Array< ::Dynamic> hashes){
+            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::ChatAttachment,_gthis,::Array< ::Dynamic>,hashes,::Dynamic,persistence) HXARGC(1)
+            		::Dynamic _hx_run(::String id){
+            			HX_STACKFRAME(&_hx_pos_eade94af8cfe154e_127_lookupHashes)
+HXLINE( 128)			if (::hx::IsNull( id )) {
+HXLINE( 128)				return _gthis->lookupHashes(persistence,hashes);
             			}
-HXDLIN( 452)			void** ptr1 = (void**)x1->getBase();
-HXDLIN( 452)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 452)			{
-HXDLIN( 452)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 452)				if (::hx::IsNull( store1 )) {
-HXDLIN( 452)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
-            						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
-            						->setFixed(1,HX_("value",71,7f,b8,31),x1));
-HXDLIN( 452)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
-            				}
-            				else {
-HXDLIN( 452)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
-            				}
+HXLINE( 130)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(id);
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_eade94af8cfe154e_123_lookupHashes)
+HXDLIN( 123)		 ::borogove::ChatAttachment _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 124)		 ::borogove::Hash hash = hashes->shift().StaticCast<  ::borogove::Hash >();
+HXLINE( 125)		if (::hx::IsNull( hash )) {
+HXLINE( 125)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            		}
+HXLINE( 127)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(persistence,hash), ::Dynamic(new _hx_Closure_0(_gthis,hashes,persistence)),null());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(ChatAttachment_obj,lookupHashes,return )
+
+ ::borogove::Stanza ChatAttachment_obj::sims(){
+            	HX_GC_STACKFRAME(&_hx_pos_eade94af8cfe154e_135_sims)
+HXLINE( 136)		 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("reference",cb,07,c5,5a), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("data",2a,56,63,42))
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reference:0",a5,00,10,5d))),null())->tag(HX_("media-sharing",33,1c,0a,3d), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sims:1",4f,1c,49,62))),null());
+HXLINE( 139)		stanza->tag(HX_("file",7c,ce,bb,43), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:file-transfer:5",9c,81,0d,37))),null());
+HXLINE( 140)		if (::hx::IsNotNull( this->name )) {
+HXLINE( 140)			stanza->textTag(HX_("name",4b,72,ff,48),this->name,null(),null());
+            		}
+HXLINE( 141)		stanza->textTag(HX_("media-type",03,ce,a4,7d),this->mime,null(),null());
+HXLINE( 142)		if (::hx::IsNotNull( this->size )) {
+HXLINE( 142)			stanza->textTag(HX_("size",c1,a0,53,4c),::Std_obj::string(this->size),null(),null());
+            		}
+HXLINE( 143)		{
+HXLINE( 143)			int _g = 0;
+HXDLIN( 143)			::Array< ::Dynamic> _g1 = this->hashes;
+HXDLIN( 143)			while((_g < _g1->length)){
+HXLINE( 143)				 ::borogove::Hash hash = _g1->__get(_g).StaticCast<  ::borogove::Hash >();
+HXDLIN( 143)				_g = (_g + 1);
+HXLINE( 144)				::String _hx_tmp = ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofData(hash->hash),null());
+HXDLIN( 144)				stanza->textTag(HX_("hash",ce,2f,08,45),_hx_tmp, ::Dynamic(::hx::Anon_obj::Create(2)
+            					->setFixed(0,HX_("algo",d3,ff,6f,40),hash->algorithm)
+            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hashes:2",90,ad,87,c7))),null());
             			}
-HXDLIN( 452)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 452)		return ( (size_t)(x->length) );
+HXLINE( 146)		stanza->up();
+HXLINE( 148)		stanza->tag(HX_("sources",38,0f,49,b9),null(),null());
+HXLINE( 149)		{
+HXLINE( 149)			int _g2 = 0;
+HXDLIN( 149)			::Array< ::String > _g3 = this->uris;
+HXDLIN( 149)			while((_g2 < _g3->length)){
+HXLINE( 149)				::String uri = _g3->__get(_g2);
+HXDLIN( 149)				_g2 = (_g2 + 1);
+HXLINE( 150)				stanza->tag(HX_("reference",cb,07,c5,5a), ::Dynamic(::hx::Anon_obj::Create(3)
+            					->setFixed(0,HX_("uri",6c,2b,59,00),uri)
+            					->setFixed(1,HX_("type",ba,f2,08,4d),HX_("data",2a,56,63,42))
+            					->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reference:0",a5,00,10,5d))),null())->up();
+            			}
+            		}
+HXLINE( 153)		stanza->up()->up()->up();
+HXLINE( 155)		return stanza;
             	}
 
 
+HX_DEFINE_DYNAMIC_FUNC0(ChatAttachment_obj,sims,return )
+
  ::borogove::ChatAttachment ChatAttachment_obj::create(::String name,::String mime,int size,::String uri){
-            	HX_GC_STACKFRAME(&_hx_pos_eade94af8cfe154e_103_create)
-HXDLIN( 103)		 ::Dynamic _hx_tmp;
-HXDLIN( 103)		if ((size > 0)) {
-HXDLIN( 103)			_hx_tmp = size;
+            	HX_GC_STACKFRAME(&_hx_pos_eade94af8cfe154e_109_create)
+HXDLIN( 109)		 ::Dynamic _hx_tmp;
+HXDLIN( 109)		if ((size > 0)) {
+HXDLIN( 109)			_hx_tmp = size;
             		}
             		else {
-HXDLIN( 103)			_hx_tmp = null();
+HXDLIN( 109)			_hx_tmp = null();
             		}
-HXDLIN( 103)		return  ::borogove::ChatAttachment_obj::__alloc( HX_CTX ,name,mime,_hx_tmp,::Array_obj< ::String >::__new(1)->init(0,uri),::Array_obj< ::Dynamic>::__new(0));
+HXDLIN( 109)		return  ::borogove::ChatAttachment_obj::__alloc( HX_CTX ,name,mime,_hx_tmp,::Array_obj< ::String >::__new(1)->init(0,uri),::Array_obj< ::Dynamic>::__new(0));
             	}
 
 
@@ -215,6 +308,7 @@ ChatAttachment_obj::ChatAttachment_obj()
 void ChatAttachment_obj::__Mark(HX_MARK_PARAMS)
 {
 	HX_MARK_BEGIN_CLASS(ChatAttachment);
+	HX_MARK_MEMBER_NAME(cachedAt,"cachedAt");
 	HX_MARK_MEMBER_NAME(name,"name");
 	HX_MARK_MEMBER_NAME(mime,"mime");
 	HX_MARK_MEMBER_NAME(size,"size");
@@ -225,6 +319,7 @@ void ChatAttachment_obj::__Mark(HX_MARK_PARAMS)
 
 void ChatAttachment_obj::__Visit(HX_VISIT_PARAMS)
 {
+	HX_VISIT_MEMBER_NAME(cachedAt,"cachedAt");
 	HX_VISIT_MEMBER_NAME(name,"name");
 	HX_VISIT_MEMBER_NAME(mime,"mime");
 	HX_VISIT_MEMBER_NAME(size,"size");
@@ -240,14 +335,25 @@ void ChatAttachment_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"mime") ) { return ::hx::Val( mime ); }
 		if (HX_FIELD_EQ(inName,"size") ) { return ::hx::Val( size ); }
 		if (HX_FIELD_EQ(inName,"uris") ) { return ::hx::Val( uris ); }
+		if (HX_FIELD_EQ(inName,"sims") ) { return ::hx::Val( sims_dyn() ); }
 		break;
 	case 6:
 		if (HX_FIELD_EQ(inName,"hashes") ) { return ::hx::Val( hashes ); }
+		if (HX_FIELD_EQ(inName,"lookup") ) { return ::hx::Val( lookup_dyn() ); }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"cachedAt") ) { return ::hx::Val( cachedAt ); }
 		break;
 	case 11:
 		if (HX_FIELD_EQ(inName,"name__fromC") ) { return ::hx::Val( name__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"mime__fromC") ) { return ::hx::Val( mime__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"size__fromC") ) { return ::hx::Val( size__fromC_dyn() ); }
+		break;
+	case 12:
+		if (HX_FIELD_EQ(inName,"lookupHashes") ) { return ::hx::Val( lookupHashes_dyn() ); }
+		break;
+	case 15:
+		if (HX_FIELD_EQ(inName,"cachedAt__fromC") ) { return ::hx::Val( cachedAt__fromC_dyn() ); }
 	}
 	return super::__Field(inName,inCallProp);
 }
@@ -272,12 +378,16 @@ bool ChatAttachment_obj::__GetStatic(const ::String &inName, Dynamic &outValue,
 		break;
 	case 6:
 		if (HX_FIELD_EQ(inName,"hashes") ) { hashes=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"cachedAt") ) { cachedAt=inValue.Cast< ::String >(); return inValue; }
 	}
 	return super::__SetField(inName,inValue,inCallProp);
 }
 
 void ChatAttachment_obj::__GetFields(Array< ::String> &outFields)
 {
+	outFields->push(HX_("cachedAt",75,d5,33,9a));
 	outFields->push(HX_("name",4b,72,ff,48));
 	outFields->push(HX_("mime",b4,4d,5c,48));
 	outFields->push(HX_("size",c1,a0,53,4c));
@@ -288,6 +398,7 @@ void ChatAttachment_obj::__GetFields(Array< ::String> &outFields)
 
 #ifdef HXCPP_SCRIPTABLE
 static ::hx::StorageInfo ChatAttachment_obj_sMemberStorageInfo[] = {
+	{::hx::fsString,(int)offsetof(ChatAttachment_obj,cachedAt),HX_("cachedAt",75,d5,33,9a)},
 	{::hx::fsString,(int)offsetof(ChatAttachment_obj,name),HX_("name",4b,72,ff,48)},
 	{::hx::fsString,(int)offsetof(ChatAttachment_obj,mime),HX_("mime",b4,4d,5c,48)},
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(ChatAttachment_obj,size),HX_("size",c1,a0,53,4c)},
@@ -299,6 +410,8 @@ static ::hx::StaticInfo *ChatAttachment_obj_sStaticStorageInfo = 0;
 #endif
 
 static ::String ChatAttachment_obj_sMemberFields[] = {
+	HX_("cachedAt",75,d5,33,9a),
+	HX_("cachedAt__fromC",a4,63,1b,f0),
 	HX_("name",4b,72,ff,48),
 	HX_("name__fromC",8e,ad,66,0e),
 	HX_("mime",b4,4d,5c,48),
@@ -307,6 +420,9 @@ static ::String ChatAttachment_obj_sMemberFields[] = {
 	HX_("size__fromC",d8,d9,54,4b),
 	HX_("uris",87,d3,ac,4d),
 	HX_("hashes",bc,97,4e,bb),
+	HX_("lookup",7a,a2,b5,61),
+	HX_("lookupHashes",d6,c5,b8,6d),
+	HX_("sims",7c,95,53,4c),
 	::String(null()) };
 
 ::hx::Class ChatAttachment_obj::__mClass;
@@ -342,18 +458,20 @@ void ChatAttachment_obj::__register()
 void ChatAttachment_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_eade94af8cfe154e_57_boot)
-HXDLIN(  57)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_eade94af8cfe154e_58_boot)
+HXDLIN(  58)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(6)
             				->setFixed(0,HX_("mime__fromC",45,01,dc,8f), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(1,HX_("hashes__fromC",3d,88,ba,9d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(2,HX_("name__fromC",8e,ad,66,0e), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(2,HX_("cachedAt__fromC",a4,63,1b,f0), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(3,HX_("name__fromC",8e,ad,66,0e), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(3,HX_("uris__fromC",d2,2b,6a,2e), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(4,HX_("uris__fromC",d2,2b,6a,2e), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(4,HX_("size__fromC",d8,d9,54,4b), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(5,HX_("size__fromC",d8,d9,54,4b), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
             	}
 }
diff --git a/Sources/c_borogove/src/borogove/ChatMessage.cpp b/Sources/c_borogove/src/borogove/ChatMessage.cpp
index b93900c..f794718 100644
--- a/Sources/c_borogove/src/borogove/ChatMessage.cpp
+++ b/Sources/c_borogove/src/borogove/ChatMessage.cpp
@@ -40,12 +40,21 @@
 #ifndef INCLUDED_borogove_ChatMessageBuilder
 #include <borogove/ChatMessageBuilder.h>
 #endif
+#ifndef INCLUDED_borogove_ChatMessageCombiner
+#include <borogove/ChatMessageCombiner.h>
+#endif
+#ifndef INCLUDED_borogove_Client
+#include <borogove/Client.h>
+#endif
 #ifndef INCLUDED_borogove_EmojiUtil
 #include <borogove/EmojiUtil.h>
 #endif
 #ifndef INCLUDED_borogove_EncryptionInfo
 #include <borogove/EncryptionInfo.h>
 #endif
+#ifndef INCLUDED_borogove_EventEmitter
+#include <borogove/EventEmitter.h>
+#endif
 #ifndef INCLUDED_borogove_Hash
 #include <borogove/Hash.h>
 #endif
@@ -106,9 +115,6 @@
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
-#ifndef INCLUDED_haxe_crypto_Base64
-#include <haxe/crypto/Base64.h>
-#endif
 #ifndef INCLUDED_haxe_ds_StringMap
 #include <haxe/ds/StringMap.h>
 #endif
@@ -118,20 +124,27 @@
 #ifndef INCLUDED_haxe_io_Encoding
 #include <haxe/io/Encoding.h>
 #endif
+#ifndef INCLUDED_thenshim_Thenable
+#include <thenshim/Thenable.h>
+#endif
+#ifndef INCLUDED_thenshim__Promise_Promise_Impl_
+#include <thenshim/_Promise/Promise_Impl_.h>
+#endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_20f00185d7354fd9_280_new,"borogove.ChatMessage","new",0x63820ad4,"borogove.ChatMessage.new","borogove/ChatMessage.hx",280,0xe4a3cadd)
+HX_DEFINE_STACK_FRAME(_hx_pos_20f00185d7354fd9_346_new,"borogove.ChatMessage","new",0x63820ad4,"borogove.ChatMessage.new","borogove/ChatMessage.hx",346,0xe4a3cadd)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_localId__fromC,"borogove.ChatMessage","localId__fromC",0x08ebd91f,"borogove.ChatMessage.localId__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_serverId__fromC,"borogove.ChatMessage","serverId__fromC",0x2996d32f,"borogove.ChatMessage.serverId__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_serverIdBy__fromC,"borogove.ChatMessage","serverIdBy__fromC",0xde126f98,"borogove.ChatMessage.serverIdBy__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_type__fromC,"borogove.ChatMessage","type__fromC",0x1bc87773,"borogove.ChatMessage.type__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_timestamp__fromC,"borogove.ChatMessage","timestamp__fromC",0x0b0acf6f,"borogove.ChatMessage.timestamp__fromC","HaxeCBridge.hx",478,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_timeSent__fromC,"borogove.ChatMessage","timeSent__fromC",0x4b6eb388,"borogove.ChatMessage.timeSent__fromC","HaxeCBridge.hx",478,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_timeReceived__fromC,"borogove.ChatMessage","timeReceived__fromC",0xd056b65f,"borogove.ChatMessage.timeReceived__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_senderId__fromC,"borogove.ChatMessage","senderId__fromC",0x731f27fd,"borogove.ChatMessage.senderId__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_426_replyToMessage__fromC,"borogove.ChatMessage","replyToMessage__fromC",0x9a6a4d2b,"borogove.ChatMessage.replyToMessage__fromC","HaxeCBridge.hx",426,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_threadId__fromC,"borogove.ChatMessage","threadId__fromC",0x2157ea48,"borogove.ChatMessage.threadId__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_452_attachments__fromC,"borogove.ChatMessage","attachments__fromC",0x5cad7f55,"borogove.ChatMessage.attachments__fromC","HaxeCBridge.hx",452,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_413_reactionKeys__fromC,"borogove.ChatMessage","reactionKeys__fromC",0x298e4650,"borogove.ChatMessage.reactionKeys__fromC","HaxeCBridge.hx",413,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_192_get_reactionKeys,"borogove.ChatMessage","get_reactionKeys",0xa96ab7d2,"borogove.ChatMessage.get_reactionKeys","borogove/ChatMessage.hx",192,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_199_reactionDetails,"borogove.ChatMessage","reactionDetails",0x6f916c8d,"borogove.ChatMessage.reactionDetails","borogove/ChatMessage.hx",199,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_256_get_reactionKeys,"borogove.ChatMessage","get_reactionKeys",0xa96ab7d2,"borogove.ChatMessage.get_reactionKeys","borogove/ChatMessage.hx",256,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_263_reactionDetails,"borogove.ChatMessage","reactionDetails",0x6f916c8d,"borogove.ChatMessage.reactionDetails","borogove/ChatMessage.hx",263,0xe4a3cadd)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_363_reactionDetails__fromC,"borogove.ChatMessage","reactionDetails__fromC",0x4e695f8c,"borogove.ChatMessage.reactionDetails__fromC","HaxeCBridge.hx",363,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_lang__fromC,"borogove.ChatMessage","lang__fromC",0xda5bf2bf,"borogove.ChatMessage.lang__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_direction__fromC,"borogove.ChatMessage","direction__fromC",0x7f45b126,"borogove.ChatMessage.direction__fromC","HaxeCBridge.hx",478,0xa18550d8)
@@ -140,154 +153,163 @@ HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_statusText__fromC,"borogove.Ch
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_452_versions__fromC,"borogove.ChatMessage","versions__fromC",0xbcbe8bf2,"borogove.ChatMessage.versions__fromC","HaxeCBridge.hx",452,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_478_encryption__fromC,"borogove.ChatMessage","encryption__fromC",0xe59a97ca,"borogove.ChatMessage.encryption__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_452_linkMetadata__fromC,"borogove.ChatMessage","linkMetadata__fromC",0xedfd4084,"borogove.ChatMessage.linkMetadata__fromC","HaxeCBridge.hx",452,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_323_reply,"borogove.ChatMessage","reply",0x1dcec89e,"borogove.ChatMessage.reply","borogove/ChatMessage.hx",323,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_332_getReplyId,"borogove.ChatMessage","getReplyId",0xd1e4a9bb,"borogove.ChatMessage.getReplyId","borogove/ChatMessage.hx",332,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_338_set_replyToMessage,"borogove.ChatMessage","set_replyToMessage",0xaa5f8a4b,"borogove.ChatMessage.set_replyToMessage","borogove/ChatMessage.hx",338,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_347_set_reactions,"borogove.ChatMessage","set_reactions",0x1fc2d601,"borogove.ChatMessage.set_reactions","borogove/ChatMessage.hx",347,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_348_set_reactions,"borogove.ChatMessage","set_reactions",0x1fc2d601,"borogove.ChatMessage.set_reactions","borogove/ChatMessage.hx",348,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_355_inlineHashReferences,"borogove.ChatMessage","inlineHashReferences",0x3ddc36fb,"borogove.ChatMessage.inlineHashReferences","borogove/ChatMessage.hx",355,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_353_inlineHashReferences,"borogove.ChatMessage","inlineHashReferences",0x3ddc36fb,"borogove.ChatMessage.inlineHashReferences","borogove/ChatMessage.hx",353,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_357_inlineHashReferences,"borogove.ChatMessage","inlineHashReferences",0x3ddc36fb,"borogove.ChatMessage.inlineHashReferences","borogove/ChatMessage.hx",357,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_377_htmlBody,"borogove.ChatMessage","htmlBody",0x6ebf2eb9,"borogove.ChatMessage.htmlBody","borogove/ChatMessage.hx",377,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_376_htmlBody,"borogove.ChatMessage","htmlBody",0x6ebf2eb9,"borogove.ChatMessage.htmlBody","borogove/ChatMessage.hx",376,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_390_htmlBody,"borogove.ChatMessage","htmlBody",0x6ebf2eb9,"borogove.ChatMessage.htmlBody","borogove/ChatMessage.hx",390,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_395_htmlBody,"borogove.ChatMessage","htmlBody",0x6ebf2eb9,"borogove.ChatMessage.htmlBody","borogove/ChatMessage.hx",395,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_415_body,"borogove.ChatMessage","body",0xa66065ae,"borogove.ChatMessage.body","borogove/ChatMessage.hx",415,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_422_subject,"borogove.ChatMessage","subject",0xc3d68620,"borogove.ChatMessage.subject","borogove/ChatMessage.hx",422,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_429_chatId,"borogove.ChatMessage","chatId",0xa815cadf,"borogove.ChatMessage.chatId","borogove/ChatMessage.hx",429,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_440_account,"borogove.ChatMessage","account",0x3ba88121,"borogove.ChatMessage.account","borogove/ChatMessage.hx",440,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_446_senderMemberStub,"borogove.ChatMessage","senderMemberStub",0x40e9e5c9,"borogove.ChatMessage.senderMemberStub","borogove/ChatMessage.hx",446,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_455_canReplace,"borogove.ChatMessage","canReplace",0x2db45a10,"borogove.ChatMessage.canReplace","borogove/ChatMessage.hx",455,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_465_isIncoming,"borogove.ChatMessage","isIncoming",0x6d0d0efc,"borogove.ChatMessage.isIncoming","borogove/ChatMessage.hx",465,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_472_threadIcon,"borogove.ChatMessage","threadIcon",0x18c4776f,"borogove.ChatMessage.threadIcon","borogove/ChatMessage.hx",472,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_479_moderationReason,"borogove.ChatMessage","moderationReason",0xcb530616,"borogove.ChatMessage.moderationReason","borogove/ChatMessage.hx",479,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_478_moderationReason,"borogove.ChatMessage","moderationReason",0xcb530616,"borogove.ChatMessage.moderationReason","borogove/ChatMessage.hx",478,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_487_callStatus,"borogove.ChatMessage","callStatus",0x08747a7c,"borogove.ChatMessage.callStatus","borogove/ChatMessage.hx",487,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_494_callSid,"borogove.ChatMessage","callSid",0xeea27984,"borogove.ChatMessage.callSid","borogove/ChatMessage.hx",494,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_500_callDuration,"borogove.ChatMessage","callDuration",0x14c9891e,"borogove.ChatMessage.callDuration","borogove/ChatMessage.hx",500,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_524_asStanza,"borogove.ChatMessage","asStanza",0xff32c993,"borogove.ChatMessage.asStanza","borogove/ChatMessage.hx",524,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_572_asStanza,"borogove.ChatMessage","asStanza",0xff32c993,"borogove.ChatMessage.asStanza","borogove/ChatMessage.hx",572,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_312_fromStanza,"borogove.ChatMessage","fromStanza",0x20841f0b,"borogove.ChatMessage.fromStanza","borogove/ChatMessage.hx",312,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_114_boot,"borogove.ChatMessage","boot",0xa6606f3e,"borogove.ChatMessage.boot","borogove/ChatMessage.hx",114,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_396_reply,"borogove.ChatMessage","reply",0x1dcec89e,"borogove.ChatMessage.reply","borogove/ChatMessage.hx",396,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_405_getReplyId,"borogove.ChatMessage","getReplyId",0xd1e4a9bb,"borogove.ChatMessage.getReplyId","borogove/ChatMessage.hx",405,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_411_set_replyToMessage,"borogove.ChatMessage","set_replyToMessage",0xaa5f8a4b,"borogove.ChatMessage.set_replyToMessage","borogove/ChatMessage.hx",411,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_420_set_reactions,"borogove.ChatMessage","set_reactions",0x1fc2d601,"borogove.ChatMessage.set_reactions","borogove/ChatMessage.hx",420,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_421_set_reactions,"borogove.ChatMessage","set_reactions",0x1fc2d601,"borogove.ChatMessage.set_reactions","borogove/ChatMessage.hx",421,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_428_inlineHashReferences,"borogove.ChatMessage","inlineHashReferences",0x3ddc36fb,"borogove.ChatMessage.inlineHashReferences","borogove/ChatMessage.hx",428,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_426_inlineHashReferences,"borogove.ChatMessage","inlineHashReferences",0x3ddc36fb,"borogove.ChatMessage.inlineHashReferences","borogove/ChatMessage.hx",426,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_430_inlineHashReferences,"borogove.ChatMessage","inlineHashReferences",0x3ddc36fb,"borogove.ChatMessage.inlineHashReferences","borogove/ChatMessage.hx",430,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_450_htmlBody,"borogove.ChatMessage","htmlBody",0x6ebf2eb9,"borogove.ChatMessage.htmlBody","borogove/ChatMessage.hx",450,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_449_htmlBody,"borogove.ChatMessage","htmlBody",0x6ebf2eb9,"borogove.ChatMessage.htmlBody","borogove/ChatMessage.hx",449,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_463_htmlBody,"borogove.ChatMessage","htmlBody",0x6ebf2eb9,"borogove.ChatMessage.htmlBody","borogove/ChatMessage.hx",463,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_468_htmlBody,"borogove.ChatMessage","htmlBody",0x6ebf2eb9,"borogove.ChatMessage.htmlBody","borogove/ChatMessage.hx",468,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_488_body,"borogove.ChatMessage","body",0xa66065ae,"borogove.ChatMessage.body","borogove/ChatMessage.hx",488,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_495_subject,"borogove.ChatMessage","subject",0xc3d68620,"borogove.ChatMessage.subject","borogove/ChatMessage.hx",495,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_502_chatId,"borogove.ChatMessage","chatId",0xa815cadf,"borogove.ChatMessage.chatId","borogove/ChatMessage.hx",502,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_513_account,"borogove.ChatMessage","account",0x3ba88121,"borogove.ChatMessage.account","borogove/ChatMessage.hx",513,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_519_senderMemberStub,"borogove.ChatMessage","senderMemberStub",0x40e9e5c9,"borogove.ChatMessage.senderMemberStub","borogove/ChatMessage.hx",519,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_528_canReplace,"borogove.ChatMessage","canReplace",0x2db45a10,"borogove.ChatMessage.canReplace","borogove/ChatMessage.hx",528,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_542_isIncoming,"borogove.ChatMessage","isIncoming",0x6d0d0efc,"borogove.ChatMessage.isIncoming","borogove/ChatMessage.hx",542,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_549_threadIcon,"borogove.ChatMessage","threadIcon",0x18c4776f,"borogove.ChatMessage.threadIcon","borogove/ChatMessage.hx",549,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_556_moderationReason,"borogove.ChatMessage","moderationReason",0xcb530616,"borogove.ChatMessage.moderationReason","borogove/ChatMessage.hx",556,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_555_moderationReason,"borogove.ChatMessage","moderationReason",0xcb530616,"borogove.ChatMessage.moderationReason","borogove/ChatMessage.hx",555,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_564_callStatus,"borogove.ChatMessage","callStatus",0x08747a7c,"borogove.ChatMessage.callStatus","borogove/ChatMessage.hx",564,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_571_callSid,"borogove.ChatMessage","callSid",0xeea27984,"borogove.ChatMessage.callSid","borogove/ChatMessage.hx",571,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_577_callDuration,"borogove.ChatMessage","callDuration",0x14c9891e,"borogove.ChatMessage.callDuration","borogove/ChatMessage.hx",577,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_611_fetchAttachment,"borogove.ChatMessage","fetchAttachment",0x09398531,"borogove.ChatMessage.fetchAttachment","borogove/ChatMessage.hx",611,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_614_fetchAttachment,"borogove.ChatMessage","fetchAttachment",0x09398531,"borogove.ChatMessage.fetchAttachment","borogove/ChatMessage.hx",614,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_621_fetchAttachment,"borogove.ChatMessage","fetchAttachment",0x09398531,"borogove.ChatMessage.fetchAttachment","borogove/ChatMessage.hx",621,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_609_fetchAttachment,"borogove.ChatMessage","fetchAttachment",0x09398531,"borogove.ChatMessage.fetchAttachment","borogove/ChatMessage.hx",609,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_365_fetchAttachment__fromC,"borogove.ChatMessage","fetchAttachment__fromC",0x18c56368,"borogove.ChatMessage.fetchAttachment__fromC","HaxeCBridge.hx",365,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_628_asStanza,"borogove.ChatMessage","asStanza",0xff32c993,"borogove.ChatMessage.asStanza","borogove/ChatMessage.hx",628,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_680_asStanza,"borogove.ChatMessage","asStanza",0xff32c993,"borogove.ChatMessage.asStanza","borogove/ChatMessage.hx",680,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_385_fromStanza,"borogove.ChatMessage","fromStanza",0x20841f0b,"borogove.ChatMessage.fromStanza","borogove/ChatMessage.hx",385,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_535_combineCorrections,"borogove.ChatMessage","combineCorrections",0x9a369ee2,"borogove.ChatMessage.combineCorrections","borogove/ChatMessage.hx",535,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_363_combineCorrections__fromC,"borogove.ChatMessage","combineCorrections__fromC",0xca6e51d7,"borogove.ChatMessage.combineCorrections__fromC","HaxeCBridge.hx",363,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_165_boot,"borogove.ChatMessage","boot",0xa6606f3e,"borogove.ChatMessage.boot","borogove/ChatMessage.hx",165,0xe4a3cadd)
 namespace borogove{
 
 void ChatMessage_obj::__construct( ::Dynamic params){
-            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_280_new)
-HXLINE( 281)		this->localId = ( (::String)(params->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)) );
-HXLINE( 282)		this->serverId = ( (::String)(params->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)) );
-HXLINE( 283)		this->serverIdBy = ( (::String)(params->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)) );
-HXLINE( 284)		this->sortId = ( (::String)(params->__Field(HX_("sortId",d9,7a,37,30),::hx::paccDynamic)) );
-HXLINE( 285)		 ::Dynamic tmp = params->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic);
-HXDLIN( 285)		int _hx_tmp;
-HXDLIN( 285)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 285)			_hx_tmp = ( (int)(tmp) );
+            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_346_new)
+HXLINE( 347)		this->localId = ( (::String)(params->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)) );
+HXLINE( 348)		this->serverId = ( (::String)(params->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)) );
+HXLINE( 349)		this->serverIdBy = ( (::String)(params->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)) );
+HXLINE( 350)		this->sortId = ( (::String)(params->__Field(HX_("sortId",d9,7a,37,30),::hx::paccDynamic)) );
+HXLINE( 351)		 ::Dynamic tmp = params->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic);
+HXDLIN( 351)		int _hx_tmp;
+HXDLIN( 351)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 351)			_hx_tmp = ( (int)(tmp) );
             		}
             		else {
-HXLINE( 285)			_hx_tmp = 0;
+HXLINE( 351)			_hx_tmp = 0;
             		}
-HXDLIN( 285)		this->type = _hx_tmp;
-HXLINE( 286)		 ::Dynamic tmp1 = params->__Field(HX_("syncPoint",f5,ff,94,98),::hx::paccDynamic);
-HXDLIN( 286)		bool _hx_tmp1;
-HXDLIN( 286)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 286)			_hx_tmp1 = ( (bool)(tmp1) );
+HXDLIN( 351)		this->type = _hx_tmp;
+HXLINE( 352)		 ::Dynamic tmp1 = params->__Field(HX_("syncPoint",f5,ff,94,98),::hx::paccDynamic);
+HXDLIN( 352)		bool _hx_tmp1;
+HXDLIN( 352)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 352)			_hx_tmp1 = ( (bool)(tmp1) );
             		}
             		else {
-HXLINE( 286)			_hx_tmp1 = false;
-            		}
-HXDLIN( 286)		this->syncPoint = _hx_tmp1;
-HXLINE( 287)		this->replyId = ( (::String)(params->__Field(HX_("replyId",a5,67,3a,ab),::hx::paccDynamic)) );
-HXLINE( 288)		this->timestamp = ( (::String)(params->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) );
-HXLINE( 289)		this->to = ( ( ::borogove::JID)(params->__Field(HX_("to",7b,65,00,00),::hx::paccDynamic)) );
-HXLINE( 290)		this->from = ( ( ::borogove::JID)(params->__Field(HX_("from",6a,a5,c2,43),::hx::paccDynamic)) );
-HXLINE( 291)		this->senderId = ( (::String)(params->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) );
-HXLINE( 292)		::Array< ::Dynamic> tmp2 = ( (::Array< ::Dynamic>)(params->__Field(HX_("recipients",7a,62,59,87),::hx::paccDynamic)) );
-HXDLIN( 292)		::Array< ::Dynamic> _hx_tmp2;
-HXDLIN( 292)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 292)			_hx_tmp2 = tmp2;
+HXLINE( 352)			_hx_tmp1 = false;
+            		}
+HXDLIN( 352)		this->syncPoint = _hx_tmp1;
+HXLINE( 353)		this->replyId = ( (::String)(params->__Field(HX_("replyId",a5,67,3a,ab),::hx::paccDynamic)) );
+HXLINE( 354)		this->timeSent = ( (::String)(params->__Field(HX_("timeSent",05,10,b2,ec),::hx::paccDynamic)) );
+HXLINE( 355)		this->timeReceived = ( (::String)(params->__Field(HX_("timeReceived",4e,22,9a,7b),::hx::paccDynamic)) );
+HXLINE( 356)		this->to = ( ( ::borogove::JID)(params->__Field(HX_("to",7b,65,00,00),::hx::paccDynamic)) );
+HXLINE( 357)		this->from = ( ( ::borogove::JID)(params->__Field(HX_("from",6a,a5,c2,43),::hx::paccDynamic)) );
+HXLINE( 358)		this->senderId = ( (::String)(params->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) );
+HXLINE( 359)		::Array< ::Dynamic> tmp2 = ( (::Array< ::Dynamic>)(params->__Field(HX_("recipients",7a,62,59,87),::hx::paccDynamic)) );
+HXDLIN( 359)		::Array< ::Dynamic> _hx_tmp2;
+HXDLIN( 359)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 359)			_hx_tmp2 = tmp2;
             		}
             		else {
-HXLINE( 292)			_hx_tmp2 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 359)			_hx_tmp2 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 292)		this->recipients = _hx_tmp2;
-HXLINE( 293)		::Array< ::Dynamic> tmp3 = ( (::Array< ::Dynamic>)(params->__Field(HX_("replyTo",45,71,3a,ab),::hx::paccDynamic)) );
-HXDLIN( 293)		::Array< ::Dynamic> _hx_tmp3;
-HXDLIN( 293)		if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 293)			_hx_tmp3 = tmp3;
+HXDLIN( 359)		this->recipients = _hx_tmp2;
+HXLINE( 360)		::Array< ::Dynamic> tmp3 = ( (::Array< ::Dynamic>)(params->__Field(HX_("replyTo",45,71,3a,ab),::hx::paccDynamic)) );
+HXDLIN( 360)		::Array< ::Dynamic> _hx_tmp3;
+HXDLIN( 360)		if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 360)			_hx_tmp3 = tmp3;
             		}
             		else {
-HXLINE( 293)			_hx_tmp3 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 360)			_hx_tmp3 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 293)		this->replyTo = _hx_tmp3;
-HXLINE( 294)		this->replyToMessage = ( ( ::borogove::ChatMessage)(params->__Field(HX_("replyToMessage",02,cf,60,a6),::hx::paccDynamic)) );
-HXLINE( 295)		this->threadId = ( (::String)(params->__Field(HX_("threadId",45,81,25,cc),::hx::paccDynamic)) );
-HXLINE( 296)		::Array< ::Dynamic> tmp4 = ( (::Array< ::Dynamic>)(params->__Field(HX_("attachments",30,df,33,e7),::hx::paccDynamic)) );
-HXDLIN( 296)		::Array< ::Dynamic> _hx_tmp4;
-HXDLIN( 296)		if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 296)			_hx_tmp4 = tmp4;
+HXDLIN( 360)		this->replyTo = _hx_tmp3;
+HXLINE( 361)		this->replyToMessage = ( ( ::borogove::ChatMessage)(params->__Field(HX_("replyToMessage",02,cf,60,a6),::hx::paccDynamic)) );
+HXLINE( 362)		this->threadId = ( (::String)(params->__Field(HX_("threadId",45,81,25,cc),::hx::paccDynamic)) );
+HXLINE( 363)		::Array< ::Dynamic> tmp4 = ( (::Array< ::Dynamic>)(params->__Field(HX_("attachments",30,df,33,e7),::hx::paccDynamic)) );
+HXDLIN( 363)		::Array< ::Dynamic> _hx_tmp4;
+HXDLIN( 363)		if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 363)			_hx_tmp4 = tmp4;
             		}
             		else {
-HXLINE( 296)			_hx_tmp4 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 363)			_hx_tmp4 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 296)		this->attachments = _hx_tmp4;
-HXLINE( 297)		 ::haxe::ds::StringMap tmp5 = ( ( ::haxe::ds::StringMap)(params->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) );
-HXDLIN( 297)		 ::haxe::ds::StringMap _hx_tmp5;
-HXDLIN( 297)		if (::hx::IsNotNull( tmp5 )) {
-HXLINE( 297)			_hx_tmp5 = tmp5;
+HXDLIN( 363)		this->attachments = _hx_tmp4;
+HXLINE( 364)		this->debug =  ::Dynamic(params->__Field(HX_("debug",53,52,1f,d7),::hx::paccDynamic));
+HXLINE( 365)		 ::haxe::ds::StringMap tmp5 = ( ( ::haxe::ds::StringMap)(params->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) );
+HXDLIN( 365)		 ::haxe::ds::StringMap _hx_tmp5;
+HXDLIN( 365)		if (::hx::IsNotNull( tmp5 )) {
+HXLINE( 365)			_hx_tmp5 = tmp5;
             		}
             		else {
-HXLINE( 297)			_hx_tmp5 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 365)			_hx_tmp5 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
             		}
-HXDLIN( 297)		this->reactions = _hx_tmp5;
-HXLINE( 298)		this->text = ( (::String)(params->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) );
-HXLINE( 299)		this->lang = ( (::String)(params->__Field(HX_("lang",ee,05,ad,47),::hx::paccDynamic)) );
-HXLINE( 300)		 ::Dynamic tmp6 = params->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic);
-HXDLIN( 300)		int _hx_tmp6;
-HXDLIN( 300)		if (::hx::IsNotNull( tmp6 )) {
-HXLINE( 300)			_hx_tmp6 = ( (int)(tmp6) );
+HXDLIN( 365)		this->reactions = _hx_tmp5;
+HXLINE( 366)		this->text = ( (::String)(params->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) );
+HXLINE( 367)		this->lang = ( (::String)(params->__Field(HX_("lang",ee,05,ad,47),::hx::paccDynamic)) );
+HXLINE( 368)		 ::Dynamic tmp6 = params->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic);
+HXDLIN( 368)		int _hx_tmp6;
+HXDLIN( 368)		if (::hx::IsNotNull( tmp6 )) {
+HXLINE( 368)			_hx_tmp6 = ( (int)(tmp6) );
             		}
             		else {
-HXLINE( 300)			_hx_tmp6 = 1;
+HXLINE( 368)			_hx_tmp6 = 1;
             		}
-HXDLIN( 300)		this->direction = _hx_tmp6;
-HXLINE( 301)		 ::Dynamic tmp7 = params->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic);
-HXDLIN( 301)		int _hx_tmp7;
-HXDLIN( 301)		if (::hx::IsNotNull( tmp7 )) {
-HXLINE( 301)			_hx_tmp7 = ( (int)(tmp7) );
+HXDLIN( 368)		this->direction = _hx_tmp6;
+HXLINE( 369)		 ::Dynamic tmp7 = params->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic);
+HXDLIN( 369)		int _hx_tmp7;
+HXDLIN( 369)		if (::hx::IsNotNull( tmp7 )) {
+HXLINE( 369)			_hx_tmp7 = ( (int)(tmp7) );
             		}
             		else {
-HXLINE( 301)			_hx_tmp7 = 0;
+HXLINE( 369)			_hx_tmp7 = 0;
             		}
-HXDLIN( 301)		this->status = _hx_tmp7;
-HXLINE( 302)		this->statusText = ( (::String)(params->__Field(HX_("statusText",ff,60,57,b1),::hx::paccDynamic)) );
-HXLINE( 303)		::Array< ::Dynamic> tmp8 = ( (::Array< ::Dynamic>)(params->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) );
-HXDLIN( 303)		::Array< ::Dynamic> _hx_tmp8;
-HXDLIN( 303)		if (::hx::IsNotNull( tmp8 )) {
-HXLINE( 303)			_hx_tmp8 = tmp8;
+HXDLIN( 369)		this->status = _hx_tmp7;
+HXLINE( 370)		this->statusText = ( (::String)(params->__Field(HX_("statusText",ff,60,57,b1),::hx::paccDynamic)) );
+HXLINE( 371)		::Array< ::Dynamic> tmp8 = ( (::Array< ::Dynamic>)(params->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) );
+HXDLIN( 371)		::Array< ::Dynamic> _hx_tmp8;
+HXDLIN( 371)		if (::hx::IsNotNull( tmp8 )) {
+HXLINE( 371)			_hx_tmp8 = tmp8;
             		}
             		else {
-HXLINE( 303)			_hx_tmp8 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 371)			_hx_tmp8 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 303)		this->versions = _hx_tmp8;
-HXLINE( 304)		::Array< ::Dynamic> tmp9 = ( (::Array< ::Dynamic>)(params->__Field(HX_("payloads",25,dd,d1,a1),::hx::paccDynamic)) );
-HXDLIN( 304)		::Array< ::Dynamic> _hx_tmp9;
-HXDLIN( 304)		if (::hx::IsNotNull( tmp9 )) {
-HXLINE( 304)			_hx_tmp9 = tmp9;
+HXDLIN( 371)		this->versions = _hx_tmp8;
+HXLINE( 372)		::Array< ::Dynamic> tmp9 = ( (::Array< ::Dynamic>)(params->__Field(HX_("payloads",25,dd,d1,a1),::hx::paccDynamic)) );
+HXDLIN( 372)		::Array< ::Dynamic> _hx_tmp9;
+HXDLIN( 372)		if (::hx::IsNotNull( tmp9 )) {
+HXLINE( 372)			_hx_tmp9 = tmp9;
             		}
             		else {
-HXLINE( 304)			_hx_tmp9 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 372)			_hx_tmp9 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 304)		this->payloads = _hx_tmp9;
-HXLINE( 305)		this->encryption = ( ( ::borogove::EncryptionInfo)(params->__Field(HX_("encryption",83,dc,39,4f),::hx::paccDynamic)) );
-HXLINE( 306)		::Array< ::Dynamic> tmp10 = ( (::Array< ::Dynamic>)(params->__Field(HX_("linkMetadata",89,45,ae,7c),::hx::paccDynamic)) );
-HXDLIN( 306)		::Array< ::Dynamic> _hx_tmp10;
-HXDLIN( 306)		if (::hx::IsNotNull( tmp10 )) {
-HXLINE( 306)			_hx_tmp10 = tmp10;
+HXDLIN( 372)		this->payloads = _hx_tmp9;
+HXLINE( 373)		this->encryption = ( ( ::borogove::EncryptionInfo)(params->__Field(HX_("encryption",83,dc,39,4f),::hx::paccDynamic)) );
+HXLINE( 374)		::Array< ::Dynamic> tmp10 = ( (::Array< ::Dynamic>)(params->__Field(HX_("linkMetadata",89,45,ae,7c),::hx::paccDynamic)) );
+HXDLIN( 374)		::Array< ::Dynamic> _hx_tmp10;
+HXDLIN( 374)		if (::hx::IsNotNull( tmp10 )) {
+HXLINE( 374)			_hx_tmp10 = tmp10;
             		}
             		else {
-HXLINE( 306)			_hx_tmp10 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 374)			_hx_tmp10 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 306)		this->linkMetadata = _hx_tmp10;
-HXLINE( 307)		this->stanza = ( ( ::borogove::Stanza)(params->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
+HXDLIN( 374)		this->linkMetadata = _hx_tmp10;
+HXLINE( 375)		this->stanza = ( ( ::borogove::Stanza)(params->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
             	}
 
 Dynamic ChatMessage_obj::__CreateEmpty() { return new ChatMessage_obj; }
@@ -337,13 +359,21 @@ HXDLIN( 478)		return this->type;
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,type__fromC,return )
 
-::String ChatMessage_obj::timestamp__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_478_timestamp__fromC)
-HXDLIN( 478)		return this->timestamp;
+::String ChatMessage_obj::timeSent__fromC(){
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_478_timeSent__fromC)
+HXDLIN( 478)		return this->timeSent;
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,timestamp__fromC,return )
+HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,timeSent__fromC,return )
+
+::String ChatMessage_obj::timeReceived__fromC(){
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_478_timeReceived__fromC)
+HXDLIN( 478)		return this->timeReceived;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,timeReceived__fromC,return )
 
 ::String ChatMessage_obj::senderId__fromC(){
             	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_478_senderId__fromC)
@@ -433,14 +463,14 @@ HXDLIN( 413)		return ( (size_t)(x->length) );
 ::Array< ::String > ChatMessage_obj::get_reactionKeys(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::ds::StringMap,_e) HXARGC(0)
             		 ::Dynamic _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_192_get_reactionKeys)
-HXDLIN( 192)			return _e->keys();
+            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_256_get_reactionKeys)
+HXDLIN( 256)			return _e->keys();
             		}
             		HX_END_LOCAL_FUNC0(return)
 
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_192_get_reactionKeys)
-HXDLIN( 192)		 ::haxe::ds::StringMap _e = this->reactions;
-HXDLIN( 192)		return ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_256_get_reactionKeys)
+HXDLIN( 256)		 ::haxe::ds::StringMap _e = this->reactions;
+HXDLIN( 256)		return ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(_e)))));
             	}
 
@@ -448,16 +478,16 @@ HXDLIN( 192)		return ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,get_reactionKeys,return )
 
 ::Array< ::Dynamic> ChatMessage_obj::reactionDetails(::String reactionKey){
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_199_reactionDetails)
-HXDLIN( 199)		::Dynamic this1 = this->reactions;
-HXDLIN( 199)		::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(( ( ::haxe::ds::StringMap)(this1) )->get(::haxe::io::Bytes_obj::ofString(reactionKey,null())->toString())) );
-HXDLIN( 199)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 199)			return tmp;
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_263_reactionDetails)
+HXDLIN( 263)		::Dynamic this1 = this->reactions;
+HXDLIN( 263)		::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(( ( ::haxe::ds::StringMap)(this1) )->get(::haxe::io::Bytes_obj::ofString(reactionKey,null())->toString())) );
+HXDLIN( 263)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 263)			return tmp;
             		}
             		else {
-HXDLIN( 199)			return ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 263)			return ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 199)		return null();
+HXDLIN( 263)		return null();
             	}
 
 
@@ -615,96 +645,96 @@ HXDLIN( 452)		return ( (size_t)(x->length) );
 
 
  ::borogove::ChatMessageBuilder ChatMessage_obj::reply(){
-            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_323_reply)
-HXLINE( 324)		 ::borogove::ChatMessageBuilder m =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
-HXLINE( 325)		m->type = this->type;
-HXLINE( 326)		::String tmp = this->threadId;
-HXDLIN( 326)		::String _hx_tmp;
-HXDLIN( 326)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 326)			_hx_tmp = tmp;
+            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_396_reply)
+HXLINE( 397)		 ::borogove::ChatMessageBuilder m =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
+HXLINE( 398)		m->type = this->type;
+HXLINE( 399)		::String tmp = this->threadId;
+HXDLIN( 399)		::String _hx_tmp;
+HXDLIN( 399)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 399)			_hx_tmp = tmp;
             		}
             		else {
-HXLINE( 326)			_hx_tmp = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE( 399)			_hx_tmp = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
             		}
-HXDLIN( 326)		m->threadId = _hx_tmp;
-HXLINE( 327)		m->replyToMessage = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 328)		return m;
+HXDLIN( 399)		m->threadId = _hx_tmp;
+HXLINE( 400)		m->replyToMessage = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 401)		return m;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,reply,return )
 
 ::String ChatMessage_obj::getReplyId(){
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_332_getReplyId)
-HXLINE( 333)		if (::hx::IsNotNull( this->replyId )) {
-HXLINE( 333)			return this->replyId;
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_405_getReplyId)
+HXLINE( 406)		if (::hx::IsNotNull( this->replyId )) {
+HXLINE( 406)			return this->replyId;
             		}
-HXLINE( 334)		if ((this->type == 2)) {
-HXLINE( 334)			return this->serverId;
+HXLINE( 407)		if ((this->type == 2)) {
+HXLINE( 407)			return this->serverId;
             		}
             		else {
-HXLINE( 334)			return this->localId;
+HXLINE( 407)			return this->localId;
             		}
-HXDLIN( 334)		return null();
+HXDLIN( 407)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,getReplyId,return )
 
  ::borogove::ChatMessage ChatMessage_obj::set_replyToMessage( ::borogove::ChatMessage m){
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_338_set_replyToMessage)
-HXLINE( 339)		 ::borogove::ChatMessage rtm = this->replyToMessage;
-HXLINE( 340)		if (::hx::IsNull( rtm )) {
-HXLINE( 340)			HX_STACK_DO_THROW(HX_("Cannot hydrate null replyToMessage",f1,d9,4b,bf));
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_411_set_replyToMessage)
+HXLINE( 412)		 ::borogove::ChatMessage rtm = this->replyToMessage;
+HXLINE( 413)		if (::hx::IsNull( rtm )) {
+HXLINE( 413)			HX_STACK_DO_THROW(HX_("Cannot hydrate null replyToMessage",f1,d9,4b,bf));
             		}
-HXLINE( 341)		bool _hx_tmp;
-HXDLIN( 341)		if (::hx::IsNotNull( rtm->serverId )) {
-HXLINE( 341)			_hx_tmp = (rtm->serverId != m->serverId);
+HXLINE( 414)		bool _hx_tmp;
+HXDLIN( 414)		if (::hx::IsNotNull( rtm->serverId )) {
+HXLINE( 414)			_hx_tmp = (rtm->serverId != m->serverId);
             		}
             		else {
-HXLINE( 341)			_hx_tmp = false;
+HXLINE( 414)			_hx_tmp = false;
             		}
-HXDLIN( 341)		if (_hx_tmp) {
-HXLINE( 341)			HX_STACK_DO_THROW(HX_("Hydrate serverId mismatch",43,6c,05,df));
+HXDLIN( 414)		if (_hx_tmp) {
+HXLINE( 414)			HX_STACK_DO_THROW(HX_("Hydrate serverId mismatch",43,6c,05,df));
             		}
-HXLINE( 342)		bool _hx_tmp1;
-HXDLIN( 342)		if (::hx::IsNotNull( rtm->localId )) {
-HXLINE( 342)			_hx_tmp1 = (rtm->localId != m->localId);
+HXLINE( 415)		bool _hx_tmp1;
+HXDLIN( 415)		if (::hx::IsNotNull( rtm->localId )) {
+HXLINE( 415)			_hx_tmp1 = (rtm->localId != m->localId);
             		}
             		else {
-HXLINE( 342)			_hx_tmp1 = false;
+HXLINE( 415)			_hx_tmp1 = false;
             		}
-HXDLIN( 342)		if (_hx_tmp1) {
-HXLINE( 342)			HX_STACK_DO_THROW(HX_("Hydrate localId mismatch",d5,ef,ca,42));
+HXDLIN( 415)		if (_hx_tmp1) {
+HXLINE( 415)			HX_STACK_DO_THROW(HX_("Hydrate localId mismatch",d5,ef,ca,42));
             		}
-HXLINE( 343)		return (this->replyToMessage = m);
+HXLINE( 416)		return (this->replyToMessage = m);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessage_obj,set_replyToMessage,return )
 
  ::haxe::ds::StringMap ChatMessage_obj::set_reactions( ::haxe::ds::StringMap r){
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_347_set_reactions)
-HXDLIN( 347)		 ::borogove::ChatMessage _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 348)		bool _hx_tmp;
-HXDLIN( 348)		if (::hx::IsNotNull( this->reactions )) {
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_420_set_reactions)
+HXDLIN( 420)		 ::borogove::ChatMessage _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 421)		bool _hx_tmp;
+HXDLIN( 421)		if (::hx::IsNotNull( this->reactions )) {
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::ChatMessage,_gthis) HXARGC(0)
             			 ::Dynamic _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_348_set_reactions)
-HXLINE( 348)				return _gthis->reactions->keys();
+            				HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_421_set_reactions)
+HXLINE( 421)				return _gthis->reactions->keys();
             			}
             			HX_END_LOCAL_FUNC0(return)
 
-HXLINE( 348)			_hx_tmp = !(::Lambda_obj::empty( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 421)			_hx_tmp = !(::Lambda_obj::empty( ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(_gthis))))));
             		}
             		else {
-HXLINE( 348)			_hx_tmp = false;
+HXLINE( 421)			_hx_tmp = false;
             		}
-HXDLIN( 348)		if (_hx_tmp) {
-HXLINE( 348)			HX_STACK_DO_THROW(HX_("Reactions already hydrated",4f,72,b8,9d));
+HXDLIN( 421)		if (_hx_tmp) {
+HXLINE( 421)			HX_STACK_DO_THROW(HX_("Reactions already hydrated",4f,72,b8,9d));
             		}
-HXLINE( 349)		return (this->reactions = r);
+HXLINE( 422)		return (this->reactions = r);
             	}
 
 
@@ -713,48 +743,48 @@ HX_DEFINE_DYNAMIC_FUNC1(ChatMessage_obj,set_reactions,return )
 ::Array< ::Dynamic> ChatMessage_obj::inlineHashReferences(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::Stanza p){
-            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_355_inlineHashReferences)
-HXLINE( 355)			if ((( (::String)(::Reflect_obj::field(p->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce))) {
-HXLINE( 355)				return (p->name == HX_("html",6b,95,16,45));
+            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_428_inlineHashReferences)
+HXLINE( 428)			if (::hx::IsEq( p->attr->get(HX_("xmlns",dc,31,74,60)),HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce) )) {
+HXLINE( 428)				return (p->name == HX_("html",6b,95,16,45));
             			}
             			else {
-HXLINE( 355)				return false;
+HXLINE( 428)				return false;
             			}
-HXDLIN( 355)			return false;
+HXDLIN( 428)			return false;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_353_inlineHashReferences)
-HXLINE( 354)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 355)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
-HXDLIN( 355)		 ::borogove::Stanza htmlBody;
-HXDLIN( 355)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 355)			htmlBody = tmp->getChild(HX_("body",a2,7a,1b,41),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8));
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_426_inlineHashReferences)
+HXLINE( 427)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 428)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN( 428)		 ::borogove::Stanza htmlBody;
+HXDLIN( 428)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 428)			htmlBody = tmp->getChild(HX_("body",a2,7a,1b,41),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8));
             		}
             		else {
-HXLINE( 355)			htmlBody = null();
+HXLINE( 428)			htmlBody = null();
             		}
-HXLINE( 356)		if (::hx::IsNotNull( htmlBody )) {
+HXLINE( 429)		if (::hx::IsNotNull( htmlBody )) {
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1,::Array< ::Dynamic>,result) HXARGC(1)
             			bool _hx_run( ::borogove::Stanza child){
-            				HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_357_inlineHashReferences)
-HXLINE( 358)				if ((child->name == HX_("img",03,0c,50,00))) {
-HXLINE( 359)					::String src = ( (::String)(::Reflect_obj::field(child->attr,HX_("src",e4,a6,57,00))) );
-HXLINE( 360)					if (::hx::IsNotNull( src )) {
-HXLINE( 361)						 ::borogove::Hash hash = ::borogove::Hash_obj::fromUri(src);
-HXLINE( 362)						if (::hx::IsNotNull( hash )) {
-HXLINE( 364)							result->push(hash);
+            				HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_430_inlineHashReferences)
+HXLINE( 431)				if ((child->name == HX_("img",03,0c,50,00))) {
+HXLINE( 432)					::String src = child->attr->get_string(HX_("src",e4,a6,57,00));
+HXLINE( 433)					if (::hx::IsNotNull( src )) {
+HXLINE( 434)						 ::borogove::Hash hash = ::borogove::Hash_obj::fromUri(src);
+HXLINE( 435)						if (::hx::IsNotNull( hash )) {
+HXLINE( 437)							result->push(hash);
             						}
             					}
-HXLINE( 367)					return true;
+HXLINE( 440)					return true;
             				}
-HXLINE( 369)				return false;
+HXLINE( 442)				return false;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 357)			htmlBody->traverse( ::Dynamic(new _hx_Closure_1(result)));
+HXLINE( 430)			htmlBody->traverse( ::Dynamic(new _hx_Closure_1(result)));
             		}
-HXLINE( 373)		return result;
+HXLINE( 446)		return result;
             	}
 
 
@@ -763,260 +793,260 @@ HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,inlineHashReferences,return )
 ::Array< ::Dynamic> ChatMessage_obj::htmlBody(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::Stanza p){
-            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_377_htmlBody)
-HXLINE( 377)			if ((( (::String)(::Reflect_obj::field(p->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce))) {
-HXLINE( 377)				return (p->name == HX_("html",6b,95,16,45));
+            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_450_htmlBody)
+HXLINE( 450)			if (::hx::IsEq( p->attr->get(HX_("xmlns",dc,31,74,60)),HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce) )) {
+HXLINE( 450)				return (p->name == HX_("html",6b,95,16,45));
             			}
             			else {
-HXLINE( 377)				return false;
+HXLINE( 450)				return false;
             			}
-HXDLIN( 377)			return false;
+HXDLIN( 450)			return false;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_376_htmlBody)
-HXLINE( 377)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
-HXDLIN( 377)		 ::borogove::Stanza htmlBody;
-HXDLIN( 377)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 377)			htmlBody = tmp->getChild(HX_("body",a2,7a,1b,41),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8));
+            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_449_htmlBody)
+HXLINE( 450)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN( 450)		 ::borogove::Stanza htmlBody;
+HXDLIN( 450)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 450)			htmlBody = tmp->getChild(HX_("body",a2,7a,1b,41),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8));
             		}
             		else {
-HXLINE( 377)			htmlBody = null();
+HXLINE( 450)			htmlBody = null();
             		}
-HXLINE( 378)		if (::hx::IsNotNull( htmlBody )) {
-HXLINE( 379)			return htmlBody->children;
+HXLINE( 451)		if (::hx::IsNotNull( htmlBody )) {
+HXLINE( 452)			return htmlBody->children;
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(2)
             			int _hx_run( ::Dynamic x, ::Dynamic y){
-            				HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_390_htmlBody)
-HXLINE( 390)				return (( (int)(y->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ) - ( (int)(x->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ));
+            				HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_463_htmlBody)
+HXLINE( 463)				return (( (int)(y->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ) - ( (int)(x->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ));
             			}
             			HX_END_LOCAL_FUNC2(return)
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             			bool _hx_run( ::borogove::Stanza p){
-            				HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_395_htmlBody)
-HXLINE( 395)				if ((( (::String)(::Reflect_obj::field(p->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:styling:0",48,d3,aa,fb))) {
-HXLINE( 395)					return (p->name == HX_("unstyled",2c,15,1a,18));
+            				HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_468_htmlBody)
+HXLINE( 468)				if (::hx::IsEq( p->attr->get(HX_("xmlns",dc,31,74,60)),HX_("urn:xmpp:styling:0",48,d3,aa,fb) )) {
+HXLINE( 468)					return (p->name == HX_("unstyled",2c,15,1a,18));
             				}
             				else {
-HXLINE( 395)					return false;
+HXLINE( 468)					return false;
             				}
-HXDLIN( 395)				return false;
+HXDLIN( 468)				return false;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 381)			::String bodyText;
-HXDLIN( 381)			::String tmp1 = this->text;
-HXDLIN( 381)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 381)				bodyText = tmp1;
+HXLINE( 454)			::String bodyText;
+HXDLIN( 454)			::String tmp1 = this->text;
+HXDLIN( 454)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 454)				bodyText = tmp1;
             			}
             			else {
-HXLINE( 381)				bodyText = HX_("",00,00,00,00);
+HXLINE( 454)				bodyText = HX_("",00,00,00,00);
             			}
-HXLINE( 382)			::Array< ::String > codepoints = ::borogove::StringUtil_obj::codepointArray(bodyText);
-HXLINE( 384)			::Array< ::Dynamic> _this = this->payloads;
-HXDLIN( 384)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 384)			{
-HXLINE( 384)				int _g1 = 0;
-HXDLIN( 384)				while((_g1 < _this->length)){
-HXLINE( 384)					 ::borogove::Stanza v = _this->__get(_g1).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 384)					_g1 = (_g1 + 1);
-HXLINE( 385)					bool fallbacks;
-HXDLIN( 385)					if ((( (::String)(::Reflect_obj::field(v->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:fallback:0",74,aa,56,9b))) {
-HXLINE( 386)						bool fallbacks1;
-HXDLIN( 386)						bool fallbacks2;
-HXDLIN( 386)						bool fallbacks3;
-HXDLIN( 386)						if ((( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) != HX_("jabber:x:oob",aa,8a,5f,ef))) {
-HXLINE( 386)							fallbacks3 = (( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) == HX_("urn:xmpp:sims:1",4f,1c,49,62));
+HXLINE( 455)			::Array< ::String > codepoints = ::borogove::StringUtil_obj::codepointArray(bodyText);
+HXLINE( 457)			::Array< ::Dynamic> _this = this->payloads;
+HXDLIN( 457)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 457)			{
+HXLINE( 457)				int _g1 = 0;
+HXDLIN( 457)				while((_g1 < _this->length)){
+HXLINE( 457)					 ::borogove::Stanza v = _this->__get(_g1).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 457)					_g1 = (_g1 + 1);
+HXLINE( 458)					bool fallbacks;
+HXDLIN( 458)					if (::hx::IsEq( v->attr->get(HX_("xmlns",dc,31,74,60)),HX_("urn:xmpp:fallback:0",74,aa,56,9b) )) {
+HXLINE( 459)						bool fallbacks1;
+HXDLIN( 459)						bool fallbacks2;
+HXDLIN( 459)						bool fallbacks3;
+HXDLIN( 459)						if (::hx::IsNotEq( v->attr->get(HX_("for",09,c7,4d,00)),HX_("jabber:x:oob",aa,8a,5f,ef) )) {
+HXLINE( 459)							fallbacks3 = ::hx::IsEq( v->attr->get(HX_("for",09,c7,4d,00)),HX_("urn:xmpp:sims:1",4f,1c,49,62) );
             						}
             						else {
-HXLINE( 386)							fallbacks3 = true;
+HXLINE( 459)							fallbacks3 = true;
             						}
-HXDLIN( 386)						if (fallbacks3) {
-HXLINE( 386)							fallbacks2 = (this->attachments->length > 0);
+HXDLIN( 459)						if (fallbacks3) {
+HXLINE( 459)							fallbacks2 = (this->attachments->length > 0);
             						}
             						else {
-HXLINE( 386)							fallbacks2 = false;
+HXLINE( 459)							fallbacks2 = false;
             						}
-HXDLIN( 386)						if (!(fallbacks2)) {
-HXLINE( 387)							if (::hx::IsNotNull( this->replyToMessage )) {
-HXLINE( 386)								fallbacks1 = (( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) == HX_("urn:xmpp:reply:0",c4,d5,6f,90));
+HXDLIN( 459)						if (!(fallbacks2)) {
+HXLINE( 460)							if (::hx::IsNotNull( this->replyToMessage )) {
+HXLINE( 459)								fallbacks1 = ::hx::IsEq( v->attr->get(HX_("for",09,c7,4d,00)),HX_("urn:xmpp:reply:0",c4,d5,6f,90) );
             							}
             							else {
-HXLINE( 386)								fallbacks1 = false;
+HXLINE( 459)								fallbacks1 = false;
             							}
             						}
             						else {
-HXLINE( 386)							fallbacks1 = true;
+HXLINE( 459)							fallbacks1 = true;
             						}
-HXDLIN( 386)						if (!(fallbacks1)) {
-HXLINE( 385)							fallbacks = (( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) == HX_("http://jabber.org/protocol/address",c0,fd,09,ed));
+HXDLIN( 459)						if (!(fallbacks1)) {
+HXLINE( 458)							fallbacks = ::hx::IsEq( v->attr->get(HX_("for",09,c7,4d,00)),HX_("http://jabber.org/protocol/address",c0,fd,09,ed) );
             						}
             						else {
-HXLINE( 385)							fallbacks = true;
+HXLINE( 458)							fallbacks = true;
             						}
             					}
             					else {
-HXLINE( 385)						fallbacks = false;
+HXLINE( 458)						fallbacks = false;
             					}
-HXLINE( 384)					if (fallbacks) {
-HXLINE( 384)						_g->push(v);
+HXLINE( 457)					if (fallbacks) {
+HXLINE( 457)						_g->push(v);
             					}
             				}
             			}
-HXDLIN( 384)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
-HXDLIN( 384)			{
-HXLINE( 384)				int _g2 = 0;
-HXDLIN( 384)				int _g3 = _g->length;
-HXDLIN( 384)				while((_g2 < _g3)){
-HXLINE( 384)					_g2 = (_g2 + 1);
-HXDLIN( 384)					int i = (_g2 - 1);
-HXDLIN( 384)					{
-HXLINE( 384)						 ::borogove::Stanza inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_g,i)) )->getChild(HX_("body",a2,7a,1b,41),null());
-HXDLIN( 384)						result->__unsafe_set(i,inValue);
+HXDLIN( 457)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
+HXDLIN( 457)			{
+HXLINE( 457)				int _g2 = 0;
+HXDLIN( 457)				int _g3 = _g->length;
+HXDLIN( 457)				while((_g2 < _g3)){
+HXLINE( 457)					_g2 = (_g2 + 1);
+HXDLIN( 457)					int i = (_g2 - 1);
+HXDLIN( 457)					{
+HXLINE( 457)						 ::borogove::Stanza inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_g,i)) )->getChild(HX_("body",a2,7a,1b,41),null());
+HXDLIN( 457)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 384)			::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(result->length);
-HXDLIN( 384)			{
-HXLINE( 384)				int _g4 = 0;
-HXDLIN( 384)				int _g5 = result->length;
-HXDLIN( 384)				while((_g4 < _g5)){
-HXLINE( 384)					_g4 = (_g4 + 1);
-HXDLIN( 384)					int i1 = (_g4 - 1);
-HXDLIN( 384)					{
-HXLINE( 389)						 ::borogove::Stanza b = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(result,i1)) );
-HXLINE( 384)						 ::Dynamic inValue1;
-HXLINE( 389)						if (::hx::IsNull( b )) {
-HXLINE( 384)							inValue1 = null();
+HXDLIN( 457)			::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(result->length);
+HXDLIN( 457)			{
+HXLINE( 457)				int _g4 = 0;
+HXDLIN( 457)				int _g5 = result->length;
+HXDLIN( 457)				while((_g4 < _g5)){
+HXLINE( 457)					_g4 = (_g4 + 1);
+HXDLIN( 457)					int i1 = (_g4 - 1);
+HXDLIN( 457)					{
+HXLINE( 462)						 ::borogove::Stanza b = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(result,i1)) );
+HXLINE( 457)						 ::Dynamic inValue1;
+HXLINE( 462)						if (::hx::IsNull( b )) {
+HXLINE( 457)							inValue1 = null();
             						}
             						else {
-HXLINE( 389)							int inValue2;
-HXDLIN( 389)							::String tmp2 = ( (::String)(::Reflect_obj::field(b->attr,HX_("start",62,74,0b,84))) );
-HXDLIN( 389)							::String tmp3;
-HXDLIN( 389)							if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 389)								tmp3 = tmp2;
+HXLINE( 462)							int inValue2;
+HXDLIN( 462)							::String tmp2 = b->attr->get_string(HX_("start",62,74,0b,84));
+HXDLIN( 462)							::String tmp3;
+HXDLIN( 462)							if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 462)								tmp3 = tmp2;
             							}
             							else {
-HXLINE( 389)								tmp3 = HX_("0",30,00,00,00);
+HXLINE( 462)								tmp3 = HX_("0",30,00,00,00);
             							}
-HXDLIN( 389)							 ::Dynamic tmp4 = ::Std_obj::parseInt(tmp3);
-HXDLIN( 389)							if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 389)								inValue2 = ( (int)(tmp4) );
+HXDLIN( 462)							 ::Dynamic tmp4 = ::Std_obj::parseInt(tmp3);
+HXDLIN( 462)							if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 462)								inValue2 = ( (int)(tmp4) );
             							}
             							else {
-HXLINE( 389)								inValue2 = 0;
+HXLINE( 462)								inValue2 = 0;
             							}
-HXDLIN( 389)							::String tmp5 = ( (::String)(::Reflect_obj::field(b->attr,HX_("end",db,03,4d,00))) );
-HXDLIN( 389)							::String tmp6;
-HXDLIN( 389)							if (::hx::IsNotNull( tmp5 )) {
-HXLINE( 389)								tmp6 = tmp5;
+HXDLIN( 462)							::String tmp5 = b->attr->get_string(HX_("end",db,03,4d,00));
+HXDLIN( 462)							::String tmp6;
+HXDLIN( 462)							if (::hx::IsNotNull( tmp5 )) {
+HXLINE( 462)								tmp6 = tmp5;
             							}
             							else {
-HXLINE( 389)								tmp6 = ::Std_obj::string(codepoints->length);
+HXLINE( 462)								tmp6 = ::Std_obj::string(codepoints->length);
             							}
-HXDLIN( 389)							 ::Dynamic tmp7 = ::Std_obj::parseInt(tmp6);
-HXDLIN( 389)							int inValue3;
-HXDLIN( 389)							if (::hx::IsNotNull( tmp7 )) {
-HXLINE( 389)								inValue3 = ( (int)(tmp7) );
+HXDLIN( 462)							 ::Dynamic tmp7 = ::Std_obj::parseInt(tmp6);
+HXDLIN( 462)							int inValue3;
+HXDLIN( 462)							if (::hx::IsNotNull( tmp7 )) {
+HXLINE( 462)								inValue3 = ( (int)(tmp7) );
             							}
             							else {
-HXLINE( 389)								inValue3 = codepoints->length;
+HXLINE( 462)								inValue3 = codepoints->length;
             							}
-HXLINE( 384)							inValue1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 457)							inValue1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             								->setFixed(0,HX_("start",62,74,0b,84),inValue2)
             								->setFixed(1,HX_("end",db,03,4d,00),inValue3));
             						}
-HXDLIN( 384)						result1->__unsafe_set(i1,inValue1);
+HXDLIN( 457)						result1->__unsafe_set(i1,inValue1);
             					}
             				}
             			}
-HXDLIN( 384)			::Array< ::Dynamic> _g6 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 384)			{
-HXLINE( 384)				int _g7 = 0;
-HXDLIN( 384)				while((_g7 < result1->length)){
-HXLINE( 384)					 ::Dynamic v1 = result1->__get(_g7);
-HXDLIN( 384)					_g7 = (_g7 + 1);
-HXDLIN( 384)					if (::hx::IsNotNull( v1 )) {
-HXLINE( 384)						_g6->push(v1);
+HXDLIN( 457)			::Array< ::Dynamic> _g6 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 457)			{
+HXLINE( 457)				int _g7 = 0;
+HXDLIN( 457)				while((_g7 < result1->length)){
+HXLINE( 457)					 ::Dynamic v1 = result1->__get(_g7);
+HXDLIN( 457)					_g7 = (_g7 + 1);
+HXDLIN( 457)					if (::hx::IsNotNull( v1 )) {
+HXLINE( 457)						_g6->push(v1);
             					}
             				}
             			}
-HXLINE( 390)			_g6->sort( ::Dynamic(new _hx_Closure_1()));
-HXLINE( 391)			{
-HXLINE( 391)				int _g8 = 0;
-HXDLIN( 391)				while((_g8 < _g6->length)){
-HXLINE( 391)					 ::Dynamic fallback = _g6->__get(_g8);
-HXDLIN( 391)					_g8 = (_g8 + 1);
-HXLINE( 392)					codepoints->removeRange( ::Dynamic(fallback->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)),(( (int)(fallback->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) ) - ( (int)(fallback->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) )));
+HXLINE( 463)			_g6->sort( ::Dynamic(new _hx_Closure_1()));
+HXLINE( 464)			{
+HXLINE( 464)				int _g8 = 0;
+HXDLIN( 464)				while((_g8 < _g6->length)){
+HXLINE( 464)					 ::Dynamic fallback = _g6->__get(_g8);
+HXDLIN( 464)					_g8 = (_g8 + 1);
+HXLINE( 465)					codepoints->removeRange( ::Dynamic(fallback->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)),(( (int)(fallback->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) ) - ( (int)(fallback->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) )));
             				}
             			}
-HXLINE( 394)			::String body = codepoints->join(HX_("",00,00,00,00));
-HXLINE( 395)			if (::hx::IsNull( ::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_2())) )) {
-HXLINE( 396)				::Array< ::Dynamic> _this1 = ::borogove::XEP0393_obj::parse(body);
-HXDLIN( 396)				::Array< ::Dynamic> result2 = ::Array_obj< ::Dynamic>::__new(_this1->length);
-HXDLIN( 396)				{
-HXLINE( 396)					int _g9 = 0;
-HXDLIN( 396)					int _g10 = _this1->length;
-HXDLIN( 396)					while((_g9 < _g10)){
-HXLINE( 396)						_g9 = (_g9 + 1);
-HXDLIN( 396)						int i2 = (_g9 - 1);
-HXDLIN( 396)						{
-HXLINE( 396)							 ::borogove::Node inValue4 = ::borogove::Node_obj::Element(_hx_array_unsafe_get(_this1,i2));
-HXDLIN( 396)							result2->__unsafe_set(i2,inValue4);
+HXLINE( 467)			::String body = codepoints->join(HX_("",00,00,00,00));
+HXLINE( 468)			if (::hx::IsNull( ::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_2())) )) {
+HXLINE( 469)				::Array< ::Dynamic> _this1 = ::borogove::XEP0393_obj::parse(body);
+HXDLIN( 469)				::Array< ::Dynamic> result2 = ::Array_obj< ::Dynamic>::__new(_this1->length);
+HXDLIN( 469)				{
+HXLINE( 469)					int _g9 = 0;
+HXDLIN( 469)					int _g10 = _this1->length;
+HXDLIN( 469)					while((_g9 < _g10)){
+HXLINE( 469)						_g9 = (_g9 + 1);
+HXDLIN( 469)						int i2 = (_g9 - 1);
+HXDLIN( 469)						{
+HXLINE( 469)							 ::borogove::Node inValue4 = ::borogove::Node_obj::Element(_hx_array_unsafe_get(_this1,i2));
+HXDLIN( 469)							result2->__unsafe_set(i2,inValue4);
             						}
             					}
             				}
-HXDLIN( 396)				return result2;
+HXDLIN( 469)				return result2;
             			}
             			else {
-HXLINE( 398)				::Array< ::String > _this2 = body.split(HX_("\n\n",c0,08,00,00));
-HXDLIN( 398)				::Array< ::Dynamic> result3 = ::Array_obj< ::Dynamic>::__new(_this2->length);
-HXDLIN( 398)				{
-HXLINE( 398)					int _g11 = 0;
-HXDLIN( 398)					int _g12 = _this2->length;
-HXDLIN( 398)					while((_g11 < _g12)){
-HXLINE( 398)						_g11 = (_g11 + 1);
-HXDLIN( 398)						int i3 = (_g11 - 1);
-HXDLIN( 398)						{
-HXLINE( 399)							::Array< ::Dynamic> _g13 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 399)							{
-HXLINE( 399)								 ::Dynamic x = ( (::String)(_hx_array_unsafe_get(_this2,i3)) ).split(HX_("\n",0a,00,00,00))->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 399)								while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 399)									 ::borogove::Node _hx_tmp = ::borogove::Node_obj::CData(( (::String)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) ));
-HXDLIN( 399)									_g13->push(::Array_obj< ::Dynamic>::__new(2)->init(0,_hx_tmp)->init(1,::borogove::Node_obj::Element( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("br",d0,55,00,00),null()))));
+HXLINE( 471)				::Array< ::String > _this2 = body.split(HX_("\n\n",c0,08,00,00));
+HXDLIN( 471)				::Array< ::Dynamic> result3 = ::Array_obj< ::Dynamic>::__new(_this2->length);
+HXDLIN( 471)				{
+HXLINE( 471)					int _g11 = 0;
+HXDLIN( 471)					int _g12 = _this2->length;
+HXDLIN( 471)					while((_g11 < _g12)){
+HXLINE( 471)						_g11 = (_g11 + 1);
+HXDLIN( 471)						int i3 = (_g11 - 1);
+HXDLIN( 471)						{
+HXLINE( 472)							::Array< ::Dynamic> _g13 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 472)							{
+HXLINE( 472)								 ::Dynamic x = ( (::String)(_hx_array_unsafe_get(_this2,i3)) ).split(HX_("\n",0a,00,00,00))->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 472)								while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 472)									 ::borogove::Node _hx_tmp = ::borogove::Node_obj::CData(( (::String)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) ));
+HXDLIN( 472)									_g13->push(::Array_obj< ::Dynamic>::__new(2)->init(0,_hx_tmp)->init(1,::borogove::Node_obj::Element( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("br",d0,55,00,00),null(),null()))));
             								}
             							}
-HXDLIN( 399)							::Array< ::Dynamic> _g14 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 399)							{
-HXLINE( 399)								 ::Dynamic e = _g13->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 399)								while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 399)									 ::Dynamic x1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 399)									while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 399)										_g14->push(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+HXDLIN( 472)							::Array< ::Dynamic> _g14 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 472)							{
+HXLINE( 472)								 ::Dynamic e = _g13->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 472)								while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 472)									 ::Dynamic x1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 472)									while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 472)										_g14->push(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             									}
             								}
             							}
-HXLINE( 400)							_g14->pop().StaticCast<  ::borogove::Node >();
-HXLINE( 398)							 ::borogove::Node inValue5 = ::borogove::Node_obj::Element( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("p",70,00,00,00),null())->addChildNodes(_g14));
-HXDLIN( 398)							result3->__unsafe_set(i3,inValue5);
+HXLINE( 473)							_g14->pop().StaticCast<  ::borogove::Node >();
+HXLINE( 471)							 ::borogove::Node inValue5 = ::borogove::Node_obj::Element( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("p",70,00,00,00),null(),null())->addChildNodes(_g14));
+HXDLIN( 471)							result3->__unsafe_set(i3,inValue5);
             						}
             					}
             				}
-HXDLIN( 398)				return result3;
+HXDLIN( 471)				return result3;
             			}
             		}
-HXLINE( 378)		return null();
+HXLINE( 451)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,htmlBody,return )
 
  ::borogove::Html ChatMessage_obj::body( ::borogove::Member sender){
-            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_415_body)
-HXDLIN( 415)		return  ::borogove::Html_obj::__alloc( HX_CTX ,this->htmlBody(),sender);
+            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_488_body)
+HXDLIN( 488)		return  ::borogove::Html_obj::__alloc( HX_CTX ,this->htmlBody(),sender);
             	}
 
 
@@ -1025,204 +1055,211 @@ HX_DEFINE_DYNAMIC_FUNC1(ChatMessage_obj,body,return )
 ::String ChatMessage_obj::subject(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::Stanza el){
-            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_422_subject)
-HXDLIN( 422)			return (el->name == HX_("subject",ac,01,88,29));
+            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_495_subject)
+HXDLIN( 495)			return (el->name == HX_("subject",ac,01,88,29));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_422_subject)
-HXDLIN( 422)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
-HXDLIN( 422)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 422)			return tmp->getText();
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_495_subject)
+HXDLIN( 495)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN( 495)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 495)			return tmp->getText();
             		}
             		else {
-HXDLIN( 422)			return null();
+HXDLIN( 495)			return null();
             		}
-HXDLIN( 422)		return null();
+HXDLIN( 495)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,subject,return )
 
 ::String ChatMessage_obj::chatId(){
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_429_chatId)
-HXDLIN( 429)		if (this->isIncoming()) {
-HXLINE( 430)			::Array< ::Dynamic> _this = this->replyTo;
-HXDLIN( 430)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 430)			{
-HXLINE( 430)				int _g = 0;
-HXDLIN( 430)				int _g1 = _this->length;
-HXDLIN( 430)				while((_g < _g1)){
-HXLINE( 430)					_g = (_g + 1);
-HXDLIN( 430)					int i = (_g - 1);
-HXDLIN( 430)					{
-HXLINE( 430)						::String inValue = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) )->asBare()->asString();
-HXDLIN( 430)						result->__unsafe_set(i,inValue);
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_502_chatId)
+HXDLIN( 502)		if (this->isIncoming()) {
+HXLINE( 503)			::Array< ::Dynamic> _this = this->replyTo;
+HXDLIN( 503)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 503)			{
+HXLINE( 503)				int _g = 0;
+HXDLIN( 503)				int _g1 = _this->length;
+HXDLIN( 503)				while((_g < _g1)){
+HXLINE( 503)					_g = (_g + 1);
+HXDLIN( 503)					int i = (_g - 1);
+HXDLIN( 503)					{
+HXLINE( 503)						::String inValue = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) )->asBare()->asString();
+HXDLIN( 503)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 430)			return result->join(HX_("\n",0a,00,00,00));
+HXDLIN( 503)			return result->join(HX_("\n",0a,00,00,00));
             		}
             		else {
-HXLINE( 432)			::Array< ::Dynamic> _this1 = this->recipients;
-HXDLIN( 432)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
-HXDLIN( 432)			{
-HXLINE( 432)				int _g2 = 0;
-HXDLIN( 432)				int _g3 = _this1->length;
-HXDLIN( 432)				while((_g2 < _g3)){
-HXLINE( 432)					_g2 = (_g2 + 1);
-HXDLIN( 432)					int i1 = (_g2 - 1);
-HXDLIN( 432)					{
-HXLINE( 432)						::String inValue1 = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this1,i1)) )->asString();
-HXDLIN( 432)						result1->__unsafe_set(i1,inValue1);
+HXLINE( 505)			::Array< ::Dynamic> _this1 = this->recipients;
+HXDLIN( 505)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
+HXDLIN( 505)			{
+HXLINE( 505)				int _g2 = 0;
+HXDLIN( 505)				int _g3 = _this1->length;
+HXDLIN( 505)				while((_g2 < _g3)){
+HXLINE( 505)					_g2 = (_g2 + 1);
+HXDLIN( 505)					int i1 = (_g2 - 1);
+HXDLIN( 505)					{
+HXLINE( 505)						::String inValue1 = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this1,i1)) )->asString();
+HXDLIN( 505)						result1->__unsafe_set(i1,inValue1);
             					}
             				}
             			}
-HXDLIN( 432)			return result1->join(HX_("\n",0a,00,00,00));
+HXDLIN( 505)			return result1->join(HX_("\n",0a,00,00,00));
             		}
-HXLINE( 429)		return null();
+HXLINE( 502)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,chatId,return )
 
 ::String ChatMessage_obj::account(){
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_440_account)
-HXDLIN( 440)		::String tmp;
-HXDLIN( 440)		if (!(this->isIncoming())) {
-HXDLIN( 440)			 ::borogove::JID tmp1 = this->from;
-HXDLIN( 440)			 ::borogove::JID tmp2;
-HXDLIN( 440)			if (::hx::IsNotNull( tmp1 )) {
-HXDLIN( 440)				tmp2 = tmp1->asBare();
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_513_account)
+HXDLIN( 513)		::String tmp;
+HXDLIN( 513)		if (!(this->isIncoming())) {
+HXDLIN( 513)			 ::borogove::JID tmp1 = this->from;
+HXDLIN( 513)			 ::borogove::JID tmp2;
+HXDLIN( 513)			if (::hx::IsNotNull( tmp1 )) {
+HXDLIN( 513)				tmp2 = tmp1->asBare();
             			}
             			else {
-HXDLIN( 440)				tmp2 = null();
+HXDLIN( 513)				tmp2 = null();
             			}
-HXDLIN( 440)			if (::hx::IsNotNull( tmp2 )) {
-HXDLIN( 440)				tmp = tmp2->asString();
+HXDLIN( 513)			if (::hx::IsNotNull( tmp2 )) {
+HXDLIN( 513)				tmp = tmp2->asString();
             			}
             			else {
-HXDLIN( 440)				tmp = null();
+HXDLIN( 513)				tmp = null();
             			}
             		}
             		else {
-HXDLIN( 440)			 ::borogove::JID tmp3 = this->to;
-HXDLIN( 440)			 ::borogove::JID tmp4;
-HXDLIN( 440)			if (::hx::IsNotNull( tmp3 )) {
-HXDLIN( 440)				tmp4 = tmp3->asBare();
+HXDLIN( 513)			 ::borogove::JID tmp3 = this->to;
+HXDLIN( 513)			 ::borogove::JID tmp4;
+HXDLIN( 513)			if (::hx::IsNotNull( tmp3 )) {
+HXDLIN( 513)				tmp4 = tmp3->asBare();
             			}
             			else {
-HXDLIN( 440)				tmp4 = null();
+HXDLIN( 513)				tmp4 = null();
             			}
-HXDLIN( 440)			if (::hx::IsNotNull( tmp4 )) {
-HXDLIN( 440)				tmp = tmp4->asString();
+HXDLIN( 513)			if (::hx::IsNotNull( tmp4 )) {
+HXDLIN( 513)				tmp = tmp4->asString();
             			}
             			else {
-HXDLIN( 440)				tmp = null();
+HXDLIN( 513)				tmp = null();
             			}
             		}
-HXDLIN( 440)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 440)			return tmp;
+HXDLIN( 513)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 513)			return tmp;
             		}
             		else {
-HXDLIN( 440)			HX_STACK_DO_THROW(HX_("from or to is null",7f,19,89,e6));
+HXDLIN( 513)			HX_STACK_DO_THROW(HX_("from or to is null",7f,19,89,e6));
             		}
-HXDLIN( 440)		return null();
+HXDLIN( 513)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,account,return )
 
  ::borogove::Member ChatMessage_obj::senderMemberStub(){
-            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_446_senderMemberStub)
-HXLINE( 447)		::String displayName;
-HXDLIN( 447)		::String tmp;
-HXDLIN( 447)		if ((this->type == 2)) {
-HXLINE( 447)			tmp = this->from->resource;
+            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_519_senderMemberStub)
+HXLINE( 520)		::String displayName;
+HXDLIN( 520)		::String tmp;
+HXDLIN( 520)		bool tmp1;
+HXDLIN( 520)		if ((this->type != 2)) {
+HXLINE( 520)			tmp1 = (this->type == 3);
             		}
             		else {
-HXLINE( 447)			tmp = this->from->asString();
+HXLINE( 520)			tmp1 = true;
             		}
-HXDLIN( 447)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 447)			displayName = tmp;
+HXDLIN( 520)		if (tmp1) {
+HXLINE( 520)			tmp = this->from->resource;
             		}
             		else {
-HXLINE( 447)			displayName = HX_(" ",20,00,00,00);
+HXLINE( 520)			tmp = this->from->asBare()->asString();
+            		}
+HXDLIN( 520)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 520)			displayName = tmp;
             		}
-HXLINE( 448)		::String _hx_tmp = this->senderId;
-HXDLIN( 448)		return  ::borogove::Member_obj::__alloc( HX_CTX ,_hx_tmp,displayName,null(),!(this->isIncoming()),::Array_obj< ::Dynamic>::__new(0),this->from, ::haxe::ds::StringMap_obj::__alloc( HX_CTX ),null());
+            		else {
+HXLINE( 520)			displayName = HX_(" ",20,00,00,00);
+            		}
+HXLINE( 521)		::String _hx_tmp = this->senderId;
+HXDLIN( 521)		return  ::borogove::Member_obj::__alloc( HX_CTX ,_hx_tmp,displayName,null(),!(this->isIncoming()),::Array_obj< ::Dynamic>::__new(0),this->from, ::haxe::ds::StringMap_obj::__alloc( HX_CTX ),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,senderMemberStub,return )
 
 bool ChatMessage_obj::canReplace( ::borogove::ChatMessage other){
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_455_canReplace)
-HXLINE( 456)		bool _hx_tmp;
-HXDLIN( 456)		bool _hx_tmp1;
-HXDLIN( 456)		if (::hx::IsNotNull( other->serverId )) {
-HXLINE( 456)			_hx_tmp1 = (this->serverId == other->serverId);
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_528_canReplace)
+HXLINE( 529)		bool _hx_tmp;
+HXDLIN( 529)		bool _hx_tmp1;
+HXDLIN( 529)		if (::hx::IsNotNull( other->serverId )) {
+HXLINE( 529)			_hx_tmp1 = (this->serverId == other->serverId);
             		}
             		else {
-HXLINE( 456)			_hx_tmp1 = false;
+HXLINE( 529)			_hx_tmp1 = false;
             		}
-HXDLIN( 456)		if (_hx_tmp1) {
-HXLINE( 456)			_hx_tmp = (this->serverIdBy == other->serverIdBy);
+HXDLIN( 529)		if (_hx_tmp1) {
+HXLINE( 529)			_hx_tmp = (this->serverIdBy == other->serverIdBy);
             		}
             		else {
-HXLINE( 456)			_hx_tmp = false;
+HXLINE( 529)			_hx_tmp = false;
             		}
-HXDLIN( 456)		if (!(_hx_tmp)) {
-HXLINE( 457)			if ((this->localId == other->localId)) {
-HXLINE( 458)				bool _hx_tmp2;
-HXDLIN( 458)				if (!(this->isIncoming())) {
-HXLINE( 458)					_hx_tmp2 = !(other->isIncoming());
+HXDLIN( 529)		if (!(_hx_tmp)) {
+HXLINE( 530)			if ((this->localId == other->localId)) {
+HXLINE( 531)				bool _hx_tmp2;
+HXDLIN( 531)				if (!(this->isIncoming())) {
+HXLINE( 531)					_hx_tmp2 = !(other->isIncoming());
             				}
             				else {
-HXLINE( 458)					_hx_tmp2 = false;
+HXLINE( 531)					_hx_tmp2 = false;
             				}
-HXDLIN( 458)				if (!(_hx_tmp2)) {
-HXLINE( 458)					if ((this->senderId == other->senderId)) {
-HXLINE( 458)						return (this->versions->length > 0);
+HXDLIN( 531)				if (!(_hx_tmp2)) {
+HXLINE( 531)					if ((this->senderId == other->senderId)) {
+HXLINE( 531)						return (this->versions->length > 0);
             					}
             					else {
-HXLINE( 458)						return false;
+HXLINE( 531)						return false;
             					}
             				}
             				else {
-HXLINE( 458)					return true;
+HXLINE( 531)					return true;
             				}
             			}
             			else {
-HXLINE( 457)				return false;
+HXLINE( 530)				return false;
             			}
             		}
             		else {
-HXLINE( 456)			return true;
+HXLINE( 529)			return true;
             		}
-HXDLIN( 456)		return false;
+HXDLIN( 529)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessage_obj,canReplace,return )
 
 bool ChatMessage_obj::isIncoming(){
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_465_isIncoming)
-HXDLIN( 465)		return (this->direction == 0);
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_542_isIncoming)
+HXDLIN( 542)		return (this->direction == 0);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,isIncoming,return )
 
 ::String ChatMessage_obj::threadIcon(){
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_472_threadIcon)
-HXDLIN( 472)		if (::hx::IsNull( this->threadId )) {
-HXDLIN( 472)			return null();
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_549_threadIcon)
+HXDLIN( 549)		if (::hx::IsNull( this->threadId )) {
+HXDLIN( 549)			return null();
             		}
             		else {
-HXDLIN( 472)			return ::borogove::Identicon_obj::svg(this->threadId);
+HXDLIN( 549)			return ::borogove::Identicon_obj::svg(this->threadId);
             		}
-HXDLIN( 472)		return null();
+HXDLIN( 549)		return null();
             	}
 
 
@@ -1231,26 +1268,26 @@ HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,threadIcon,return )
 ::String ChatMessage_obj::moderationReason(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::Stanza el){
-            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_479_moderationReason)
-HXLINE( 479)			return (( (::String)(::Reflect_obj::field(el->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:message-retract:1",16,5e,d8,d5));
+            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_556_moderationReason)
+HXLINE( 556)			return ::hx::IsEq( el->attr->get(HX_("xmlns",dc,31,74,60)),HX_("urn:xmpp:message-retract:1",16,5e,d8,d5) );
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_478_moderationReason)
-HXLINE( 479)		 ::borogove::Stanza retracted = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
-HXLINE( 480)		if (::hx::IsNull( retracted )) {
-HXLINE( 480)			return null();
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_555_moderationReason)
+HXLINE( 556)		 ::borogove::Stanza retracted = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
+HXLINE( 557)		if (::hx::IsNull( retracted )) {
+HXLINE( 557)			return null();
             		}
             		else {
-HXLINE( 480)			::String tmp = retracted->getChildText(HX_("reason",c4,0f,9d,fc),null());
-HXDLIN( 480)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 480)				return tmp;
+HXLINE( 557)			::String tmp = retracted->getChildText(HX_("reason",c4,0f,9d,fc),null());
+HXDLIN( 557)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 557)				return tmp;
             			}
             			else {
-HXLINE( 480)				return HX_("moderated",41,37,3b,22);
+HXLINE( 557)				return HX_("moderated",41,37,3b,22);
             			}
             		}
-HXDLIN( 480)		return null();
+HXDLIN( 557)		return null();
             	}
 
 
@@ -1259,20 +1296,20 @@ HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,moderationReason,return )
 ::String ChatMessage_obj::callStatus(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::Stanza el){
-            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_487_callStatus)
-HXDLIN( 487)			return (( (::String)(::Reflect_obj::field(el->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_564_callStatus)
+HXDLIN( 564)			return ::hx::IsEq( el->attr->get(HX_("xmlns",dc,31,74,60)),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07) );
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_487_callStatus)
-HXDLIN( 487)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
-HXDLIN( 487)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 487)			return tmp->name;
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_564_callStatus)
+HXDLIN( 564)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN( 564)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 564)			return tmp->name;
             		}
             		else {
-HXDLIN( 487)			return null();
+HXDLIN( 564)			return null();
             		}
-HXDLIN( 487)		return null();
+HXDLIN( 564)		return null();
             	}
 
 
@@ -1281,371 +1318,497 @@ HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,callStatus,return )
 ::String ChatMessage_obj::callSid(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::Stanza el){
-            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_494_callSid)
-HXDLIN( 494)			return (( (::String)(::Reflect_obj::field(el->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_571_callSid)
+HXDLIN( 571)			return ::hx::IsEq( el->attr->get(HX_("xmlns",dc,31,74,60)),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07) );
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_494_callSid)
-HXDLIN( 494)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
-HXDLIN( 494)		 ::Dynamic tmp1;
-HXDLIN( 494)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 494)			tmp1 = tmp->attr;
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_571_callSid)
+HXDLIN( 571)		 ::borogove::Stanza tmp = ( ( ::borogove::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN( 571)		 ::haxe::ds::StringMap tmp1;
+HXDLIN( 571)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 571)			tmp1 = tmp->attr;
             		}
             		else {
-HXDLIN( 494)			tmp1 = null();
+HXDLIN( 571)			tmp1 = null();
             		}
-HXDLIN( 494)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN( 494)			return ( (::String)(::Reflect_obj::field(tmp1,HX_("id",db,5b,00,00))) );
+HXDLIN( 571)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN( 571)			return tmp1->get_string(HX_("id",db,5b,00,00));
             		}
             		else {
-HXDLIN( 494)			return null();
+HXDLIN( 571)			return null();
             		}
-HXDLIN( 494)		return null();
+HXDLIN( 571)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,callSid,return )
 
 ::String ChatMessage_obj::callDuration(){
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_500_callDuration)
-HXLINE( 501)		if ((this->versions->length < 2)) {
-HXLINE( 501)			return null();
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_577_callDuration)
+HXLINE( 578)		if ((this->versions->length < 2)) {
+HXLINE( 578)			return null();
             		}
-HXLINE( 502)		::String startedStr = this->versions->__get((this->versions->length - 1)).StaticCast<  ::borogove::ChatMessage >()->timestamp;
-HXLINE( 504)		::String _g = this->callStatus();
-HXDLIN( 504)		if (::hx::IsNull( _g )) {
-HXLINE( 519)			return null();
+HXLINE( 579)		::String startedStr = this->versions->__get((this->versions->length - 1)).StaticCast<  ::borogove::ChatMessage >()->timeReceived;
+HXLINE( 581)		::String _g = this->callStatus();
+HXDLIN( 581)		if (::hx::IsNull( _g )) {
+HXLINE( 596)			return null();
             		}
             		else {
-HXLINE( 504)			::String _hx_switch_0 = _g;
+HXLINE( 581)			::String _hx_switch_0 = _g;
             			if (  (_hx_switch_0==HX_("finish",53,40,7f,86)) ){
-HXLINE( 506)				::String endedStr = this->versions->__get(0).StaticCast<  ::borogove::ChatMessage >()->timestamp;
-HXLINE( 507)				bool _hx_tmp;
-HXDLIN( 507)				if (::hx::IsNotNull( startedStr )) {
-HXLINE( 507)					_hx_tmp = ::hx::IsNull( endedStr );
+HXLINE( 583)				::String endedStr = this->versions->__get(0).StaticCast<  ::borogove::ChatMessage >()->timeReceived;
+HXLINE( 584)				bool _hx_tmp;
+HXDLIN( 584)				if (::hx::IsNotNull( startedStr )) {
+HXLINE( 584)					_hx_tmp = ::hx::IsNull( endedStr );
             				}
             				else {
-HXLINE( 507)					_hx_tmp = true;
+HXLINE( 584)					_hx_tmp = true;
             				}
-HXDLIN( 507)				if (_hx_tmp) {
-HXLINE( 507)					return null();
+HXDLIN( 584)				if (_hx_tmp) {
+HXLINE( 584)					return null();
             				}
-HXLINE( 508)				Float started = ::datetime::utils::DateTimeUtils_obj::fromString(startedStr);
-HXLINE( 511)				return ::datetime::utils::DateTimeIntervalUtils_obj::strftime(::datetime::_DateTimeInterval::DateTimeInterval_Impl__obj::create(started,((::datetime::utils::DateTimeUtils_obj::fromString(endedStr) - ((Float)62135596800.0)) + ((Float)62135596800.0))),HX_("%I:%S",44,2d,40,7e));
-HXLINE( 505)				goto _hx_goto_64;
+HXLINE( 585)				Float started = ::datetime::utils::DateTimeUtils_obj::fromString(startedStr);
+HXLINE( 588)				return ::datetime::utils::DateTimeIntervalUtils_obj::strftime(::datetime::_DateTimeInterval::DateTimeInterval_Impl__obj::create(started,((::datetime::utils::DateTimeUtils_obj::fromString(endedStr) - ((Float)62135596800.0)) + ((Float)62135596800.0))),HX_("%I:%S",44,2d,40,7e));
+HXLINE( 582)				goto _hx_goto_65;
             			}
             			if (  (_hx_switch_0==HX_("proceed",2e,96,4a,f1)) ){
-HXLINE( 513)				if (::hx::IsNull( startedStr )) {
-HXLINE( 513)					return null();
+HXLINE( 590)				if (::hx::IsNull( startedStr )) {
+HXLINE( 590)					return null();
             				}
-HXLINE( 514)				Float started1 = ::datetime::utils::DateTimeUtils_obj::fromString(startedStr);
-HXLINE( 517)				return ::datetime::utils::DateTimeIntervalUtils_obj::strftime(::datetime::_DateTimeInterval::DateTimeInterval_Impl__obj::create(started1,((( ::__hxcpp_date_now() + ((Float)62135596800.0)) - ((Float)62135596800.0)) + ((Float)62135596800.0))),HX_("%I:%S",44,2d,40,7e));
-HXLINE( 512)				goto _hx_goto_64;
+HXLINE( 591)				Float started1 = ::datetime::utils::DateTimeUtils_obj::fromString(startedStr);
+HXLINE( 594)				return ::datetime::utils::DateTimeIntervalUtils_obj::strftime(::datetime::_DateTimeInterval::DateTimeInterval_Impl__obj::create(started1,((( ::__hxcpp_date_now() + ((Float)62135596800.0)) - ((Float)62135596800.0)) + ((Float)62135596800.0))),HX_("%I:%S",44,2d,40,7e));
+HXLINE( 589)				goto _hx_goto_65;
             			}
             			/* default */{
-HXLINE( 519)				return null();
+HXLINE( 596)				return null();
             			}
-            			_hx_goto_64:;
+            			_hx_goto_65:;
             		}
-HXLINE( 504)		return null();
+HXLINE( 581)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,callDuration,return )
 
+::Dynamic ChatMessage_obj::fetchAttachment( ::borogove::ChatAttachment attachment, ::borogove::Client client,::hx::Null< bool >  __o_storeIfNeeded){
+            		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_2,bool,storeIfNeeded, ::borogove::ChatMessage,_gthis, ::borogove::Client,client,bool,hasNoHashes, ::borogove::ChatAttachment,attachment) HXARGC(1)
+            		::Dynamic _hx_run( ::borogove::ChatAttachment r){
+            			HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_611_fetchAttachment)
+HXLINE( 612)			bool _hx_tmp;
+HXDLIN( 612)			if (hasNoHashes) {
+HXLINE( 612)				_hx_tmp = (r->hashes->length > 0);
+            			}
+            			else {
+HXLINE( 612)				_hx_tmp = false;
+            			}
+HXDLIN( 612)			if (_hx_tmp) {
+HXLINE( 613)				if (::hx::IsNotNull( _gthis->stanza )) {
+            					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::ChatAttachment,attachment) HXARGC(1)
+            					bool _hx_run( ::borogove::Stanza child){
+            						HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_614_fetchAttachment)
+HXLINE( 614)						 ::borogove::Node _g = child->find(HX_("{urn:xmpp:sims:1}media-sharing/sources/{urn:xmpp:reference:0}reference@uri",de,d6,bd,75));
+HXDLIN( 614)						if (::hx::IsNull( _g )) {
+HXLINE( 616)							return false;
+            						}
+            						else {
+HXLINE( 614)							if ((_g->_hx_getIndex() == 1)) {
+HXLINE( 615)								return (_g->_hx_getString(0) == attachment->uris->__get(0));
+            							}
+            							else {
+HXLINE( 616)								return false;
+            							}
+            						}
+HXLINE( 614)						return false;
+            					}
+            					HX_END_LOCAL_FUNC1(return)
+
+HXLINE( 614)					 ::borogove::Stanza sims = ( ( ::borogove::Stanza)(::Lambda_obj::find(_gthis->stanza->allTags(null(),null()), ::Dynamic(new _hx_Closure_0(attachment)))) );
+HXLINE( 618)					bool _hx_tmp1;
+HXDLIN( 618)					if (::hx::IsNotNull( sims )) {
+HXLINE( 618)						_hx_tmp1 = ::hx::IsNotNull( _gthis->stanza );
+            					}
+            					else {
+HXLINE( 618)						_hx_tmp1 = false;
+            					}
+HXDLIN( 618)					if (_hx_tmp1) {
+HXLINE( 618)						_gthis->stanza->removeChild(sims);
+            					}
+HXLINE( 619)					if (::hx::IsNotNull( _gthis->stanza )) {
+HXLINE( 619)						 ::borogove::Stanza _gthis1 = _gthis->stanza;
+HXDLIN( 619)						_gthis1->addChild(r->sims());
+            					}
+            				}
+HXLINE( 621)				if (storeIfNeeded) {
+            					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::ChatAttachment,r) HXARGC(1)
+            					 ::borogove::ChatAttachment _hx_run(::Array< ::Dynamic> _){
+            						HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_621_fetchAttachment)
+HXLINE( 621)						return r;
+            					}
+            					HX_END_LOCAL_FUNC1(return)
+
+HXLINE( 621)					return ::thenshim::_Promise::Promise_Impl__obj::then(client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,_gthis)), ::Dynamic(new _hx_Closure_1(r)),null());
+            				}
+            			}
+HXLINE( 623)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(r);
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		bool storeIfNeeded = __o_storeIfNeeded.Default(true);
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_609_fetchAttachment)
+HXDLIN( 609)		 ::borogove::ChatMessage _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 610)		bool hasNoHashes = (attachment->hashes->length < 1);
+HXLINE( 611)		return ::thenshim::_Promise::Promise_Impl__obj::then(client->fetchAttachment(attachment), ::Dynamic(new _hx_Closure_2(storeIfNeeded,_gthis,client,hasNoHashes,attachment)),null());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC3(ChatMessage_obj,fetchAttachment,return )
+
+void ChatMessage_obj::fetchAttachment__fromC( ::borogove::ChatAttachment attachment, ::borogove::Client client,::hx::Null< bool >  __o_storeIfNeeded,::cpp::Function< void  (void*,void*) > handler,void* handler__context){
+            		bool storeIfNeeded = __o_storeIfNeeded.Default(true);
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_365_fetchAttachment__fromC)
+HXDLIN( 365)		if (::hx::IsNull( handler )) {
+HXDLIN( 365)			this->fetchAttachment(attachment,client,storeIfNeeded);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::borogove::ChatAttachment v){
+            				HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_365_fetchAttachment__fromC)
+HXDLIN( 365)				::cpp::Function< void  (void*,void*) > handler1 = handler;
+HXLINE( 334)				 ::Dynamic haxeObject = v;
+HXDLIN( 334)				void* ptr = haxeObject.mPtr;
+HXDLIN( 334)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 334)				{
+HXLINE( 334)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 334)					if (::hx::IsNull( store )) {
+HXLINE( 334)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
+HXDLIN( 334)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            					}
+            					else {
+HXLINE( 334)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 365)				handler1(ptr,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_365_fetchAttachment__fromC)
+HXDLIN( 365)				handler(null(),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->fetchAttachment(attachment,client,storeIfNeeded), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
  ::borogove::Stanza ChatMessage_obj::asStanza(){
-            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_524_asStanza)
-HXDLIN( 524)		 ::borogove::ChatMessage _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 525)		if (::hx::IsNotNull( this->stanza )) {
-HXLINE( 525)			return this->stanza;
+            	HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_628_asStanza)
+HXDLIN( 628)		 ::borogove::ChatMessage _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 629)		if (::hx::IsNotNull( this->stanza )) {
+HXLINE( 629)			return this->stanza;
             		}
-HXLINE( 527)		::String body = this->text;
-HXLINE( 528)		::String attrs;
-HXDLIN( 528)		if ((this->type == 2)) {
-HXLINE( 528)			attrs = HX_("groupchat",97,1d,c8,e5);
+HXLINE( 631)		::String body = this->text;
+HXLINE( 632)		::String attrs;
+HXDLIN( 632)		if ((this->type == 2)) {
+HXLINE( 632)			attrs = HX_("groupchat",97,1d,c8,e5);
             		}
             		else {
-HXLINE( 528)			attrs = HX_("chat",d8,5e,bf,41);
+HXLINE( 632)			attrs = HX_("chat",d8,5e,bf,41);
             		}
-HXDLIN( 528)		 ::Dynamic attrs1 =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN( 632)		 ::Dynamic attrs1 =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("type",ba,f2,08,4d),attrs));
-HXLINE( 529)		if (::hx::IsNotNull( this->from )) {
-HXLINE( 529)			::Reflect_obj::setField(attrs1,HX_("from",6a,a5,c2,43),this->from->asString());
+HXLINE( 633)		if (::hx::IsNotNull( this->from )) {
+HXLINE( 633)			::Reflect_obj::setField(attrs1,HX_("from",6a,a5,c2,43),this->from->asString());
             		}
-HXLINE( 530)		if (::hx::IsNotNull( this->to )) {
-HXLINE( 530)			::Reflect_obj::setField(attrs1,HX_("to",7b,65,00,00),this->to->asString());
+HXLINE( 634)		if (::hx::IsNotNull( this->to )) {
+HXLINE( 634)			::Reflect_obj::setField(attrs1,HX_("to",7b,65,00,00),this->to->asString());
             		}
-HXLINE( 531)		if (::hx::IsNotNull( this->localId )) {
-HXLINE( 531)			::Reflect_obj::setField(attrs1,HX_("id",db,5b,00,00),this->localId);
+HXLINE( 635)		if (::hx::IsNotNull( this->localId )) {
+HXLINE( 635)			::Reflect_obj::setField(attrs1,HX_("id",db,5b,00,00),this->localId);
             		}
-HXLINE( 532)		 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a),attrs1);
-HXLINE( 533)		bool _hx_tmp;
-HXDLIN( 533)		if ((this->versions->length > 0)) {
-HXLINE( 533)			_hx_tmp = ::hx::IsNotNull( this->versions->__get((this->versions->length - 1)).StaticCast<  ::borogove::ChatMessage >()->localId );
+HXLINE( 636)		 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a),attrs1,null());
+HXLINE( 637)		bool _hx_tmp;
+HXDLIN( 637)		if ((this->versions->length > 0)) {
+HXLINE( 637)			_hx_tmp = ::hx::IsNotNull( this->versions->__get((this->versions->length - 1)).StaticCast<  ::borogove::ChatMessage >()->localId );
             		}
             		else {
-HXLINE( 533)			_hx_tmp = false;
+HXLINE( 637)			_hx_tmp = false;
             		}
-HXDLIN( 533)		if (_hx_tmp) {
-HXLINE( 533)			stanza->tag(HX_("replace",34,48,28,ab), ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 637)		if (_hx_tmp) {
+HXLINE( 637)			stanza->tag(HX_("replace",34,48,28,ab), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("id",db,5b,00,00),this->versions->__get((this->versions->length - 1)).StaticCast<  ::borogove::ChatMessage >()->localId)
-            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:message-correct:0",be,10,1b,b0))))->up();
-            		}
-HXLINE( 534)		if (::hx::IsNotNull( this->threadId )) {
-HXLINE( 534)			stanza->textTag(HX_("thread",ca,7a,b9,8e),this->threadId,null());
-            		}
-HXLINE( 535)		if ((this->recipients->length > 1)) {
-HXLINE( 536)			 ::borogove::Stanza addresses = stanza->tag(HX_("addresses",22,9f,12,8c), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/address",c0,fd,09,ed))));
-HXLINE( 537)			{
-HXLINE( 537)				int _g = 0;
-HXDLIN( 537)				::Array< ::Dynamic> _g1 = this->recipients;
-HXDLIN( 537)				while((_g < _g1->length)){
-HXLINE( 537)					 ::borogove::JID recipient = _g1->__get(_g).StaticCast<  ::borogove::JID >();
-HXDLIN( 537)					_g = (_g + 1);
-HXLINE( 538)					addresses->tag(HX_("address",b4,71,0b,9d), ::Dynamic(::hx::Anon_obj::Create(3)
+            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:message-correct:0",be,10,1b,b0))),null())->up();
+            		}
+HXLINE( 638)		if (::hx::IsNotNull( this->threadId )) {
+HXLINE( 638)			stanza->textTag(HX_("thread",ca,7a,b9,8e),this->threadId,null(),null());
+            		}
+HXLINE( 639)		if ((this->recipients->length > 1)) {
+HXLINE( 640)			 ::borogove::Stanza addresses = stanza->tag(HX_("addresses",22,9f,12,8c), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/address",c0,fd,09,ed))),null());
+HXLINE( 641)			{
+HXLINE( 641)				int _g = 0;
+HXDLIN( 641)				::Array< ::Dynamic> _g1 = this->recipients;
+HXDLIN( 641)				while((_g < _g1->length)){
+HXLINE( 641)					 ::borogove::JID recipient = _g1->__get(_g).StaticCast<  ::borogove::JID >();
+HXDLIN( 641)					_g = (_g + 1);
+HXLINE( 642)					addresses->tag(HX_("address",b4,71,0b,9d), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("delivered",84,e0,1c,b2),HX_("true",4e,a7,03,4d))
             						->setFixed(1,HX_("jid",c5,ca,50,00),recipient->asString())
-            						->setFixed(2,HX_("type",ba,f2,08,4d),HX_("to",7b,65,00,00))))->up();
+            						->setFixed(2,HX_("type",ba,f2,08,4d),HX_("to",7b,65,00,00))),null())->up();
             				}
             			}
-HXLINE( 540)			addresses->up();
+HXLINE( 644)			addresses->up();
             		}
             		else {
-HXLINE( 541)			bool _hx_tmp1;
-HXDLIN( 541)			if ((this->recipients->length == 1)) {
-HXLINE( 541)				_hx_tmp1 = ::hx::IsNull( this->to );
+HXLINE( 645)			bool _hx_tmp1;
+HXDLIN( 645)			if ((this->recipients->length == 1)) {
+HXLINE( 645)				_hx_tmp1 = ::hx::IsNull( this->to );
             			}
             			else {
-HXLINE( 541)				_hx_tmp1 = false;
+HXLINE( 645)				_hx_tmp1 = false;
             			}
-HXDLIN( 541)			if (_hx_tmp1) {
-HXLINE( 542)				::Reflect_obj::setField(attrs1,HX_("to",7b,65,00,00),this->recipients->__get(0).StaticCast<  ::borogove::JID >()->asString());
+HXDLIN( 645)			if (_hx_tmp1) {
+HXLINE( 646)				::Reflect_obj::setField(attrs1,HX_("to",7b,65,00,00),this->recipients->__get(0).StaticCast<  ::borogove::JID >()->asString());
             			}
             		}
-HXLINE( 545)		 ::borogove::ChatMessage replyToM = this->replyToMessage;
-HXLINE( 546)		if (::hx::IsNotNull( replyToM )) {
-HXLINE( 547)			::String replyId = replyToM->getReplyId();
-HXLINE( 548)			if (::hx::IsNotNull( body )) {
-HXLINE( 549)				::Array< ::String > lines;
-HXDLIN( 549)				::String tmp = replyToM->text;
-HXDLIN( 549)				::Array< ::String > tmp1;
-HXDLIN( 549)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 549)					tmp1 = tmp.split(HX_("\n",0a,00,00,00));
+HXLINE( 649)		 ::borogove::ChatMessage replyToM = this->replyToMessage;
+HXLINE( 650)		if (::hx::IsNotNull( replyToM )) {
+HXLINE( 651)			::String replyId = replyToM->getReplyId();
+HXLINE( 652)			if (::hx::IsNotNull( body )) {
+HXLINE( 653)				::Array< ::String > lines;
+HXDLIN( 653)				::String tmp = replyToM->text;
+HXDLIN( 653)				::Array< ::String > tmp1;
+HXDLIN( 653)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 653)					tmp1 = tmp.split(HX_("\n",0a,00,00,00));
+            				}
+            				else {
+HXLINE( 653)					tmp1 = null();
+            				}
+HXDLIN( 653)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 653)					lines = tmp1;
             				}
             				else {
-HXLINE( 549)					tmp1 = null();
+HXLINE( 653)					lines = ::Array_obj< ::String >::__new(0);
             				}
-HXDLIN( 549)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 549)					lines = tmp1;
+HXLINE( 654)				::String reaction;
+HXDLIN( 654)				if (::borogove::EmojiUtil_obj::isEmoji(::StringTools_obj::trim(body))) {
+HXLINE( 654)					reaction = ::StringTools_obj::trim(::StringTools_obj::replace(body,HX_W(u"\ufe0f",fb86,00b5),HX_("",00,00,00,00)));
             				}
             				else {
-HXLINE( 549)					lines = ::Array_obj< ::String >::__new(0);
+HXLINE( 654)					reaction = null();
             				}
-HXLINE( 550)				::String quoteText = HX_("",00,00,00,00);
-HXLINE( 551)				{
-HXLINE( 551)					int _g2 = 0;
-HXDLIN( 551)					while((_g2 < lines->length)){
-HXLINE( 551)						::String line = lines->__get(_g2);
-HXDLIN( 551)						_g2 = (_g2 + 1);
-HXLINE( 552)						if (!( ::EReg_obj::__alloc( HX_CTX ,HX_("^(?:> ?){3,}",7a,64,54,8e),HX_("",00,00,00,00))->match(line))) {
-HXLINE( 553)							if ((line.charAt(0) == HX_(">",3e,00,00,00))) {
-HXLINE( 554)								quoteText = (quoteText + ((HX_(">",3e,00,00,00) + line) + HX_("\n",0a,00,00,00)));
+HXLINE( 655)				::String quoteText = HX_("",00,00,00,00);
+HXLINE( 656)				{
+HXLINE( 656)					int _g2 = 0;
+HXDLIN( 656)					while((_g2 < lines->length)){
+HXLINE( 656)						::String line = lines->__get(_g2);
+HXDLIN( 656)						_g2 = (_g2 + 1);
+HXLINE( 657)						if (!( ::EReg_obj::__alloc( HX_CTX ,HX_("^(?:> ?){3,}",7a,64,54,8e),HX_("",00,00,00,00))->match(line))) {
+HXLINE( 658)							if ((line.charAt(0) == HX_(">",3e,00,00,00))) {
+HXLINE( 659)								if (::hx::IsNull( reaction )) {
+HXLINE( 659)									quoteText = (quoteText + ((HX_(">",3e,00,00,00) + line) + HX_("\n",0a,00,00,00)));
+            								}
             							}
             							else {
-HXLINE( 556)								quoteText = (quoteText + ((HX_("> ",22,36,00,00) + line) + HX_("\n",0a,00,00,00)));
+HXLINE( 661)								quoteText = (quoteText + (HX_("> ",22,36,00,00) + line));
+HXLINE( 662)								if (::hx::IsNotNull( reaction )) {
+HXLINE( 662)									goto _hx_goto_75;
+            								}
+HXLINE( 663)								quoteText = (quoteText + HX_("\n",0a,00,00,00));
             							}
             						}
             					}
+            					_hx_goto_75:;
             				}
-HXLINE( 560)				if ((quoteText != HX_("",00,00,00,00))) {
-HXLINE( 560)					quoteText = (quoteText + HX_("\n",0a,00,00,00));
-            				}
-HXLINE( 561)				::String reaction;
-HXDLIN( 561)				if (::borogove::EmojiUtil_obj::isEmoji(::StringTools_obj::trim(body))) {
-HXLINE( 561)					reaction = ::StringTools_obj::trim(::StringTools_obj::replace(body,HX_W(u"\ufe0f",fb86,00b5),HX_("",00,00,00,00)));
+HXLINE( 667)				bool _hx_tmp2;
+HXDLIN( 667)				if (::hx::IsNotNull( reaction )) {
+HXLINE( 667)					_hx_tmp2 = (lines->length > 1);
             				}
             				else {
-HXLINE( 561)					reaction = null();
+HXLINE( 667)					_hx_tmp2 = false;
+            				}
+HXDLIN( 667)				if (_hx_tmp2) {
+HXLINE( 667)					quoteText = (quoteText + HX_W(u"\u2026",ed88,00ab));
+            				}
+HXLINE( 668)				if (::hx::IsNotNull( reaction )) {
+HXLINE( 668)					quoteText = (quoteText + HX_("\n",0a,00,00,00));
+            				}
+HXLINE( 669)				if ((quoteText != HX_("",00,00,00,00))) {
+HXLINE( 669)					quoteText = (quoteText + HX_("\n",0a,00,00,00));
             				}
-HXLINE( 562)				body = (quoteText + body);
-HXLINE( 563)				if (::hx::IsNotNull( replyId )) {
-HXLINE( 564)					::Array< ::String > codepoints = ::borogove::StringUtil_obj::codepointArray(quoteText);
-HXLINE( 565)					if (::hx::IsNotNull( reaction )) {
-HXLINE( 566)						 ::haxe::ds::StringMap addedReactions =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 567)						stanza->tag(HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 670)				body = (quoteText + body);
+HXLINE( 671)				if (::hx::IsNotNull( replyId )) {
+HXLINE( 672)					::Array< ::String > codepoints = ::borogove::StringUtil_obj::codepointArray(quoteText);
+HXLINE( 673)					if (::hx::IsNotNull( reaction )) {
+HXLINE( 674)						 ::haxe::ds::StringMap addedReactions =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 675)						stanza->tag(HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("id",db,5b,00,00),replyId)
-            							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reactions:0",44,fb,42,53))));
-HXLINE( 568)						stanza->textTag(HX_("reaction",a9,e7,b4,f6),reaction,null());
-HXLINE( 569)						addedReactions->set(reaction,true);
-HXLINE( 571)						{
-HXLINE( 571)							::Dynamic this1 = replyToM->reactions;
-HXDLIN( 571)							 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN( 571)							while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 571)								::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 571)								::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(this1,key)) );
-HXLINE( 572)								bool _hx_tmp2;
-HXDLIN( 572)								 ::Dynamic tmp2 = addedReactions->get(key);
-HXDLIN( 572)								bool _hx_tmp3;
-HXDLIN( 572)								if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 572)									_hx_tmp3 = ( (bool)(tmp2) );
+            							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reactions:0",44,fb,42,53))),null());
+HXLINE( 676)						stanza->textTag(HX_("reaction",a9,e7,b4,f6),reaction,null(),null());
+HXLINE( 677)						addedReactions->set(reaction,true);
+HXLINE( 679)						{
+HXLINE( 679)							::Dynamic this1 = replyToM->reactions;
+HXDLIN( 679)							 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN( 679)							while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 679)								::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 679)								::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(this1,key)) );
+HXLINE( 680)								bool _hx_tmp3;
+HXDLIN( 680)								 ::Dynamic tmp2 = addedReactions->get(key);
+HXDLIN( 680)								bool _hx_tmp4;
+HXDLIN( 680)								if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 680)									_hx_tmp4 = ( (bool)(tmp2) );
             								}
             								else {
-HXLINE( 572)									_hx_tmp3 = false;
+HXLINE( 680)									_hx_tmp4 = false;
             								}
-HXDLIN( 572)								if (!(_hx_tmp3)) {
+HXDLIN( 680)								if (!(_hx_tmp4)) {
             									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::ChatMessage,_gthis) HXARGC(1)
             									bool _hx_run( ::borogove::Reaction r){
-            										HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_572_asStanza)
-HXLINE( 572)										return (r->senderId == _gthis->senderId);
+            										HX_GC_STACKFRAME(&_hx_pos_20f00185d7354fd9_680_asStanza)
+HXLINE( 680)										return (r->senderId == _gthis->senderId);
             									}
             									HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 572)									_hx_tmp2 = ::hx::IsNotNull( ::Lambda_obj::find(_g_value, ::Dynamic(new _hx_Closure_0(_gthis))) );
+HXLINE( 680)									_hx_tmp3 = ::hx::IsNotNull( ::Lambda_obj::find(_g_value, ::Dynamic(new _hx_Closure_0(_gthis))) );
             								}
             								else {
-HXLINE( 572)									_hx_tmp2 = false;
+HXLINE( 680)									_hx_tmp3 = false;
             								}
-HXDLIN( 572)								if (_hx_tmp2) {
-HXLINE( 573)									addedReactions->set(key,true);
-HXLINE( 574)									stanza->textTag(HX_("reaction",a9,e7,b4,f6),key,null());
+HXDLIN( 680)								if (_hx_tmp3) {
+HXLINE( 681)									addedReactions->set(key,true);
+HXLINE( 682)									stanza->textTag(HX_("reaction",a9,e7,b4,f6),key,null(),null());
             								}
             							}
             						}
-HXLINE( 577)						stanza->up();
-HXLINE( 578)						stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 685)						stanza->up();
+HXLINE( 686)						stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("for",09,c7,4d,00),HX_("urn:xmpp:reactions:0",44,fb,42,53))
-            							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:fallback:0",74,aa,56,9b))))->tag(HX_("body",a2,7a,1b,41),null())->up()->up();
+            							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:fallback:0",74,aa,56,9b))),null())->tag(HX_("body",a2,7a,1b,41),null(),null())->up()->up();
             					}
-HXLINE( 581)					 ::borogove::Stanza _hx_tmp4 = stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 689)					 ::borogove::Stanza _hx_tmp5 = stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("for",09,c7,4d,00),HX_("urn:xmpp:reply:0",c4,d5,6f,90))
-            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:fallback:0",74,aa,56,9b))));
-HXDLIN( 581)					_hx_tmp4->tag(HX_("body",a2,7a,1b,41), ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:fallback:0",74,aa,56,9b))),null());
+HXDLIN( 689)					_hx_tmp5->tag(HX_("body",a2,7a,1b,41), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("start",62,74,0b,84),HX_("0",30,00,00,00))
-            						->setFixed(1,HX_("end",db,03,4d,00),::Std_obj::string(codepoints->length))))->up()->up();
+            						->setFixed(1,HX_("end",db,03,4d,00),::Std_obj::string(codepoints->length))),null())->up()->up();
             				}
             			}
-HXLINE( 585)			if (::hx::IsNotNull( replyId )) {
-HXLINE( 585)				 ::borogove::JID tmp3 = replyToM->from;
-HXDLIN( 585)				::String _hx_tmp5;
-HXDLIN( 585)				if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 585)					_hx_tmp5 = tmp3->asString();
+HXLINE( 693)			if (::hx::IsNotNull( replyId )) {
+HXLINE( 693)				 ::borogove::JID tmp3 = replyToM->from;
+HXDLIN( 693)				::String _hx_tmp6;
+HXDLIN( 693)				if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 693)					_hx_tmp6 = tmp3->asString();
             				}
             				else {
-HXLINE( 585)					_hx_tmp5 = null();
+HXLINE( 693)					_hx_tmp6 = null();
             				}
-HXDLIN( 585)				stanza->tag(HX_("reply",2a,09,c6,e6), ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN( 693)				stanza->tag(HX_("reply",2a,09,c6,e6), ::Dynamic(::hx::Anon_obj::Create(3)
             					->setFixed(0,HX_("id",db,5b,00,00),replyId)
-            					->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp5)
-            					->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reply:0",c4,d5,6f,90))))->up();
+            					->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp6)
+            					->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reply:0",c4,d5,6f,90))),null())->up();
             			}
             		}
-HXLINE( 588)		{
-HXLINE( 588)			int _g3 = 0;
-HXDLIN( 588)			::Array< ::Dynamic> _g4 = this->attachments;
-HXDLIN( 588)			while((_g3 < _g4->length)){
-HXLINE( 588)				 ::borogove::ChatAttachment attachment = _g4->__get(_g3).StaticCast<  ::borogove::ChatAttachment >();
-HXDLIN( 588)				_g3 = (_g3 + 1);
-HXLINE( 589)				stanza->tag(HX_("reference",cb,07,c5,5a), ::Dynamic(::hx::Anon_obj::Create(2)
-            					->setFixed(0,HX_("type",ba,f2,08,4d),HX_("data",2a,56,63,42))
-            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reference:0",a5,00,10,5d))))->tag(HX_("media-sharing",33,1c,0a,3d), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sims:1",4f,1c,49,62))));
-HXLINE( 593)				stanza->tag(HX_("file",7c,ce,bb,43), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:file-transfer:5",9c,81,0d,37))));
-HXLINE( 594)				if (::hx::IsNotNull( attachment->name )) {
-HXLINE( 594)					stanza->textTag(HX_("name",4b,72,ff,48),attachment->name,null());
-            				}
-HXLINE( 595)				stanza->textTag(HX_("media-type",03,ce,a4,7d),attachment->mime,null());
-HXLINE( 596)				if (::hx::IsNotNull( attachment->size )) {
-HXLINE( 596)					stanza->textTag(HX_("size",c1,a0,53,4c),::Std_obj::string(attachment->size),null());
-            				}
-HXLINE( 597)				{
-HXLINE( 597)					int _g5 = 0;
-HXDLIN( 597)					::Array< ::Dynamic> _g6 = attachment->hashes;
-HXDLIN( 597)					while((_g5 < _g6->length)){
-HXLINE( 597)						 ::borogove::Hash hash = _g6->__get(_g5).StaticCast<  ::borogove::Hash >();
-HXDLIN( 597)						_g5 = (_g5 + 1);
-HXLINE( 598)						::String _hx_tmp6 = ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofData(hash->hash),null());
-HXDLIN( 598)						stanza->textTag(HX_("hash",ce,2f,08,45),_hx_tmp6, ::Dynamic(::hx::Anon_obj::Create(2)
-            							->setFixed(0,HX_("algo",d3,ff,6f,40),hash->algorithm)
-            							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hashes:2",90,ad,87,c7))));
-            					}
-            				}
-HXLINE( 600)				stanza->up();
-HXLINE( 602)				stanza->tag(HX_("sources",38,0f,49,b9),null());
-HXLINE( 603)				{
-HXLINE( 603)					int _g7 = 0;
-HXDLIN( 603)					::Array< ::String > _g8 = attachment->uris;
-HXDLIN( 603)					while((_g7 < _g8->length)){
-HXLINE( 603)						::String uri = _g8->__get(_g7);
-HXDLIN( 603)						_g7 = (_g7 + 1);
-HXLINE( 604)						stanza->tag(HX_("reference",cb,07,c5,5a), ::Dynamic(::hx::Anon_obj::Create(3)
-            							->setFixed(0,HX_("uri",6c,2b,59,00),uri)
-            							->setFixed(1,HX_("type",ba,f2,08,4d),HX_("data",2a,56,63,42))
-            							->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reference:0",a5,00,10,5d))))->up();
-            					}
-            				}
-HXLINE( 607)				stanza->up()->up()->up();
-HXLINE( 609)				if ((attachment->uris->length > 0)) {
-HXLINE( 610)					stanza->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:x:oob",aa,8a,5f,ef))))->textTag(HX_("url",6f,2b,59,00),attachment->uris->__get(0),null())->up();
-HXLINE( 611)					if (::hx::IsNull( body )) {
-HXLINE( 611)						body = HX_("",00,00,00,00);
+HXLINE( 696)		{
+HXLINE( 696)			int _g3 = 0;
+HXDLIN( 696)			::Array< ::Dynamic> _g4 = this->attachments;
+HXDLIN( 696)			while((_g3 < _g4->length)){
+HXLINE( 696)				 ::borogove::ChatAttachment attachment = _g4->__get(_g3).StaticCast<  ::borogove::ChatAttachment >();
+HXDLIN( 696)				_g3 = (_g3 + 1);
+HXLINE( 697)				stanza->addChild(attachment->sims());
+HXLINE( 699)				if ((attachment->uris->length > 0)) {
+HXLINE( 700)					stanza->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:x:oob",aa,8a,5f,ef))),null())->textTag(HX_("url",6f,2b,59,00),attachment->uris->__get(0),null(),null())->up();
+HXLINE( 701)					if (::hx::IsNull( body )) {
+HXLINE( 701)						body = HX_("",00,00,00,00);
             					}
-HXLINE( 613)					int start = ::borogove::StringUtil_obj::codepointArray(body)->length;
-HXLINE( 614)					int end = (start + attachment->uris->__get(0).length);
-HXLINE( 615)					if ((body != HX_("",00,00,00,00))) {
-HXLINE( 616)						body = (body + HX_("\n",0a,00,00,00));
-HXLINE( 617)						end = (end + 1);
+HXLINE( 703)					int start = ::borogove::StringUtil_obj::codepointArray(body)->length;
+HXLINE( 704)					int end = (start + attachment->uris->__get(0).length);
+HXLINE( 705)					if ((body != HX_("",00,00,00,00))) {
+HXLINE( 706)						body = (body + HX_("\n",0a,00,00,00));
+HXLINE( 707)						end = (end + 1);
             					}
-HXLINE( 619)					body = (body + attachment->uris->__get(0));
-HXLINE( 620)					 ::borogove::Stanza _hx_tmp7 = stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 709)					body = (body + attachment->uris->__get(0));
+HXLINE( 710)					 ::borogove::Stanza _hx_tmp7 = stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("for",09,c7,4d,00),HX_("jabber:x:oob",aa,8a,5f,ef))
-            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:fallback:0",74,aa,56,9b))));
-HXLINE( 622)					::String _hx_tmp8 = ::Std_obj::string(start);
-HXLINE( 620)					_hx_tmp7->tag(HX_("body",a2,7a,1b,41), ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:fallback:0",74,aa,56,9b))),null());
+HXLINE( 712)					::String _hx_tmp8 = ::Std_obj::string(start);
+HXLINE( 710)					_hx_tmp7->tag(HX_("body",a2,7a,1b,41), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("start",62,74,0b,84),_hx_tmp8)
-            						->setFixed(1,HX_("end",db,03,4d,00),::Std_obj::string(end))))->up()->up();
+            						->setFixed(1,HX_("end",db,03,4d,00),::Std_obj::string(end))),null())->up()->up();
             				}
             			}
             		}
-HXLINE( 625)		if (::hx::IsNotNull( body )) {
-HXLINE( 625)			stanza->textTag(HX_("body",a2,7a,1b,41),body,null());
+HXLINE( 715)		if (::hx::IsNotNull( body )) {
+HXLINE( 715)			stanza->textTag(HX_("body",a2,7a,1b,41),body,null(),null());
             		}
-HXLINE( 626)		{
-HXLINE( 626)			int _g9 = 0;
-HXDLIN( 626)			::Array< ::Dynamic> _g10 = this->payloads;
-HXDLIN( 626)			while((_g9 < _g10->length)){
-HXLINE( 626)				 ::borogove::Stanza payload = _g10->__get(_g9).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 626)				_g9 = (_g9 + 1);
-HXLINE( 627)				stanza->addDirectChild(::borogove::Node_obj::Element(payload));
+HXLINE( 716)		{
+HXLINE( 716)			int _g5 = 0;
+HXDLIN( 716)			::Array< ::Dynamic> _g6 = this->payloads;
+HXDLIN( 716)			while((_g5 < _g6->length)){
+HXLINE( 716)				 ::borogove::Stanza payload = _g6->__get(_g5).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 716)				_g5 = (_g5 + 1);
+HXLINE( 717)				stanza->addDirectChild(::borogove::Node_obj::Element(payload));
             			}
             		}
-HXLINE( 629)		if ((this->type == 0)) {
-HXLINE( 630)			stanza->tag(HX_("request",4f,df,84,44), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:receipts",d7,40,8f,8c))))->up();
+HXLINE( 719)		if ((this->type == 0)) {
+HXLINE( 720)			stanza->tag(HX_("request",4f,df,84,44), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:receipts",d7,40,8f,8c))),null())->up();
             		}
-HXLINE( 632)		return stanza;
+HXLINE( 722)		return stanza;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,asStanza,return )
 
- ::borogove::ChatMessage ChatMessage_obj::fromStanza( ::borogove::Stanza stanza, ::borogove::JID localJid, ::Dynamic addContext){
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_312_fromStanza)
-HXDLIN( 312)		 ::borogove::MessageStanza _g = ::borogove::Message_obj::fromStanza(stanza,localJid,addContext,null(),true)->parsed;
-HXDLIN( 312)		if ((_g->_hx_getIndex() == 1)) {
-HXLINE( 314)			return _g->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
+ ::borogove::ChatMessage ChatMessage_obj::fromStanza( ::borogove::Stanza stanza, ::borogove::JID localJid, ::Dynamic addContext, ::borogove::EncryptionInfo encryptionInfo){
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_385_fromStanza)
+HXDLIN( 385)		 ::borogove::MessageStanza _g = ::borogove::Message_obj::fromStanza(stanza,localJid,addContext,encryptionInfo,true)->parsed;
+HXDLIN( 385)		if ((_g->_hx_getIndex() == 1)) {
+HXLINE( 387)			return _g->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
             		}
             		else {
-HXLINE( 316)			return null();
+HXLINE( 389)			return null();
             		}
-HXLINE( 312)		return null();
+HXLINE( 385)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(ChatMessage_obj,fromStanza,return )
+
+::Array< ::Dynamic> ChatMessage_obj::combineCorrections(::Array< ::Dynamic> messages){
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_535_combineCorrections)
+HXDLIN( 535)		return ::borogove::ChatMessageCombiner_obj::combine(messages);
             	}
 
 
-STATIC_HX_DEFINE_DYNAMIC_FUNC3(ChatMessage_obj,fromStanza,return )
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(ChatMessage_obj,combineCorrections,return )
+
+size_t ChatMessage_obj::combineCorrections__fromC(::cpp::Pointer< void* > messages,size_t messages__len,void*** outPtr){
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_363_combineCorrections__fromC)
+HXLINE( 302)		::Array< ::Dynamic> out;
+HXDLIN( 302)		if (::hx::IsNull( messages )) {
+HXLINE( 302)			out = ::Array_obj< ::Dynamic>::__new(0);
+            		}
+            		else {
+HXLINE( 302)			::cpp::Pointer<  ::borogove::ChatMessage > _this = messages->reinterpret();
+HXDLIN( 302)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
+HXDLIN( 302)			::cpp::Pointer<  ::borogove::ChatMessage > tmp = _this;
+HXDLIN( 302)			result->setUnmanagedData(tmp,( (int)(messages__len) ));
+HXDLIN( 302)			out = result->copy();
+            		}
+HXLINE( 363)		::Array< ::Dynamic> out1 = ::borogove::ChatMessage_obj::combineCorrections(out);
+HXDLIN( 363)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 363)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 363)			_hx_tmp->set_ref(::_HaxeCBridge::HaxeArray_Impl__obj::fromNullableArrayT(out1));
+            		}
+HXDLIN( 363)		return ( (size_t)(out1->length) );
+            	}
+
 
 
 ::hx::ObjectPtr< ChatMessage_obj > ChatMessage_obj::__new( ::Dynamic params) {
@@ -1675,7 +1838,8 @@ void ChatMessage_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(sortId,"sortId");
 	HX_MARK_MEMBER_NAME(syncPoint,"syncPoint");
 	HX_MARK_MEMBER_NAME(replyId,"replyId");
-	HX_MARK_MEMBER_NAME(timestamp,"timestamp");
+	HX_MARK_MEMBER_NAME(timeSent,"timeSent");
+	HX_MARK_MEMBER_NAME(timeReceived,"timeReceived");
 	HX_MARK_MEMBER_NAME(to,"to");
 	HX_MARK_MEMBER_NAME(from,"from");
 	HX_MARK_MEMBER_NAME(recipients,"recipients");
@@ -1684,6 +1848,7 @@ void ChatMessage_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(replyToMessage,"replyToMessage");
 	HX_MARK_MEMBER_NAME(threadId,"threadId");
 	HX_MARK_MEMBER_NAME(attachments,"attachments");
+	HX_MARK_MEMBER_NAME(debug,"debug");
 	HX_MARK_MEMBER_NAME(reactions,"reactions");
 	HX_MARK_MEMBER_NAME(text,"text");
 	HX_MARK_MEMBER_NAME(lang,"lang");
@@ -1707,7 +1872,8 @@ void ChatMessage_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(sortId,"sortId");
 	HX_VISIT_MEMBER_NAME(syncPoint,"syncPoint");
 	HX_VISIT_MEMBER_NAME(replyId,"replyId");
-	HX_VISIT_MEMBER_NAME(timestamp,"timestamp");
+	HX_VISIT_MEMBER_NAME(timeSent,"timeSent");
+	HX_VISIT_MEMBER_NAME(timeReceived,"timeReceived");
 	HX_VISIT_MEMBER_NAME(to,"to");
 	HX_VISIT_MEMBER_NAME(from,"from");
 	HX_VISIT_MEMBER_NAME(recipients,"recipients");
@@ -1716,6 +1882,7 @@ void ChatMessage_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(replyToMessage,"replyToMessage");
 	HX_VISIT_MEMBER_NAME(threadId,"threadId");
 	HX_VISIT_MEMBER_NAME(attachments,"attachments");
+	HX_VISIT_MEMBER_NAME(debug,"debug");
 	HX_VISIT_MEMBER_NAME(reactions,"reactions");
 	HX_VISIT_MEMBER_NAME(text,"text");
 	HX_VISIT_MEMBER_NAME(lang,"lang");
@@ -1743,6 +1910,7 @@ void ChatMessage_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"body") ) { return ::hx::Val( body_dyn() ); }
 		break;
 	case 5:
+		if (HX_FIELD_EQ(inName,"debug") ) { return ::hx::Val( debug ); }
 		if (HX_FIELD_EQ(inName,"reply") ) { return ::hx::Val( reply_dyn() ); }
 		break;
 	case 6:
@@ -1761,6 +1929,7 @@ void ChatMessage_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 8:
 		if (HX_FIELD_EQ(inName,"serverId") ) { return ::hx::Val( serverId ); }
+		if (HX_FIELD_EQ(inName,"timeSent") ) { return ::hx::Val( timeSent ); }
 		if (HX_FIELD_EQ(inName,"senderId") ) { return ::hx::Val( senderId ); }
 		if (HX_FIELD_EQ(inName,"threadId") ) { return ::hx::Val( threadId ); }
 		if (HX_FIELD_EQ(inName,"versions") ) { return ::hx::Val( versions ); }
@@ -1770,7 +1939,6 @@ void ChatMessage_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 9:
 		if (HX_FIELD_EQ(inName,"syncPoint") ) { return ::hx::Val( syncPoint ); }
-		if (HX_FIELD_EQ(inName,"timestamp") ) { return ::hx::Val( timestamp ); }
 		if (HX_FIELD_EQ(inName,"reactions") ) { return ::hx::Val( reactions ); }
 		if (HX_FIELD_EQ(inName,"direction") ) { return ::hx::Val( direction ); }
 		break;
@@ -1791,6 +1959,7 @@ void ChatMessage_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"lang__fromC") ) { return ::hx::Val( lang__fromC_dyn() ); }
 		break;
 	case 12:
+		if (HX_FIELD_EQ(inName,"timeReceived") ) { return ::hx::Val( timeReceived ); }
 		if (HX_FIELD_EQ(inName,"reactionKeys") ) { if (inCallProp == ::hx::paccAlways) return ::hx::Val( get_reactionKeys() ); }
 		if (HX_FIELD_EQ(inName,"linkMetadata") ) { return ::hx::Val( linkMetadata ); }
 		if (HX_FIELD_EQ(inName,"callDuration") ) { return ::hx::Val( callDuration_dyn() ); }
@@ -1805,12 +1974,13 @@ void ChatMessage_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 15:
 		if (HX_FIELD_EQ(inName,"serverId__fromC") ) { return ::hx::Val( serverId__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"timeSent__fromC") ) { return ::hx::Val( timeSent__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"senderId__fromC") ) { return ::hx::Val( senderId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"threadId__fromC") ) { return ::hx::Val( threadId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"reactionDetails") ) { return ::hx::Val( reactionDetails_dyn() ); }
+		if (HX_FIELD_EQ(inName,"fetchAttachment") ) { return ::hx::Val( fetchAttachment_dyn() ); }
 		break;
 	case 16:
-		if (HX_FIELD_EQ(inName,"timestamp__fromC") ) { return ::hx::Val( timestamp__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"get_reactionKeys") ) { return ::hx::Val( get_reactionKeys_dyn() ); }
 		if (HX_FIELD_EQ(inName,"direction__fromC") ) { return ::hx::Val( direction__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"senderMemberStub") ) { return ::hx::Val( senderMemberStub_dyn() ); }
@@ -1824,6 +1994,9 @@ void ChatMessage_obj::__Visit(HX_VISIT_PARAMS)
 	case 18:
 		if (HX_FIELD_EQ(inName,"set_replyToMessage") ) { return ::hx::Val( set_replyToMessage_dyn() ); }
 		break;
+	case 19:
+		if (HX_FIELD_EQ(inName,"timeReceived__fromC") ) { return ::hx::Val( timeReceived__fromC_dyn() ); }
+		break;
 	case 20:
 		if (HX_FIELD_EQ(inName,"inlineHashReferences") ) { return ::hx::Val( inlineHashReferences_dyn() ); }
 		break;
@@ -1838,6 +2011,9 @@ bool ChatMessage_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::h
 	switch(inName.length) {
 	case 10:
 		if (HX_FIELD_EQ(inName,"fromStanza") ) { outValue = fromStanza_dyn(); return true; }
+		break;
+	case 18:
+		if (HX_FIELD_EQ(inName,"combineCorrections") ) { outValue = combineCorrections_dyn(); return true; }
 	}
 	return false;
 }
@@ -1854,6 +2030,9 @@ bool ChatMessage_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::h
 		if (HX_FIELD_EQ(inName,"text") ) { text=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"lang") ) { lang=inValue.Cast< ::String >(); return inValue; }
 		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"debug") ) { debug=inValue.Cast<  ::Dynamic >(); return inValue; }
+		break;
 	case 6:
 		if (HX_FIELD_EQ(inName,"sortId") ) { sortId=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"status") ) { status=inValue.Cast< int >(); return inValue; }
@@ -1866,6 +2045,7 @@ bool ChatMessage_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::h
 		break;
 	case 8:
 		if (HX_FIELD_EQ(inName,"serverId") ) { serverId=inValue.Cast< ::String >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"timeSent") ) { timeSent=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"senderId") ) { senderId=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"threadId") ) { threadId=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"versions") ) { versions=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
@@ -1873,7 +2053,6 @@ bool ChatMessage_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::h
 		break;
 	case 9:
 		if (HX_FIELD_EQ(inName,"syncPoint") ) { syncPoint=inValue.Cast< bool >(); return inValue; }
-		if (HX_FIELD_EQ(inName,"timestamp") ) { timestamp=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"reactions") ) { reactions=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"direction") ) { direction=inValue.Cast< int >(); return inValue; }
 		break;
@@ -1887,6 +2066,7 @@ bool ChatMessage_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::h
 		if (HX_FIELD_EQ(inName,"attachments") ) { attachments=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
 		break;
 	case 12:
+		if (HX_FIELD_EQ(inName,"timeReceived") ) { timeReceived=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"linkMetadata") ) { linkMetadata=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
 		break;
 	case 14:
@@ -1904,7 +2084,8 @@ void ChatMessage_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("sortId",d9,7a,37,30));
 	outFields->push(HX_("syncPoint",f5,ff,94,98));
 	outFields->push(HX_("replyId",a5,67,3a,ab));
-	outFields->push(HX_("timestamp",d6,d4,ce,a5));
+	outFields->push(HX_("timeSent",05,10,b2,ec));
+	outFields->push(HX_("timeReceived",4e,22,9a,7b));
 	outFields->push(HX_("to",7b,65,00,00));
 	outFields->push(HX_("from",6a,a5,c2,43));
 	outFields->push(HX_("recipients",7a,62,59,87));
@@ -1913,6 +2094,7 @@ void ChatMessage_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("replyToMessage",02,cf,60,a6));
 	outFields->push(HX_("threadId",45,81,25,cc));
 	outFields->push(HX_("attachments",30,df,33,e7));
+	outFields->push(HX_("debug",53,52,1f,d7));
 	outFields->push(HX_("reactions",aa,cc,95,e7));
 	outFields->push(HX_("reactionKeys",3d,7e,4c,71));
 	outFields->push(HX_("text",ad,cc,f9,4c));
@@ -1937,7 +2119,8 @@ static ::hx::StorageInfo ChatMessage_obj_sMemberStorageInfo[] = {
 	{::hx::fsString,(int)offsetof(ChatMessage_obj,sortId),HX_("sortId",d9,7a,37,30)},
 	{::hx::fsBool,(int)offsetof(ChatMessage_obj,syncPoint),HX_("syncPoint",f5,ff,94,98)},
 	{::hx::fsString,(int)offsetof(ChatMessage_obj,replyId),HX_("replyId",a5,67,3a,ab)},
-	{::hx::fsString,(int)offsetof(ChatMessage_obj,timestamp),HX_("timestamp",d6,d4,ce,a5)},
+	{::hx::fsString,(int)offsetof(ChatMessage_obj,timeSent),HX_("timeSent",05,10,b2,ec)},
+	{::hx::fsString,(int)offsetof(ChatMessage_obj,timeReceived),HX_("timeReceived",4e,22,9a,7b)},
 	{::hx::fsObject /*  ::borogove::JID */ ,(int)offsetof(ChatMessage_obj,to),HX_("to",7b,65,00,00)},
 	{::hx::fsObject /*  ::borogove::JID */ ,(int)offsetof(ChatMessage_obj,from),HX_("from",6a,a5,c2,43)},
 	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(ChatMessage_obj,recipients),HX_("recipients",7a,62,59,87)},
@@ -1946,6 +2129,7 @@ static ::hx::StorageInfo ChatMessage_obj_sMemberStorageInfo[] = {
 	{::hx::fsObject /*  ::borogove::ChatMessage */ ,(int)offsetof(ChatMessage_obj,replyToMessage),HX_("replyToMessage",02,cf,60,a6)},
 	{::hx::fsString,(int)offsetof(ChatMessage_obj,threadId),HX_("threadId",45,81,25,cc)},
 	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(ChatMessage_obj,attachments),HX_("attachments",30,df,33,e7)},
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(ChatMessage_obj,debug),HX_("debug",53,52,1f,d7)},
 	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(ChatMessage_obj,reactions),HX_("reactions",aa,cc,95,e7)},
 	{::hx::fsString,(int)offsetof(ChatMessage_obj,text),HX_("text",ad,cc,f9,4c)},
 	{::hx::fsString,(int)offsetof(ChatMessage_obj,lang),HX_("lang",ee,05,ad,47)},
@@ -1974,8 +2158,10 @@ static ::String ChatMessage_obj_sMemberFields[] = {
 	HX_("sortId",d9,7a,37,30),
 	HX_("syncPoint",f5,ff,94,98),
 	HX_("replyId",a5,67,3a,ab),
-	HX_("timestamp",d6,d4,ce,a5),
-	HX_("timestamp__fromC",63,82,8b,d7),
+	HX_("timeSent",05,10,b2,ec),
+	HX_("timeSent__fromC",14,9b,98,a3),
+	HX_("timeReceived",4e,22,9a,7b),
+	HX_("timeReceived__fromC",eb,53,19,1d),
 	HX_("to",7b,65,00,00),
 	HX_("from",6a,a5,c2,43),
 	HX_("recipients",7a,62,59,87),
@@ -1987,6 +2173,7 @@ static ::String ChatMessage_obj_sMemberFields[] = {
 	HX_("threadId",45,81,25,cc),
 	HX_("threadId__fromC",d4,d1,81,79),
 	HX_("attachments",30,df,33,e7),
+	HX_("debug",53,52,1f,d7),
 	HX_("reactions",aa,cc,95,e7),
 	HX_("get_reactionKeys",c6,6a,eb,75),
 	HX_("reactionDetails",19,54,bb,c7),
@@ -2023,6 +2210,7 @@ static ::String ChatMessage_obj_sMemberFields[] = {
 	HX_("callStatus",70,be,2b,31),
 	HX_("callSid",10,f5,53,54),
 	HX_("callDuration",12,b2,d0,4c),
+	HX_("fetchAttachment",bd,6c,63,61),
 	HX_("asStanza",87,68,cd,94),
 	::String(null()) };
 
@@ -2030,6 +2218,7 @@ static ::String ChatMessage_obj_sMemberFields[] = {
 
 static ::String ChatMessage_obj_sStaticFields[] = {
 	HX_("fromStanza",ff,62,3b,49),
+	HX_("combineCorrections",d6,f6,80,0e),
 	::String(null())
 };
 
@@ -2059,9 +2248,9 @@ void ChatMessage_obj::__register()
 void ChatMessage_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_114_boot)
-HXDLIN( 114)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(21)
+            	HX_STACKFRAME(&_hx_pos_20f00185d7354fd9_165_boot)
+HXDLIN( 165)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(24)
             				->setFixed(0,HX_("serverId__fromC",bb,ba,c0,81), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(1,HX_("statusText__fromC",5a,bd,80,8c), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -2072,37 +2261,48 @@ HXDLIN( 114)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(4,HX_("status__fromC",87,b3,25,a1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(5,HX_("localId__fromC",13,27,c6,af), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(5,HX_("timeSent__fromC",14,9b,98,a3), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(6,HX_("localId__fromC",13,27,c6,af), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(6,HX_("reactionDetails",19,54,bb,c7), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(7,HX_("reactionDetails",19,54,bb,c7), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(7,HX_("senderId__fromC",89,0f,49,cb), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(8,HX_("senderId__fromC",89,0f,49,cb), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(8,HX_("attachments__fromC",49,d7,f7,d0), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(9,HX_("attachments__fromC",49,d7,f7,d0), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(9,HX_("timestamp__fromC",63,82,8b,d7), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(10,HX_("fetchAttachment__fromC",5c,c5,4c,d4), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(10,HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(11,HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(11,HX_("serverIdBy__fromC",24,52,2e,02), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(12,HX_("serverIdBy__fromC",24,52,2e,02), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(13,HX_("encryption__fromC",56,7a,b6,09), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(12,HX_("encryption__fromC",56,7a,b6,09), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(14,HX_("reactionDetails__fromC",80,c1,f0,09), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(13,HX_("reactionDetails__fromC",80,c1,f0,09), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(15,HX_("versions__fromC",7e,73,e8,14), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(14,HX_("versions__fromC",7e,73,e8,14), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(16,HX_("timeReceived__fromC",eb,53,19,1d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(15,HX_("linkMetadata__fromC",10,de,bf,3a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(17,HX_("linkMetadata__fromC",10,de,bf,3a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(16,HX_("direction__fromC",1a,64,c6,4b), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(18,HX_("direction__fromC",1a,64,c6,4b), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(17,HX_("lang__fromC",4b,24,00,52), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(19,HX_("lang__fromC",4b,24,00,52), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(18,HX_("get_reactionKeys",c6,6a,eb,75), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(20,HX_("fetchAttachment",bd,6c,63,61), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(21,HX_("get_reactionKeys",c6,6a,eb,75), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(19,HX_("reactionKeys__fromC",dc,e3,50,76), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(22,HX_("reactionKeys__fromC",dc,e3,50,76), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(20,HX_("threadId__fromC",d4,d1,81,79), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(23,HX_("threadId__fromC",d4,d1,81,79), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))))
+            			->setFixed(1,HX_("statics",05,3c,65,36), ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(0,HX_("combineCorrections",d6,f6,80,0e), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(1,HX_("combineCorrections__fromC",63,a0,41,7c), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
             	}
 }
diff --git a/Sources/c_borogove/src/borogove/ChatMessageBuilder.cpp b/Sources/c_borogove/src/borogove/ChatMessageBuilder.cpp
index 2678ac6..b6d55f3 100644
--- a/Sources/c_borogove/src/borogove/ChatMessageBuilder.cpp
+++ b/Sources/c_borogove/src/borogove/ChatMessageBuilder.cpp
@@ -7,9 +7,6 @@
 #ifndef INCLUDED_Lambda
 #include <Lambda.h>
 #endif
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
@@ -71,8 +68,10 @@ HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_478_serverIdBy__fromC,"borogove.Ch
 HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_489_set_serverIdBy__fromC,"borogove.ChatMessageBuilder","set_serverIdBy__fromC",0x52133d32,"borogove.ChatMessageBuilder.set_serverIdBy__fromC","HaxeCBridge.hx",489,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_478_type__fromC,"borogove.ChatMessageBuilder","type__fromC",0x8af06f6a,"borogove.ChatMessageBuilder.type__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_489_set_type__fromC,"borogove.ChatMessageBuilder","set_type__fromC",0xb7d8b58d,"borogove.ChatMessageBuilder.set_type__fromC","HaxeCBridge.hx",489,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_478_timestamp__fromC,"borogove.ChatMessageBuilder","timestamp__fromC",0x36c99818,"borogove.ChatMessageBuilder.timestamp__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_489_set_timestamp__fromC,"borogove.ChatMessageBuilder","set_timestamp__fromC",0x3aa13315,"borogove.ChatMessageBuilder.set_timestamp__fromC","HaxeCBridge.hx",489,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_478_timeSent__fromC,"borogove.ChatMessageBuilder","timeSent__fromC",0x0b5772ff,"borogove.ChatMessageBuilder.timeSent__fromC","HaxeCBridge.hx",478,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_489_set_timeSent__fromC,"borogove.ChatMessageBuilder","set_timeSent__fromC",0xffe106a2,"borogove.ChatMessageBuilder.set_timeSent__fromC","HaxeCBridge.hx",489,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_478_timeReceived__fromC,"borogove.ChatMessageBuilder","timeReceived__fromC",0xb1b9fd56,"borogove.ChatMessageBuilder.timeReceived__fromC","HaxeCBridge.hx",478,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_489_set_timeReceived__fromC,"borogove.ChatMessageBuilder","set_timeReceived__fromC",0xe0599e79,"borogove.ChatMessageBuilder.set_timeReceived__fromC","HaxeCBridge.hx",489,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_426_senderId__fromC,"borogove.ChatMessageBuilder","senderId__fromC",0x3307e774,"borogove.ChatMessageBuilder.senderId__fromC","HaxeCBridge.hx",426,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_437_set_senderId__fromC,"borogove.ChatMessageBuilder","set_senderId__fromC",0x27917b17,"borogove.ChatMessageBuilder.set_senderId__fromC","HaxeCBridge.hx",437,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_478_replyToMessage__fromC,"borogove.ChatMessageBuilder","replyToMessage__fromC",0x10667fe2,"borogove.ChatMessageBuilder.replyToMessage__fromC","HaxeCBridge.hx",478,0xa18550d8)
@@ -94,43 +93,46 @@ HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_478_encryption__fromC,"borogove.Ch
 HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_489_set_encryption__fromC,"borogove.ChatMessageBuilder","set_encryption__fromC",0x599b6564,"borogove.ChatMessageBuilder.set_encryption__fromC","HaxeCBridge.hx",489,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_467_set_linkMetadata__fromC,"borogove.ChatMessageBuilder","set_linkMetadata__fromC",0xfe00289e,"borogove.ChatMessageBuilder.set_linkMetadata__fromC","HaxeCBridge.hx",467,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_452_linkMetadata__fromC,"borogove.ChatMessageBuilder","linkMetadata__fromC",0xcf60877b,"borogove.ChatMessageBuilder.linkMetadata__fromC","HaxeCBridge.hx",452,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_250_attachSims,"borogove.ChatMessageBuilder","attachSims",0x7e2cb3d6,"borogove.ChatMessageBuilder.attachSims","borogove/ChatMessageBuilder.hx",250,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_271_addAttachment,"borogove.ChatMessageBuilder","addAttachment",0xfc8ec88f,"borogove.ChatMessageBuilder.addAttachment","borogove/ChatMessageBuilder.hx",271,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_280_setBody,"borogove.ChatMessageBuilder","setBody",0xc02f304f,"borogove.ChatMessageBuilder.setBody","borogove/ChatMessageBuilder.hx",280,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_283_setBody,"borogove.ChatMessageBuilder","setBody",0xc02f304f,"borogove.ChatMessageBuilder.setBody","borogove/ChatMessageBuilder.hx",283,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_279_setBody,"borogove.ChatMessageBuilder","setBody",0xc02f304f,"borogove.ChatMessageBuilder.setBody","borogove/ChatMessageBuilder.hx",279,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_306_setSubject,"borogove.ChatMessageBuilder","setSubject",0x2e4d561f,"borogove.ChatMessageBuilder.setSubject","borogove/ChatMessageBuilder.hx",306,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_305_setSubject,"borogove.ChatMessageBuilder","setSubject",0x2e4d561f,"borogove.ChatMessageBuilder.setSubject","borogove/ChatMessageBuilder.hx",305,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_320_chatId,"borogove.ChatMessageBuilder","chatId",0x9cbed648,"borogove.ChatMessageBuilder.chatId","borogove/ChatMessageBuilder.hx",320,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_333_get_senderId,"borogove.ChatMessageBuilder","get_senderId",0x3cf1aa2e,"borogove.ChatMessageBuilder.get_senderId","borogove/ChatMessageBuilder.hx",333,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_338_isIncoming,"borogove.ChatMessageBuilder","isIncoming",0x47aa82e5,"borogove.ChatMessageBuilder.isIncoming","borogove/ChatMessageBuilder.hx",338,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_346_build,"borogove.ChatMessageBuilder","build",0xdd3caf59,"borogove.ChatMessageBuilder.build","borogove/ChatMessageBuilder.hx",346,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_218_makeModerated,"borogove.ChatMessageBuilder","makeModerated",0xcfb6a69e,"borogove.ChatMessageBuilder.makeModerated","borogove/ChatMessageBuilder.hx",218,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_307_attachSims,"borogove.ChatMessageBuilder","attachSims",0x7e2cb3d6,"borogove.ChatMessageBuilder.attachSims","borogove/ChatMessageBuilder.hx",307,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_328_addAttachment,"borogove.ChatMessageBuilder","addAttachment",0xfc8ec88f,"borogove.ChatMessageBuilder.addAttachment","borogove/ChatMessageBuilder.hx",328,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_338_setBody,"borogove.ChatMessageBuilder","setBody",0xc02f304f,"borogove.ChatMessageBuilder.setBody","borogove/ChatMessageBuilder.hx",338,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_341_setBody,"borogove.ChatMessageBuilder","setBody",0xc02f304f,"borogove.ChatMessageBuilder.setBody","borogove/ChatMessageBuilder.hx",341,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_336_setBody,"borogove.ChatMessageBuilder","setBody",0xc02f304f,"borogove.ChatMessageBuilder.setBody","borogove/ChatMessageBuilder.hx",336,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_365_setSubject,"borogove.ChatMessageBuilder","setSubject",0x2e4d561f,"borogove.ChatMessageBuilder.setSubject","borogove/ChatMessageBuilder.hx",365,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_363_setSubject,"borogove.ChatMessageBuilder","setSubject",0x2e4d561f,"borogove.ChatMessageBuilder.setSubject","borogove/ChatMessageBuilder.hx",363,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_379_chatId,"borogove.ChatMessageBuilder","chatId",0x9cbed648,"borogove.ChatMessageBuilder.chatId","borogove/ChatMessageBuilder.hx",379,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_392_get_senderId,"borogove.ChatMessageBuilder","get_senderId",0x3cf1aa2e,"borogove.ChatMessageBuilder.get_senderId","borogove/ChatMessageBuilder.hx",392,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_397_isIncoming,"borogove.ChatMessageBuilder","isIncoming",0x47aa82e5,"borogove.ChatMessageBuilder.isIncoming","borogove/ChatMessageBuilder.hx",397,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_405_build,"borogove.ChatMessageBuilder","build",0xdd3caf59,"borogove.ChatMessageBuilder.build","borogove/ChatMessageBuilder.hx",405,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_238_fromMessage,"borogove.ChatMessageBuilder","fromMessage",0x29d55fe8,"borogove.ChatMessageBuilder.fromMessage","borogove/ChatMessageBuilder.hx",238,0xd0295864)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_273_makeModerated,"borogove.ChatMessageBuilder","makeModerated",0xcfb6a69e,"borogove.ChatMessageBuilder.makeModerated","borogove/ChatMessageBuilder.hx",273,0xd0295864)
 HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_31_boot,"borogove.ChatMessageBuilder","boot",0x7f409e67,"borogove.ChatMessageBuilder.boot","borogove/ChatMessageBuilder.hx",31,0xd0295864)
 namespace borogove{
 
 void ChatMessageBuilder_obj::__construct(){
             	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_31_new)
-HXLINE( 152)		this->stanza = null();
-HXLINE( 146)		this->linkMetadata = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 135)		this->payloads = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 132)		this->versions = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 127)		this->statusText = null();
-HXLINE( 122)		this->status = 0;
-HXLINE( 117)		this->direction = 1;
-HXLINE( 112)		this->lang = null();
-HXLINE( 107)		this->text = null();
-HXLINE( 101)		this->reactions =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(  95)		this->attachments = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(  90)		this->threadId = null();
-HXLINE(  85)		this->replyToMessage = null();
-HXLINE(  80)		this->senderId = null();
-HXLINE(  75)		this->replyTo = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(  73)		this->recipients = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(  71)		this->sender = null();
-HXLINE(  69)		this->from = null();
-HXLINE(  67)		this->to = null();
-HXLINE(  64)		this->timestamp = null();
+HXLINE( 166)		this->stanza = null();
+HXLINE( 160)		this->linkMetadata = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 149)		this->payloads = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 146)		this->versions = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 141)		this->statusText = null();
+HXLINE( 136)		this->status = 0;
+HXLINE( 131)		this->direction = 1;
+HXLINE( 126)		this->lang = null();
+HXLINE( 121)		this->text = null();
+HXLINE( 114)		this->reactions =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 108)		this->debug = null();
+HXLINE( 105)		this->attachments = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 100)		this->threadId = null();
+HXLINE(  95)		this->replyToMessage = null();
+HXLINE(  90)		this->senderId = null();
+HXLINE(  85)		this->replyTo = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(  83)		this->recipients = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(  81)		this->sender = null();
+HXLINE(  79)		this->from = null();
+HXLINE(  77)		this->to = null();
+HXLINE(  74)		this->timeReceived = null();
+HXLINE(  66)		this->timeSent = null();
 HXLINE(  59)		this->replyId = null();
 HXLINE(  56)		this->syncPoint = false;
 HXLINE(  53)		this->type = 0;
@@ -219,21 +221,37 @@ HXDLIN( 489)		this->type = value;
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_type__fromC,(void))
 
-::String ChatMessageBuilder_obj::timestamp__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_478_timestamp__fromC)
-HXDLIN( 478)		return this->timestamp;
+::String ChatMessageBuilder_obj::timeSent__fromC(){
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_478_timeSent__fromC)
+HXDLIN( 478)		return this->timeSent;
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,timestamp__fromC,return )
+HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,timeSent__fromC,return )
 
-void ChatMessageBuilder_obj::set_timestamp__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_489_set_timestamp__fromC)
-HXDLIN( 489)		this->timestamp = value;
+void ChatMessageBuilder_obj::set_timeSent__fromC(::String value){
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_489_set_timeSent__fromC)
+HXDLIN( 489)		this->timeSent = value;
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_timestamp__fromC,(void))
+HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_timeSent__fromC,(void))
+
+::String ChatMessageBuilder_obj::timeReceived__fromC(){
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_478_timeReceived__fromC)
+HXDLIN( 478)		return this->timeReceived;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,timeReceived__fromC,return )
+
+void ChatMessageBuilder_obj::set_timeReceived__fromC(::String value){
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_489_set_timeReceived__fromC)
+HXDLIN( 489)		this->timeReceived = value;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_timeReceived__fromC,(void))
 
 ::String ChatMessageBuilder_obj::senderId__fromC(){
             	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_426_senderId__fromC)
@@ -421,122 +439,122 @@ HXDLIN( 452)		return ( (size_t)(x->length) );
 
 
 void ChatMessageBuilder_obj::attachSims( ::borogove::Stanza sims){
-            	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_250_attachSims)
-HXLINE( 251)		::String mime = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:5}/media-type#",f7,02,ad,24));
-HXLINE( 252)		if (::hx::IsNull( mime )) {
-HXLINE( 252)			mime = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:3}/media-type#",39,5c,52,9f));
+            	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_307_attachSims)
+HXLINE( 308)		::String mime = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:5}/media-type#",f7,02,ad,24));
+HXLINE( 309)		if (::hx::IsNull( mime )) {
+HXLINE( 309)			mime = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:3}/media-type#",39,5c,52,9f));
             		}
-HXLINE( 253)		if (::hx::IsNull( mime )) {
-HXLINE( 253)			mime = HX_("application/octet-stream",5d,f8,82,30);
+HXLINE( 310)		if (::hx::IsNull( mime )) {
+HXLINE( 310)			mime = HX_("application/octet-stream",5d,f8,82,30);
             		}
-HXLINE( 254)		::String name = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:5}/name#",6f,0a,d5,d2));
-HXLINE( 255)		if (::hx::IsNull( name )) {
-HXLINE( 255)			name = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:3}/name#",31,26,70,60));
+HXLINE( 311)		::String name = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:5}/name#",6f,0a,d5,d2));
+HXLINE( 312)		if (::hx::IsNull( name )) {
+HXLINE( 312)			name = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:3}/name#",31,26,70,60));
             		}
-HXLINE( 256)		::String size = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:5}/size#",39,83,29,b9));
-HXLINE( 257)		if (::hx::IsNull( size )) {
-HXLINE( 257)			size = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:3}/size#",fb,9e,c4,46));
+HXLINE( 313)		::String size = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:5}/size#",39,83,29,b9));
+HXLINE( 314)		if (::hx::IsNull( size )) {
+HXLINE( 314)			size = sims->findText(HX_("{urn:xmpp:jingle:apps:file-transfer:3}/size#",fb,9e,c4,46));
             		}
-HXLINE( 258)		::Array< ::Dynamic> _this;
-HXDLIN( 258)		 ::borogove::Stanza tmp;
-HXDLIN( 258)		 ::borogove::Stanza tmp1 = sims->getChild(HX_("file",7c,ce,bb,43),HX_("urn:xmpp:jingle:apps:file-transfer:5",9c,81,0d,37));
-HXDLIN( 258)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 258)			tmp = tmp1;
+HXLINE( 315)		::Array< ::Dynamic> _this;
+HXDLIN( 315)		 ::borogove::Stanza tmp;
+HXDLIN( 315)		 ::borogove::Stanza tmp1 = sims->getChild(HX_("file",7c,ce,bb,43),HX_("urn:xmpp:jingle:apps:file-transfer:5",9c,81,0d,37));
+HXDLIN( 315)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 315)			tmp = tmp1;
             		}
             		else {
-HXLINE( 258)			tmp = sims->getChild(HX_("file",7c,ce,bb,43),HX_("urn:xmpp:jingle:apps:file-transfer:3",9a,81,0d,37));
+HXLINE( 315)			tmp = sims->getChild(HX_("file",7c,ce,bb,43),HX_("urn:xmpp:jingle:apps:file-transfer:3",9a,81,0d,37));
             		}
-HXDLIN( 258)		::Array< ::Dynamic> tmp2;
-HXDLIN( 258)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 258)			tmp2 = tmp->allTags(HX_("hash",ce,2f,08,45),HX_("urn:xmpp:hashes:2",90,ad,87,c7));
+HXDLIN( 315)		::Array< ::Dynamic> tmp2;
+HXDLIN( 315)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 315)			tmp2 = tmp->allTags(HX_("hash",ce,2f,08,45),HX_("urn:xmpp:hashes:2",90,ad,87,c7));
             		}
             		else {
-HXLINE( 258)			tmp2 = null();
+HXLINE( 315)			tmp2 = null();
             		}
-HXDLIN( 258)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 258)			_this = tmp2;
+HXDLIN( 315)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 315)			_this = tmp2;
             		}
             		else {
-HXLINE( 258)			_this = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 315)			_this = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 258)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 258)		{
-HXLINE( 258)			int _g = 0;
-HXDLIN( 258)			int _g1 = _this->length;
-HXDLIN( 258)			while((_g < _g1)){
-HXLINE( 258)				_g = (_g + 1);
-HXDLIN( 258)				int i = (_g - 1);
-HXDLIN( 258)				{
-HXLINE( 259)					 ::borogove::Stanza hash = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN( 259)					::String inValue;
-HXDLIN( 259)					::String tmp3 = ( (::String)(::Reflect_obj::field(hash->attr,HX_("algo",d3,ff,6f,40))) );
-HXDLIN( 259)					if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 259)						inValue = tmp3;
+HXDLIN( 315)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 315)		{
+HXLINE( 315)			int _g = 0;
+HXDLIN( 315)			int _g1 = _this->length;
+HXDLIN( 315)			while((_g < _g1)){
+HXLINE( 315)				_g = (_g + 1);
+HXDLIN( 315)				int i = (_g - 1);
+HXDLIN( 315)				{
+HXLINE( 316)					 ::borogove::Stanza hash = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) );
+HXDLIN( 316)					::String inValue;
+HXDLIN( 316)					::String tmp3 = hash->attr->get_string(HX_("algo",d3,ff,6f,40));
+HXDLIN( 316)					if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 316)						inValue = tmp3;
             					}
             					else {
-HXLINE( 259)						inValue = HX_("",00,00,00,00);
+HXLINE( 316)						inValue = HX_("",00,00,00,00);
             					}
-HXLINE( 258)					 ::borogove::Hash inValue1 =  ::borogove::Hash_obj::__alloc( HX_CTX ,inValue,::haxe::crypto::Base64_obj::decode(hash->getText(),null())->b);
-HXDLIN( 258)					result->__unsafe_set(i,inValue1);
+HXLINE( 315)					 ::borogove::Hash inValue1 =  ::borogove::Hash_obj::__alloc( HX_CTX ,inValue,::haxe::crypto::Base64_obj::decode(hash->getText(),null())->b);
+HXDLIN( 315)					result->__unsafe_set(i,inValue1);
             				}
             			}
             		}
-HXLINE( 260)		 ::borogove::Stanza sources = sims->getChild(HX_("sources",38,0f,49,b9),null());
-HXLINE( 261)		::Array< ::Dynamic> _this1;
-HXDLIN( 261)		::Array< ::Dynamic> tmp4;
-HXDLIN( 261)		if (::hx::IsNotNull( sources )) {
-HXLINE( 261)			tmp4 = sources->allTags(HX_("reference",cb,07,c5,5a),HX_("urn:xmpp:reference:0",a5,00,10,5d));
+HXLINE( 317)		 ::borogove::Stanza sources = sims->getChild(HX_("sources",38,0f,49,b9),null());
+HXLINE( 318)		::Array< ::Dynamic> _this1;
+HXDLIN( 318)		::Array< ::Dynamic> tmp4;
+HXDLIN( 318)		if (::hx::IsNotNull( sources )) {
+HXLINE( 318)			tmp4 = sources->allTags(HX_("reference",cb,07,c5,5a),HX_("urn:xmpp:reference:0",a5,00,10,5d));
             		}
             		else {
-HXLINE( 261)			tmp4 = null();
+HXLINE( 318)			tmp4 = null();
             		}
-HXDLIN( 261)		if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 261)			_this1 = tmp4;
+HXDLIN( 318)		if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 318)			_this1 = tmp4;
             		}
             		else {
-HXLINE( 261)			_this1 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 318)			_this1 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 261)		::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
-HXDLIN( 261)		{
-HXLINE( 261)			int _g2 = 0;
-HXDLIN( 261)			int _g3 = _this1->length;
-HXDLIN( 261)			while((_g2 < _g3)){
-HXLINE( 261)				_g2 = (_g2 + 1);
-HXDLIN( 261)				int i1 = (_g2 - 1);
-HXDLIN( 261)				{
-HXLINE( 261)					::String inValue2;
-HXDLIN( 261)					::String tmp5 = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this1,i1)) )->attr,HX_("uri",6c,2b,59,00))) );
-HXDLIN( 261)					if (::hx::IsNotNull( tmp5 )) {
-HXLINE( 261)						inValue2 = tmp5;
+HXDLIN( 318)		::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
+HXDLIN( 318)		{
+HXLINE( 318)			int _g2 = 0;
+HXDLIN( 318)			int _g3 = _this1->length;
+HXDLIN( 318)			while((_g2 < _g3)){
+HXLINE( 318)				_g2 = (_g2 + 1);
+HXDLIN( 318)				int i1 = (_g2 - 1);
+HXDLIN( 318)				{
+HXLINE( 318)					::String inValue2;
+HXDLIN( 318)					::String tmp5 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this1,i1)) )->attr->get_string(HX_("uri",6c,2b,59,00));
+HXDLIN( 318)					if (::hx::IsNotNull( tmp5 )) {
+HXLINE( 318)						inValue2 = tmp5;
             					}
             					else {
-HXLINE( 261)						inValue2 = HX_("",00,00,00,00);
+HXLINE( 318)						inValue2 = HX_("",00,00,00,00);
             					}
-HXDLIN( 261)					result1->__unsafe_set(i1,inValue2);
+HXDLIN( 318)					result1->__unsafe_set(i1,inValue2);
             				}
             			}
             		}
-HXDLIN( 261)		::Array< ::String > _g4 = ::Array_obj< ::String >::__new(0);
-HXDLIN( 261)		{
-HXLINE( 261)			int _g5 = 0;
-HXDLIN( 261)			while((_g5 < result1->length)){
-HXLINE( 261)				::String v = result1->__get(_g5);
-HXDLIN( 261)				_g5 = (_g5 + 1);
-HXDLIN( 261)				if ((v != HX_("",00,00,00,00))) {
-HXLINE( 261)					_g4->push(v);
+HXDLIN( 318)		::Array< ::String > _g4 = ::Array_obj< ::String >::__new(0);
+HXDLIN( 318)		{
+HXLINE( 318)			int _g5 = 0;
+HXDLIN( 318)			while((_g5 < result1->length)){
+HXLINE( 318)				::String v = result1->__get(_g5);
+HXDLIN( 318)				_g5 = (_g5 + 1);
+HXDLIN( 318)				if ((v != HX_("",00,00,00,00))) {
+HXLINE( 318)					_g4->push(v);
             				}
             			}
             		}
-HXLINE( 262)		if ((_g4->length > 0)) {
-HXLINE( 262)			::Array< ::Dynamic> _hx_tmp = this->attachments;
-HXDLIN( 262)			 ::Dynamic _hx_tmp1;
-HXDLIN( 262)			if (::hx::IsNull( size )) {
-HXLINE( 262)				_hx_tmp1 = null();
+HXLINE( 319)		if ((_g4->length > 0)) {
+HXLINE( 319)			::Array< ::Dynamic> _hx_tmp = this->attachments;
+HXDLIN( 319)			 ::Dynamic _hx_tmp1;
+HXDLIN( 319)			if (::hx::IsNull( size )) {
+HXLINE( 319)				_hx_tmp1 = null();
             			}
             			else {
-HXLINE( 262)				_hx_tmp1 = ::Std_obj::parseInt(size);
+HXLINE( 319)				_hx_tmp1 = ::Std_obj::parseInt(size);
             			}
-HXDLIN( 262)			_hx_tmp->push( ::borogove::ChatAttachment_obj::__alloc( HX_CTX ,name,mime,_hx_tmp1,_g4,result));
+HXDLIN( 319)			_hx_tmp->push( ::borogove::ChatAttachment_obj::__alloc( HX_CTX ,name,mime,_hx_tmp1,_g4,result));
             		}
             	}
 
@@ -544,8 +562,8 @@ HXDLIN( 262)			_hx_tmp->push( ::borogove::ChatAttachment_obj::__alloc( HX_CTX ,n
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,attachSims,(void))
 
 void ChatMessageBuilder_obj::addAttachment( ::borogove::ChatAttachment attachment){
-            	HX_STACKFRAME(&_hx_pos_c7017726c326afec_271_addAttachment)
-HXDLIN( 271)		this->attachments->push(attachment);
+            	HX_STACKFRAME(&_hx_pos_c7017726c326afec_328_addAttachment)
+HXDLIN( 328)		this->attachments->push(attachment);
             	}
 
 
@@ -554,57 +572,59 @@ HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,addAttachment,(void))
 void ChatMessageBuilder_obj::setBody( ::borogove::Html html){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::Stanza p){
-            			HX_STACKFRAME(&_hx_pos_c7017726c326afec_280_setBody)
-HXLINE( 280)			if ((( (::String)(::Reflect_obj::field(p->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce))) {
-HXLINE( 280)				return (p->name == HX_("html",6b,95,16,45));
+            			HX_STACKFRAME(&_hx_pos_c7017726c326afec_338_setBody)
+HXLINE( 338)			if (::hx::IsEq( p->attr->get(HX_("xmlns",dc,31,74,60)),HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce) )) {
+HXLINE( 338)				return (p->name == HX_("html",6b,95,16,45));
             			}
             			else {
-HXLINE( 280)				return false;
+HXLINE( 338)				return false;
             			}
-HXDLIN( 280)			return false;
+HXDLIN( 338)			return false;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run( ::borogove::Stanza p){
-            			HX_STACKFRAME(&_hx_pos_c7017726c326afec_283_setBody)
-HXLINE( 283)			if ((( (::String)(::Reflect_obj::field(p->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:styling:0",48,d3,aa,fb))) {
-HXLINE( 283)				return (p->name == HX_("unstyled",2c,15,1a,18));
+            			HX_STACKFRAME(&_hx_pos_c7017726c326afec_341_setBody)
+HXLINE( 341)			if (::hx::IsEq( p->attr->get(HX_("xmlns",dc,31,74,60)),HX_("urn:xmpp:styling:0",48,d3,aa,fb) )) {
+HXLINE( 341)				return (p->name == HX_("unstyled",2c,15,1a,18));
             			}
             			else {
-HXLINE( 283)				return false;
+HXLINE( 341)				return false;
             			}
-HXDLIN( 283)			return false;
+HXDLIN( 341)			return false;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_279_setBody)
-HXLINE( 280)		int htmlIdx = ::Lambda_obj::findIndex(this->payloads, ::Dynamic(new _hx_Closure_0()));
-HXLINE( 281)		if ((htmlIdx >= 0)) {
-HXLINE( 281)			this->payloads->removeRange(htmlIdx,1);
+            	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_336_setBody)
+HXLINE( 337)		this->stanza = null();
+HXLINE( 338)		int htmlIdx = ::Lambda_obj::findIndex(this->payloads, ::Dynamic(new _hx_Closure_0()));
+HXLINE( 339)		if ((htmlIdx >= 0)) {
+HXLINE( 339)			this->payloads->removeRange(htmlIdx,1);
             		}
-HXLINE( 283)		int unstyledIdx = ::Lambda_obj::findIndex(this->payloads, ::Dynamic(new _hx_Closure_1()));
-HXLINE( 284)		if ((unstyledIdx >= 0)) {
-HXLINE( 284)			this->payloads->removeRange(unstyledIdx,1);
+HXLINE( 341)		int unstyledIdx = ::Lambda_obj::findIndex(this->payloads, ::Dynamic(new _hx_Closure_1()));
+HXLINE( 342)		if ((unstyledIdx >= 0)) {
+HXLINE( 342)			this->payloads->removeRange(unstyledIdx,1);
             		}
-HXLINE( 286)		if (::hx::IsNull( html )) {
-HXLINE( 287)			this->text = null();
+HXLINE( 344)		if (::hx::IsNull( html )) {
+HXLINE( 345)			this->text = null();
             		}
             		else {
-HXLINE( 289)			if (html->isPlainText()) {
-HXLINE( 290)				this->payloads->push( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("unstyled",2c,15,1a,18), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:styling:0",48,d3,aa,fb)))));
+HXLINE( 347)			if (html->isPlainText()) {
+HXLINE( 348)				::Array< ::Dynamic> _hx_tmp = this->payloads;
+HXDLIN( 348)				_hx_tmp->push( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("unstyled",2c,15,1a,18), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:styling:0",48,d3,aa,fb))),null()));
             			}
             			else {
-HXLINE( 292)				 ::borogove::Stanza htmlEl =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("html",6b,95,16,45), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce))));
-HXLINE( 293)				 ::borogove::Stanza body =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("body",a2,7a,1b,41), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8))));
-HXLINE( 294)				htmlEl->addChild(body);
-HXLINE( 295)				body->addChildNodes(html->xml);
-HXLINE( 296)				this->payloads->push(htmlEl);
+HXLINE( 350)				 ::borogove::Stanza htmlEl =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("html",6b,95,16,45), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce))),null());
+HXLINE( 351)				 ::borogove::Stanza body =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("body",a2,7a,1b,41), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8))),null());
+HXLINE( 352)				htmlEl->addChild(body);
+HXLINE( 353)				body->addChildNodes(html->xml);
+HXLINE( 354)				this->payloads->push(htmlEl);
             			}
-HXLINE( 298)			this->text = html->toPlainText();
+HXLINE( 356)			this->text = html->toPlainText();
             		}
             	}
 
@@ -614,236 +634,294 @@ HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,setBody,(void))
 void ChatMessageBuilder_obj::setSubject(::String subject){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::Stanza p){
-            			HX_STACKFRAME(&_hx_pos_c7017726c326afec_306_setSubject)
-HXLINE( 306)			return (p->name == HX_("subject",ac,01,88,29));
+            			HX_STACKFRAME(&_hx_pos_c7017726c326afec_365_setSubject)
+HXLINE( 365)			return (p->name == HX_("subject",ac,01,88,29));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_305_setSubject)
-HXLINE( 306)		int subjectIdx = ::Lambda_obj::findIndex(this->payloads, ::Dynamic(new _hx_Closure_0()));
-HXLINE( 307)		if ((subjectIdx >= 0)) {
-HXLINE( 307)			this->payloads->removeRange(subjectIdx,1);
+            	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_363_setSubject)
+HXLINE( 364)		this->stanza = null();
+HXLINE( 365)		int subjectIdx = ::Lambda_obj::findIndex(this->payloads, ::Dynamic(new _hx_Closure_0()));
+HXLINE( 366)		if ((subjectIdx >= 0)) {
+HXLINE( 366)			this->payloads->removeRange(subjectIdx,1);
             		}
-HXLINE( 309)		if (::hx::IsNull( subject )) {
-HXLINE( 309)			return;
+HXLINE( 368)		if (::hx::IsNull( subject )) {
+HXLINE( 368)			return;
             		}
-HXLINE( 311)		::Array< ::Dynamic> _hx_tmp = this->payloads;
-HXDLIN( 311)		_hx_tmp->push( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("subject",ac,01,88,29),null())->text(subject));
+HXLINE( 370)		::Array< ::Dynamic> _hx_tmp = this->payloads;
+HXDLIN( 370)		_hx_tmp->push( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("subject",ac,01,88,29),null(),null())->text(subject));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,setSubject,(void))
 
 ::String ChatMessageBuilder_obj::chatId(){
-            	HX_STACKFRAME(&_hx_pos_c7017726c326afec_320_chatId)
-HXDLIN( 320)		if (this->isIncoming()) {
-HXLINE( 321)			::Array< ::Dynamic> _this = this->replyTo;
-HXDLIN( 321)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 321)			{
-HXLINE( 321)				int _g = 0;
-HXDLIN( 321)				int _g1 = _this->length;
-HXDLIN( 321)				while((_g < _g1)){
-HXLINE( 321)					_g = (_g + 1);
-HXDLIN( 321)					int i = (_g - 1);
-HXDLIN( 321)					{
-HXLINE( 321)						::String inValue = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) )->asBare()->asString();
-HXDLIN( 321)						result->__unsafe_set(i,inValue);
+            	HX_STACKFRAME(&_hx_pos_c7017726c326afec_379_chatId)
+HXDLIN( 379)		if (this->isIncoming()) {
+HXLINE( 380)			::Array< ::Dynamic> _this = this->replyTo;
+HXDLIN( 380)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 380)			{
+HXLINE( 380)				int _g = 0;
+HXDLIN( 380)				int _g1 = _this->length;
+HXDLIN( 380)				while((_g < _g1)){
+HXLINE( 380)					_g = (_g + 1);
+HXDLIN( 380)					int i = (_g - 1);
+HXDLIN( 380)					{
+HXLINE( 380)						::String inValue = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) )->asBare()->asString();
+HXDLIN( 380)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 321)			return result->join(HX_("\n",0a,00,00,00));
+HXDLIN( 380)			return result->join(HX_("\n",0a,00,00,00));
             		}
             		else {
-HXLINE( 323)			::Array< ::Dynamic> _this1 = this->recipients;
-HXDLIN( 323)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
-HXDLIN( 323)			{
-HXLINE( 323)				int _g2 = 0;
-HXDLIN( 323)				int _g3 = _this1->length;
-HXDLIN( 323)				while((_g2 < _g3)){
-HXLINE( 323)					_g2 = (_g2 + 1);
-HXDLIN( 323)					int i1 = (_g2 - 1);
-HXDLIN( 323)					{
-HXLINE( 323)						::String inValue1 = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this1,i1)) )->asString();
-HXDLIN( 323)						result1->__unsafe_set(i1,inValue1);
+HXLINE( 382)			::Array< ::Dynamic> _this1 = this->recipients;
+HXDLIN( 382)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
+HXDLIN( 382)			{
+HXLINE( 382)				int _g2 = 0;
+HXDLIN( 382)				int _g3 = _this1->length;
+HXDLIN( 382)				while((_g2 < _g3)){
+HXLINE( 382)					_g2 = (_g2 + 1);
+HXDLIN( 382)					int i1 = (_g2 - 1);
+HXDLIN( 382)					{
+HXLINE( 382)						::String inValue1 = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this1,i1)) )->asString();
+HXDLIN( 382)						result1->__unsafe_set(i1,inValue1);
             					}
             				}
             			}
-HXDLIN( 323)			return result1->join(HX_("\n",0a,00,00,00));
+HXDLIN( 382)			return result1->join(HX_("\n",0a,00,00,00));
             		}
-HXLINE( 320)		return null();
+HXLINE( 379)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,chatId,return )
 
 ::String ChatMessageBuilder_obj::get_senderId(){
-            	HX_STACKFRAME(&_hx_pos_c7017726c326afec_333_get_senderId)
-HXDLIN( 333)		::String tmp = this->senderId;
-HXDLIN( 333)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 333)			return tmp;
+            	HX_STACKFRAME(&_hx_pos_c7017726c326afec_392_get_senderId)
+HXDLIN( 392)		::String tmp = this->senderId;
+HXDLIN( 392)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 392)			return tmp;
             		}
             		else {
-HXDLIN( 333)			 ::borogove::JID tmp1 = this->sender;
-HXDLIN( 333)			if (::hx::IsNotNull( tmp1 )) {
-HXDLIN( 333)				return tmp1->asString();
+HXDLIN( 392)			 ::borogove::JID tmp1 = this->sender;
+HXDLIN( 392)			if (::hx::IsNotNull( tmp1 )) {
+HXDLIN( 392)				return tmp1->asString();
             			}
             			else {
-HXDLIN( 333)				return null();
+HXDLIN( 392)				return null();
             			}
             		}
-HXDLIN( 333)		return null();
+HXDLIN( 392)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,get_senderId,return )
 
 bool ChatMessageBuilder_obj::isIncoming(){
-            	HX_STACKFRAME(&_hx_pos_c7017726c326afec_338_isIncoming)
-HXDLIN( 338)		return (this->direction == 0);
+            	HX_STACKFRAME(&_hx_pos_c7017726c326afec_397_isIncoming)
+HXDLIN( 397)		return (this->direction == 0);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,isIncoming,return )
 
  ::borogove::ChatMessage ChatMessageBuilder_obj::build(){
-            	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_346_build)
-HXLINE( 347)		bool _hx_tmp;
-HXDLIN( 347)		if (::hx::IsNull( this->serverId )) {
-HXLINE( 347)			_hx_tmp = ::hx::IsNull( this->localId );
+            	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_405_build)
+HXLINE( 406)		bool _hx_tmp;
+HXDLIN( 406)		if (::hx::IsNull( this->serverId )) {
+HXLINE( 406)			_hx_tmp = ::hx::IsNull( this->localId );
             		}
             		else {
-HXLINE( 347)			_hx_tmp = false;
+HXLINE( 406)			_hx_tmp = false;
             		}
-HXDLIN( 347)		if (_hx_tmp) {
-HXLINE( 347)			HX_STACK_DO_THROW(HX_("Cannot build a ChatMessage with no id",ff,b8,88,e6));
+HXDLIN( 406)		if (_hx_tmp) {
+HXLINE( 406)			HX_STACK_DO_THROW(HX_("Cannot build a ChatMessage with no id",ff,b8,88,e6));
             		}
-HXLINE( 348)		 ::borogove::JID to;
-HXDLIN( 348)		 ::borogove::JID tmp = this->to;
-HXDLIN( 348)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 348)			to = tmp;
+HXLINE( 407)		 ::borogove::JID to;
+HXDLIN( 407)		 ::borogove::JID tmp = this->to;
+HXDLIN( 407)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 407)			to = tmp;
             		}
             		else {
-HXLINE( 348)			if (this->isIncoming()) {
-HXLINE( 348)				to =  ::borogove::JID_obj::__alloc( HX_CTX ,null(),HX_("inbound.to.me.example.com",05,22,96,fc),null(),null());
+HXLINE( 407)			if (this->isIncoming()) {
+HXLINE( 407)				to =  ::borogove::JID_obj::__alloc( HX_CTX ,null(),HX_("inbound.to.me.example.com",05,22,96,fc),null(),null());
             			}
             			else {
-HXLINE( 348)				to = null();
+HXLINE( 407)				to = null();
             			}
             		}
-HXLINE( 349)		if (::hx::IsNull( to )) {
-HXLINE( 349)			HX_STACK_DO_THROW(HX_("Cannot build a ChatMessage with no to",9f,c2,88,e6));
+HXLINE( 408)		if (::hx::IsNull( to )) {
+HXLINE( 408)			HX_STACK_DO_THROW(HX_("Cannot build a ChatMessage with no to",9f,c2,88,e6));
             		}
-HXLINE( 350)		::String senderId = this->get_senderId();
-HXLINE( 351)		if (::hx::IsNull( senderId )) {
-HXLINE( 351)			HX_STACK_DO_THROW(HX_("Cannot builder a ChatMessage with no sender",0c,5e,21,85));
+HXLINE( 409)		::String senderId = this->get_senderId();
+HXLINE( 410)		if (::hx::IsNull( senderId )) {
+HXLINE( 410)			HX_STACK_DO_THROW(HX_("Cannot builder a ChatMessage with no sender",0c,5e,21,85));
             		}
-HXLINE( 352)		 ::borogove::JID from;
-HXDLIN( 352)		 ::borogove::JID tmp1 = this->from;
-HXDLIN( 352)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 352)			from = tmp1;
+HXLINE( 411)		 ::borogove::JID from;
+HXDLIN( 411)		 ::borogove::JID tmp1 = this->from;
+HXDLIN( 411)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 411)			from = tmp1;
             		}
             		else {
-HXLINE( 352)			if (::hx::IsNull( senderId )) {
-HXLINE( 352)				from = null();
+HXLINE( 411)			if (::hx::IsNull( senderId )) {
+HXLINE( 411)				from = null();
             			}
             			else {
-HXLINE( 352)				from = ::borogove::JID_obj::parse(senderId);
+HXLINE( 411)				from = ::borogove::JID_obj::parse(senderId);
             			}
             		}
-HXLINE( 353)		if (::hx::IsNull( from )) {
-HXLINE( 353)			HX_STACK_DO_THROW(HX_("Cannot build a ChatMessage with no from",8e,93,f7,22));
+HXLINE( 412)		if (::hx::IsNull( from )) {
+HXLINE( 412)			HX_STACK_DO_THROW(HX_("Cannot build a ChatMessage with no from",8e,93,f7,22));
+            		}
+HXLINE( 413)		if (::hx::IsNull( this->sender )) {
+HXLINE( 413)			from->asBare();
+            		}
+HXLINE( 415)		::String _hx_tmp1 = this->localId;
+HXLINE( 416)		::String _hx_tmp2 = this->serverId;
+HXLINE( 417)		::String _hx_tmp3 = this->serverIdBy;
+HXLINE( 418)		::String _hx_tmp4 = this->sortId;
+HXLINE( 419)		 ::Dynamic _hx_tmp5 = this->type;
+HXLINE( 420)		 ::Dynamic _hx_tmp6 = this->syncPoint;
+HXLINE( 421)		::String _hx_tmp7 = this->replyId;
+HXLINE( 422)		::String _hx_tmp8;
+HXDLIN( 422)		::String tmp2 = this->timeReceived;
+HXDLIN( 422)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 422)			_hx_tmp8 = tmp2;
+            		}
+            		else {
+HXLINE( 422)			_hx_tmp8 = ::borogove::Date_obj::format(::Date_obj::now());
+            		}
+HXLINE( 423)		::String tmp3 = this->timeSent;
+HXDLIN( 423)		::String tmp4;
+HXDLIN( 423)		if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 423)			tmp4 = tmp3;
             		}
-HXLINE( 354)		if (::hx::IsNull( this->sender )) {
-HXLINE( 354)			from->asBare();
+            		else {
+HXLINE( 423)			tmp4 = this->timeReceived;
             		}
-HXLINE( 356)		::String _hx_tmp1 = this->localId;
-HXLINE( 357)		::String _hx_tmp2 = this->serverId;
-HXLINE( 358)		::String _hx_tmp3 = this->serverIdBy;
-HXLINE( 359)		::String _hx_tmp4 = this->sortId;
-HXLINE( 360)		 ::Dynamic _hx_tmp5 = this->type;
-HXLINE( 361)		 ::Dynamic _hx_tmp6 = this->syncPoint;
-HXLINE( 362)		::String _hx_tmp7 = this->replyId;
-HXLINE( 363)		::String tmp2 = this->timestamp;
-HXDLIN( 363)		::String _hx_tmp8;
-HXDLIN( 363)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 363)			_hx_tmp8 = tmp2;
+HXDLIN( 423)		::String _hx_tmp9;
+HXDLIN( 423)		if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 423)			_hx_tmp9 = tmp4;
             		}
             		else {
-HXLINE( 363)			_hx_tmp8 = ::borogove::Date_obj::format(::Date_obj::now());
+HXLINE( 423)			_hx_tmp9 = ::borogove::Date_obj::format(::Date_obj::now());
             		}
-HXLINE( 355)		return  ::borogove::ChatMessage_obj::__alloc( HX_CTX , ::Dynamic(::hx::Anon_obj::Create(27)
+HXLINE( 414)		return  ::borogove::ChatMessage_obj::__alloc( HX_CTX , ::Dynamic(::hx::Anon_obj::Create(29)
             			->setFixed(0,HX_("recipients",7a,62,59,87),this->recipients)
             			->setFixed(1,HX_("syncPoint",f5,ff,94,98),_hx_tmp6)
             			->setFixed(2,HX_("payloads",25,dd,d1,a1),this->payloads)
-            			->setFixed(3,HX_("timestamp",d6,d4,ce,a5),_hx_tmp8)
-            			->setFixed(4,HX_("replyToMessage",02,cf,60,a6),this->replyToMessage)
-            			->setFixed(5,HX_("replyId",a5,67,3a,ab),_hx_tmp7)
-            			->setFixed(6,HX_("replyTo",45,71,3a,ab),this->replyTo)
-            			->setFixed(7,HX_("statusText",ff,60,57,b1),this->statusText)
-            			->setFixed(8,HX_("threadId",45,81,25,cc),this->threadId)
-            			->setFixed(9,HX_("versions",5b,4e,b8,d6),this->versions)
+            			->setFixed(3,HX_("replyToMessage",02,cf,60,a6),this->replyToMessage)
+            			->setFixed(4,HX_("replyId",a5,67,3a,ab),_hx_tmp7)
+            			->setFixed(5,HX_("replyTo",45,71,3a,ab),this->replyTo)
+            			->setFixed(6,HX_("statusText",ff,60,57,b1),this->statusText)
+            			->setFixed(7,HX_("threadId",45,81,25,cc),this->threadId)
+            			->setFixed(8,HX_("versions",5b,4e,b8,d6),this->versions)
+            			->setFixed(9,HX_("debug",53,52,1f,d7),this->debug)
             			->setFixed(10,HX_("serverId",7e,01,b2,e2),_hx_tmp2)
             			->setFixed(11,HX_("attachments",30,df,33,e7),this->attachments)
             			->setFixed(12,HX_("reactions",aa,cc,95,e7),this->reactions)
             			->setFixed(13,HX_("senderId",f0,1e,0e,ec),senderId)
-            			->setFixed(14,HX_("to",7b,65,00,00),to)
-            			->setFixed(15,HX_("stanza",f5,5d,f7,05),this->stanza)
-            			->setFixed(16,HX_("status",32,e7,fb,05),this->status)
-            			->setFixed(17,HX_("direction",3f,62,40,10),this->direction)
-            			->setFixed(18,HX_("localId",26,7a,c6,2d),_hx_tmp1)
-            			->setFixed(19,HX_("sortId",d9,7a,37,30),_hx_tmp4)
-            			->setFixed(20,HX_("from",6a,a5,c2,43),from)
-            			->setFixed(21,HX_("lang",ee,05,ad,47),this->lang)
-            			->setFixed(22,HX_("text",ad,cc,f9,4c),this->text)
-            			->setFixed(23,HX_("type",ba,f2,08,4d),_hx_tmp5)
-            			->setFixed(24,HX_("encryption",83,dc,39,4f),this->encryption)
-            			->setFixed(25,HX_("serverIdBy",f5,16,54,74),_hx_tmp3)
-            			->setFixed(26,HX_("linkMetadata",89,45,ae,7c),this->linkMetadata)));
+            			->setFixed(14,HX_("timeSent",05,10,b2,ec),_hx_tmp9)
+            			->setFixed(15,HX_("to",7b,65,00,00),to)
+            			->setFixed(16,HX_("stanza",f5,5d,f7,05),this->stanza)
+            			->setFixed(17,HX_("status",32,e7,fb,05),this->status)
+            			->setFixed(18,HX_("direction",3f,62,40,10),this->direction)
+            			->setFixed(19,HX_("localId",26,7a,c6,2d),_hx_tmp1)
+            			->setFixed(20,HX_("sortId",d9,7a,37,30),_hx_tmp4)
+            			->setFixed(21,HX_("from",6a,a5,c2,43),from)
+            			->setFixed(22,HX_("lang",ee,05,ad,47),this->lang)
+            			->setFixed(23,HX_("text",ad,cc,f9,4c),this->text)
+            			->setFixed(24,HX_("type",ba,f2,08,4d),_hx_tmp5)
+            			->setFixed(25,HX_("encryption",83,dc,39,4f),this->encryption)
+            			->setFixed(26,HX_("serverIdBy",f5,16,54,74),_hx_tmp3)
+            			->setFixed(27,HX_("timeReceived",4e,22,9a,7b),_hx_tmp8)
+            			->setFixed(28,HX_("linkMetadata",89,45,ae,7c),this->linkMetadata)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,build,return )
 
- ::borogove::ChatMessage ChatMessageBuilder_obj::makeModerated( ::borogove::ChatMessage m,::String timestamp,::String moderatorId,::String reason){
-            	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_218_makeModerated)
-HXLINE( 219)		 ::borogove::ChatMessageBuilder builder =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
-HXLINE( 220)		builder->localId = m->localId;
-HXLINE( 221)		builder->serverId = m->serverId;
-HXLINE( 222)		builder->serverIdBy = m->serverIdBy;
-HXLINE( 223)		builder->sortId = m->sortId;
-HXLINE( 224)		builder->type = m->type;
-HXLINE( 225)		builder->syncPoint = m->syncPoint;
-HXLINE( 226)		builder->replyId = m->replyId;
-HXLINE( 227)		builder->timestamp = m->timestamp;
-HXLINE( 228)		builder->to = m->to;
-HXLINE( 229)		builder->from = m->from;
-HXLINE( 230)		builder->senderId = m->senderId;
-HXLINE( 231)		builder->recipients = ::Lambda_obj::array(m->recipients);
-HXLINE( 232)		builder->replyTo = ::Lambda_obj::array(m->replyTo);
-HXLINE( 233)		builder->replyToMessage = m->replyToMessage;
-HXLINE( 234)		builder->threadId = m->threadId;
-HXLINE( 235)		builder->reactions = m->reactions;
-HXLINE( 236)		builder->direction = m->direction;
-HXLINE( 237)		builder->status = m->status;
-HXLINE( 238)		 ::borogove::ChatMessage cleanedStub = builder->build();
-HXLINE( 239)		 ::borogove::Stanza payload =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("retracted",a0,7c,77,08), ::Dynamic(::hx::Anon_obj::Create(2)
-            			->setFixed(0,HX_("stamp",03,70,0b,84),timestamp)
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:message-retract:1",16,5e,d8,d5))));
-HXLINE( 240)		if (::hx::IsNotNull( reason )) {
-HXLINE( 240)			payload->textTag(HX_("reason",c4,0f,9d,fc),reason,null());
+ ::borogove::ChatMessageBuilder ChatMessageBuilder_obj::fromMessage( ::borogove::ChatMessage m){
+            	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_238_fromMessage)
+HXLINE( 239)		 ::borogove::ChatMessageBuilder builder =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
+HXLINE( 240)		builder->localId = m->localId;
+HXLINE( 241)		builder->serverId = m->serverId;
+HXLINE( 242)		builder->serverIdBy = m->serverIdBy;
+HXLINE( 243)		builder->sortId = m->sortId;
+HXLINE( 244)		builder->type = m->type;
+HXLINE( 245)		builder->syncPoint = m->syncPoint;
+HXLINE( 246)		builder->replyId = m->replyId;
+HXLINE( 247)		builder->timeSent = m->timeSent;
+HXLINE( 248)		builder->timeReceived = m->timeReceived;
+HXLINE( 249)		builder->to = m->to;
+HXLINE( 250)		builder->from = m->from;
+HXLINE( 251)		builder->senderId = m->senderId;
+HXLINE( 252)		builder->recipients = ::Lambda_obj::array(m->recipients);
+HXLINE( 253)		builder->replyTo = ::Lambda_obj::array(m->replyTo);
+HXLINE( 254)		builder->replyToMessage = m->replyToMessage;
+HXLINE( 255)		builder->threadId = m->threadId;
+HXLINE( 256)		builder->attachments = ::Lambda_obj::array(m->attachments);
+HXLINE( 257)		builder->debug = m->debug;
+HXLINE( 258)		builder->reactions = m->reactions;
+HXLINE( 259)		builder->direction = m->direction;
+HXLINE( 260)		builder->status = m->status;
+HXLINE( 261)		builder->statusText = m->statusText;
+HXLINE( 262)		builder->versions = ::Lambda_obj::array(m->versions);
+HXLINE( 263)		builder->payloads = ::Lambda_obj::array(m->payloads);
+HXLINE( 264)		builder->encryption = m->encryption;
+HXLINE( 265)		builder->linkMetadata = ::Lambda_obj::array(m->linkMetadata);
+HXLINE( 266)		builder->stanza = m->stanza;
+HXLINE( 267)		builder->text = m->text;
+HXLINE( 268)		builder->lang = m->lang;
+HXLINE( 269)		return builder;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,fromMessage,return )
+
+ ::borogove::ChatMessage ChatMessageBuilder_obj::makeModerated( ::borogove::ChatMessage m,::String timeSent,::String timeReceived,::String moderatorId,::String reason){
+            	HX_GC_STACKFRAME(&_hx_pos_c7017726c326afec_273_makeModerated)
+HXLINE( 274)		 ::borogove::ChatMessageBuilder builder =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
+HXLINE( 275)		builder->localId = m->localId;
+HXLINE( 276)		builder->serverId = m->serverId;
+HXLINE( 277)		builder->serverIdBy = m->serverIdBy;
+HXLINE( 278)		builder->sortId = m->sortId;
+HXLINE( 279)		builder->type = m->type;
+HXLINE( 280)		builder->syncPoint = m->syncPoint;
+HXLINE( 281)		builder->replyId = m->replyId;
+HXLINE( 282)		builder->timeSent = m->timeSent;
+HXLINE( 283)		builder->timeReceived = m->timeReceived;
+HXLINE( 284)		builder->to = m->to;
+HXLINE( 285)		builder->from = m->from;
+HXLINE( 286)		builder->senderId = m->senderId;
+HXLINE( 287)		builder->recipients = ::Lambda_obj::array(m->recipients);
+HXLINE( 288)		builder->replyTo = ::Lambda_obj::array(m->replyTo);
+HXLINE( 289)		builder->replyToMessage = m->replyToMessage;
+HXLINE( 290)		builder->threadId = m->threadId;
+HXLINE( 291)		builder->debug = m->debug;
+HXLINE( 292)		builder->reactions = m->reactions;
+HXLINE( 293)		builder->direction = m->direction;
+HXLINE( 294)		builder->status = m->status;
+HXLINE( 295)		 ::borogove::ChatMessage cleanedStub = builder->build();
+HXLINE( 296)		 ::borogove::Stanza payload =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("retracted",a0,7c,77,08), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("stamp",03,70,0b,84),timeSent)
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:message-retract:1",16,5e,d8,d5))),null());
+HXLINE( 297)		if (::hx::IsNotNull( reason )) {
+HXLINE( 297)			payload->textTag(HX_("reason",c4,0f,9d,fc),reason,null(),null());
             		}
-HXLINE( 241)		payload->tag(HX_("moderated",41,37,3b,22), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 298)		payload->tag(HX_("moderated",41,37,3b,22), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("by",d7,55,00,00),moderatorId)
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:message-moderate:1",5c,30,1a,b9))))->up();
-HXLINE( 242)		builder->payloads->push(payload);
-HXLINE( 243)		builder->timestamp = timestamp;
-HXLINE( 244)		builder->versions = ::Array_obj< ::Dynamic>::__new(2)->init(0,builder->build())->init(1,cleanedStub);
-HXLINE( 245)		builder->timestamp = m->timestamp;
-HXLINE( 246)		return builder->build();
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:message-moderate:1",5c,30,1a,b9))),null())->up();
+HXLINE( 299)		builder->payloads->push(payload);
+HXLINE( 300)		builder->timeSent = timeSent;
+HXLINE( 301)		builder->timeReceived = timeReceived;
+HXLINE( 302)		builder->versions = ::Array_obj< ::Dynamic>::__new(2)->init(0,builder->build())->init(1,cleanedStub);
+HXLINE( 303)		return builder->build();
             	}
 
 
-STATIC_HX_DEFINE_DYNAMIC_FUNC4(ChatMessageBuilder_obj,makeModerated,return )
+STATIC_HX_DEFINE_DYNAMIC_FUNC5(ChatMessageBuilder_obj,makeModerated,return )
 
 
 ::hx::ObjectPtr< ChatMessageBuilder_obj > ChatMessageBuilder_obj::__new() {
@@ -873,7 +951,8 @@ void ChatMessageBuilder_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(type,"type");
 	HX_MARK_MEMBER_NAME(syncPoint,"syncPoint");
 	HX_MARK_MEMBER_NAME(replyId,"replyId");
-	HX_MARK_MEMBER_NAME(timestamp,"timestamp");
+	HX_MARK_MEMBER_NAME(timeSent,"timeSent");
+	HX_MARK_MEMBER_NAME(timeReceived,"timeReceived");
 	HX_MARK_MEMBER_NAME(to,"to");
 	HX_MARK_MEMBER_NAME(from,"from");
 	HX_MARK_MEMBER_NAME(sender,"sender");
@@ -883,6 +962,7 @@ void ChatMessageBuilder_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(replyToMessage,"replyToMessage");
 	HX_MARK_MEMBER_NAME(threadId,"threadId");
 	HX_MARK_MEMBER_NAME(attachments,"attachments");
+	HX_MARK_MEMBER_NAME(debug,"debug");
 	HX_MARK_MEMBER_NAME(reactions,"reactions");
 	HX_MARK_MEMBER_NAME(text,"text");
 	HX_MARK_MEMBER_NAME(lang,"lang");
@@ -906,7 +986,8 @@ void ChatMessageBuilder_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(type,"type");
 	HX_VISIT_MEMBER_NAME(syncPoint,"syncPoint");
 	HX_VISIT_MEMBER_NAME(replyId,"replyId");
-	HX_VISIT_MEMBER_NAME(timestamp,"timestamp");
+	HX_VISIT_MEMBER_NAME(timeSent,"timeSent");
+	HX_VISIT_MEMBER_NAME(timeReceived,"timeReceived");
 	HX_VISIT_MEMBER_NAME(to,"to");
 	HX_VISIT_MEMBER_NAME(from,"from");
 	HX_VISIT_MEMBER_NAME(sender,"sender");
@@ -916,6 +997,7 @@ void ChatMessageBuilder_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(replyToMessage,"replyToMessage");
 	HX_VISIT_MEMBER_NAME(threadId,"threadId");
 	HX_VISIT_MEMBER_NAME(attachments,"attachments");
+	HX_VISIT_MEMBER_NAME(debug,"debug");
 	HX_VISIT_MEMBER_NAME(reactions,"reactions");
 	HX_VISIT_MEMBER_NAME(text,"text");
 	HX_VISIT_MEMBER_NAME(lang,"lang");
@@ -942,6 +1024,7 @@ void ChatMessageBuilder_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"lang") ) { return ::hx::Val( lang ); }
 		break;
 	case 5:
+		if (HX_FIELD_EQ(inName,"debug") ) { return ::hx::Val( debug ); }
 		if (HX_FIELD_EQ(inName,"build") ) { return ::hx::Val( build_dyn() ); }
 		break;
 	case 6:
@@ -959,6 +1042,7 @@ void ChatMessageBuilder_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 8:
 		if (HX_FIELD_EQ(inName,"serverId") ) { return ::hx::Val( serverId ); }
+		if (HX_FIELD_EQ(inName,"timeSent") ) { return ::hx::Val( timeSent ); }
 		if (HX_FIELD_EQ(inName,"senderId") ) { return ::hx::Val( inCallProp == ::hx::paccAlways ? get_senderId() : senderId ); }
 		if (HX_FIELD_EQ(inName,"threadId") ) { return ::hx::Val( threadId ); }
 		if (HX_FIELD_EQ(inName,"versions") ) { return ::hx::Val( versions ); }
@@ -966,7 +1050,6 @@ void ChatMessageBuilder_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 9:
 		if (HX_FIELD_EQ(inName,"syncPoint") ) { return ::hx::Val( syncPoint ); }
-		if (HX_FIELD_EQ(inName,"timestamp") ) { return ::hx::Val( timestamp ); }
 		if (HX_FIELD_EQ(inName,"reactions") ) { return ::hx::Val( reactions ); }
 		if (HX_FIELD_EQ(inName,"direction") ) { return ::hx::Val( direction ); }
 		break;
@@ -985,6 +1068,7 @@ void ChatMessageBuilder_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"lang__fromC") ) { return ::hx::Val( lang__fromC_dyn() ); }
 		break;
 	case 12:
+		if (HX_FIELD_EQ(inName,"timeReceived") ) { return ::hx::Val( timeReceived ); }
 		if (HX_FIELD_EQ(inName,"linkMetadata") ) { return ::hx::Val( linkMetadata ); }
 		if (HX_FIELD_EQ(inName,"get_senderId") ) { return ::hx::Val( get_senderId_dyn() ); }
 		break;
@@ -999,12 +1083,12 @@ void ChatMessageBuilder_obj::__Visit(HX_VISIT_PARAMS)
 	case 15:
 		if (HX_FIELD_EQ(inName,"serverId__fromC") ) { return ::hx::Val( serverId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"set_type__fromC") ) { return ::hx::Val( set_type__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"timeSent__fromC") ) { return ::hx::Val( timeSent__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"senderId__fromC") ) { return ::hx::Val( senderId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"threadId__fromC") ) { return ::hx::Val( threadId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"set_lang__fromC") ) { return ::hx::Val( set_lang__fromC_dyn() ); }
 		break;
 	case 16:
-		if (HX_FIELD_EQ(inName,"timestamp__fromC") ) { return ::hx::Val( timestamp__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"direction__fromC") ) { return ::hx::Val( direction__fromC_dyn() ); }
 		break;
 	case 17:
@@ -1018,12 +1102,13 @@ void ChatMessageBuilder_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 19:
 		if (HX_FIELD_EQ(inName,"set_serverId__fromC") ) { return ::hx::Val( set_serverId__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"set_timeSent__fromC") ) { return ::hx::Val( set_timeSent__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"timeReceived__fromC") ) { return ::hx::Val( timeReceived__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"set_senderId__fromC") ) { return ::hx::Val( set_senderId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"set_threadId__fromC") ) { return ::hx::Val( set_threadId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"set_versions__fromC") ) { return ::hx::Val( set_versions__fromC_dyn() ); }
 		break;
 	case 20:
-		if (HX_FIELD_EQ(inName,"set_timestamp__fromC") ) { return ::hx::Val( set_timestamp__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"set_direction__fromC") ) { return ::hx::Val( set_direction__fromC_dyn() ); }
 		break;
 	case 21:
@@ -1033,6 +1118,7 @@ void ChatMessageBuilder_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"set_encryption__fromC") ) { return ::hx::Val( set_encryption__fromC_dyn() ); }
 		break;
 	case 23:
+		if (HX_FIELD_EQ(inName,"set_timeReceived__fromC") ) { return ::hx::Val( set_timeReceived__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"set_linkMetadata__fromC") ) { return ::hx::Val( set_linkMetadata__fromC_dyn() ); }
 		break;
 	case 25:
@@ -1044,6 +1130,9 @@ void ChatMessageBuilder_obj::__Visit(HX_VISIT_PARAMS)
 bool ChatMessageBuilder_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
 {
 	switch(inName.length) {
+	case 11:
+		if (HX_FIELD_EQ(inName,"fromMessage") ) { outValue = fromMessage_dyn(); return true; }
+		break;
 	case 13:
 		if (HX_FIELD_EQ(inName,"makeModerated") ) { outValue = makeModerated_dyn(); return true; }
 	}
@@ -1062,6 +1151,9 @@ bool ChatMessageBuilder_obj::__GetStatic(const ::String &inName, Dynamic &outVal
 		if (HX_FIELD_EQ(inName,"text") ) { text=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"lang") ) { lang=inValue.Cast< ::String >(); return inValue; }
 		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"debug") ) { debug=inValue.Cast<  ::Dynamic >(); return inValue; }
+		break;
 	case 6:
 		if (HX_FIELD_EQ(inName,"sortId") ) { sortId=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"sender") ) { sender=inValue.Cast<  ::borogove::JID >(); return inValue; }
@@ -1075,6 +1167,7 @@ bool ChatMessageBuilder_obj::__GetStatic(const ::String &inName, Dynamic &outVal
 		break;
 	case 8:
 		if (HX_FIELD_EQ(inName,"serverId") ) { serverId=inValue.Cast< ::String >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"timeSent") ) { timeSent=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"senderId") ) { senderId=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"threadId") ) { threadId=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"versions") ) { versions=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
@@ -1082,7 +1175,6 @@ bool ChatMessageBuilder_obj::__GetStatic(const ::String &inName, Dynamic &outVal
 		break;
 	case 9:
 		if (HX_FIELD_EQ(inName,"syncPoint") ) { syncPoint=inValue.Cast< bool >(); return inValue; }
-		if (HX_FIELD_EQ(inName,"timestamp") ) { timestamp=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"reactions") ) { reactions=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"direction") ) { direction=inValue.Cast< int >(); return inValue; }
 		break;
@@ -1096,6 +1188,7 @@ bool ChatMessageBuilder_obj::__GetStatic(const ::String &inName, Dynamic &outVal
 		if (HX_FIELD_EQ(inName,"attachments") ) { attachments=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
 		break;
 	case 12:
+		if (HX_FIELD_EQ(inName,"timeReceived") ) { timeReceived=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"linkMetadata") ) { linkMetadata=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
 		break;
 	case 14:
@@ -1113,7 +1206,8 @@ void ChatMessageBuilder_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("type",ba,f2,08,4d));
 	outFields->push(HX_("syncPoint",f5,ff,94,98));
 	outFields->push(HX_("replyId",a5,67,3a,ab));
-	outFields->push(HX_("timestamp",d6,d4,ce,a5));
+	outFields->push(HX_("timeSent",05,10,b2,ec));
+	outFields->push(HX_("timeReceived",4e,22,9a,7b));
 	outFields->push(HX_("to",7b,65,00,00));
 	outFields->push(HX_("from",6a,a5,c2,43));
 	outFields->push(HX_("sender",b5,c7,84,6b));
@@ -1123,6 +1217,7 @@ void ChatMessageBuilder_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("replyToMessage",02,cf,60,a6));
 	outFields->push(HX_("threadId",45,81,25,cc));
 	outFields->push(HX_("attachments",30,df,33,e7));
+	outFields->push(HX_("debug",53,52,1f,d7));
 	outFields->push(HX_("reactions",aa,cc,95,e7));
 	outFields->push(HX_("text",ad,cc,f9,4c));
 	outFields->push(HX_("lang",ee,05,ad,47));
@@ -1146,7 +1241,8 @@ static ::hx::StorageInfo ChatMessageBuilder_obj_sMemberStorageInfo[] = {
 	{::hx::fsInt,(int)offsetof(ChatMessageBuilder_obj,type),HX_("type",ba,f2,08,4d)},
 	{::hx::fsBool,(int)offsetof(ChatMessageBuilder_obj,syncPoint),HX_("syncPoint",f5,ff,94,98)},
 	{::hx::fsString,(int)offsetof(ChatMessageBuilder_obj,replyId),HX_("replyId",a5,67,3a,ab)},
-	{::hx::fsString,(int)offsetof(ChatMessageBuilder_obj,timestamp),HX_("timestamp",d6,d4,ce,a5)},
+	{::hx::fsString,(int)offsetof(ChatMessageBuilder_obj,timeSent),HX_("timeSent",05,10,b2,ec)},
+	{::hx::fsString,(int)offsetof(ChatMessageBuilder_obj,timeReceived),HX_("timeReceived",4e,22,9a,7b)},
 	{::hx::fsObject /*  ::borogove::JID */ ,(int)offsetof(ChatMessageBuilder_obj,to),HX_("to",7b,65,00,00)},
 	{::hx::fsObject /*  ::borogove::JID */ ,(int)offsetof(ChatMessageBuilder_obj,from),HX_("from",6a,a5,c2,43)},
 	{::hx::fsObject /*  ::borogove::JID */ ,(int)offsetof(ChatMessageBuilder_obj,sender),HX_("sender",b5,c7,84,6b)},
@@ -1156,6 +1252,7 @@ static ::hx::StorageInfo ChatMessageBuilder_obj_sMemberStorageInfo[] = {
 	{::hx::fsObject /*  ::borogove::ChatMessage */ ,(int)offsetof(ChatMessageBuilder_obj,replyToMessage),HX_("replyToMessage",02,cf,60,a6)},
 	{::hx::fsString,(int)offsetof(ChatMessageBuilder_obj,threadId),HX_("threadId",45,81,25,cc)},
 	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(ChatMessageBuilder_obj,attachments),HX_("attachments",30,df,33,e7)},
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(ChatMessageBuilder_obj,debug),HX_("debug",53,52,1f,d7)},
 	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(ChatMessageBuilder_obj,reactions),HX_("reactions",aa,cc,95,e7)},
 	{::hx::fsString,(int)offsetof(ChatMessageBuilder_obj,text),HX_("text",ad,cc,f9,4c)},
 	{::hx::fsString,(int)offsetof(ChatMessageBuilder_obj,lang),HX_("lang",ee,05,ad,47)},
@@ -1188,9 +1285,12 @@ static ::String ChatMessageBuilder_obj_sMemberFields[] = {
 	HX_("set_type__fromC",a2,dd,19,50),
 	HX_("syncPoint",f5,ff,94,98),
 	HX_("replyId",a5,67,3a,ab),
-	HX_("timestamp",d6,d4,ce,a5),
-	HX_("timestamp__fromC",63,82,8b,d7),
-	HX_("set_timestamp__fromC",e0,9e,ad,c2),
+	HX_("timeSent",05,10,b2,ec),
+	HX_("timeSent__fromC",14,9b,98,a3),
+	HX_("set_timeSent__fromC",37,5d,40,6b),
+	HX_("timeReceived",4e,22,9a,7b),
+	HX_("timeReceived__fromC",eb,53,19,1d),
+	HX_("set_timeReceived__fromC",8e,63,d0,27),
 	HX_("to",7b,65,00,00),
 	HX_("from",6a,a5,c2,43),
 	HX_("sender",b5,c7,84,6b),
@@ -1206,6 +1306,7 @@ static ::String ChatMessageBuilder_obj_sMemberFields[] = {
 	HX_("threadId__fromC",d4,d1,81,79),
 	HX_("set_threadId__fromC",f7,93,29,41),
 	HX_("attachments",30,df,33,e7),
+	HX_("debug",53,52,1f,d7),
 	HX_("reactions",aa,cc,95,e7),
 	HX_("text",ad,cc,f9,4c),
 	HX_("lang",ee,05,ad,47),
@@ -1242,6 +1343,7 @@ static ::String ChatMessageBuilder_obj_sMemberFields[] = {
 ::hx::Class ChatMessageBuilder_obj::__mClass;
 
 static ::String ChatMessageBuilder_obj_sStaticFields[] = {
+	HX_("fromMessage",7d,99,51,32),
 	HX_("makeModerated",73,2f,e4,1a),
 	::String(null())
 };
@@ -1274,7 +1376,7 @@ void ChatMessageBuilder_obj::__boot()
 {
             	HX_STACKFRAME(&_hx_pos_c7017726c326afec_31_boot)
 HXDLIN(  31)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(32)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(34)
             				->setFixed(0,HX_("serverId__fromC",bb,ba,c0,81), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(1,HX_("statusText__fromC",5a,bd,80,8c), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -1287,9 +1389,9 @@ HXDLIN(  31)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(5,HX_("status__fromC",87,b3,25,a1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(6,HX_("localId__fromC",13,27,c6,af), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(6,HX_("timeSent__fromC",14,9b,98,a3), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(7,HX_("set_timestamp__fromC",e0,9e,ad,c2), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(7,HX_("localId__fromC",13,27,c6,af), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(8,HX_("set_status__fromC",ea,96,03,cb), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
@@ -1299,45 +1401,49 @@ HXDLIN(  31)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(11,HX_("set_serverIdBy__fromC",07,23,e5,d4), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(12,HX_("timestamp__fromC",63,82,8b,d7), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(13,HX_("set_encryption__fromC",39,4b,6d,dc), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(12,HX_("set_encryption__fromC",39,4b,6d,dc), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(14,HX_("set_versions__fromC",a1,35,90,dc), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(13,HX_("set_versions__fromC",a1,35,90,dc), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(15,HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(14,HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(16,HX_("serverIdBy__fromC",24,52,2e,02), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(15,HX_("serverIdBy__fromC",24,52,2e,02), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(16,HX_("set_replyToMessage__fromC",1a,e4,8c,05), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(17,HX_("encryption__fromC",56,7a,b6,09), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(18,HX_("set_lang__fromC",ee,58,ad,0e), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(17,HX_("set_replyToMessage__fromC",1a,e4,8c,05), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(19,HX_("versions__fromC",7e,73,e8,14), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(18,HX_("encryption__fromC",56,7a,b6,09), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(20,HX_("timeReceived__fromC",eb,53,19,1d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(19,HX_("set_lang__fromC",ee,58,ad,0e), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(21,HX_("set_timeReceived__fromC",8e,63,d0,27), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(20,HX_("versions__fromC",7e,73,e8,14), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(22,HX_("set_localId__fromC",50,3a,0f,28), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(21,HX_("set_localId__fromC",50,3a,0f,28), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(23,HX_("set_direction__fromC",97,80,e8,36), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(22,HX_("set_direction__fromC",97,80,e8,36), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(24,HX_("linkMetadata__fromC",10,de,bf,3a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(23,HX_("linkMetadata__fromC",10,de,bf,3a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(25,HX_("set_threadId__fromC",f7,93,29,41), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(24,HX_("set_threadId__fromC",f7,93,29,41), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(26,HX_("set_linkMetadata__fromC",b3,ed,76,45), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(25,HX_("set_linkMetadata__fromC",b3,ed,76,45), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(27,HX_("set_serverId__fromC",de,7c,68,49), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(26,HX_("set_serverId__fromC",de,7c,68,49), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(28,HX_("direction__fromC",1a,64,c6,4b), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(27,HX_("direction__fromC",1a,64,c6,4b), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(29,HX_("set_type__fromC",a2,dd,19,50), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(28,HX_("set_type__fromC",a2,dd,19,50), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(30,HX_("lang__fromC",4b,24,00,52), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(29,HX_("lang__fromC",4b,24,00,52), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(31,HX_("set_statusText__fromC",3d,8e,37,5f), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(30,HX_("set_statusText__fromC",3d,8e,37,5f), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(32,HX_("set_timeSent__fromC",37,5d,40,6b), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(31,HX_("threadId__fromC",d4,d1,81,79), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(33,HX_("threadId__fromC",d4,d1,81,79), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
             	}
 }
diff --git a/Sources/c_borogove/src/borogove/ChatMessageCombiner.cpp b/Sources/c_borogove/src/borogove/ChatMessageCombiner.cpp
new file mode 100644
index 0000000..921c1b1
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/ChatMessageCombiner.cpp
@@ -0,0 +1,296 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_Lambda
+#include <Lambda.h>
+#endif
+#ifndef INCLUDED_Reflect
+#include <Reflect.h>
+#endif
+#ifndef INCLUDED__UUIDv7_UUIDv7_Fields_
+#include <_UUIDv7/UUIDv7_Fields_.h>
+#endif
+#ifndef INCLUDED_borogove_ChatMessage
+#include <borogove/ChatMessage.h>
+#endif
+#ifndef INCLUDED_borogove_ChatMessageBuilder
+#include <borogove/ChatMessageBuilder.h>
+#endif
+#ifndef INCLUDED_borogove_ChatMessageCombiner
+#include <borogove/ChatMessageCombiner.h>
+#endif
+#ifndef INCLUDED_borogove_JID
+#include <borogove/JID.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_da01083279145f06_8_combine,"borogove.ChatMessageCombiner","combine",0x14970d26,"borogove.ChatMessageCombiner.combine","borogove/ChatMessageCombiner.hx",8,0x7ca3428a)
+HX_LOCAL_STACK_FRAME(_hx_pos_da01083279145f06_10_combine,"borogove.ChatMessageCombiner","combine",0x14970d26,"borogove.ChatMessageCombiner.combine","borogove/ChatMessageCombiner.hx",10,0x7ca3428a)
+HX_LOCAL_STACK_FRAME(_hx_pos_da01083279145f06_21_correctionKey,"borogove.ChatMessageCombiner","correctionKey",0x48c16e88,"borogove.ChatMessageCombiner.correctionKey","borogove/ChatMessageCombiner.hx",21,0x7ca3428a)
+HX_LOCAL_STACK_FRAME(_hx_pos_da01083279145f06_31_combineMessages,"borogove.ChatMessageCombiner","combineMessages",0xa4713812,"borogove.ChatMessageCombiner.combineMessages","borogove/ChatMessageCombiner.hx",31,0x7ca3428a)
+HX_LOCAL_STACK_FRAME(_hx_pos_da01083279145f06_28_combineMessages,"borogove.ChatMessageCombiner","combineMessages",0xa4713812,"borogove.ChatMessageCombiner.combineMessages","borogove/ChatMessageCombiner.hx",28,0x7ca3428a)
+HX_LOCAL_STACK_FRAME(_hx_pos_da01083279145f06_74_combineVersions,"borogove.ChatMessageCombiner","combineVersions",0x462bada1,"borogove.ChatMessageCombiner.combineVersions","borogove/ChatMessageCombiner.hx",74,0x7ca3428a)
+HX_LOCAL_STACK_FRAME(_hx_pos_da01083279145f06_59_combineVersions,"borogove.ChatMessageCombiner","combineVersions",0x462bada1,"borogove.ChatMessageCombiner.combineVersions","borogove/ChatMessageCombiner.hx",59,0x7ca3428a)
+HX_LOCAL_STACK_FRAME(_hx_pos_da01083279145f06_64_combineVersions,"borogove.ChatMessageCombiner","combineVersions",0x462bada1,"borogove.ChatMessageCombiner.combineVersions","borogove/ChatMessageCombiner.hx",64,0x7ca3428a)
+HX_LOCAL_STACK_FRAME(_hx_pos_da01083279145f06_79_identity,"borogove.ChatMessageCombiner","identity",0x3a8cb4b7,"borogove.ChatMessageCombiner.identity","borogove/ChatMessageCombiner.hx",79,0x7ca3428a)
+namespace borogove{
+
+void ChatMessageCombiner_obj::__construct() { }
+
+Dynamic ChatMessageCombiner_obj::__CreateEmpty() { return new ChatMessageCombiner_obj; }
+
+void *ChatMessageCombiner_obj::_hx_vtable = 0;
+
+Dynamic ChatMessageCombiner_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< ChatMessageCombiner_obj > _hx_result = new ChatMessageCombiner_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool ChatMessageCombiner_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x79f82ba1;
+}
+
+::Array< ::Dynamic> ChatMessageCombiner_obj::combine(::Array< ::Dynamic> messages){
+            	HX_GC_STACKFRAME(&_hx_pos_da01083279145f06_8_combine)
+HXDLIN(   8)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(   8)		{
+            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
+            			 ::haxe::ds::StringMap _hx_run( ::borogove::ChatMessage message, ::haxe::ds::StringMap grouped){
+            				HX_STACKFRAME(&_hx_pos_da01083279145f06_10_combine)
+HXLINE(  11)				::String key = ::borogove::ChatMessageCombiner_obj::correctionKey(message);
+HXLINE(  12)				::Array< ::Dynamic> messages;
+HXDLIN(  12)				::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(grouped->get(key)) );
+HXDLIN(  12)				if (::hx::IsNotNull( tmp )) {
+HXLINE(  12)					messages = tmp;
+            				}
+            				else {
+HXLINE(  12)					messages = ::Array_obj< ::Dynamic>::__new(0);
+            				}
+HXLINE(  13)				grouped->set(key,messages->concat(::Array_obj< ::Dynamic>::__new(1)->init(0,message)));
+HXLINE(  14)				return grouped;
+            			}
+            			HX_END_LOCAL_FUNC2(return)
+
+HXDLIN(   8)			 ::Dynamic x = ::Lambda_obj::fold(messages, ::Dynamic(new _hx_Closure_0()), ::haxe::ds::StringMap_obj::__alloc( HX_CTX ))->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN(   8)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN(   8)				_g->push(::borogove::ChatMessageCombiner_obj::combineMessages(( (::Array< ::Dynamic>)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )));
+            			}
+            		}
+HXDLIN(   8)		return _g;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(ChatMessageCombiner_obj,combine,return )
+
+::String ChatMessageCombiner_obj::correctionKey( ::borogove::ChatMessage message){
+            	HX_STACKFRAME(&_hx_pos_da01083279145f06_21_correctionKey)
+HXLINE(  22)		if (::hx::IsNull( message->localId )) {
+HXLINE(  22)			return ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+            		}
+HXLINE(  24)		::String sender;
+HXDLIN(  24)		if ((message->type == 1)) {
+HXLINE(  24)			sender = HX_("call",9e,18,ba,41);
+            		}
+            		else {
+HXLINE(  24)			sender = message->senderId;
+            		}
+HXLINE(  25)		::String _hx_tmp = (message->localId + HX_("\n",0a,00,00,00));
+HXDLIN(  25)		return (((_hx_tmp + message->chatId()) + HX_("\n",0a,00,00,00)) + sender);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(ChatMessageCombiner_obj,correctionKey,return )
+
+ ::borogove::ChatMessage ChatMessageCombiner_obj::combineMessages(::Array< ::Dynamic> messages){
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            		bool _hx_run( ::borogove::ChatMessage message){
+            			HX_STACKFRAME(&_hx_pos_da01083279145f06_31_combineMessages)
+HXLINE(  31)			return (message->versions->length == 0);
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_da01083279145f06_28_combineMessages)
+HXLINE(  29)		if ((messages->length == 1)) {
+HXLINE(  29)			return messages->__get(0).StaticCast<  ::borogove::ChatMessage >();
+            		}
+HXLINE(  31)		 ::borogove::ChatMessage original;
+HXDLIN(  31)		 ::borogove::ChatMessage tmp = ( ( ::borogove::ChatMessage)(::Lambda_obj::find(messages, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN(  31)		if (::hx::IsNotNull( tmp )) {
+HXLINE(  31)			original = tmp;
+            		}
+            		else {
+HXLINE(  31)			original = messages->__get(0).StaticCast<  ::borogove::ChatMessage >();
+            		}
+HXLINE(  32)		::Array< ::Dynamic> combinedVersions = ::borogove::ChatMessageCombiner_obj::combineVersions(original,messages);
+HXLINE(  35)		 ::borogove::ChatMessageBuilder builder = ::borogove::ChatMessageBuilder_obj::fromMessage(combinedVersions->__get(0).StaticCast<  ::borogove::ChatMessage >());
+HXLINE(  36)		builder->localId = original->localId;
+HXLINE(  37)		builder->serverId = original->serverId;
+HXLINE(  38)		builder->serverIdBy = original->serverIdBy;
+HXLINE(  39)		builder->sortId = original->sortId;
+HXLINE(  40)		builder->timeSent = original->timeSent;
+HXLINE(  41)		builder->timeReceived = original->timeReceived;
+HXLINE(  42)		builder->replyId = original->replyId;
+HXLINE(  43)		builder->reactions = original->reactions;
+HXLINE(  44)		if ((original->type == 1)) {
+HXLINE(  45)			builder->direction = original->direction;
+HXLINE(  46)			builder->senderId = original->senderId;
+HXLINE(  47)			builder->from = original->from;
+HXLINE(  48)			builder->to = original->to;
+HXLINE(  49)			builder->replyTo = ::Lambda_obj::array(original->replyTo);
+HXLINE(  50)			builder->recipients = ::Lambda_obj::array(original->recipients);
+            		}
+HXLINE(  52)		builder->versions = combinedVersions;
+HXLINE(  53)		return builder->build();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(ChatMessageCombiner_obj,combineMessages,return )
+
+::Array< ::Dynamic> ChatMessageCombiner_obj::combineVersions( ::borogove::ChatMessage original,::Array< ::Dynamic> messages){
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(2)
+            		int _hx_run( ::borogove::ChatMessage a, ::borogove::ChatMessage b){
+            			HX_GC_STACKFRAME(&_hx_pos_da01083279145f06_74_combineVersions)
+HXLINE(  74)			return ::Reflect_obj::compare(b->timeReceived,a->timeReceived);
+            		}
+            		HX_END_LOCAL_FUNC2(return)
+
+            	HX_GC_STACKFRAME(&_hx_pos_da01083279145f06_59_combineVersions)
+HXLINE(  60)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(  60)		{
+HXLINE(  60)			int _g_current = 0;
+HXDLIN(  60)			while((_g_current < messages->length)){
+HXLINE(  60)				_g_current = (_g_current + 1);
+HXDLIN(  60)				_g->push(::Lambda_obj::array(messages->__get((_g_current - 1)).StaticCast<  ::borogove::ChatMessage >()->versions));
+            			}
+            		}
+HXDLIN(  60)		::Array< ::Dynamic> _g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(  60)		{
+HXLINE(  60)			 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN(  60)			while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(  60)				 ::Dynamic x = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN(  60)				while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(  60)					_g1->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            				}
+            			}
+            		}
+HXLINE(  61)		if ((original->versions->length == 0)) {
+HXLINE(  61)			_g1->push(original);
+            		}
+HXLINE(  63)		::Array< ::Dynamic> _g2 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(  63)		{
+            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
+            			 ::haxe::ds::StringMap _hx_run( ::borogove::ChatMessage version, ::haxe::ds::StringMap uniqueVersions){
+            				HX_STACKFRAME(&_hx_pos_da01083279145f06_64_combineVersions)
+HXLINE(  65)				::String id = ::borogove::ChatMessageCombiner_obj::identity(version);
+HXLINE(  66)				 ::borogove::ChatMessage previous = ( ( ::borogove::ChatMessage)(uniqueVersions->get(id)) );
+HXLINE(  67)				bool it;
+HXDLIN(  67)				if (::hx::IsNotNull( previous )) {
+HXLINE(  67)					it = (version->timeReceived > previous->timeReceived);
+            				}
+            				else {
+HXLINE(  67)					it = true;
+            				}
+HXDLIN(  67)				if (it) {
+HXLINE(  68)					uniqueVersions->set(id,version);
+            				}
+HXLINE(  70)				return uniqueVersions;
+            			}
+            			HX_END_LOCAL_FUNC2(return)
+
+HXLINE(  63)			 ::Dynamic x1 = ::Lambda_obj::fold(_g1, ::Dynamic(new _hx_Closure_0()), ::haxe::ds::StringMap_obj::__alloc( HX_CTX ))->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN(  63)			while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(  63)				_g2->push(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            			}
+            		}
+HXLINE(  74)		_g2->sort( ::Dynamic(new _hx_Closure_1()));
+HXLINE(  75)		return _g2;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(ChatMessageCombiner_obj,combineVersions,return )
+
+::String ChatMessageCombiner_obj::identity( ::borogove::ChatMessage message){
+            	HX_STACKFRAME(&_hx_pos_da01083279145f06_79_identity)
+HXDLIN(  79)		if (::hx::IsNull( message->serverId )) {
+HXLINE(  80)			return (HX_("local:",6f,74,bf,59) + message->localId);
+            		}
+            		else {
+HXLINE(  81)			return (((HX_("server:",17,20,2a,02) + message->serverId) + HX_("\n",0a,00,00,00)) + message->serverIdBy);
+            		}
+HXLINE(  79)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(ChatMessageCombiner_obj,identity,return )
+
+
+ChatMessageCombiner_obj::ChatMessageCombiner_obj()
+{
+}
+
+bool ChatMessageCombiner_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"combine") ) { outValue = combine_dyn(); return true; }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"identity") ) { outValue = identity_dyn(); return true; }
+		break;
+	case 13:
+		if (HX_FIELD_EQ(inName,"correctionKey") ) { outValue = correctionKey_dyn(); return true; }
+		break;
+	case 15:
+		if (HX_FIELD_EQ(inName,"combineMessages") ) { outValue = combineMessages_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"combineVersions") ) { outValue = combineVersions_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *ChatMessageCombiner_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *ChatMessageCombiner_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class ChatMessageCombiner_obj::__mClass;
+
+static ::String ChatMessageCombiner_obj_sStaticFields[] = {
+	HX_("combine",7f,2a,2e,7a),
+	HX_("correctionKey",a1,94,02,dd),
+	HX_("combineMessages",6b,d6,da,a7),
+	HX_("combineVersions",fa,4b,95,49),
+	HX_("identity",3e,45,2f,b9),
+	::String(null())
+};
+
+void ChatMessageCombiner_obj::__register()
+{
+	ChatMessageCombiner_obj _hx_dummy;
+	ChatMessageCombiner_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.ChatMessageCombiner",15,c4,26,9b);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &ChatMessageCombiner_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(ChatMessageCombiner_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< ChatMessageCombiner_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = ChatMessageCombiner_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = ChatMessageCombiner_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/Client.cpp b/Sources/c_borogove/src/borogove/Client.cpp
index 4eb65ac..b2b5112 100644
--- a/Sources/c_borogove/src/borogove/Client.cpp
+++ b/Sources/c_borogove/src/borogove/Client.cpp
@@ -34,6 +34,9 @@
 #ifndef INCLUDED_borogove_AttachmentSource
 #include <borogove/AttachmentSource.h>
 #endif
+#ifndef INCLUDED_borogove_AttachmentUploadError
+#include <borogove/AttachmentUploadError.h>
+#endif
 #ifndef INCLUDED_borogove_AvailableChat
 #include <borogove/AvailableChat.h>
 #endif
@@ -49,6 +52,9 @@
 #ifndef INCLUDED_borogove_Channel
 #include <borogove/Channel.h>
 #endif
+#ifndef INCLUDED_borogove_ChannelPinger
+#include <borogove/ChannelPinger.h>
+#endif
 #ifndef INCLUDED_borogove_Chat
 #include <borogove/Chat.h>
 #endif
@@ -73,9 +79,6 @@
 #ifndef INCLUDED_borogove_EncryptionInfo
 #include <borogove/EncryptionInfo.h>
 #endif
-#ifndef INCLUDED_borogove_EncryptionPolicy
-#include <borogove/EncryptionPolicy.h>
-#endif
 #ifndef INCLUDED_borogove_EventEmitter
 #include <borogove/EventEmitter.h>
 #endif
@@ -91,6 +94,9 @@
 #ifndef INCLUDED_borogove_Identity
 #include <borogove/Identity.h>
 #endif
+#ifndef INCLUDED_borogove_IncrementalHash
+#include <borogove/IncrementalHash.h>
+#endif
 #ifndef INCLUDED_borogove_IqRequestType
 #include <borogove/IqRequestType.h>
 #endif
@@ -118,6 +124,9 @@
 #ifndef INCLUDED_borogove_ModerationAction
 #include <borogove/ModerationAction.h>
 #endif
+#ifndef INCLUDED_borogove_OutboxItem
+#include <borogove/OutboxItem.h>
+#endif
 #ifndef INCLUDED_borogove_Persistence
 #include <borogove/Persistence.h>
 #endif
@@ -148,9 +157,15 @@
 #ifndef INCLUDED_borogove__Chat_Chat_Fields_
 #include <borogove/_Chat/Chat_Fields_.h>
 #endif
+#ifndef INCLUDED_borogove__Source_Source_Impl_
+#include <borogove/_Source/Source_Impl_.h>
+#endif
 #ifndef INCLUDED_borogove__Util_Util_Fields_
 #include <borogove/_Util/Util_Fields_.h>
 #endif
+#ifndef INCLUDED_borogove__XEP0454_XEP0454_Fields_
+#include <borogove/_XEP0454/XEP0454_Fields_.h>
+#endif
 #ifndef INCLUDED_borogove_calls_IncomingProposedSession
 #include <borogove/calls/IncomingProposedSession.h>
 #endif
@@ -232,9 +247,6 @@
 #ifndef INCLUDED_haxe_crypto_Base64
 #include <haxe/crypto/Base64.h>
 #endif
-#ifndef INCLUDED_haxe_crypto_Sha256
-#include <haxe/crypto/Sha256.h>
-#endif
 #ifndef INCLUDED_haxe_ds_Either
 #include <haxe/ds/Either.h>
 #endif
@@ -244,9 +256,15 @@
 #ifndef INCLUDED_haxe_io_Bytes
 #include <haxe/io/Bytes.h>
 #endif
+#ifndef INCLUDED_haxe_io_BytesOutput
+#include <haxe/io/BytesOutput.h>
+#endif
 #ifndef INCLUDED_haxe_io_Input
 #include <haxe/io/Input.h>
 #endif
+#ifndef INCLUDED_haxe_io_Output
+#include <haxe/io/Output.h>
+#endif
 #ifndef INCLUDED_sys_io_File
 #include <sys/io/File.h>
 #endif
@@ -283,6 +301,12 @@
 #ifndef INCLUDED_tink__Url_Url_Impl_
 #include <tink/_Url/Url_Impl_.h>
 #endif
+#ifndef INCLUDED_tink_chunk_ByteChunk
+#include <tink/chunk/ByteChunk.h>
+#endif
+#ifndef INCLUDED_tink_chunk_ChunkBase
+#include <tink/chunk/ChunkBase.h>
+#endif
 #ifndef INCLUDED_tink_chunk_ChunkObject
 #include <tink/chunk/ChunkObject.h>
 #endif
@@ -301,6 +325,24 @@
 #ifndef INCLUDED_tink_core__Future_FutureObject
 #include <tink/core/_Future/FutureObject.h>
 #endif
+#ifndef INCLUDED_tink_core__Lazy_Computable
+#include <tink/core/_Lazy/Computable.h>
+#endif
+#ifndef INCLUDED_tink_core__Lazy_LazyConst
+#include <tink/core/_Lazy/LazyConst.h>
+#endif
+#ifndef INCLUDED_tink_core__Lazy_LazyObject
+#include <tink/core/_Lazy/LazyObject.h>
+#endif
+#ifndef INCLUDED_tink_http_ClientObject
+#include <tink/http/ClientObject.h>
+#endif
+#ifndef INCLUDED_tink_http_ClientType
+#include <tink/http/ClientType.h>
+#endif
+#ifndef INCLUDED_tink_http_ContentType
+#include <tink/http/ContentType.h>
+#endif
 #ifndef INCLUDED_tink_http_Fetch
 #include <tink/http/Fetch.h>
 #endif
@@ -310,21 +352,30 @@
 #ifndef INCLUDED_tink_http_HeaderField
 #include <tink/http/HeaderField.h>
 #endif
+#ifndef INCLUDED_tink_http_IncomingResponse
+#include <tink/http/IncomingResponse.h>
+#endif
 #ifndef INCLUDED_tink_http_Message
 #include <tink/http/Message.h>
 #endif
 #ifndef INCLUDED_tink_http_ResponseHeaderBase
 #include <tink/http/ResponseHeaderBase.h>
 #endif
-#ifndef INCLUDED_tink_http__Fetch_FetchResponse_Impl_
-#include <tink/http/_Fetch/FetchResponse_Impl_.h>
-#endif
 #ifndef INCLUDED_tink_http__Header_HeaderValue_Impl_
 #include <tink/http/_Header/HeaderValue_Impl_.h>
 #endif
+#ifndef INCLUDED_tink_io_PipeResult
+#include <tink/io/PipeResult.h>
+#endif
 #ifndef INCLUDED_tink_io_RealSourceTools
 #include <tink/io/RealSourceTools.h>
 #endif
+#ifndef INCLUDED_tink_io_SinkBase
+#include <tink/io/SinkBase.h>
+#endif
+#ifndef INCLUDED_tink_io_SinkObject
+#include <tink/io/SinkObject.h>
+#endif
 #ifndef INCLUDED_tink_io_WorkerObject
 #include <tink/io/WorkerObject.h>
 #endif
@@ -337,14 +388,14 @@
 #ifndef INCLUDED_tink_io_std_InputSource
 #include <tink/io/std/InputSource.h>
 #endif
-#ifndef INCLUDED_tink_streams_Conclusion
-#include <tink/streams/Conclusion.h>
+#ifndef INCLUDED_tink_io_std_OutputSink
+#include <tink/io/std/OutputSink.h>
 #endif
 #ifndef INCLUDED_tink_streams_Generator
 #include <tink/streams/Generator.h>
 #endif
-#ifndef INCLUDED_tink_streams_Handled
-#include <tink/streams/Handled.h>
+#ifndef INCLUDED_tink_streams_Single
+#include <tink/streams/Single.h>
 #endif
 #ifndef INCLUDED_tink_streams_StreamBase
 #include <tink/streams/StreamBase.h>
@@ -352,314 +403,360 @@
 #ifndef INCLUDED_tink_streams_StreamObject
 #include <tink/streams/StreamObject.h>
 #endif
-#ifndef INCLUDED_tink_streams__Stream_Handler_Impl_
-#include <tink/streams/_Stream/Handler_Impl_.h>
+#ifndef INCLUDED_tink_streams__Stream_Mapping_Impl_
+#include <tink/streams/_Stream/Mapping_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_153_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",153,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_157_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",157,0x8e157d85)
 HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_163_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",163,0x8e157d85)
 HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_168_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",168,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_174_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",174,0x8e157d85)
 HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_179_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",179,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_173_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",173,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_189_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",189,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_183_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",183,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_193_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",193,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_226_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",226,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_279_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",279,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_282_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",282,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_309_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",309,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_324_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",324,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_347_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",347,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_362_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",362,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_368_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",368,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_374_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",374,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_402_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",402,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_412_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",412,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_406_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",406,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_438_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",438,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_439_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",439,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_62_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",62,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_190_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",190,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_184_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",184,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_200_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",200,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_194_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",194,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_204_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",204,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_238_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",238,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_291_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",291,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_294_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",294,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_325_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",325,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_340_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",340,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_363_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",363,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_378_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",378,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_384_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",384,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_390_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",390,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_418_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",418,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_428_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",428,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_422_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",422,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_454_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",454,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_455_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",455,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_61_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",61,0x8e157d85)
 static const ::String _hx_array_data_c0e6dc18_32[] = {
 	HX_("http://jabber.org/protocol/disco#info",cb,2b,7f,0b),HX_("http://jabber.org/protocol/caps",95,d0,90,e2),HX_("urn:xmpp:caps",3d,5a,a1,f4),HX_("urn:xmpp:receipts",d7,40,8f,8c),HX_("urn:xmpp:avatar:metadata+notify",e0,89,c6,db),HX_("http://jabber.org/protocol/nick+notify",fd,dd,65,10),HX_("http://jabber.org/protocol/activity+notify",51,ff,f6,c6),HX_("urn:xmpp:bookmarks:1+notify",dc,4b,f7,cc),HX_("urn:xmpp:mds:displayed:0+notify",17,ae,91,a8),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07),HX_("urn:xmpp:jingle:1",44,c4,fe,f7),HX_("urn:xmpp:jingle:apps:dtls:0",a8,cb,02,66),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c),HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c),HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b),HX_("urn:xmpp:jingle:transports:ice-udp:1",f3,67,4f,53),
 };
+static const int _hx_array_data_c0e6dc18_33[] = {
+	(int)1,
+};
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_437_set_sendAvailable__fromC,"borogove.Client","set_sendAvailable__fromC",0xf96cb54b,"borogove.Client.set_sendAvailable__fromC","HaxeCBridge.hx",437,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_474_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",474,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_463_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",463,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_478_blockIncomingWithoutE2EE__fromC,"borogove.Client","blockIncomingWithoutE2EE__fromC",0x6b3794c1,"borogove.Client.blockIncomingWithoutE2EE__fromC","HaxeCBridge.hx",478,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_489_set_blockIncomingWithoutE2EE__fromC,"borogove.Client","set_blockIncomingWithoutE2EE__fromC",0xcb6529e4,"borogove.Client.set_blockIncomingWithoutE2EE__fromC","HaxeCBridge.hx",489,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_494_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",494,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_479_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",479,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_571_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",571,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_527_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",527,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_495_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",495,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_490_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",490,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_509_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",509,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_519_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",519,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_516_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",516,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_610_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",610,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_638_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",638,0x8e157d85)
-static const ::String _hx_array_data_c0e6dc18_49[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_521_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",521,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_543_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",543,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_554_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",554,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_551_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",551,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_588_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",588,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_668_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",668,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_695_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",695,0x8e157d85)
+static const ::String _hx_array_data_c0e6dc18_55[] = {
 	HX_("image/png",b5,cc,c1,16),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_662_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",662,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_671_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",671,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_666_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",666,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_708_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",708,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_710_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",710,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_714_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",714,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_739_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",739,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_742_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",742,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_743_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",743,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_750_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",750,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_740_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",740,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_736_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",736,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_774_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",774,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_778_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",778,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_787_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",787,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_786_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",786,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_795_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",795,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_769_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",769,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_719_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",719,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_728_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",728,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_723_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",723,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_765_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",765,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_767_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",767,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_771_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",771,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_786_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",786,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_797_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",797,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_828_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",828,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_831_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",831,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_832_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",832,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_839_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",839,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_829_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",829,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_825_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",825,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_863_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",863,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_867_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",867,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_877_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",877,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_883_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",883,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_876_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",876,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_892_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",892,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_858_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",858,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_365_startOffline__fromC,"borogove.Client","startOffline__fromC",0x928910a2,"borogove.Client.startOffline__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_818_logout,"borogove.Client","logout",0x53f1a420,"borogove.Client.logout","borogove/Client.hx",818,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_814_logout,"borogove.Client","logout",0x53f1a420,"borogove.Client.logout","borogove/Client.hx",814,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_830_usePassword,"borogove.Client","usePassword",0xeb0d7d2c,"borogove.Client.usePassword","borogove/Client.hx",830,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_839_accountId,"borogove.Client","accountId",0x0c21f612,"borogove.Client.accountId","borogove/Client.hx",839,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_848_displayName,"borogove.Client","displayName",0x79246457,"borogove.Client.displayName","borogove/Client.hx",848,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_858_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",858,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_857_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",857,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_869_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",869,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_899_setStatus,"borogove.Client","setStatus",0x4870d09e,"borogove.Client.setStatus","borogove/Client.hx",899,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_916_updateDisplayName,"borogove.Client","updateDisplayName",0x8c586c4e,"borogove.Client.updateDisplayName","borogove/Client.hx",916,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_957_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",957,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_974_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",974,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_963_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",963,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_961_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",961,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_924_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",924,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1018_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",1018,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1021_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",1021,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1015_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",1015,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1014_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",1014,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_916_logout,"borogove.Client","logout",0x53f1a420,"borogove.Client.logout","borogove/Client.hx",916,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_911_logout,"borogove.Client","logout",0x53f1a420,"borogove.Client.logout","borogove/Client.hx",911,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_928_usePassword,"borogove.Client","usePassword",0xeb0d7d2c,"borogove.Client.usePassword","borogove/Client.hx",928,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_937_accountId,"borogove.Client","accountId",0x0c21f612,"borogove.Client.accountId","borogove/Client.hx",937,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_946_displayName,"borogove.Client","displayName",0x79246457,"borogove.Client.displayName","borogove/Client.hx",946,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_955_setPhoto,"borogove.Client","setPhoto",0xafe1f0c6,"borogove.Client.setPhoto","borogove/Client.hx",955,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_959_setPhoto,"borogove.Client","setPhoto",0xafe1f0c6,"borogove.Client.setPhoto","borogove/Client.hx",959,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1005_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",1005,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1004_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",1004,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1016_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",1016,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1046_setStatus,"borogove.Client","setStatus",0x4870d09e,"borogove.Client.setStatus","borogove/Client.hx",1046,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1063_updateDisplayName,"borogove.Client","updateDisplayName",0x8c586c4e,"borogove.Client.updateDisplayName","borogove/Client.hx",1063,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1077_preferE2ee,"borogove.Client","preferE2ee",0xf6fd5093,"borogove.Client.preferE2ee","borogove/Client.hx",1077,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1089_banE2ee,"borogove.Client","banE2ee",0xd2807ce6,"borogove.Client.banE2ee","borogove/Client.hx",1089,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1137_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",1137,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1185_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",1185,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1155_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",1155,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1143_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",1143,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1141_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",1141,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1092_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",1092,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1119_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",1119,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1203_fetchAttachment,"borogove.Client","fetchAttachment",0x68455c67,"borogove.Client.fetchAttachment","borogove/Client.hx",1203,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1199_fetchAttachment,"borogove.Client","fetchAttachment",0x68455c67,"borogove.Client.fetchAttachment","borogove/Client.hx",1199,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1212_fetchUris,"borogove.Client","fetchUris",0x07252d0b,"borogove.Client.fetchUris","borogove/Client.hx",1212,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1219_fetchUris,"borogove.Client","fetchUris",0x07252d0b,"borogove.Client.fetchUris","borogove/Client.hx",1219,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1220_fetchUris,"borogove.Client","fetchUris",0x07252d0b,"borogove.Client.fetchUris","borogove/Client.hx",1220,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1230_fetchUris,"borogove.Client","fetchUris",0x07252d0b,"borogove.Client.fetchUris","borogove/Client.hx",1230,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1241_fetchUris,"borogove.Client","fetchUris",0x07252d0b,"borogove.Client.fetchUris","borogove/Client.hx",1241,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1251_fetchUris,"borogove.Client","fetchUris",0x07252d0b,"borogove.Client.fetchUris","borogove/Client.hx",1251,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1252_fetchUris,"borogove.Client","fetchUris",0x07252d0b,"borogove.Client.fetchUris","borogove/Client.hx",1252,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1273_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",1273,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1282_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",1282,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1299_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",1299,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1270_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",1270,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1291_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",1291,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1296_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",1296,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1269_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",1269,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_365_prepareAttachment__fromC,"borogove.Client","prepareAttachment__fromC",0x6b174c85,"borogove.Client.prepareAttachment__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1039_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",1039,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1044_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",1044,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1045_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",1045,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1032_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",1032,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1060_getChats,"borogove.Client","getChats",0x85446d3b,"borogove.Client.getChats","borogove/Client.hx",1060,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1314_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",1314,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1324_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",1324,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1334_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",1334,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1313_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",1313,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1303_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",1303,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1354_putAttachment,"borogove.Client","putAttachment",0x410c78bc,"borogove.Client.putAttachment","borogove/Client.hx",1354,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1356_putAttachment,"borogove.Client","putAttachment",0x410c78bc,"borogove.Client.putAttachment","borogove/Client.hx",1356,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1358_putAttachment,"borogove.Client","putAttachment",0x410c78bc,"borogove.Client.putAttachment","borogove/Client.hx",1358,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1351_putAttachment,"borogove.Client","putAttachment",0x410c78bc,"borogove.Client.putAttachment","borogove/Client.hx",1351,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1350_putAttachment,"borogove.Client","putAttachment",0x410c78bc,"borogove.Client.putAttachment","borogove/Client.hx",1350,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1380_tryNextAttachmentService,"borogove.Client","tryNextAttachmentService",0x03b2ddfa,"borogove.Client.tryNextAttachmentService","borogove/Client.hx",1380,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1367_tryNextAttachmentService,"borogove.Client","tryNextAttachmentService",0x03b2ddfa,"borogove.Client.tryNextAttachmentService","borogove/Client.hx",1367,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1403_getChats,"borogove.Client","getChats",0x85446d3b,"borogove.Client.getChats","borogove/Client.hx",1403,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_363_getChats__fromC,"borogove.Client","getChats__fromC",0x855ff09e,"borogove.Client.getChats__fromC","HaxeCBridge.hx",363,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1070_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",1070,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1124_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1124,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1076_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1076,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1086_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1086,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1087_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1087,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1095_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1095,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1100_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1100,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1099_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1099,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1407_getChannels,"borogove.Client","getChannels",0xd914bfb0,"borogove.Client.getChannels","borogove/Client.hx",1407,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1417_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",1417,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1471_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1471,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1423_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1423,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1433_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1433,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1434_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1434,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1442_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1442,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1447_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1447,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1446_availableChatSources,"borogove.Client","availableChatSources",0x1292dc0d,"borogove.Client.availableChatSources","borogove/Client.hx",1446,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_365_availableChatSources__fromC,"borogove.Client","availableChatSources__fromC",0xf63ce00c,"borogove.Client.availableChatSources__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1139_startChat,"borogove.Client","startChat",0xdd804c84,"borogove.Client.startChat","borogove/Client.hx",1139,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1174_getChat,"borogove.Client","getChat",0xaf174438,"borogove.Client.getChat","borogove/Client.hx",1174,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1180_moderateMessage,"borogove.Client","moderateMessage",0xdbd387ee,"borogove.Client.moderateMessage","borogove/Client.hx",1180,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1178_moderateMessage,"borogove.Client","moderateMessage",0xdbd387ee,"borogove.Client.moderateMessage","borogove/Client.hx",1178,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1195_getDirectChat,"borogove.Client","getDirectChat",0xe2d04c01,"borogove.Client.getDirectChat","borogove/Client.hx",1195,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1256_enablePush,"borogove.Client","enablePush",0x34a71a93,"borogove.Client.enablePush","borogove/Client.hx",1256,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1486_startChat,"borogove.Client","startChat",0xdd804c84,"borogove.Client.startChat","borogove/Client.hx",1486,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1524_getChat,"borogove.Client","getChat",0xaf174438,"borogove.Client.getChat","borogove/Client.hx",1524,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1539_moderateMessage,"borogove.Client","moderateMessage",0xdbd387ee,"borogove.Client.moderateMessage","borogove/Client.hx",1539,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1537_moderateMessage,"borogove.Client","moderateMessage",0xdbd387ee,"borogove.Client.moderateMessage","borogove/Client.hx",1537,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1554_getDirectChat,"borogove.Client","getDirectChat",0xe2d04c01,"borogove.Client.getDirectChat","borogove/Client.hx",1554,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1616_enablePush,"borogove.Client","enablePush",0x34a71a93,"borogove.Client.enablePush","borogove/Client.hx",1616,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_354_enablePush__fromC,"borogove.Client","enablePush__fromC",0x26b41e46,"borogove.Client.enablePush__fromC","HaxeCBridge.hx",354,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1289_updatePushIfEnabled,"borogove.Client","updatePushIfEnabled",0x94fc7dcb,"borogove.Client.updatePushIfEnabled","borogove/Client.hx",1289,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1302_addPasswordNeededListener,"borogove.Client","addPasswordNeededListener",0xe674476f,"borogove.Client.addPasswordNeededListener","borogove/Client.hx",1302,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1301_addPasswordNeededListener,"borogove.Client","addPasswordNeededListener",0xe674476f,"borogove.Client.addPasswordNeededListener","borogove/Client.hx",1301,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1649_updatePushIfEnabled,"borogove.Client","updatePushIfEnabled",0x94fc7dcb,"borogove.Client.updatePushIfEnabled","borogove/Client.hx",1649,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1662_addPasswordNeededListener,"borogove.Client","addPasswordNeededListener",0xe674476f,"borogove.Client.addPasswordNeededListener","borogove/Client.hx",1662,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1661_addPasswordNeededListener,"borogove.Client","addPasswordNeededListener",0xe674476f,"borogove.Client.addPasswordNeededListener","borogove/Client.hx",1661,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_282_addPasswordNeededListener__fromC,"borogove.Client","addPasswordNeededListener__fromC",0xcb7e84ea,"borogove.Client.addPasswordNeededListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addPasswordNeededListener__fromC,"borogove.Client","addPasswordNeededListener__fromC",0xcb7e84ea,"borogove.Client.addPasswordNeededListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1316_addStatusOnlineListener,"borogove.Client","addStatusOnlineListener",0xbe432964,"borogove.Client.addStatusOnlineListener","borogove/Client.hx",1316,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1676_addStatusOnlineListener,"borogove.Client","addStatusOnlineListener",0xbe432964,"borogove.Client.addStatusOnlineListener","borogove/Client.hx",1676,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_269_addStatusOnlineListener__fromC,"borogove.Client","addStatusOnlineListener__fromC",0xbd04fb95,"borogove.Client.addStatusOnlineListener__fromC","HaxeCBridge.hx",269,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addStatusOnlineListener__fromC,"borogove.Client","addStatusOnlineListener__fromC",0xbd04fb95,"borogove.Client.addStatusOnlineListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1330_addStatusOfflineListener,"borogove.Client","addStatusOfflineListener",0xbdd8ce9a,"borogove.Client.addStatusOfflineListener","borogove/Client.hx",1330,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1690_addStatusOfflineListener,"borogove.Client","addStatusOfflineListener",0xbdd8ce9a,"borogove.Client.addStatusOfflineListener","borogove/Client.hx",1690,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_269_addStatusOfflineListener__fromC,"borogove.Client","addStatusOfflineListener__fromC",0x9e42091f,"borogove.Client.addStatusOfflineListener__fromC","HaxeCBridge.hx",269,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addStatusOfflineListener__fromC,"borogove.Client","addStatusOfflineListener__fromC",0x9e42091f,"borogove.Client.addStatusOfflineListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1344_addConnectionFailedListener,"borogove.Client","addConnectionFailedListener",0xa4e943fa,"borogove.Client.addConnectionFailedListener","borogove/Client.hx",1344,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1704_addConnectionFailedListener,"borogove.Client","addConnectionFailedListener",0xa4e943fa,"borogove.Client.addConnectionFailedListener","borogove/Client.hx",1704,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_269_addConnectionFailedListener__fromC,"borogove.Client","addConnectionFailedListener__fromC",0x3a44ffbf,"borogove.Client.addConnectionFailedListener__fromC","HaxeCBridge.hx",269,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addConnectionFailedListener__fromC,"borogove.Client","addConnectionFailedListener__fromC",0x3a44ffbf,"borogove.Client.addConnectionFailedListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1359_addTlsCheckListener,"borogove.Client","addTlsCheckListener",0x84ae154c,"borogove.Client.addTlsCheckListener","borogove/Client.hx",1359,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1358_addTlsCheckListener,"borogove.Client","addTlsCheckListener",0x84ae154c,"borogove.Client.addTlsCheckListener","borogove/Client.hx",1358,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1719_addTlsCheckListener,"borogove.Client","addTlsCheckListener",0x84ae154c,"borogove.Client.addTlsCheckListener","borogove/Client.hx",1719,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1718_addTlsCheckListener,"borogove.Client","addTlsCheckListener",0x84ae154c,"borogove.Client.addTlsCheckListener","borogove/Client.hx",1718,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_282_addTlsCheckListener__fromC,"borogove.Client","addTlsCheckListener__fromC",0x1c54dcad,"borogove.Client.addTlsCheckListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addTlsCheckListener__fromC,"borogove.Client","addTlsCheckListener__fromC",0x1c54dcad,"borogove.Client.addTlsCheckListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1397_addChatMessageListener,"borogove.Client","addChatMessageListener",0x08596558,"borogove.Client.addChatMessageListener","borogove/Client.hx",1397,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1757_addChatMessageListener,"borogove.Client","addChatMessageListener",0x08596558,"borogove.Client.addChatMessageListener","borogove/Client.hx",1757,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_282_addChatMessageListener__fromC,"borogove.Client","addChatMessageListener__fromC",0xa610e621,"borogove.Client.addChatMessageListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addChatMessageListener__fromC,"borogove.Client","addChatMessageListener__fromC",0xa610e621,"borogove.Client.addChatMessageListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1412_addSyncMessageListener,"borogove.Client","addSyncMessageListener",0xfdfc7535,"borogove.Client.addSyncMessageListener","borogove/Client.hx",1412,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1772_addSyncMessageListener,"borogove.Client","addSyncMessageListener",0xfdfc7535,"borogove.Client.addSyncMessageListener","borogove/Client.hx",1772,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_282_addSyncMessageListener__fromC,"borogove.Client","addSyncMessageListener__fromC",0x500a3be4,"borogove.Client.addSyncMessageListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addSyncMessageListener__fromC,"borogove.Client","addSyncMessageListener__fromC",0x500a3be4,"borogove.Client.addSyncMessageListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1429_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1429,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1439_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1439,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1445_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1445,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1443_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1443,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1425_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1425,0x8e157d85)
-static const Float _hx_array_data_c0e6dc18_174[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1789_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1789,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1808_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1808,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1785_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1785,0x8e157d85)
+static const Float _hx_array_data_c0e6dc18_218[] = {
 	-1.0,
 };
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_282_addChatsUpdatedListener__fromC,"borogove.Client","addChatsUpdatedListener__fromC",0x9b34ba7a,"borogove.Client.addChatsUpdatedListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addChatsUpdatedListener__fromC,"borogove.Client","addChatsUpdatedListener__fromC",0x9b34ba7a,"borogove.Client.addChatsUpdatedListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1463_addCallRingListener,"borogove.Client","addCallRingListener",0x113612ed,"borogove.Client.addCallRingListener","borogove/Client.hx",1463,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1832_addCallRingListener,"borogove.Client","addCallRingListener",0x113612ed,"borogove.Client.addCallRingListener","borogove/Client.hx",1832,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_282_addCallRingListener__fromC,"borogove.Client","addCallRingListener__fromC",0x1230452c,"borogove.Client.addCallRingListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addCallRingListener__fromC,"borogove.Client","addCallRingListener__fromC",0x1230452c,"borogove.Client.addCallRingListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1477_addCallRetractListener,"borogove.Client","addCallRetractListener",0x367d108c,"borogove.Client.addCallRetractListener","borogove/Client.hx",1477,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1846_addCallRetractListener,"borogove.Client","addCallRetractListener",0x367d108c,"borogove.Client.addCallRetractListener","borogove/Client.hx",1846,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_282_addCallRetractListener__fromC,"borogove.Client","addCallRetractListener__fromC",0x22c7c96d,"borogove.Client.addCallRetractListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addCallRetractListener__fromC,"borogove.Client","addCallRetractListener__fromC",0x22c7c96d,"borogove.Client.addCallRetractListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1491_addCallRingingListener,"borogove.Client","addCallRingingListener",0x5f59e2bd,"borogove.Client.addCallRingingListener","borogove/Client.hx",1491,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1860_addCallRingingListener,"borogove.Client","addCallRingingListener",0x5f59e2bd,"borogove.Client.addCallRingingListener","borogove/Client.hx",1860,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_282_addCallRingingListener__fromC,"borogove.Client","addCallRingingListener__fromC",0x61b10f5c,"borogove.Client.addCallRingingListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addCallRingingListener__fromC,"borogove.Client","addCallRingingListener__fromC",0x61b10f5c,"borogove.Client.addCallRingingListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1505_addCallUpdateStatusListener,"borogove.Client","addCallUpdateStatusListener",0x64a47558,"borogove.Client.addCallUpdateStatusListener","borogove/Client.hx",1505,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1874_addCallUpdateStatusListener,"borogove.Client","addCallUpdateStatusListener",0x64a47558,"borogove.Client.addCallUpdateStatusListener","borogove/Client.hx",1874,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_282_addCallUpdateStatusListener__fromC,"borogove.Client","addCallUpdateStatusListener__fromC",0x6047d621,"borogove.Client.addCallUpdateStatusListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addCallUpdateStatusListener__fromC,"borogove.Client","addCallUpdateStatusListener__fromC",0x6047d621,"borogove.Client.addCallUpdateStatusListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1521_addCallMediaListener,"borogove.Client","addCallMediaListener",0x7c3a52af,"borogove.Client.addCallMediaListener","borogove/Client.hx",1521,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1890_addCallMediaListener,"borogove.Client","addCallMediaListener",0x7c3a52af,"borogove.Client.addCallMediaListener","borogove/Client.hx",1890,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_282_addCallMediaListener__fromC,"borogove.Client","addCallMediaListener__fromC",0x91fc61aa,"borogove.Client.addCallMediaListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addCallMediaListener__fromC,"borogove.Client","addCallMediaListener__fromC",0x91fc61aa,"borogove.Client.addCallMediaListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1536_addCallTrackListener,"borogove.Client","addCallTrackListener",0xf44a5b56,"borogove.Client.addCallTrackListener","borogove/Client.hx",1536,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1905_addCallTrackListener,"borogove.Client","addCallTrackListener",0xf44a5b56,"borogove.Client.addCallTrackListener","borogove/Client.hx",1905,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_282_addCallTrackListener__fromC,"borogove.Client","addCallTrackListener__fromC",0x1f65cbe3,"borogove.Client.addCallTrackListener__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_367_addCallTrackListener__fromC,"borogove.Client","addCallTrackListener__fromC",0x1f65cbe3,"borogove.Client.addCallTrackListener__fromC","HaxeCBridge.hx",367,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1546_setInForeground,"borogove.Client","setInForeground",0x844deb74,"borogove.Client.setInForeground","borogove/Client.hx",1546,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1554_setNotInForeground,"borogove.Client","setNotInForeground",0xe4d7a7cf,"borogove.Client.setNotInForeground","borogove/Client.hx",1554,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1564_fetchMediaByHash,"borogove.Client","fetchMediaByHash",0x85d7c445,"borogove.Client.fetchMediaByHash","borogove/Client.hx",1564,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1560_fetchMediaByHash,"borogove.Client","fetchMediaByHash",0x85d7c445,"borogove.Client.fetchMediaByHash","borogove/Client.hx",1560,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1575_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1575,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1580_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1580,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1573_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1573,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1584_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1584,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1570_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1570,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1567_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1567,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1596_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1596,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1589_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1589,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1595_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1595,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1607_sortChats,"borogove.Client","sortChats",0x30f4e687,"borogove.Client.sortChats","borogove/Client.hx",1607,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1606_sortChats,"borogove.Client","sortChats",0x30f4e687,"borogove.Client.sortChats","borogove/Client.hx",1606,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1618_nextSortId,"borogove.Client","nextSortId",0x76615cc2,"borogove.Client.nextSortId","borogove/Client.hx",1618,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1626_storeMessageBuilder,"borogove.Client","storeMessageBuilder",0x1804807f,"borogove.Client.storeMessageBuilder","borogove/Client.hx",1626,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1624_storeMessageBuilder,"borogove.Client","storeMessageBuilder",0x1804807f,"borogove.Client.storeMessageBuilder","borogove/Client.hx",1624,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1631_storeMessages,"borogove.Client","storeMessages",0x6129c2f7,"borogove.Client.storeMessages","borogove/Client.hx",1631,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1636_sendQuery,"borogove.Client","sendQuery",0x0127bcca,"borogove.Client.sendQuery","borogove/Client.hx",1636,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1643_sendNextLazyQuery,"borogove.Client","sendNextLazyQuery",0x9ace2e43,"borogove.Client.sendNextLazyQuery","borogove/Client.hx",1643,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1641_sendNextLazyQuery,"borogove.Client","sendNextLazyQuery",0x9ace2e43,"borogove.Client.sendNextLazyQuery","borogove/Client.hx",1641,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1655_sendQueryLazy,"borogove.Client","sendQueryLazy",0xf72d265e,"borogove.Client.sendQueryLazy","borogove/Client.hx",1655,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1667_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",1667,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1677_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",1677,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1661_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",1661,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1689_sendStanza,"borogove.Client","sendStanza",0x3845b5f3,"borogove.Client.sendStanza","borogove/Client.hx",1689,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1695_sendPresence,"borogove.Client","sendPresence",0x8b6a25b9,"borogove.Client.sendPresence","borogove/Client.hx",1695,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1703_sendPresence,"borogove.Client","sendPresence",0x8b6a25b9,"borogove.Client.sendPresence","borogove/Client.hx",1703,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1710_getIceServers,"borogove.Client","getIceServers",0xa62741a5,"borogove.Client.getIceServers","borogove/Client.hx",1710,0x8e157d85)
-static const ::String _hx_array_data_c0e6dc18_234[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1915_setInForeground,"borogove.Client","setInForeground",0x844deb74,"borogove.Client.setInForeground","borogove/Client.hx",1915,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1923_setNotInForeground,"borogove.Client","setNotInForeground",0xe4d7a7cf,"borogove.Client.setNotInForeground","borogove/Client.hx",1923,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1933_fetchMediaByHash,"borogove.Client","fetchMediaByHash",0x85d7c445,"borogove.Client.fetchMediaByHash","borogove/Client.hx",1933,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1929_fetchMediaByHash,"borogove.Client","fetchMediaByHash",0x85d7c445,"borogove.Client.fetchMediaByHash","borogove/Client.hx",1929,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1958_maybeAutodownloadAttachments,"borogove.Client","maybeAutodownloadAttachments",0xe69b61c7,"borogove.Client.maybeAutodownloadAttachments","borogove/Client.hx",1958,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1937_maybeAutodownloadAttachments,"borogove.Client","maybeAutodownloadAttachments",0xe69b61c7,"borogove.Client.maybeAutodownloadAttachments","borogove/Client.hx",1937,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1947_maybeAutodownloadAttachments,"borogove.Client","maybeAutodownloadAttachments",0xe69b61c7,"borogove.Client.maybeAutodownloadAttachments","borogove/Client.hx",1947,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1948_maybeAutodownloadAttachments,"borogove.Client","maybeAutodownloadAttachments",0xe69b61c7,"borogove.Client.maybeAutodownloadAttachments","borogove/Client.hx",1948,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1969_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1969,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1974_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1974,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1967_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1967,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1978_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1978,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1964_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1964,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1961_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1961,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1990_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1990,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1983_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1983,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1989_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1989,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2001_sortChats,"borogove.Client","sortChats",0x30f4e687,"borogove.Client.sortChats","borogove/Client.hx",2001,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2000_sortChats,"borogove.Client","sortChats",0x30f4e687,"borogove.Client.sortChats","borogove/Client.hx",2000,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2012_nextSortId,"borogove.Client","nextSortId",0x76615cc2,"borogove.Client.nextSortId","borogove/Client.hx",2012,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2029_storeMessageBuilder,"borogove.Client","storeMessageBuilder",0x1804807f,"borogove.Client.storeMessageBuilder","borogove/Client.hx",2029,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2018_storeMessageBuilder,"borogove.Client","storeMessageBuilder",0x1804807f,"borogove.Client.storeMessageBuilder","borogove/Client.hx",2018,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2050_storeMessages,"borogove.Client","storeMessages",0x6129c2f7,"borogove.Client.storeMessages","borogove/Client.hx",2050,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2033_storeMessages,"borogove.Client","storeMessages",0x6129c2f7,"borogove.Client.storeMessages","borogove/Client.hx",2033,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2036_storeMessages,"borogove.Client","storeMessages",0x6129c2f7,"borogove.Client.storeMessages","borogove/Client.hx",2036,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2059_checkForResends,"borogove.Client","checkForResends",0x3b210021,"borogove.Client.checkForResends","borogove/Client.hx",2059,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2062_checkForResends,"borogove.Client","checkForResends",0x3b210021,"borogove.Client.checkForResends","borogove/Client.hx",2062,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2053_checkForResends,"borogove.Client","checkForResends",0x3b210021,"borogove.Client.checkForResends","borogove/Client.hx",2053,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2085_sendQuery,"borogove.Client","sendQuery",0x0127bcca,"borogove.Client.sendQuery","borogove/Client.hx",2085,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2092_sendNextLazyQuery,"borogove.Client","sendNextLazyQuery",0x9ace2e43,"borogove.Client.sendNextLazyQuery","borogove/Client.hx",2092,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2090_sendNextLazyQuery,"borogove.Client","sendNextLazyQuery",0x9ace2e43,"borogove.Client.sendNextLazyQuery","borogove/Client.hx",2090,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2104_sendQueryLazy,"borogove.Client","sendQueryLazy",0xf72d265e,"borogove.Client.sendQueryLazy","borogove/Client.hx",2104,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2119_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",2119,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2129_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",2129,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2110_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",2110,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2141_sendStanza,"borogove.Client","sendStanza",0x3845b5f3,"borogove.Client.sendStanza","borogove/Client.hx",2141,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2148_sendPresence,"borogove.Client","sendPresence",0x8b6a25b9,"borogove.Client.sendPresence","borogove/Client.hx",2148,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2156_sendPresence,"borogove.Client","sendPresence",0x8b6a25b9,"borogove.Client.sendPresence","borogove/Client.hx",2156,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2163_getIceServers,"borogove.Client","getIceServers",0xa62741a5,"borogove.Client.getIceServers","borogove/Client.hx",2163,0x8e157d85)
+static const ::String _hx_array_data_c0e6dc18_291[] = {
 	HX_("stun",3a,f5,5b,4c),HX_("stuns",f9,9d,1a,84),HX_("turn",7d,eb,05,4d),HX_("turns",56,22,28,18),
 };
-static const ::String _hx_array_data_c0e6dc18_235[] = {
+static const ::String _hx_array_data_c0e6dc18_292[] = {
 	HX_("turn",7d,eb,05,4d),HX_("turns",56,22,28,18),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1708_getIceServers,"borogove.Client","getIceServers",0xa62741a5,"borogove.Client.getIceServers","borogove/Client.hx",1708,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1740_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",1740,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1743_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",1743,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1737_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",1737,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1752_notifyMessageHandlers,"borogove.Client","notifyMessageHandlers",0x88b574b1,"borogove.Client.notifyMessageHandlers","borogove/Client.hx",1752,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1767_notifySyncMessageHandlers,"borogove.Client","notifySyncMessageHandlers",0x1628e516,"borogove.Client.notifySyncMessageHandlers","borogove/Client.hx",1767,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1784_rosterGet,"borogove.Client","rosterGet",0x21c107f5,"borogove.Client.rosterGet","borogove/Client.hx",1784,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1782_rosterGet,"borogove.Client","rosterGet",0x21c107f5,"borogove.Client.rosterGet","borogove/Client.hx",1782,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1799_startChatWith,"borogove.Client","startChatWith",0x4c4c80aa,"borogove.Client.startChatWith","borogove/Client.hx",1799,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1797_startChatWith,"borogove.Client","startChatWith",0x4c4c80aa,"borogove.Client.startChatWith","borogove/Client.hx",1797,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1833_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",1833,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1835_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",1835,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1836_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",1836,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1858_serverBlocked,"borogove.Client","serverBlocked",0x86ce5793,"borogove.Client.serverBlocked","borogove/Client.hx",1858,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1867_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1867,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1874_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1874,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1881_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1881,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1883_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1883,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1893_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1893,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1901_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1901,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1912_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1912,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1864_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1864,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1927_checkForReceipts,"borogove.Client","checkForReceipts",0x18c46212,"borogove.Client.checkForReceipts","borogove/Client.hx",1927,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1936_checkForReceipts,"borogove.Client","checkForReceipts",0x18c46212,"borogove.Client.checkForReceipts","borogove/Client.hx",1936,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1941_sync,"borogove.Client","sync",0x221ab671,"borogove.Client.sync","borogove/Client.hx",1941,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1945_sync,"borogove.Client","sync",0x221ab671,"borogove.Client.sync","borogove/Client.hx",1945,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1950_onMAMJMI,"borogove.Client","onMAMJMI",0xf47696c2,"borogove.Client.onMAMJMI","borogove/Client.hx",1950,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1975_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1975,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2013_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2013,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2039_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2039,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1980_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1980,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2002_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2002,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1994_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1994,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1990_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1990,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2045_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2045,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1964_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1964,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2057_pingAllChannels,"borogove.Client","pingAllChannels",0x95268ee9,"borogove.Client.pingAllChannels","borogove/Client.hx",2057,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2064_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",2064,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2069_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",2069,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2073_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",2073,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_62_boot,"borogove.Client","boot",0x16d68048,"borogove.Client.boot","borogove/Client.hx",62,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2161_getIceServers,"borogove.Client","getIceServers",0xa62741a5,"borogove.Client.getIceServers","borogove/Client.hx",2161,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2193_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",2193,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2196_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",2196,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2190_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",2190,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2205_notifyMessageHandlers,"borogove.Client","notifyMessageHandlers",0x88b574b1,"borogove.Client.notifyMessageHandlers","borogove/Client.hx",2205,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2220_notifySyncMessageHandlers,"borogove.Client","notifySyncMessageHandlers",0x1628e516,"borogove.Client.notifySyncMessageHandlers","borogove/Client.hx",2220,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2237_rosterGet,"borogove.Client","rosterGet",0x21c107f5,"borogove.Client.rosterGet","borogove/Client.hx",2237,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2235_rosterGet,"borogove.Client","rosterGet",0x21c107f5,"borogove.Client.rosterGet","borogove/Client.hx",2235,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2259_startChatWith,"borogove.Client","startChatWith",0x4c4c80aa,"borogove.Client.startChatWith","borogove/Client.hx",2259,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2257_startChatWith,"borogove.Client","startChatWith",0x4c4c80aa,"borogove.Client.startChatWith","borogove/Client.hx",2257,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2300_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",2300,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2302_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",2302,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2303_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",2303,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2325_serverBlocked,"borogove.Client","serverBlocked",0x86ce5793,"borogove.Client.serverBlocked","borogove/Client.hx",2325,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2334_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",2334,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2341_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",2341,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2348_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",2348,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2350_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",2350,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2360_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",2360,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2368_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",2368,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2379_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",2379,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2331_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",2331,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2394_checkForReceipts,"borogove.Client","checkForReceipts",0x18c46212,"borogove.Client.checkForReceipts","borogove/Client.hx",2394,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2405_checkForReceipts,"borogove.Client","checkForReceipts",0x18c46212,"borogove.Client.checkForReceipts","borogove/Client.hx",2405,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2410_sync,"borogove.Client","sync",0x221ab671,"borogove.Client.sync","borogove/Client.hx",2410,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2414_sync,"borogove.Client","sync",0x221ab671,"borogove.Client.sync","borogove/Client.hx",2414,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2419_onMAMJMI,"borogove.Client","onMAMJMI",0xf47696c2,"borogove.Client.onMAMJMI","borogove/Client.hx",2419,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2448_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2448,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2497_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2497,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2499_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2499,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2525_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2525,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2453_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2453,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2488_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2488,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2471_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2471,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2480_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2480,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2476_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2476,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2531_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2531,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2433_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",2433,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2543_pingAllChannels,"borogove.Client","pingAllChannels",0x95268ee9,"borogove.Client.pingAllChannels","borogove/Client.hx",2543,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2549_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",2549,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2552_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",2552,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_2556_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",2556,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_61_boot,"borogove.Client","boot",0x16d68048,"borogove.Client.boot","borogove/Client.hx",61,0x8e157d85)
 namespace borogove{
 
 void Client_obj::__construct(::String accountId,::Dynamic persistence){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_153_new)
-HXLINE( 153)			return _gthis->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_163_new)
+HXLINE( 164)			_gthis->channelPinger->stopTimer();
+HXLINE( 165)			return _gthis->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis,::Dynamic,persistence) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_157_new)
-HXLINE( 158)			_gthis->token = ( (::String)(data->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic)) );
-HXLINE( 159)			::Dynamic persistence1 = persistence;
-HXDLIN( 159)			::String _hx_tmp = _gthis->jid->asBare()->asString();
-HXDLIN( 159)			::String _hx_tmp1;
-HXDLIN( 159)			::String tmp = _gthis->stream->clientId;
-HXDLIN( 159)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 159)				_hx_tmp1 = tmp;
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_168_new)
+HXLINE( 169)			_gthis->token = ( (::String)(data->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic)) );
+HXLINE( 170)			::Dynamic persistence1 = persistence;
+HXDLIN( 170)			::String _hx_tmp = _gthis->jid->asBare()->asString();
+HXDLIN( 170)			::String _hx_tmp1;
+HXDLIN( 170)			::String tmp = _gthis->stream->clientId;
+HXDLIN( 170)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 170)				_hx_tmp1 = tmp;
             			}
             			else {
-HXLINE( 159)				_hx_tmp1 = _gthis->jid->resource;
+HXLINE( 170)				_hx_tmp1 = _gthis->jid->resource;
             			}
-HXDLIN( 159)			::String _hx_tmp2 = _gthis->displayName();
-HXDLIN( 159)			::borogove::Persistence_obj::storeLogin(persistence1,_hx_tmp,_hx_tmp1,_hx_tmp2,_gthis->token);
-HXLINE( 160)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXDLIN( 170)			::String _hx_tmp2 = _gthis->displayName();
+HXDLIN( 170)			::borogove::Persistence_obj::storeLogin(persistence1,_hx_tmp,_hx_tmp1,_hx_tmp2,_gthis->rosterVer,_gthis->token);
+HXLINE( 171)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::EventResult _hx_run(::Array< ::Dynamic> data){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_163_new)
-HXLINE( 164)			::Array< ::Dynamic> it = _gthis->chats;
-HXDLIN( 164)			bool result = false;
-HXDLIN( 164)			{
-HXLINE( 164)				int _g = 0;
-HXDLIN( 164)				while((_g < it->length)){
-HXLINE( 164)					 ::borogove::Chat x = it->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN( 164)					_g = (_g + 1);
-HXDLIN( 164)					bool _hx_tmp;
-HXDLIN( 164)					if ((x->uiState != 2)) {
-HXLINE( 164)						_hx_tmp = x->syncing();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_174_new)
+HXLINE( 175)			::Array< ::Dynamic> it = _gthis->chats;
+HXDLIN( 175)			bool result = false;
+HXDLIN( 175)			{
+HXLINE( 175)				int _g = 0;
+HXDLIN( 175)				while((_g < it->length)){
+HXLINE( 175)					 ::borogove::Chat x = it->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN( 175)					_g = (_g + 1);
+HXDLIN( 175)					bool _hx_tmp;
+HXDLIN( 175)					if ((x->uiState != 2)) {
+HXLINE( 175)						_hx_tmp = x->syncing();
             					}
             					else {
-HXLINE( 164)						_hx_tmp = false;
+HXLINE( 175)						_hx_tmp = false;
             					}
-HXDLIN( 164)					if (_hx_tmp) {
-HXLINE( 164)						result = true;
-HXDLIN( 164)						goto _hx_goto_0;
+HXDLIN( 175)					if (_hx_tmp) {
+HXLINE( 175)						result = true;
+HXDLIN( 175)						goto _hx_goto_0;
             					}
             				}
             				_hx_goto_0:;
             			}
-HXDLIN( 164)			_gthis->stream->emitSMupdates = !(result);
-HXLINE( 165)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXDLIN( 175)			_gthis->stream->emitSMupdates = !(result);
+HXLINE( 176)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::borogove::Client,_gthis,::Dynamic,persistence) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_168_new)
-HXLINE( 169)			::Dynamic persistence1 = persistence;
-HXDLIN( 169)			::String _hx_tmp = _gthis->accountId();
-HXDLIN( 169)			::Array< unsigned char > _hx_tmp1;
-HXDLIN( 169)			if (_gthis->stream->emitSMupdates) {
-HXLINE( 169)				_hx_tmp1 = ( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) );
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_179_new)
+HXLINE( 180)			::Dynamic persistence1 = persistence;
+HXDLIN( 180)			::String _hx_tmp = _gthis->accountId();
+HXDLIN( 180)			::Array< unsigned char > _hx_tmp1;
+HXDLIN( 180)			if (_gthis->stream->emitSMupdates) {
+HXLINE( 180)				_hx_tmp1 = ( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) );
             			}
             			else {
-HXLINE( 169)				_hx_tmp1 = null();
+HXLINE( 180)				_hx_tmp1 = null();
             			}
-HXDLIN( 169)			::borogove::Persistence_obj::storeStreamManagement(persistence1,_hx_tmp,_hx_tmp1,_gthis->sortId);
-HXLINE( 170)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXDLIN( 180)			::borogove::Persistence_obj::storeStreamManagement(persistence1,_hx_tmp,_hx_tmp1,_gthis->sortId);
+HXLINE( 181)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -667,23 +764,23 @@ HXLINE( 170)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4, ::borogove::Client,_gthis) HXARGC(1)
             			void _hx_run( ::borogove::ChatMessage m){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_179_new)
-HXLINE( 179)				_gthis->notifyMessageHandlers(m,3);
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_190_new)
+HXLINE( 190)				_gthis->notifyMessageHandlers(m,3);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_5) HXARGC(1)
             			::Dynamic _hx_run( ::Dynamic _){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_179_new)
-HXLINE( 179)				return null();
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_190_new)
+HXLINE( 190)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_173_new)
-HXLINE( 174)			::Dynamic persistence1 = persistence;
-HXLINE( 175)			::String _hx_tmp = _gthis->accountId();
-HXLINE( 174)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),1,null()), ::Dynamic(new _hx_Closure_4(_gthis)), ::Dynamic(new _hx_Closure_5()));
-HXLINE( 180)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_184_new)
+HXLINE( 185)			::Dynamic persistence1 = persistence;
+HXLINE( 186)			::String _hx_tmp = _gthis->accountId();
+HXLINE( 185)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),1,null()), ::Dynamic(new _hx_Closure_4(_gthis)), ::Dynamic(new _hx_Closure_5()));
+HXLINE( 191)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -691,106 +788,106 @@ HXLINE( 180)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::borogove::Client,_gthis) HXARGC(1)
             			void _hx_run( ::borogove::ChatMessage m){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_189_new)
-HXLINE( 189)				_gthis->notifyMessageHandlers(m,3);
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_200_new)
+HXLINE( 200)				_gthis->notifyMessageHandlers(m,3);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_8) HXARGC(1)
             			::Dynamic _hx_run( ::Dynamic _){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_189_new)
-HXLINE( 189)				return null();
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_200_new)
+HXLINE( 200)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_183_new)
-HXLINE( 184)			::Dynamic persistence1 = persistence;
-HXLINE( 185)			::String _hx_tmp = _gthis->accountId();
-HXLINE( 184)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),3,null()), ::Dynamic(new _hx_Closure_7(_gthis)), ::Dynamic(new _hx_Closure_8()));
-HXLINE( 190)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_194_new)
+HXLINE( 195)			::Dynamic persistence1 = persistence;
+HXLINE( 196)			::String _hx_tmp = _gthis->accountId();
+HXLINE( 195)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),3,null()), ::Dynamic(new _hx_Closure_7(_gthis)), ::Dynamic(new _hx_Closure_8()));
+HXLINE( 201)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_10, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic event){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_193_new)
-HXLINE( 194)			 ::borogove::Stanza stanza = ( ( ::borogove::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
-HXLINE( 196)			if (::hx::IsNotNull( stanza->getChild(HX_("result",dd,68,84,08),HX_("urn:xmpp:mam:2",f5,ef,8c,da)) )) {
-HXLINE( 198)				return ::borogove::EventResult_obj::EventUnhandled_dyn();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_204_new)
+HXLINE( 205)			 ::borogove::Stanza stanza = ( ( ::borogove::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
+HXLINE( 207)			if (::hx::IsNotNull( stanza->getChild(HX_("result",dd,68,84,08),HX_("urn:xmpp:mam:2",f5,ef,8c,da)) )) {
+HXLINE( 209)				return ::borogove::EventResult_obj::EventUnhandled_dyn();
             			}
-HXLINE( 201)			 ::borogove::JID from;
-HXDLIN( 201)			if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 201)				from = null();
+HXLINE( 212)			 ::borogove::JID from;
+HXDLIN( 212)			if (::hx::IsNull( stanza->attr->get(HX_("from",6a,a5,c2,43)) )) {
+HXLINE( 212)				from = null();
             			}
             			else {
-HXLINE( 201)				from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE( 212)				from = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)));
             			}
-HXLINE( 202)			 ::borogove::Stanza fwd = null();
-HXLINE( 203)			bool _hx_tmp;
-HXDLIN( 203)			if (::hx::IsNotNull( from )) {
-HXLINE( 203)				::String _hx_tmp1 = from->asBare()->asString();
-HXDLIN( 203)				_hx_tmp = (_hx_tmp1 == _gthis->accountId());
+HXLINE( 213)			 ::borogove::Stanza fwd = null();
+HXLINE( 214)			bool _hx_tmp;
+HXDLIN( 214)			if (::hx::IsNotNull( from )) {
+HXLINE( 214)				::String _hx_tmp1 = from->asBare()->asString();
+HXDLIN( 214)				_hx_tmp = (_hx_tmp1 == _gthis->accountId());
             			}
             			else {
-HXLINE( 203)				_hx_tmp = false;
+HXLINE( 214)				_hx_tmp = false;
             			}
-HXDLIN( 203)			if (_hx_tmp) {
-HXLINE( 204)				 ::borogove::Stanza carbon = stanza->getChild(HX_("received",21,45,fd,e2),HX_("urn:xmpp:carbons:2",02,86,9e,df));
-HXLINE( 205)				if (::hx::IsNull( carbon )) {
-HXLINE( 205)					carbon = stanza->getChild(HX_("sent",58,8d,50,4c),HX_("urn:xmpp:carbons:2",02,86,9e,df));
+HXDLIN( 214)			if (_hx_tmp) {
+HXLINE( 215)				 ::borogove::Stanza carbon = stanza->getChild(HX_("received",21,45,fd,e2),HX_("urn:xmpp:carbons:2",02,86,9e,df));
+HXLINE( 216)				if (::hx::IsNull( carbon )) {
+HXLINE( 216)					carbon = stanza->getChild(HX_("sent",58,8d,50,4c),HX_("urn:xmpp:carbons:2",02,86,9e,df));
             				}
-HXLINE( 206)				if (::hx::IsNotNull( carbon )) {
-HXLINE( 207)					 ::borogove::Stanza tmp = carbon->getChild(HX_("forwarded",64,f5,9a,17),HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
-HXDLIN( 207)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 207)						fwd = tmp->getFirstChild();
+HXLINE( 217)				if (::hx::IsNotNull( carbon )) {
+HXLINE( 218)					 ::borogove::Stanza tmp = carbon->getChild(HX_("forwarded",64,f5,9a,17),HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
+HXDLIN( 218)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 218)						fwd = tmp->getFirstChild();
             					}
             					else {
-HXLINE( 207)						fwd = null();
+HXLINE( 218)						fwd = null();
             					}
             				}
             			}
-HXLINE( 221)			_gthis->processLiveMessage(stanza,fwd,null());
-HXLINE( 222)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE( 233)			_gthis->processLiveMessage(stanza,fwd,null());
+HXLINE( 234)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_11, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::IqResult _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_226_new)
-HXLINE( 227)			 ::borogove::JID from;
-HXDLIN( 227)			if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 227)				from = null();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_238_new)
+HXLINE( 239)			 ::borogove::JID from;
+HXDLIN( 239)			if (::hx::IsNull( stanza->attr->get(HX_("from",6a,a5,c2,43)) )) {
+HXLINE( 239)				from = null();
             			}
             			else {
-HXLINE( 227)				from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-            			}
-HXLINE( 228)			 ::borogove::Stanza jingle = stanza->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
-HXLINE( 229)			 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 229)			 ::borogove::DirectChat chat = _gthis1->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 230)			::Dynamic this1 = chat->jingleSessions;
-HXDLIN( 230)			::Dynamic session = ( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) ));
-HXLINE( 232)			if ((( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-initiate",70,2d,30,f7))) {
-HXLINE( 233)				if (::hx::IsNotNull( session )) {
-HXLINE( 234)					try {
+HXLINE( 239)				from = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)));
+            			}
+HXLINE( 240)			 ::borogove::Stanza jingle = stanza->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
+HXLINE( 241)			 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 241)			 ::borogove::DirectChat chat = _gthis1->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 242)			::Dynamic this1 = chat->jingleSessions;
+HXDLIN( 242)			::Dynamic session = ( ( ::haxe::ds::StringMap)(this1) )->get(jingle->attr->get(HX_("sid",0e,9f,57,00)));
+HXLINE( 244)			if (::hx::IsEq( jingle->attr->get(HX_("action",b6,3b,46,16)),HX_("session-initiate",70,2d,30,f7) )) {
+HXLINE( 245)				if (::hx::IsNotNull( session )) {
+HXLINE( 246)					try {
             						HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 235)						::Dynamic this2 = chat->jingleSessions;
-HXDLIN( 235)						::String key = ::borogove::calls::Session_obj::get_sid(session);
-HXDLIN( 235)						( ( ::haxe::ds::StringMap)(this2) )->set(key,::borogove::calls::Session_obj::initiate(session,stanza));
+HXLINE( 247)						::Dynamic this2 = chat->jingleSessions;
+HXDLIN( 247)						::String key = ::borogove::calls::Session_obj::get_sid(session);
+HXDLIN( 247)						( ( ::haxe::ds::StringMap)(this2) )->set(key,::borogove::calls::Session_obj::initiate(session,stanza));
             					} catch( ::Dynamic _hx_e) {
             						if (_hx_e.IsClass<  ::Dynamic >() ){
             							HX_STACK_BEGIN_CATCH
             							 ::Dynamic _g = _hx_e;
-HXLINE( 236)							 ::haxe::Exception _g1 = ::haxe::Exception_obj::caught(_g);
-HXDLIN( 236)							{
-HXLINE( 237)								::haxe::Log_obj::trace(HX_("Bad session-inititate",c5,d7,64,3f), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 248)							 ::haxe::Exception _g1 = ::haxe::Exception_obj::caught(_g);
+HXDLIN( 248)							{
+HXLINE( 249)								::haxe::Log_obj::trace(HX_("Bad session-inititate",c5,d7,64,3f), ::Dynamic(::hx::Anon_obj::Create(5)
             									->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
             									->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_g1))
             									->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("new",60,d0,53,00))
             									->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            									->setFixed(4,HX_("lineNumber",dd,81,22,76),237)));
-HXLINE( 238)								{
-HXLINE( 238)									::Dynamic this3 = chat->jingleSessions;
-HXDLIN( 238)									( ( ::haxe::ds::StringMap)(this3) )->remove(::borogove::calls::Session_obj::get_sid(session));
+            									->setFixed(4,HX_("lineNumber",dd,81,22,76),249)));
+HXLINE( 250)								{
+HXLINE( 250)									::Dynamic this3 = chat->jingleSessions;
+HXDLIN( 250)									( ( ::haxe::ds::StringMap)(this3) )->remove(::borogove::calls::Session_obj::get_sid(session));
             								}
             							}
             						}
@@ -800,625 +897,646 @@ HXDLIN( 238)									( ( ::haxe::ds::StringMap)(this3) )->remove(::borogove::cal
             					}
             				}
             				else {
-HXLINE( 241)					 ::borogove::calls::InitiatedSession newSession = ::borogove::calls::InitiatedSession_obj::fromSessionInitiate(_gthis,stanza);
-HXLINE( 242)					{
-HXLINE( 242)						::Dynamic this4 = chat->jingleSessions;
-HXDLIN( 242)						( ( ::haxe::ds::StringMap)(this4) )->set(newSession->get_sid(),newSession);
+HXLINE( 253)					 ::borogove::calls::InitiatedSession newSession = ::borogove::calls::InitiatedSession_obj::fromSessionInitiate(_gthis,stanza);
+HXLINE( 254)					{
+HXLINE( 254)						::Dynamic this4 = chat->jingleSessions;
+HXDLIN( 254)						( ( ::haxe::ds::StringMap)(this4) )->set(newSession->get_sid(),newSession);
             					}
-HXLINE( 243)					_gthis->chatActivity(chat,null());
-HXLINE( 244)					newSession->ring();
+HXLINE( 255)					_gthis->chatActivity(chat,null());
+HXLINE( 256)					newSession->ring();
             				}
             			}
-HXLINE( 248)			bool _hx_tmp;
-HXDLIN( 248)			if (::hx::IsNotNull( session )) {
-HXLINE( 248)				_hx_tmp = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-accept",5f,92,e7,a8));
+HXLINE( 260)			bool _hx_tmp;
+HXDLIN( 260)			if (::hx::IsNotNull( session )) {
+HXLINE( 260)				_hx_tmp = ::hx::IsEq( jingle->attr->get(HX_("action",b6,3b,46,16)),HX_("session-accept",5f,92,e7,a8) );
             			}
             			else {
-HXLINE( 248)				_hx_tmp = false;
+HXLINE( 260)				_hx_tmp = false;
             			}
-HXDLIN( 248)			if (_hx_tmp) {
-HXLINE( 249)				try {
+HXDLIN( 260)			if (_hx_tmp) {
+HXLINE( 261)				try {
             					HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 250)					::Dynamic this5 = chat->jingleSessions;
-HXDLIN( 250)					::String key1 = ::borogove::calls::Session_obj::get_sid(session);
-HXDLIN( 250)					( ( ::haxe::ds::StringMap)(this5) )->set(key1,::borogove::calls::Session_obj::initiate(session,stanza));
+HXLINE( 262)					::Dynamic this5 = chat->jingleSessions;
+HXDLIN( 262)					::String key1 = ::borogove::calls::Session_obj::get_sid(session);
+HXDLIN( 262)					( ( ::haxe::ds::StringMap)(this5) )->set(key1,::borogove::calls::Session_obj::initiate(session,stanza));
             				} catch( ::Dynamic _hx_e) {
             					if (_hx_e.IsClass<  ::Dynamic >() ){
             						HX_STACK_BEGIN_CATCH
             						 ::Dynamic _g2 = _hx_e;
-HXLINE( 251)						 ::haxe::Exception _g3 = ::haxe::Exception_obj::caught(_g2);
-HXLINE( 252)						::haxe::Log_obj::trace(HX_("session-accept failed",5e,a5,74,6b), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 263)						 ::haxe::Exception _g3 = ::haxe::Exception_obj::caught(_g2);
+HXLINE( 264)						::haxe::Log_obj::trace(HX_("session-accept failed",5e,a5,74,6b), ::Dynamic(::hx::Anon_obj::Create(5)
             							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
             							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_g3))
             							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("new",60,d0,53,00))
             							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),252)));
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),264)));
             					}
             					else {
             						HX_STACK_DO_THROW(_hx_e);
             					}
             				}
             			}
-HXLINE( 256)			bool _hx_tmp1;
-HXDLIN( 256)			if (::hx::IsNotNull( session )) {
-HXLINE( 256)				_hx_tmp1 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-terminate",6a,23,dc,12));
+HXLINE( 268)			bool _hx_tmp1;
+HXDLIN( 268)			if (::hx::IsNotNull( session )) {
+HXLINE( 268)				_hx_tmp1 = ::hx::IsEq( jingle->attr->get(HX_("action",b6,3b,46,16)),HX_("session-terminate",6a,23,dc,12) );
             			}
             			else {
-HXLINE( 256)				_hx_tmp1 = false;
+HXLINE( 268)				_hx_tmp1 = false;
             			}
-HXDLIN( 256)			if (_hx_tmp1) {
-HXLINE( 257)				::borogove::calls::Session_obj::terminate(session);
-HXLINE( 258)				{
-HXLINE( 258)					::Dynamic this6 = chat->jingleSessions;
-HXDLIN( 258)					( ( ::haxe::ds::StringMap)(this6) )->remove(( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) ));
+HXDLIN( 268)			if (_hx_tmp1) {
+HXLINE( 269)				::borogove::calls::Session_obj::terminate(session);
+HXLINE( 270)				{
+HXLINE( 270)					::Dynamic this6 = chat->jingleSessions;
+HXDLIN( 270)					( ( ::haxe::ds::StringMap)(this6) )->remove(jingle->attr->get_string(HX_("sid",0e,9f,57,00)));
             				}
             			}
-HXLINE( 261)			bool _hx_tmp2;
-HXDLIN( 261)			if (::hx::IsNotNull( session )) {
-HXLINE( 261)				_hx_tmp2 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("content-add",cd,a9,a1,10));
+HXLINE( 273)			bool _hx_tmp2;
+HXDLIN( 273)			if (::hx::IsNotNull( session )) {
+HXLINE( 273)				_hx_tmp2 = ::hx::IsEq( jingle->attr->get(HX_("action",b6,3b,46,16)),HX_("content-add",cd,a9,a1,10) );
             			}
             			else {
-HXLINE( 261)				_hx_tmp2 = false;
+HXLINE( 273)				_hx_tmp2 = false;
             			}
-HXDLIN( 261)			if (_hx_tmp2) {
-HXLINE( 262)				::borogove::calls::Session_obj::contentAdd(session,stanza);
+HXDLIN( 273)			if (_hx_tmp2) {
+HXLINE( 274)				::borogove::calls::Session_obj::contentAdd(session,stanza);
             			}
-HXLINE( 265)			bool _hx_tmp3;
-HXDLIN( 265)			if (::hx::IsNotNull( session )) {
-HXLINE( 265)				_hx_tmp3 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("content-accept",dc,ee,cb,f2));
+HXLINE( 277)			bool _hx_tmp3;
+HXDLIN( 277)			if (::hx::IsNotNull( session )) {
+HXLINE( 277)				_hx_tmp3 = ::hx::IsEq( jingle->attr->get(HX_("action",b6,3b,46,16)),HX_("content-accept",dc,ee,cb,f2) );
             			}
             			else {
-HXLINE( 265)				_hx_tmp3 = false;
+HXLINE( 277)				_hx_tmp3 = false;
             			}
-HXDLIN( 265)			if (_hx_tmp3) {
-HXLINE( 266)				::borogove::calls::Session_obj::contentAccept(session,stanza);
+HXDLIN( 277)			if (_hx_tmp3) {
+HXLINE( 278)				::borogove::calls::Session_obj::contentAccept(session,stanza);
             			}
-HXLINE( 269)			bool _hx_tmp4;
-HXDLIN( 269)			if (::hx::IsNotNull( session )) {
-HXLINE( 269)				_hx_tmp4 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("transport-info",d2,9e,05,1c));
+HXLINE( 281)			bool _hx_tmp4;
+HXDLIN( 281)			if (::hx::IsNotNull( session )) {
+HXLINE( 281)				_hx_tmp4 = ::hx::IsEq( jingle->attr->get(HX_("action",b6,3b,46,16)),HX_("transport-info",d2,9e,05,1c) );
             			}
             			else {
-HXLINE( 269)				_hx_tmp4 = false;
+HXLINE( 281)				_hx_tmp4 = false;
             			}
-HXDLIN( 269)			if (_hx_tmp4) {
-HXLINE( 270)				::borogove::calls::Session_obj::transportInfo(session,stanza);
+HXDLIN( 281)			if (_hx_tmp4) {
+HXLINE( 282)				::borogove::calls::Session_obj::transportInfo(session,stanza);
             			}
-HXLINE( 274)			return ::borogove::IqResult_obj::IqResult_dyn();
+HXLINE( 286)			return ::borogove::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_12, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::IqResult _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_279_new)
-HXLINE( 279)			return ::borogove::IqResult_obj::IqResultElement(_gthis->caps->discoReply());
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_291_new)
+HXLINE( 291)			return ::borogove::IqResult_obj::IqResultElement(_gthis->caps->discoReply());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_13, ::borogove::Client,_gthis,::Dynamic,persistence) HXARGC(1)
             		 ::borogove::IqResult _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_282_new)
-HXLINE( 284)			bool _hx_tmp;
-HXDLIN( 284)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 285)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE( 284)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_294_new)
+HXLINE( 296)			bool _hx_tmp;
+HXDLIN( 296)			if (::hx::IsNotNull( stanza->attr->get(HX_("from",6a,a5,c2,43)) )) {
+HXLINE( 297)				::String _hx_tmp1 = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
+HXLINE( 296)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
             			}
             			else {
-HXLINE( 284)				_hx_tmp = false;
-            			}
-HXLINE( 283)			if (_hx_tmp) {
-HXLINE( 287)				return ::borogove::IqResult_obj::IqNoResult_dyn();
+HXLINE( 296)				_hx_tmp = false;
+            			}
+HXLINE( 295)			if (_hx_tmp) {
+HXLINE( 299)				return ::borogove::IqResult_obj::IqNoResult_dyn();
+            			}
+HXLINE( 302)			 ::borogove::queries::RosterGet roster =  ::borogove::queries::RosterGet_obj::__alloc( HX_CTX ,null());
+HXLINE( 303)			roster->handleResponse(stanza);
+HXLINE( 304)			::Array< ::Dynamic> items = roster->getResult();
+HXLINE( 305)			if (::hx::IsNotNull( roster->ver )) {
+HXLINE( 306)				_gthis->rosterVer = roster->ver;
+HXLINE( 307)				::Dynamic persistence1 = persistence;
+HXDLIN( 307)				::String _hx_tmp2 = _gthis->accountId();
+HXDLIN( 307)				::String _hx_tmp3;
+HXDLIN( 307)				::String tmp = _gthis->stream->clientId;
+HXDLIN( 307)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 307)					_hx_tmp3 = tmp;
+            				}
+            				else {
+HXLINE( 307)					_hx_tmp3 = _gthis->jid->resource;
+            				}
+HXDLIN( 307)				::String _hx_tmp4 = _gthis->displayName();
+HXDLIN( 307)				::borogove::Persistence_obj::storeLogin(persistence1,_hx_tmp2,_hx_tmp3,_hx_tmp4,_gthis->rosterVer,null());
             			}
-HXLINE( 290)			 ::borogove::queries::RosterGet roster =  ::borogove::queries::RosterGet_obj::__alloc( HX_CTX ,null());
-HXLINE( 291)			roster->handleResponse(stanza);
-HXLINE( 292)			::Array< ::Dynamic> items = roster->getResult();
-HXLINE( 293)			if ((items->length == 0)) {
-HXLINE( 293)				return ::borogove::IqResult_obj::IqNoResult_dyn();
+HXLINE( 309)			if ((items->length == 0)) {
+HXLINE( 309)				return ::borogove::IqResult_obj::IqNoResult_dyn();
             			}
-HXLINE( 295)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 296)			{
-HXLINE( 296)				int _g = 0;
-HXDLIN( 296)				while((_g < items->length)){
-HXLINE( 296)					 ::Dynamic item = items->__get(_g);
-HXDLIN( 296)					_g = (_g + 1);
-HXLINE( 297)					if (::hx::IsNotEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("remove",44,9c,88,04) )) {
-HXLINE( 298)						 ::borogove::DirectChat chat = _gthis->getDirectChat(( (::String)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),false);
-HXLINE( 299)						chat->updateFromRoster(item);
-HXLINE( 300)						chatsToUpdate->push(chat);
+HXLINE( 311)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 312)			{
+HXLINE( 312)				int _g = 0;
+HXDLIN( 312)				while((_g < items->length)){
+HXLINE( 312)					 ::borogove::Stanza item = items->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 312)					_g = (_g + 1);
+HXLINE( 313)					if (::hx::IsNotEq( item->attr->get(HX_("subscription",1d,ff,00,36)),HX_("remove",44,9c,88,04) )) {
+HXLINE( 314)						 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 314)						 ::borogove::DirectChat chat = _gthis1->getDirectChat(item->attr->get_string(HX_("jid",c5,ca,50,00)),false);
+HXLINE( 315)						chat->updateFromRoster(item);
+HXLINE( 316)						chatsToUpdate->push(chat);
             					}
             				}
             			}
-HXLINE( 303)			::Dynamic persistence1 = persistence;
-HXDLIN( 303)			::borogove::Persistence_obj::storeChats(persistence1,_gthis->accountId(),chatsToUpdate);
-HXLINE( 304)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
-HXLINE( 306)			return ::borogove::IqResult_obj::IqResult_dyn();
+HXLINE( 319)			::Dynamic persistence2 = persistence;
+HXDLIN( 319)			::borogove::Persistence_obj::storeChats(persistence2,_gthis->accountId(),chatsToUpdate);
+HXLINE( 320)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
+HXLINE( 322)			return ::borogove::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_14, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::IqResult _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_309_new)
-HXLINE( 311)			bool _hx_tmp;
-HXDLIN( 311)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 312)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE( 311)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_325_new)
+HXLINE( 327)			bool _hx_tmp;
+HXDLIN( 327)			if (::hx::IsNotNull( stanza->attr->get(HX_("from",6a,a5,c2,43)) )) {
+HXLINE( 328)				::String _hx_tmp1 = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
+HXLINE( 327)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
             			}
             			else {
-HXLINE( 311)				_hx_tmp = false;
+HXLINE( 327)				_hx_tmp = false;
             			}
-HXLINE( 310)			if (_hx_tmp) {
-HXLINE( 314)				return ::borogove::IqResult_obj::IqNoResult_dyn();
+HXLINE( 326)			if (_hx_tmp) {
+HXLINE( 330)				return ::borogove::IqResult_obj::IqNoResult_dyn();
             			}
-HXLINE( 317)			{
-HXLINE( 317)				int _g = 0;
-HXDLIN( 317)				::Array< ::Dynamic> _g1;
-HXDLIN( 317)				 ::borogove::Stanza tmp = stanza->getChild(HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3));
-HXDLIN( 317)				::Array< ::Dynamic> tmp1;
-HXDLIN( 317)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 317)					tmp1 = tmp->allTags(HX_("item",13,c5,bf,45),null());
+HXLINE( 333)			{
+HXLINE( 333)				int _g = 0;
+HXDLIN( 333)				::Array< ::Dynamic> _g1;
+HXDLIN( 333)				 ::borogove::Stanza tmp = stanza->getChild(HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3));
+HXDLIN( 333)				::Array< ::Dynamic> tmp1;
+HXDLIN( 333)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 333)					tmp1 = tmp->allTags(HX_("item",13,c5,bf,45),null());
             				}
             				else {
-HXLINE( 317)					tmp1 = null();
+HXLINE( 333)					tmp1 = null();
             				}
-HXDLIN( 317)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 317)					_g1 = tmp1;
+HXDLIN( 333)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 333)					_g1 = tmp1;
             				}
             				else {
-HXLINE( 317)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 333)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
             				}
-HXDLIN( 317)				while((_g < _g1->length)){
-HXLINE( 317)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 317)					_g = (_g + 1);
-HXLINE( 318)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ) )) {
-HXLINE( 318)						 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 318)						_gthis1->serverBlocked(( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ));
+HXDLIN( 333)				while((_g < _g1->length)){
+HXLINE( 333)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 333)					_g = (_g + 1);
+HXLINE( 334)					if (::hx::IsNotNull( item->attr->get(HX_("jid",c5,ca,50,00)) )) {
+HXLINE( 334)						 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 334)						_gthis1->serverBlocked(item->attr->get_string(HX_("jid",c5,ca,50,00)));
             					}
             				}
             			}
-HXLINE( 321)			return ::borogove::IqResult_obj::IqResult_dyn();
+HXLINE( 337)			return ::borogove::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_15, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::IqResult _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_324_new)
-HXLINE( 326)			bool _hx_tmp;
-HXDLIN( 326)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 327)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE( 326)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_340_new)
+HXLINE( 342)			bool _hx_tmp;
+HXDLIN( 342)			if (::hx::IsNotNull( stanza->attr->get(HX_("from",6a,a5,c2,43)) )) {
+HXLINE( 343)				::String _hx_tmp1 = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
+HXLINE( 342)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
             			}
             			else {
-HXLINE( 326)				_hx_tmp = false;
+HXLINE( 342)				_hx_tmp = false;
             			}
-HXLINE( 325)			if (_hx_tmp) {
-HXLINE( 329)				return ::borogove::IqResult_obj::IqNoResult_dyn();
+HXLINE( 341)			if (_hx_tmp) {
+HXLINE( 345)				return ::borogove::IqResult_obj::IqNoResult_dyn();
             			}
-HXLINE( 332)			 ::borogove::Stanza tmp = stanza->getChild(HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3));
-HXDLIN( 332)			::Array< ::Dynamic> unblocks;
-HXDLIN( 332)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 332)				unblocks = tmp->allTags(HX_("item",13,c5,bf,45),null());
+HXLINE( 348)			 ::borogove::Stanza tmp = stanza->getChild(HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3));
+HXDLIN( 348)			::Array< ::Dynamic> unblocks;
+HXDLIN( 348)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 348)				unblocks = tmp->allTags(HX_("item",13,c5,bf,45),null());
             			}
             			else {
-HXLINE( 332)				unblocks = null();
+HXLINE( 348)				unblocks = null();
             			}
-HXLINE( 333)			if (::hx::IsNull( unblocks )) {
-HXLINE( 335)				int _g = 0;
-HXDLIN( 335)				::Array< ::Dynamic> _g1 = _gthis->chats;
-HXDLIN( 335)				while((_g < _g1->length)){
-HXLINE( 335)					 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN( 335)					_g = (_g + 1);
-HXLINE( 336)					if (chat->isBlocked) {
-HXLINE( 336)						chat->unblock(false);
+HXLINE( 349)			if (::hx::IsNull( unblocks )) {
+HXLINE( 351)				int _g = 0;
+HXDLIN( 351)				::Array< ::Dynamic> _g1 = _gthis->chats;
+HXDLIN( 351)				while((_g < _g1->length)){
+HXLINE( 351)					 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN( 351)					_g = (_g + 1);
+HXLINE( 352)					if (chat->isBlocked) {
+HXLINE( 352)						chat->unblock(false);
             					}
             				}
             			}
             			else {
-HXLINE( 339)				int _g2 = 0;
-HXDLIN( 339)				while((_g2 < unblocks->length)){
-HXLINE( 339)					 ::borogove::Stanza item = unblocks->__get(_g2).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 339)					_g2 = (_g2 + 1);
-HXLINE( 340)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ) )) {
-HXLINE( 340)						 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 340)						 ::borogove::Chat tmp1 = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ));
-HXDLIN( 340)						if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 340)							tmp1->unblock(false);
+HXLINE( 355)				int _g2 = 0;
+HXDLIN( 355)				while((_g2 < unblocks->length)){
+HXLINE( 355)					 ::borogove::Stanza item = unblocks->__get(_g2).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 355)					_g2 = (_g2 + 1);
+HXLINE( 356)					if (::hx::IsNotNull( item->attr->get(HX_("jid",c5,ca,50,00)) )) {
+HXLINE( 356)						 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 356)						 ::borogove::Chat tmp1 = _gthis1->getChat(item->attr->get_string(HX_("jid",c5,ca,50,00)));
+HXDLIN( 356)						if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 356)							tmp1->unblock(false);
             						}
             					}
             				}
             			}
-HXLINE( 344)			return ::borogove::IqResult_obj::IqResult_dyn();
+HXLINE( 360)			return ::borogove::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_24, ::borogove::Client,_gthis,::Dynamic,persistence) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic event){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_347_new)
-HXLINE( 348)			 ::borogove::Stanza stanza = ( ( ::borogove::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
-HXLINE( 349)			 ::borogove::Stanza presence = stanza;
-HXLINE( 351)			bool _hx_tmp;
-HXDLIN( 351)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 351)				_hx_tmp = ::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) );
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_363_new)
+HXLINE( 364)			 ::borogove::Stanza stanza = ( ( ::borogove::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
+HXLINE( 365)			 ::borogove::Stanza presence = stanza;
+HXLINE( 367)			bool _hx_tmp;
+HXDLIN( 367)			if (::hx::IsNotNull( stanza->attr->get(HX_("from",6a,a5,c2,43)) )) {
+HXLINE( 367)				_hx_tmp = ::hx::IsNull( stanza->attr->get(HX_("type",ba,f2,08,4d)) );
             			}
             			else {
-HXLINE( 351)				_hx_tmp = false;
-            			}
-HXDLIN( 351)			if (_hx_tmp) {
-HXLINE( 352)				 ::borogove::JID from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 353)				 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 353)				 ::borogove::Chat chat = _gthis1->getChat(from->asBare()->asString());
-HXLINE( 354)				if (::hx::IsNull( chat )) {
-HXLINE( 355)					 ::Dynamic _hx_tmp1 = ::haxe::Log_obj::trace;
-HXDLIN( 355)					::String _hx_tmp2 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXDLIN( 355)					_hx_tmp1(_hx_tmp2,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),355,HX_("borogove.Client",18,dc,e6,c0),HX_("new",60,d0,53,00)));
-HXLINE( 356)					return ::borogove::EventResult_obj::EventUnhandled_dyn();
-            				}
-HXLINE( 359)				 ::borogove::Stanza c = presence->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
-HXDLIN( 359)				 ::Dynamic tmp;
-HXDLIN( 359)				if (::hx::IsNotNull( c )) {
-HXLINE( 359)					tmp = c->attr;
+HXLINE( 367)				_hx_tmp = false;
+            			}
+HXDLIN( 367)			if (_hx_tmp) {
+HXLINE( 368)				 ::borogove::JID from = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)));
+HXLINE( 369)				 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 369)				 ::borogove::Chat chat = _gthis1->getChat(from->asBare()->asString());
+HXLINE( 370)				if (::hx::IsNull( chat )) {
+HXLINE( 371)					 ::Dynamic _hx_tmp1 = ::haxe::Log_obj::trace;
+HXDLIN( 371)					::String _hx_tmp2 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + stanza->attr->get(HX_("from",6a,a5,c2,43)));
+HXDLIN( 371)					_hx_tmp1(_hx_tmp2,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),371,HX_("borogove.Client",18,dc,e6,c0),HX_("new",60,d0,53,00)));
+HXLINE( 372)					return ::borogove::EventResult_obj::EventUnhandled_dyn();
+            				}
+HXLINE( 375)				 ::borogove::Stanza c = presence->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
+HXDLIN( 375)				 ::haxe::ds::StringMap tmp;
+HXDLIN( 375)				if (::hx::IsNotNull( c )) {
+HXLINE( 375)					tmp = c->attr;
             				}
             				else {
-HXLINE( 359)					tmp = null();
+HXLINE( 375)					tmp = null();
             				}
-HXDLIN( 359)				::String _hx_tmp3;
-HXDLIN( 359)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 359)					_hx_tmp3 = ( (::String)(::Reflect_obj::field(tmp,HX_("ver",63,e2,59,00))) );
+HXDLIN( 375)				::String _hx_tmp3;
+HXDLIN( 375)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 375)					_hx_tmp3 = tmp->get_string(HX_("ver",63,e2,59,00));
             				}
             				else {
-HXLINE( 359)					_hx_tmp3 = null();
+HXLINE( 375)					_hx_tmp3 = null();
             				}
-HXDLIN( 359)				if (::hx::IsNull( _hx_tmp3 )) {
-HXLINE( 360)					 ::borogove::Chat chat1 = chat;
-HXDLIN( 360)					::String _hx_tmp4 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN( 360)					chat1->setPresence(::borogove::JID_obj::parse(_hx_tmp4)->resource,stanza,false);
+HXDLIN( 375)				if (::hx::IsNull( _hx_tmp3 )) {
+HXLINE( 376)					 ::borogove::Chat chat1 = chat;
+HXDLIN( 376)					::String _hx_tmp4 = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
+HXDLIN( 376)					chat1->setPresence(::borogove::JID_obj::parse(_hx_tmp4)->resource,stanza,false);
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_16, ::borogove::Chat,chat, ::borogove::Stanza,stanza) HXARGC(1)
             					 ::borogove::Chat _hx_run( ::borogove::Caps caps){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_362_new)
-HXLINE( 363)						 ::borogove::Chat chat1 = chat;
-HXDLIN( 363)						::String handleCaps = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN( 363)						chat1->setPresence(::borogove::JID_obj::parse(handleCaps)->resource,stanza,false);
-HXLINE( 364)						return chat;
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_378_new)
+HXLINE( 379)						 ::borogove::Chat chat1 = chat;
+HXDLIN( 379)						::String handleCaps = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
+HXDLIN( 379)						chat1->setPresence(::borogove::JID_obj::parse(handleCaps)->resource,stanza,false);
+HXLINE( 380)						return chat;
             					}
             					HX_END_LOCAL_FUNC1(return)
 
             					HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_18, ::borogove::Client,_gthis, ::borogove::Stanza,presence, ::Dynamic,handleCaps, ::borogove::Stanza,stanza) HXARGC(1)
             					void _hx_run( ::borogove::Caps caps){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_368_new)
-HXLINE( 368)						if (::hx::IsNull( caps )) {
-HXLINE( 369)							 ::borogove::Stanza c = presence->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
-HXDLIN( 369)							 ::Dynamic tmp;
-HXDLIN( 369)							if (::hx::IsNotNull( c )) {
-HXLINE( 369)								tmp = c->attr;
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_384_new)
+HXLINE( 384)						if (::hx::IsNull( caps )) {
+HXLINE( 385)							 ::borogove::Stanza c = presence->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
+HXDLIN( 385)							 ::haxe::ds::StringMap tmp;
+HXDLIN( 385)							if (::hx::IsNotNull( c )) {
+HXLINE( 385)								tmp = c->attr;
             							}
             							else {
-HXLINE( 369)								tmp = null();
+HXLINE( 385)								tmp = null();
             							}
-HXDLIN( 369)							::String ver;
-HXDLIN( 369)							if (::hx::IsNotNull( tmp )) {
-HXLINE( 369)								ver = ( (::String)(::Reflect_obj::field(tmp,HX_("ver",63,e2,59,00))) );
+HXDLIN( 385)							::String ver;
+HXDLIN( 385)							if (::hx::IsNotNull( tmp )) {
+HXLINE( 385)								ver = tmp->get_string(HX_("ver",63,e2,59,00));
             							}
             							else {
-HXLINE( 369)								ver = null();
+HXLINE( 385)								ver = null();
             							}
-HXLINE( 370)							::Array< ::Dynamic> pending = ( (::Array< ::Dynamic>)(_gthis->pendingCaps->get(ver)) );
-HXLINE( 371)							if (::hx::IsNull( pending )) {
+HXLINE( 386)							::Array< ::Dynamic> pending = ( (::Array< ::Dynamic>)(_gthis->pendingCaps->get(ver)) );
+HXLINE( 387)							if (::hx::IsNull( pending )) {
             								HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_17, ::borogove::Client,_gthis,::String,ver, ::borogove::queries::DiscoInfoGet,discoGet2) HXARGC(0)
             								void _hx_run(){
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_374_new)
-HXLINE( 376)									::Array< ::Dynamic> handlers;
-HXDLIN( 376)									::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(_gthis->pendingCaps->get(ver)) );
-HXDLIN( 376)									if (::hx::IsNotNull( tmp )) {
-HXLINE( 376)										handlers = tmp;
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_390_new)
+HXLINE( 392)									::Array< ::Dynamic> handlers;
+HXDLIN( 392)									::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(_gthis->pendingCaps->get(ver)) );
+HXDLIN( 392)									if (::hx::IsNotNull( tmp )) {
+HXLINE( 392)										handlers = tmp;
             									}
             									else {
-HXLINE( 376)										handlers = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 392)										handlers = ::Array_obj< ::Dynamic>::__new(0);
             									}
-HXLINE( 377)									_gthis->pendingCaps->remove(ver);
-HXLINE( 378)									if (::hx::IsNotNull( discoGet2->getResult() )) {
-HXLINE( 379)										 ::borogove::CapsRepo _gthis1 = _gthis->capsRepo;
-HXDLIN( 379)										 ::borogove::Caps cachedCaps = _gthis1->add(discoGet2->getResult(),null());
-HXLINE( 380)										{
-HXLINE( 380)											int _g = 0;
-HXDLIN( 380)											while((_g < handlers->length)){
-HXLINE( 380)												 ::Dynamic handler = handlers->__get(_g);
-HXDLIN( 380)												_g = (_g + 1);
-HXLINE( 381)												handler(cachedCaps);
+HXLINE( 393)									_gthis->pendingCaps->remove(ver);
+HXLINE( 394)									if (::hx::IsNotNull( discoGet2->getResult() )) {
+HXLINE( 395)										 ::borogove::CapsRepo _gthis1 = _gthis->capsRepo;
+HXDLIN( 395)										 ::borogove::Caps cachedCaps = _gthis1->add(discoGet2->getResult(),null());
+HXLINE( 396)										{
+HXLINE( 396)											int _g = 0;
+HXDLIN( 396)											while((_g < handlers->length)){
+HXLINE( 396)												 ::Dynamic handler = handlers->__get(_g);
+HXDLIN( 396)												_g = (_g + 1);
+HXLINE( 397)												handler(cachedCaps);
             											}
             										}
             									}
             								}
             								HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 372)								_gthis->pendingCaps->set(ver,::Array_obj< ::Dynamic>::__new(1)->init(0,handleCaps));
-HXLINE( 373)								::String discoGet = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN( 373)								 ::borogove::Stanza c1 = presence->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
-HXDLIN( 373)								 ::Dynamic tmp1;
-HXDLIN( 373)								if (::hx::IsNotNull( c1 )) {
-HXLINE( 373)									tmp1 = c1->attr;
+HXLINE( 388)								_gthis->pendingCaps->set(ver,::Array_obj< ::Dynamic>::__new(1)->init(0,handleCaps));
+HXLINE( 389)								::String discoGet = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
+HXDLIN( 389)								 ::borogove::Stanza c1 = presence->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
+HXDLIN( 389)								 ::haxe::ds::StringMap tmp1;
+HXDLIN( 389)								if (::hx::IsNotNull( c1 )) {
+HXLINE( 389)									tmp1 = c1->attr;
             								}
             								else {
-HXLINE( 373)									tmp1 = null();
+HXLINE( 389)									tmp1 = null();
             								}
-HXDLIN( 373)								::String discoGet1;
-HXDLIN( 373)								if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 373)									discoGet1 = ( (::String)(::Reflect_obj::field(tmp1,HX_("node",02,0a,0a,49))) );
+HXDLIN( 389)								::String discoGet1;
+HXDLIN( 389)								if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 389)									discoGet1 = tmp1->get_string(HX_("node",02,0a,0a,49));
             								}
             								else {
-HXLINE( 373)									discoGet1 = null();
+HXLINE( 389)									discoGet1 = null();
             								}
-HXDLIN( 373)								 ::borogove::queries::DiscoInfoGet discoGet2 =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,discoGet,((discoGet1 + HX_("#",23,00,00,00)) + ver));
-HXLINE( 374)								discoGet2->onFinished( ::Dynamic(new _hx_Closure_17(_gthis,ver,discoGet2)));
-HXLINE( 385)								_gthis->sendQuery(discoGet2);
+HXDLIN( 389)								 ::borogove::queries::DiscoInfoGet discoGet2 =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,discoGet,((discoGet1 + HX_("#",23,00,00,00)) + ver));
+HXLINE( 390)								discoGet2->onFinished( ::Dynamic(new _hx_Closure_17(_gthis,ver,discoGet2)));
+HXLINE( 401)								_gthis->sendQuery(discoGet2);
             							}
             							else {
-HXLINE( 387)								pending->push(handleCaps);
+HXLINE( 403)								pending->push(handleCaps);
             							}
             						}
             						else {
-HXLINE( 390)							handleCaps(caps);
+HXLINE( 406)							handleCaps(caps);
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 362)					 ::Dynamic handleCaps =  ::Dynamic(new _hx_Closure_16(chat,stanza));
-HXLINE( 367)					::thenshim::_Promise::Promise_Impl__obj::then(_gthis->capsRepo->getAsync(presence), ::Dynamic(new _hx_Closure_18(_gthis,presence,handleCaps,stanza)),null());
+HXLINE( 378)					 ::Dynamic handleCaps =  ::Dynamic(new _hx_Closure_16(chat,stanza));
+HXLINE( 383)					::thenshim::_Promise::Promise_Impl__obj::then(_gthis->capsRepo->getAsync(presence), ::Dynamic(new _hx_Closure_18(_gthis,presence,handleCaps,stanza)),null());
             				}
-HXLINE( 394)				 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE( 395)				::String avatarSha1Hex = presence->findText(HX_("{vcard-temp:x:update}x/photo#",f6,a1,33,28));
-HXDLIN( 395)				 ::borogove::Hash avatarSha1;
-HXDLIN( 395)				bool avatarSha11;
-HXDLIN( 395)				if (::hx::IsNotNull( avatarSha1Hex )) {
-HXLINE( 395)					avatarSha11 = (avatarSha1Hex == HX_("",00,00,00,00));
+HXLINE( 410)				 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE( 411)				::String avatarSha1Hex = presence->findText(HX_("{vcard-temp:x:update}x/photo#",f6,a1,33,28));
+HXDLIN( 411)				 ::borogove::Hash avatarSha1;
+HXDLIN( 411)				bool avatarSha11;
+HXDLIN( 411)				if (::hx::IsNotNull( avatarSha1Hex )) {
+HXLINE( 411)					avatarSha11 = (avatarSha1Hex == HX_("",00,00,00,00));
             				}
             				else {
-HXLINE( 395)					avatarSha11 = true;
+HXLINE( 411)					avatarSha11 = true;
             				}
-HXDLIN( 395)				if (avatarSha11) {
-HXLINE( 395)					avatarSha1 = null();
+HXDLIN( 411)				if (avatarSha11) {
+HXLINE( 411)					avatarSha1 = null();
             				}
             				else {
-HXLINE( 395)					avatarSha1 = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
+HXLINE( 411)					avatarSha1 = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
             				}
-HXLINE( 396)				bool _hx_tmp5;
-HXDLIN( 396)				bool _hx_tmp6;
-HXDLIN( 396)				if (::hx::IsNotNull( channel )) {
-HXLINE( 396)					_hx_tmp6 = ::hx::IsNotNull( avatarSha1 );
+HXLINE( 412)				bool _hx_tmp5;
+HXDLIN( 412)				bool _hx_tmp6;
+HXDLIN( 412)				if (::hx::IsNotNull( channel )) {
+HXLINE( 412)					_hx_tmp6 = ::hx::IsNotNull( avatarSha1 );
             				}
             				else {
-HXLINE( 396)					_hx_tmp6 = false;
+HXLINE( 412)					_hx_tmp6 = false;
             				}
-HXDLIN( 396)				if (_hx_tmp6) {
-HXLINE( 396)					::Dynamic this1 = _gthis->brokenAvatars;
-HXDLIN( 396)					_hx_tmp5 = ::hx::IsNull( ( ( ::haxe::ds::StringMap)(this1) )->get(avatarSha1->toHex()) );
+HXDLIN( 412)				if (_hx_tmp6) {
+HXLINE( 412)					::Dynamic this1 = _gthis->brokenAvatars;
+HXDLIN( 412)					_hx_tmp5 = ::hx::IsNull( ( ( ::haxe::ds::StringMap)(this1) )->get(avatarSha1->toHex()) );
             				}
             				else {
-HXLINE( 396)					_hx_tmp5 = false;
+HXLINE( 412)					_hx_tmp5 = false;
             				}
-HXDLIN( 396)				if (_hx_tmp5) {
+HXDLIN( 412)				if (_hx_tmp5) {
             					HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_21, ::borogove::Client,_gthis, ::borogove::Hash,avatarSha1, ::borogove::JID,from,::Dynamic,persistence, ::borogove::Chat,chat) HXARGC(1)
-            					void _hx_run(bool has){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_402_new)
-HXLINE( 402)						if (has) {
-HXLINE( 403)							if (chat->livePresence()) {
-HXLINE( 403)								_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+            					void _hx_run(::String has){
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_418_new)
+HXLINE( 418)						if (::hx::IsNotNull( has )) {
+HXLINE( 419)							if (chat->livePresence()) {
+HXLINE( 419)								_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             							}
             						}
             						else {
             							HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_20, ::borogove::Client,_gthis, ::borogove::Hash,avatarSha1, ::borogove::queries::VcardTempGet,vcardGet, ::borogove::JID,from,::Dynamic,persistence, ::borogove::Chat,chat) HXARGC(0)
             							void _hx_run(){
             								HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_19, ::borogove::Client,_gthis, ::borogove::Chat,chat) HXARGC(1)
-            								 ::borogove::EventResult _hx_run(bool _){
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_412_new)
-HXLINE( 412)									return _gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+            								 ::borogove::EventResult _hx_run(::String _){
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_428_new)
+HXLINE( 428)									return _gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_406_new)
-HXLINE( 407)								 ::Dynamic vcard = vcardGet->getResult();
-HXLINE( 408)								if (::hx::IsNull( vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic) )) {
-HXLINE( 409)									{
-HXLINE( 409)										::Dynamic this1 = _gthis->brokenAvatars;
-HXDLIN( 409)										::String k = avatarSha1->toHex();
-HXDLIN( 409)										( ( ::haxe::ds::StringMap)(this1) )->set(k,from);
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_422_new)
+HXLINE( 423)								 ::Dynamic vcard = vcardGet->getResult();
+HXLINE( 424)								if (::hx::IsNull( vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic) )) {
+HXLINE( 425)									{
+HXLINE( 425)										::Dynamic this1 = _gthis->brokenAvatars;
+HXDLIN( 425)										::String k = avatarSha1->toHex();
+HXDLIN( 425)										( ( ::haxe::ds::StringMap)(this1) )->set(k,from);
             									}
-HXLINE( 410)									return;
+HXLINE( 426)									return;
             								}
-HXLINE( 412)								::String tmp = ( (::String)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)) );
-HXDLIN( 412)								::String _hx_tmp;
-HXDLIN( 412)								if (::hx::IsNotNull( tmp )) {
-HXLINE( 412)									_hx_tmp = tmp;
+HXLINE( 428)								::Dynamic persistence1 = persistence;
+HXDLIN( 428)								::String _hx_tmp;
+HXDLIN( 428)								::String tmp = ( (::String)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)) );
+HXDLIN( 428)								if (::hx::IsNotNull( tmp )) {
+HXLINE( 428)									_hx_tmp = tmp;
             								}
             								else {
-HXLINE( 412)									_hx_tmp = HX_("image/png",b5,cc,c1,16);
+HXLINE( 428)									_hx_tmp = HX_("image/png",b5,cc,c1,16);
             								}
-HXDLIN( 412)								::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(persistence,_hx_tmp,( ( ::haxe::io::Bytes)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) )->b), ::Dynamic(new _hx_Closure_19(_gthis,chat)),null());
+HXDLIN( 428)								::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(persistence1,_hx_tmp,::borogove::_Source::Source_Impl__obj::ofTinkSource( ::tink::streams::Single_obj::__alloc( HX_CTX , ::tink::core::_Lazy::LazyConst_obj::__alloc( HX_CTX ,::tink::chunk::ByteChunk_obj::of(( ( ::haxe::io::Bytes)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) )))))), ::Dynamic(new _hx_Closure_19(_gthis,chat)),null());
             							}
             							HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 405)							 ::borogove::queries::VcardTempGet vcardGet =  ::borogove::queries::VcardTempGet_obj::__alloc( HX_CTX ,from);
-HXLINE( 406)							vcardGet->onFinished( ::Dynamic(new _hx_Closure_20(_gthis,avatarSha1,vcardGet,from,persistence,chat)));
-HXLINE( 416)							_gthis->sendQueryLazy(vcardGet);
+HXLINE( 421)							 ::borogove::queries::VcardTempGet vcardGet =  ::borogove::queries::VcardTempGet_obj::__alloc( HX_CTX ,from);
+HXLINE( 422)							vcardGet->onFinished( ::Dynamic(new _hx_Closure_20(_gthis,avatarSha1,vcardGet,from,persistence,chat)));
+HXLINE( 432)							_gthis->sendQueryLazy(vcardGet);
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 397)					if (from->isBare()) {
-HXLINE( 398)						chat->setAvatarSha1(avatarSha1->hash);
-HXLINE( 399)						::Dynamic persistence1 = persistence;
-HXDLIN( 399)						::String _hx_tmp7 = _gthis->accountId();
-HXDLIN( 399)						::borogove::Persistence_obj::storeChats(persistence1,_hx_tmp7,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE( 413)					if (from->isBare()) {
+HXLINE( 414)						chat->setAvatarSha1(avatarSha1->hash);
+HXLINE( 415)						::Dynamic persistence1 = persistence;
+HXDLIN( 415)						::String _hx_tmp7 = _gthis->accountId();
+HXDLIN( 415)						::borogove::Persistence_obj::storeChats(persistence1,_hx_tmp7,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
             					}
-HXLINE( 401)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(persistence,HX_("sha-1",90,a8,1c,7c),avatarSha1->hash), ::Dynamic(new _hx_Closure_21(_gthis,avatarSha1,from,persistence,chat)),null());
+HXLINE( 417)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(persistence,avatarSha1), ::Dynamic(new _hx_Closure_21(_gthis,avatarSha1,from,persistence,chat)),null());
             				}
-HXLINE( 420)				return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE( 436)				return ::borogove::EventResult_obj::EventHandled_dyn();
             			}
-HXLINE( 423)			bool _hx_tmp8;
-HXDLIN( 423)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 423)				_hx_tmp8 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("unavailable",50,e0,29,fd));
+HXLINE( 439)			bool _hx_tmp8;
+HXDLIN( 439)			if (::hx::IsNotNull( stanza->attr->get(HX_("from",6a,a5,c2,43)) )) {
+HXLINE( 439)				_hx_tmp8 = ::hx::IsEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("unavailable",50,e0,29,fd) );
             			}
             			else {
-HXLINE( 423)				_hx_tmp8 = false;
+HXLINE( 439)				_hx_tmp8 = false;
             			}
-HXDLIN( 423)			if (_hx_tmp8) {
-HXLINE( 424)				 ::borogove::Client _gthis2 = _gthis;
-HXDLIN( 424)				 ::borogove::Chat chat2 = _gthis2->getChat(::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->asBare()->asString());
-HXLINE( 425)				if (::hx::IsNull( chat2 )) {
-HXLINE( 426)					 ::Dynamic _hx_tmp9 = ::haxe::Log_obj::trace;
-HXDLIN( 426)					::String _hx_tmp10 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXDLIN( 426)					_hx_tmp9(_hx_tmp10,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),426,HX_("borogove.Client",18,dc,e6,c0),HX_("new",60,d0,53,00)));
-HXLINE( 427)					return ::borogove::EventResult_obj::EventUnhandled_dyn();
+HXDLIN( 439)			if (_hx_tmp8) {
+HXLINE( 440)				 ::borogove::Client _gthis2 = _gthis;
+HXDLIN( 440)				 ::borogove::Chat chat2 = _gthis2->getChat(::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)))->asBare()->asString());
+HXLINE( 441)				if (::hx::IsNull( chat2 )) {
+HXLINE( 442)					 ::Dynamic _hx_tmp9 = ::haxe::Log_obj::trace;
+HXDLIN( 442)					::String _hx_tmp10 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + stanza->attr->get(HX_("from",6a,a5,c2,43)));
+HXDLIN( 442)					_hx_tmp9(_hx_tmp10,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),442,HX_("borogove.Client",18,dc,e6,c0),HX_("new",60,d0,53,00)));
+HXLINE( 443)					return ::borogove::EventResult_obj::EventUnhandled_dyn();
             				}
-HXLINE( 429)				::String _hx_tmp11 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN( 429)				chat2->setPresence(::borogove::JID_obj::parse(_hx_tmp11)->resource,stanza,false);
-HXLINE( 430)				_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat2));
+HXLINE( 445)				::String _hx_tmp11 = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
+HXDLIN( 445)				chat2->setPresence(::borogove::JID_obj::parse(_hx_tmp11)->resource,stanza,false);
+HXLINE( 446)				_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat2));
             			}
-HXLINE( 433)			bool _hx_tmp12;
-HXDLIN( 433)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 433)				_hx_tmp12 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("subscribe",4a,0b,18,19));
+HXLINE( 449)			bool _hx_tmp12;
+HXDLIN( 449)			if (::hx::IsNotNull( stanza->attr->get(HX_("from",6a,a5,c2,43)) )) {
+HXLINE( 449)				_hx_tmp12 = ::hx::IsEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("subscribe",4a,0b,18,19) );
             			}
             			else {
-HXLINE( 433)				_hx_tmp12 = false;
-            			}
-HXDLIN( 433)			if (_hx_tmp12) {
-HXLINE( 434)				 ::borogove::JID from1 = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 435)				 ::borogove::Client _gthis3 = _gthis;
-HXDLIN( 435)				 ::borogove::Chat chat3 = _gthis3->getChat(from1->asBare()->asString());
-HXLINE( 436)				::String nick = stanza->getChildText(HX_("nick",a3,7b,05,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9));
-HXLINE( 437)				if (::hx::IsNull( chat3 )) {
+HXLINE( 449)				_hx_tmp12 = false;
+            			}
+HXDLIN( 449)			if (_hx_tmp12) {
+HXLINE( 450)				 ::borogove::JID from1 = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)));
+HXLINE( 451)				 ::borogove::Client _gthis3 = _gthis;
+HXDLIN( 451)				 ::borogove::Chat chat3 = _gthis3->getChat(from1->asBare()->asString());
+HXLINE( 452)				::String nick = stanza->getChildText(HX_("nick",a3,7b,05,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9));
+HXLINE( 453)				if (::hx::IsNull( chat3 )) {
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_22) HXARGC(1)
             					int _hx_run( ::borogove::Caps _){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_438_new)
-HXLINE( 438)						return 3;
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_454_new)
+HXLINE( 454)						return 3;
             					}
             					HX_END_LOCAL_FUNC1(return)
 
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_23,::String,nick) HXARGC(1)
             					void _hx_run( ::borogove::Chat chat){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_439_new)
-HXLINE( 439)						bool _hx_tmp;
-HXDLIN( 439)						if ((chat->displayName == chat->chatId)) {
-HXLINE( 439)							_hx_tmp = ::hx::IsNotNull( nick );
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_455_new)
+HXLINE( 455)						bool _hx_tmp;
+HXDLIN( 455)						if ((chat->displayName == chat->chatId)) {
+HXLINE( 455)							_hx_tmp = ::hx::IsNotNull( nick );
             						}
             						else {
-HXLINE( 439)							_hx_tmp = false;
+HXLINE( 455)							_hx_tmp = false;
             						}
-HXDLIN( 439)						if (_hx_tmp) {
-HXLINE( 439)							chat->displayName = nick;
+HXDLIN( 455)						if (_hx_tmp) {
+HXLINE( 455)							chat->displayName = nick;
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 438)					 ::borogove::Client _gthis4 = _gthis;
-HXDLIN( 438)					_gthis4->startChatWith(from1->asBare()->asString(), ::Dynamic(new _hx_Closure_22()), ::Dynamic(new _hx_Closure_23(nick)));
+HXLINE( 454)					 ::borogove::Client _gthis4 = _gthis;
+HXDLIN( 454)					_gthis4->startChatWith(from1->asBare()->asString(), ::Dynamic(new _hx_Closure_22()), ::Dynamic(new _hx_Closure_23(nick)));
             				}
             				else {
-HXLINE( 441)					if ((chat3->uiState == 2)) {
-HXLINE( 442)						chat3->uiState = 3;
-HXLINE( 443)						bool _hx_tmp13;
-HXDLIN( 443)						if ((chat3->displayName == chat3->chatId)) {
-HXLINE( 443)							_hx_tmp13 = ::hx::IsNotNull( nick );
+HXLINE( 457)					if ((chat3->uiState == 2)) {
+HXLINE( 458)						chat3->uiState = 3;
+HXLINE( 459)						bool _hx_tmp13;
+HXDLIN( 459)						if ((chat3->displayName == chat3->chatId)) {
+HXLINE( 459)							_hx_tmp13 = ::hx::IsNotNull( nick );
             						}
             						else {
-HXLINE( 443)							_hx_tmp13 = false;
+HXLINE( 459)							_hx_tmp13 = false;
             						}
-HXDLIN( 443)						if (_hx_tmp13) {
-HXLINE( 443)							chat3->displayName = nick;
+HXDLIN( 459)						if (_hx_tmp13) {
+HXLINE( 459)							chat3->displayName = nick;
             						}
             					}
             				}
             			}
-HXLINE( 447)			bool _hx_tmp14;
-HXDLIN( 447)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 447)				_hx_tmp14 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73));
+HXLINE( 463)			bool _hx_tmp14;
+HXDLIN( 463)			if (::hx::IsNotNull( stanza->attr->get(HX_("from",6a,a5,c2,43)) )) {
+HXLINE( 463)				_hx_tmp14 = ::hx::IsEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) );
             			}
             			else {
-HXLINE( 447)				_hx_tmp14 = false;
+HXLINE( 463)				_hx_tmp14 = false;
             			}
-HXDLIN( 447)			if (_hx_tmp14) {
-HXLINE( 448)				 ::borogove::JID from2 = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 449)				 ::borogove::Client _gthis5 = _gthis;
-HXLINE( 450)				 ::borogove::Channel channel1 = ( ( ::borogove::Channel)(::Std_obj::downcast(_gthis5->getChat(from2->asBare()->asString()),::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE( 451)				bool _hx_tmp15;
-HXDLIN( 451)				if (::hx::IsNotNull( channel1 )) {
-HXLINE( 451)					::String _hx_tmp16 = from2->asString();
-HXDLIN( 451)					_hx_tmp15 = (_hx_tmp16 == channel1->getFullJid()->asString());
+HXDLIN( 463)			if (_hx_tmp14) {
+HXLINE( 464)				 ::borogove::JID from2 = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)));
+HXLINE( 465)				 ::borogove::Client _gthis5 = _gthis;
+HXLINE( 466)				 ::borogove::Channel channel1 = ( ( ::borogove::Channel)(::Std_obj::downcast(_gthis5->getChat(from2->asBare()->asString()),::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE( 467)				bool _hx_tmp15;
+HXDLIN( 467)				if (::hx::IsNotNull( channel1 )) {
+HXLINE( 467)					::String _hx_tmp16 = from2->asString();
+HXDLIN( 467)					_hx_tmp15 = (_hx_tmp16 == channel1->getFullJid()->asString());
             				}
             				else {
-HXLINE( 451)					_hx_tmp15 = false;
+HXLINE( 467)					_hx_tmp15 = false;
             				}
-HXDLIN( 451)				if (_hx_tmp15) {
-HXLINE( 452)					::haxe::Log_obj::trace(HX_("Join failed",13,b3,f3,d3), ::Dynamic(::hx::Anon_obj::Create(5)
+HXDLIN( 467)				if (_hx_tmp15) {
+HXLINE( 468)					::haxe::Log_obj::trace(HX_("Join failed",13,b3,f3,d3), ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,channel1->chatId)->init(1,stanza))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("new",60,d0,53,00))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),452)));
-HXLINE( 453)					channel1->joinFailed = stanza;
-HXLINE( 454)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,channel1));
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),468)));
+HXLINE( 469)					channel1->joinFailed = stanza;
+HXLINE( 470)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,channel1));
             				}
             			}
-HXLINE( 458)			return ::borogove::EventResult_obj::EventUnhandled_dyn();
+HXLINE( 474)			return ::borogove::EventResult_obj::EventUnhandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_62_new)
-HXLINE(1640)		this->queriesToSend = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1639)		this->lazyQueryTimer = null();
-HXLINE(1243)		this->enabledPushData = null();
-HXLINE( 125)		this->firstSync = true;
-HXLINE( 124)		this->inSync = false;
-HXLINE( 112)		this->encryptionPolicy =  ::borogove::EncryptionPolicy_obj::__alloc( HX_CTX ,true,true,true);
-HXLINE( 110)		this->brokenAvatars =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 109)		this->pendingCaps =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 108)		this->sortId = HX_("a ",9f,54,00,00);
-HXLINE( 107)		this->fastCount = null();
-HXLINE( 106)		this->token = null();
-HXLINE( 105)		this->fastMechanism = null();
-HXLINE(  76)		this->caps =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("https://borogove.dev",57,2d,84,ed),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_32,16),::Array_obj< ::Dynamic>::__new(0),null());
-HXLINE(  72)		this->chats = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(  67)		this->sendAvailable = true;
-HXLINE( 133)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 134)		bool _hx_tmp;
-HXDLIN( 134)		if (::hx::IsNotNull( accountId )) {
-HXLINE( 134)			_hx_tmp = (accountId == HX_("",00,00,00,00));
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_61_new)
+HXLINE(2089)		this->queriesToSend = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2088)		this->lazyQueryTimer = null();
+HXLINE(1603)		this->enabledPushData = null();
+HXLINE( 132)		this->firstSync = true;
+HXLINE( 131)		this->inSync = false;
+HXLINE( 124)		this->brokenAvatars =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 123)		this->pendingCaps =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 122)		this->rosterVer = null();
+HXLINE( 121)		this->sortId = HX_("a ",9f,54,00,00);
+HXLINE( 119)		this->fastCount = null();
+HXLINE( 118)		this->token = null();
+HXLINE( 117)		this->fastMechanism = null();
+HXLINE(  88)		this->caps =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("https://borogove.dev",57,2d,84,ed),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_32,16),::Array_obj< ::Dynamic>::__new(0),null());
+HXLINE(  84)		this->chatsIndex =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(  83)		this->chats = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(  73)		this->outgoingE2EEPreference = ::Array_obj< int >::fromData( _hx_array_data_c0e6dc18_33,1);
+HXLINE(  71)		this->blockIncomingWithoutE2EE = false;
+HXLINE(  66)		this->sendAvailable = true;
+HXLINE( 142)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 143)		bool _hx_tmp;
+HXDLIN( 143)		if (::hx::IsNotNull( accountId )) {
+HXLINE( 143)			_hx_tmp = (accountId == HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 134)			_hx_tmp = true;
+HXLINE( 143)			_hx_tmp = true;
             		}
-HXDLIN( 134)		if (_hx_tmp) {
-HXLINE( 135)			HX_STACK_DO_THROW(HX_("accountId cannot be empty",f5,9e,fd,03));
+HXDLIN( 143)		if (_hx_tmp) {
+HXLINE( 144)			HX_STACK_DO_THROW(HX_("accountId cannot be empty",f5,9e,fd,03));
             		}
-HXLINE( 139)		 ::sys::thread::EventLoop mainLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
-HXLINE( 141)		::hx::TCast<  ::thenshim::fallback::FallbackPromiseFactory >::cast(::thenshim::_Promise::Promise_Impl__obj::factory)->scheduler->addNext = mainLoop->run_dyn();
-HXLINE( 143)		super::__construct();
-HXLINE( 144)		this->capsRepo =  ::borogove::CapsRepo_obj::__alloc( HX_CTX ,persistence);
-HXLINE( 145)		this->jid = ::borogove::JID_obj::parse(accountId);
-HXLINE( 146)		::String tmp = this->jid->node;
-HXDLIN( 146)		::String _hx_tmp1;
-HXDLIN( 146)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 146)			_hx_tmp1 = tmp;
+HXLINE( 148)		 ::sys::thread::EventLoop mainLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
+HXLINE( 150)		::hx::TCast<  ::thenshim::fallback::FallbackPromiseFactory >::cast(::thenshim::_Promise::Promise_Impl__obj::factory)->scheduler->addNext = mainLoop->run_dyn();
+HXLINE( 152)		super::__construct();
+HXLINE( 153)		this->capsRepo =  ::borogove::CapsRepo_obj::__alloc( HX_CTX ,persistence);
+HXLINE( 154)		this->jid = ::borogove::JID_obj::parse(accountId);
+HXLINE( 155)		::String tmp = this->jid->node;
+HXDLIN( 155)		::String _hx_tmp1;
+HXDLIN( 155)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 155)			_hx_tmp1 = tmp;
             		}
             		else {
-HXLINE( 146)			_hx_tmp1 = this->jid->asString();
-            		}
-HXDLIN( 146)		this->_displayName = _hx_tmp1;
-HXLINE( 147)		this->persistence = persistence;
-HXLINE( 151)		this->stream =  ::borogove::streams::XmppStropheStream_obj::__alloc( HX_CTX );
-HXLINE( 152)		this->stream->on(HX_("status/online",10,05,0e,d2),this->onConnected_dyn());
-HXLINE( 153)		this->stream->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 157)		this->stream->on(HX_("fast-token",48,5f,c2,26), ::Dynamic(new _hx_Closure_1(_gthis,persistence)));
-HXLINE( 163)		this->on(HX_("chats/update",3d,8e,1d,14), ::Dynamic(new _hx_Closure_2(_gthis)));
-HXLINE( 168)		this->stream->on(HX_("sm/update",1e,16,63,46), ::Dynamic(new _hx_Closure_3(_gthis,persistence)));
-HXLINE( 173)		this->stream->on(HX_("sm/ack",14,b2,12,dd), ::Dynamic(new _hx_Closure_6(_gthis,persistence)));
-HXLINE( 183)		this->stream->on(HX_("sm/fail",b3,aa,95,96), ::Dynamic(new _hx_Closure_9(_gthis,persistence)));
-HXLINE( 193)		this->stream->on(HX_("message",c7,35,11,9a), ::Dynamic(new _hx_Closure_10(_gthis)));
-HXLINE( 226)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7), ::Dynamic(new _hx_Closure_11(_gthis)));
-HXLINE( 278)		this->stream->onIq(::borogove::IqRequestType_obj::Get_dyn(),HX_("query",08,8b,ea,5d),HX_("http://jabber.org/protocol/disco#info",cb,2b,7f,0b), ::Dynamic(new _hx_Closure_12(_gthis)));
-HXLINE( 282)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("query",08,8b,ea,5d),HX_("jabber:iq:roster",47,76,6e,06), ::Dynamic(new _hx_Closure_13(_gthis,persistence)));
-HXLINE( 309)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_14(_gthis)));
-HXLINE( 324)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_15(_gthis)));
-HXLINE( 347)		this->stream->on(HX_("presence",3b,52,d7,66), ::Dynamic(new _hx_Closure_24(_gthis,persistence)));
+HXLINE( 155)			_hx_tmp1 = this->jid->asString();
+            		}
+HXDLIN( 155)		this->_displayName = _hx_tmp1;
+HXLINE( 156)		this->persistence = persistence;
+HXLINE( 160)		this->stream =  ::borogove::streams::XmppStropheStream_obj::__alloc( HX_CTX );
+HXLINE( 161)		this->channelPinger =  ::borogove::ChannelPinger_obj::__alloc( HX_CTX ,null());
+HXLINE( 162)		this->stream->on(HX_("status/online",10,05,0e,d2),this->onConnected_dyn());
+HXLINE( 163)		this->stream->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 168)		this->stream->on(HX_("fast-token",48,5f,c2,26), ::Dynamic(new _hx_Closure_1(_gthis,persistence)));
+HXLINE( 174)		this->on(HX_("chats/update",3d,8e,1d,14), ::Dynamic(new _hx_Closure_2(_gthis)));
+HXLINE( 179)		this->stream->on(HX_("sm/update",1e,16,63,46), ::Dynamic(new _hx_Closure_3(_gthis,persistence)));
+HXLINE( 184)		this->stream->on(HX_("sm/ack",14,b2,12,dd), ::Dynamic(new _hx_Closure_6(_gthis,persistence)));
+HXLINE( 194)		this->stream->on(HX_("sm/fail",b3,aa,95,96), ::Dynamic(new _hx_Closure_9(_gthis,persistence)));
+HXLINE( 204)		this->stream->on(HX_("message",c7,35,11,9a), ::Dynamic(new _hx_Closure_10(_gthis)));
+HXLINE( 238)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7), ::Dynamic(new _hx_Closure_11(_gthis)));
+HXLINE( 290)		this->stream->onIq(::borogove::IqRequestType_obj::Get_dyn(),HX_("query",08,8b,ea,5d),HX_("http://jabber.org/protocol/disco#info",cb,2b,7f,0b), ::Dynamic(new _hx_Closure_12(_gthis)));
+HXLINE( 294)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("query",08,8b,ea,5d),HX_("jabber:iq:roster",47,76,6e,06), ::Dynamic(new _hx_Closure_13(_gthis,persistence)));
+HXLINE( 325)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_14(_gthis)));
+HXLINE( 340)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_15(_gthis)));
+HXLINE( 363)		this->stream->on(HX_("presence",3b,52,d7,66), ::Dynamic(new _hx_Closure_24(_gthis,persistence)));
             	}
 
 Dynamic Client_obj::__CreateEmpty() { return new Client_obj; }
@@ -1448,342 +1566,446 @@ HXDLIN( 437)		this->sendAvailable = value;
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,set_sendAvailable__fromC,(void))
 
+bool Client_obj::blockIncomingWithoutE2EE__fromC(){
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_478_blockIncomingWithoutE2EE__fromC)
+HXDLIN( 478)		return this->blockIncomingWithoutE2EE;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Client_obj,blockIncomingWithoutE2EE__fromC,return )
+
+void Client_obj::set_blockIncomingWithoutE2EE__fromC(bool value){
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_489_set_blockIncomingWithoutE2EE__fromC)
+HXDLIN( 489)		this->blockIncomingWithoutE2EE = value;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Client_obj,set_blockIncomingWithoutE2EE__fromC,(void))
+
 void Client_obj::processLiveMessage( ::borogove::Stanza stanza, ::borogove::Stanza fwd, ::borogove::EncryptionInfo encryptionInfo){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis,::Array< ::Dynamic>,newChat) HXARGC(2)
             		 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_474_processLiveMessage)
-HXLINE( 475)			 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 475)			 ::borogove::Chat chat = _gthis1->getChat(builder->chatId());
-HXLINE( 476)			bool isNewChat = ::hx::IsNull( chat );
-HXLINE( 477)			bool message;
-HXDLIN( 477)			if (::hx::IsNull( chat )) {
-HXLINE( 477)				message = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) != HX_("groupchat",97,1d,c8,e5));
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_494_processLiveMessage)
+HXLINE( 495)			 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 495)			 ::borogove::Chat chat = _gthis1->getChat(builder->chatId());
+HXLINE( 496)			bool isNewChat = ::hx::IsNull( chat );
+HXLINE( 497)			bool message;
+HXDLIN( 497)			if (::hx::IsNull( chat )) {
+HXLINE( 497)				message = ::hx::IsNotEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("groupchat",97,1d,c8,e5) );
             			}
             			else {
-HXLINE( 477)				message = false;
+HXLINE( 497)				message = false;
             			}
-HXDLIN( 477)			if (message) {
-HXLINE( 477)				 ::borogove::Client _gthis2 = _gthis;
-HXDLIN( 477)				chat = _gthis2->getDirectChat(builder->chatId(),false);
+HXDLIN( 497)			if (message) {
+HXLINE( 497)				 ::borogove::Client _gthis2 = _gthis;
+HXDLIN( 497)				chat = _gthis2->getDirectChat(builder->chatId(),false);
             			}
-HXLINE( 478)			if (isNewChat) {
-HXLINE( 478)				newChat[0] = chat;
+HXLINE( 498)			if (isNewChat) {
+HXLINE( 498)				newChat[0] = chat;
             			}
-HXLINE( 479)			if (::hx::IsNull( chat )) {
-HXLINE( 479)				return builder;
+HXLINE( 499)			if (::hx::IsNull( chat )) {
+HXLINE( 499)				return builder;
             			}
-HXLINE( 480)			return chat->prepareIncomingMessage(builder,stanza);
+HXLINE( 500)			return chat->prepareIncomingMessage(builder,stanza);
             		}
             		HX_END_LOCAL_FUNC2(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_463_processLiveMessage)
-HXDLIN( 463)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 464)		 ::borogove::JID from;
-HXDLIN( 464)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 464)			from = null();
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_479_processLiveMessage)
+HXDLIN( 479)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 480)		 ::borogove::JID from;
+HXDLIN( 480)		if (::hx::IsNull( stanza->attr->get(HX_("from",6a,a5,c2,43)) )) {
+HXLINE( 480)			from = null();
             		}
             		else {
-HXLINE( 464)			from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE( 480)			from = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)));
             		}
-HXLINE( 466)		bool _hx_tmp;
-HXDLIN( 466)		if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE( 466)			_hx_tmp = ::hx::IsNotNull( from );
+HXLINE( 482)		bool _hx_tmp;
+HXDLIN( 482)		if (::hx::IsEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) )) {
+HXLINE( 482)			_hx_tmp = ::hx::IsNotNull( from );
             		}
             		else {
-HXLINE( 466)			_hx_tmp = false;
+HXLINE( 482)			_hx_tmp = false;
             		}
-HXDLIN( 466)		if (_hx_tmp) {
-HXLINE( 468)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(this->getChat(from->asBare()->asString()),::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE( 469)			if (::hx::IsNotNull( channel )) {
-HXLINE( 469)				channel->selfPing(true);
+HXDLIN( 482)		if (_hx_tmp) {
+HXLINE( 484)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(this->getChat(from->asBare()->asString()),::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE( 485)			if (::hx::IsNotNull( channel )) {
+HXLINE( 485)				channel->selfPing(true);
             			}
             		}
-HXLINE( 472)		::Array< ::Dynamic> newChat = ::Array_obj< ::Dynamic>::__new(1)->init(0,null());
-HXLINE( 474)		 ::borogove::Message message = ::borogove::Message_obj::fromStanza(stanza,this->jid, ::Dynamic(new _hx_Closure_0(_gthis,newChat)),encryptionInfo,null());
-HXLINE( 483)		{
-HXLINE( 483)			 ::borogove::MessageStanza _g = message->parsed;
-HXDLIN( 483)			switch((int)(_g->_hx_getIndex())){
+HXLINE( 487)		bool _hx_tmp1;
+HXDLIN( 487)		if (::hx::IsNotEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) )) {
+HXLINE( 487)			_hx_tmp1 = ::hx::IsNotNull( from );
+            		}
+            		else {
+HXLINE( 487)			_hx_tmp1 = false;
+            		}
+HXDLIN( 487)		if (_hx_tmp1) {
+HXLINE( 488)			 ::borogove::Channel channel1 = ( ( ::borogove::Channel)(::Std_obj::downcast(this->getChat(from->asBare()->asString()),::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE( 489)			if (::hx::IsNotNull( channel1 )) {
+HXLINE( 489)				this->channelPinger->schedule(channel1,null());
+            			}
+            		}
+HXLINE( 492)		::Array< ::Dynamic> newChat = ::Array_obj< ::Dynamic>::__new(1)->init(0,null());
+HXLINE( 494)		 ::borogove::Message message = ::borogove::Message_obj::fromStanza(stanza,this->jid, ::Dynamic(new _hx_Closure_0(_gthis,newChat)),encryptionInfo,null());
+HXLINE( 503)		{
+HXLINE( 503)			 ::borogove::MessageStanza _g = message->parsed;
+HXDLIN( 503)			switch((int)(_g->_hx_getIndex())){
             				case (int)0: {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis) HXARGC(1)
             					void _hx_run( ::borogove::ChatMessage m){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_527_processLiveMessage)
-HXLINE( 527)						_gthis->notifyMessageHandlers(m,3);
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_571_processLiveMessage)
+HXLINE( 571)						_gthis->notifyMessageHandlers(m,3);
             					}
             					HX_END_LOCAL_FUNC1((void))
 
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             					::Dynamic _hx_run( ::Dynamic _){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_527_processLiveMessage)
-HXLINE( 527)						return null();
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_571_processLiveMessage)
+HXLINE( 571)						return null();
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 522)					::Dynamic _hx_tmp1 = this->persistence;
-HXLINE( 523)					::String _hx_tmp2 = this->accountId();
-HXLINE( 522)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_hx_tmp1,_hx_tmp2,_g->_hx_getString(0),3,_g->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1(_gthis)), ::Dynamic(new _hx_Closure_2()));
-HXLINE( 528)					if (::hx::IsNotNull( newChat->__get(0).StaticCast<  ::borogove::Chat >() )) {
-HXLINE( 528)						this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,newChat->__get(0).StaticCast<  ::borogove::Chat >()));
+HXLINE( 566)					::Dynamic _hx_tmp2 = this->persistence;
+HXLINE( 567)					::String _hx_tmp3 = this->accountId();
+HXLINE( 566)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_hx_tmp2,_hx_tmp3,_g->_hx_getString(0),3,_g->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1(_gthis)), ::Dynamic(new _hx_Closure_2()));
+HXLINE( 572)					if (::hx::IsNotNull( newChat->__get(0).StaticCast<  ::borogove::Chat >() )) {
+HXLINE( 572)						this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,newChat->__get(0).StaticCast<  ::borogove::Chat >()));
             					}
             				}
             				break;
             				case (int)1: {
-HXLINE( 484)					 ::borogove::ChatMessage _g1 = _g->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 484)					{
-HXLINE( 485)						{
-HXLINE( 485)							int _g2 = 0;
-HXDLIN( 485)							::Array< ::Dynamic> _g3 = _g1->inlineHashReferences();
-HXDLIN( 485)							while((_g2 < _g3->length)){
-HXLINE( 485)								 ::borogove::Hash hash = _g3->__get(_g2).StaticCast<  ::borogove::Hash >();
-HXDLIN( 485)								_g2 = (_g2 + 1);
-HXLINE( 486)								this->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,_g1->from));
+HXLINE( 504)					 ::borogove::ChatMessage chatMessage = _g->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 504)					{
+HXLINE( 505)						bool _hx_tmp4;
+HXDLIN( 505)						if (this->blockIncomingWithoutE2EE) {
+HXLINE( 505)							_hx_tmp4 = ::hx::IsNull( message->encryption );
+            						}
+            						else {
+HXLINE( 505)							_hx_tmp4 = false;
+            						}
+HXDLIN( 505)						if (_hx_tmp4) {
+HXLINE( 508)							::String _hx_tmp5 = stanza->attr->get_string(HX_("id",db,5b,00,00));
+HXDLIN( 508)							 ::borogove::Stanza _hx_tmp6 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+            								->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp5)
+            								->setFixed(1,HX_("to",7b,65,00,00),stanza->attr->get(HX_("from",6a,a5,c2,43)))
+            								->setFixed(2,HX_("type",ba,f2,08,4d),HX_("error",c8,cb,29,73))),null());
+HXLINE( 509)							::String _hx_tmp7 = this->jid->asString();
+HXLINE( 507)							this->sendStanza(_hx_tmp6->tag(HX_("error",c8,cb,29,73), ::Dynamic(::hx::Anon_obj::Create(2)
+            								->setFixed(0,HX_("by",d7,55,00,00),_hx_tmp7)
+            								->setFixed(1,HX_("type",ba,f2,08,4d),HX_("cancel",7a,ed,33,b8))),null())->tag(HX_("policy-violation",4a,ce,a9,ac), ::Dynamic(::hx::Anon_obj::Create(1)
+            								->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30))),null())->up()->textTag(HX_("text",ad,cc,f9,4c),HX_("E2EE Required",12,e2,8b,1e), ::Dynamic(::hx::Anon_obj::Create(1)
+            								->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30))),null()));
+HXLINE( 513)							return;
+            						}
+HXLINE( 516)						{
+HXLINE( 516)							int _g1 = 0;
+HXDLIN( 516)							::Array< ::Dynamic> _g2 = chatMessage->inlineHashReferences();
+HXDLIN( 516)							while((_g1 < _g2->length)){
+HXLINE( 516)								 ::borogove::Hash hash = _g2->__get(_g1).StaticCast<  ::borogove::Hash >();
+HXDLIN( 516)								_g1 = (_g1 + 1);
+HXLINE( 517)								this->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,chatMessage->from));
             							}
             						}
-HXLINE( 488)						 ::borogove::Chat chat = this->getChat(_g1->chatId());
-HXLINE( 489)						if (::hx::IsNotNull( chat )) {
+HXLINE( 519)						 ::borogove::Chat chat = this->getChat(chatMessage->chatId());
+HXLINE( 520)						if (::hx::IsNotNull( chat )) {
             							HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_4, ::borogove::Client,_gthis, ::borogove::Chat,chat,::Array< ::Dynamic>,newChat) HXARGC(1)
             							::Dynamic _hx_run( ::borogove::ChatMessage chatMessage){
-            								HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_3,int,eventType, ::borogove::Client,_gthis, ::borogove::Chat,chat, ::borogove::ChatMessage,chatMessage,::Array< ::Dynamic>,newChat) HXARGC(1)
+            								HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_3,int,eventType, ::borogove::Client,_gthis,bool,canReplaceLast, ::borogove::Chat,chat, ::borogove::ChatMessage,chatMessage,::Array< ::Dynamic>,newChat) HXARGC(1)
             								void _hx_run( ::Dynamic _){
-            									HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_495_processLiveMessage)
-HXLINE( 496)									_gthis->notifyMessageHandlers(chatMessage,eventType);
-HXLINE( 498)									if ((eventType == 0)) {
-HXLINE( 499)										 ::borogove::Chat chat1 = chat;
-HXDLIN( 499)										int updateChat;
-HXDLIN( 499)										if (chatMessage->isIncoming()) {
-HXLINE( 499)											updateChat = (chat->unreadCount() + 1);
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_527_processLiveMessage)
+HXLINE( 528)									_gthis->notifyMessageHandlers(chatMessage,eventType);
+HXLINE( 530)									if ((eventType == 0)) {
+HXLINE( 531)										 ::borogove::Chat chat1 = chat;
+HXDLIN( 531)										int updateChat;
+HXDLIN( 531)										if (chatMessage->isIncoming()) {
+HXLINE( 531)											updateChat = (chat->unreadCount() + 1);
             										}
             										else {
-HXLINE( 499)											updateChat = 0;
+HXLINE( 531)											updateChat = 0;
             										}
-HXDLIN( 499)										chat1->setUnreadCount(updateChat);
-HXLINE( 500)										_gthis->chatActivity(chat,null());
+HXDLIN( 531)										chat1->setUnreadCount(updateChat);
+HXLINE( 532)										_gthis->chatActivity(chat,null());
             									}
             									else {
-HXLINE( 501)										if (::hx::IsNotNull( newChat->__get(0).StaticCast<  ::borogove::Chat >() )) {
-HXLINE( 502)											_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,newChat->__get(0).StaticCast<  ::borogove::Chat >()));
+HXLINE( 533)										bool updateChat1;
+HXDLIN( 533)										if (!(canReplaceLast)) {
+HXLINE( 533)											updateChat1 = ::hx::IsNotNull( newChat->__get(0).StaticCast<  ::borogove::Chat >() );
+            										}
+            										else {
+HXLINE( 533)											updateChat1 = true;
+            										}
+HXDLIN( 533)										if (updateChat1) {
+HXLINE( 535)											_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             										}
             									}
             								}
             								HX_END_LOCAL_FUNC1((void))
 
-            								HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_490_processLiveMessage)
-HXLINE( 491)								int eventType;
-HXDLIN( 491)								if ((chatMessage->versions->length > 1)) {
-HXLINE( 491)									eventType = 1;
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_521_processLiveMessage)
+HXLINE( 522)								int eventType;
+HXDLIN( 522)								if ((chatMessage->versions->length > 1)) {
+HXLINE( 522)									eventType = 1;
             								}
             								else {
-HXLINE( 491)									eventType = 0;
+HXLINE( 522)									eventType = 0;
             								}
-HXLINE( 492)								::Dynamic updateChat;
-HXDLIN( 492)								bool updateChat1;
-HXDLIN( 492)								bool updateChat2;
-HXDLIN( 492)								if (::hx::IsNotNull( chat->lastMessage )) {
-HXLINE( 492)									updateChat2 = (eventType == 0);
+HXLINE( 523)								bool canReplaceLast;
+HXDLIN( 523)								if (::hx::IsNotNull( chat->lastMessage )) {
+HXLINE( 523)									canReplaceLast = chatMessage->canReplace(chat->lastMessage);
             								}
             								else {
-HXLINE( 492)									updateChat2 = true;
+HXLINE( 523)									canReplaceLast = true;
             								}
-HXDLIN( 492)								if (!(updateChat2)) {
-HXLINE( 492)									updateChat1 = chatMessage->canReplace(chat->lastMessage);
+HXLINE( 524)								::Dynamic updateChat;
+HXDLIN( 524)								bool updateChat1;
+HXDLIN( 524)								if ((eventType != 0)) {
+HXLINE( 524)									updateChat1 = canReplaceLast;
             								}
             								else {
-HXLINE( 492)									updateChat1 = true;
+HXLINE( 524)									updateChat1 = true;
             								}
-HXDLIN( 492)								if (updateChat1) {
-HXLINE( 492)									updateChat = chat->setLastMessage(chatMessage);
+HXDLIN( 524)								if (updateChat1) {
+HXLINE( 524)									updateChat = chat->setLastMessage(chatMessage);
             								}
             								else {
-HXLINE( 492)									updateChat = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 524)									updateChat = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             								}
-HXDLIN( 492)								return ::thenshim::_Promise::Promise_Impl__obj::then(updateChat, ::Dynamic(new _hx_Closure_3(eventType,_gthis,chat,chatMessage,newChat)),null());
+HXDLIN( 524)								return ::thenshim::_Promise::Promise_Impl__obj::then(updateChat, ::Dynamic(new _hx_Closure_3(eventType,_gthis,canReplaceLast,chat,chatMessage,newChat)),null());
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 490)							 ::Dynamic updateChat =  ::Dynamic(new _hx_Closure_4(_gthis,chat,newChat));
-HXLINE( 506)							if (::hx::IsNull( _g1->serverId )) {
-HXLINE( 507)								updateChat(_g1);
+HXLINE( 521)							 ::Dynamic updateChat =  ::Dynamic(new _hx_Closure_4(_gthis,chat,newChat));
+HXLINE( 539)							if (::hx::IsNull( chatMessage->serverId )) {
+HXLINE( 540)								updateChat(chatMessage);
             							}
             							else {
-            								HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_5, ::Dynamic,updateChat) HXARGC(1)
-            								::Dynamic _hx_run(::Array< ::Dynamic> stored){
-            									HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_509_processLiveMessage)
-HXLINE( 509)									return updateChat(stored->__get(0).StaticCast<  ::borogove::ChatMessage >());
+            								HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_6, ::borogove::Client,_gthis, ::borogove::ChatMessage,chatMessage, ::Dynamic,updateChat) HXARGC(1)
+            								::Dynamic _hx_run(bool _){
+            									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_5, ::Dynamic,updateChat) HXARGC(1)
+            									::Dynamic _hx_run(::Array< ::Dynamic> stored){
+            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_543_processLiveMessage)
+HXLINE( 543)										return updateChat(stored->__get(0).StaticCast<  ::borogove::ChatMessage >());
+            									}
+            									HX_END_LOCAL_FUNC1(return)
+
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_543_processLiveMessage)
+HXLINE( 543)									return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,chatMessage)), ::Dynamic(new _hx_Closure_5(updateChat)),null());
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 509)								::thenshim::_Promise::Promise_Impl__obj::then(this->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,_g1)), ::Dynamic(new _hx_Closure_5(updateChat)),null());
+HXLINE( 542)								::thenshim::_Promise::Promise_Impl__obj::then(this->maybeAutodownloadAttachments(chat,chatMessage), ::Dynamic(new _hx_Closure_6(_gthis,chatMessage,updateChat)),null());
             							}
             						}
             					}
             				}
             				break;
             				case (int)2: {
-HXLINE( 532)					 ::borogove::Chat tmp = this->getChat(message->chatId);
-HXDLIN( 532)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 532)						tmp->setThreadSubject(message->threadId,_g->_hx_getString(0));
+HXLINE( 576)					 ::borogove::Chat chat1 = this->getChat(message->chatId);
+HXLINE( 577)					if (::hx::IsNotNull( chat1 )) {
+HXLINE( 578)						chat1->setThreadSubject(message->threadId,_g->_hx_getString(0));
+HXLINE( 579)						::Dynamic _hx_tmp8 = this->persistence;
+HXDLIN( 579)						::borogove::Persistence_obj::storeChats(_hx_tmp8,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
+HXLINE( 580)						this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat1));
             					}
             				}
             				break;
             				case (int)3: {
-            					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_6, ::borogove::Client,_gthis) HXARGC(1)
+            					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::borogove::Client,_gthis) HXARGC(1)
             					void _hx_run( ::borogove::ChatMessage stored){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_519_processLiveMessage)
-HXLINE( 519)						if (::hx::IsNotNull( stored )) {
-HXLINE( 519)							_gthis->notifyMessageHandlers(stored,1);
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_554_processLiveMessage)
+HXLINE( 554)						if (::hx::IsNotNull( stored )) {
+HXLINE( 555)							 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 555)							 ::borogove::Chat chat = _gthis1->getChat(stored->chatId());
+HXLINE( 556)							if (::hx::IsNotNull( chat )) {
+HXLINE( 557)								if (stored->canReplace(chat->lastMessage)) {
+HXLINE( 558)									chat->setLastMessage(stored);
+HXLINE( 559)									_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+            								}
+            							}
+HXLINE( 562)							_gthis->notifyMessageHandlers(stored,1);
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 519)					::thenshim::_Promise::Promise_Impl__obj::then(this->moderateMessage(_g->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >()), ::Dynamic(new _hx_Closure_6(_gthis)),null());
-HXLINE( 520)					if (::hx::IsNotNull( newChat->__get(0).StaticCast<  ::borogove::Chat >() )) {
-HXLINE( 520)						this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,newChat->__get(0).StaticCast<  ::borogove::Chat >()));
+HXLINE( 554)					::thenshim::_Promise::Promise_Impl__obj::then(this->moderateMessage(_g->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >()), ::Dynamic(new _hx_Closure_7(_gthis)),null());
+HXLINE( 564)					if (::hx::IsNotNull( newChat->__get(0).StaticCast<  ::borogove::Chat >() )) {
+HXLINE( 564)						this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,newChat->__get(0).StaticCast<  ::borogove::Chat >()));
             					}
             				}
             				break;
             				case (int)4: {
-HXLINE( 512)					 ::borogove::ReactionUpdate _g4 = _g->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >();
-HXDLIN( 512)					{
-            						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::borogove::Client,_gthis) HXARGC(1)
+HXLINE( 547)					 ::borogove::ReactionUpdate _g3 = _g->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >();
+HXDLIN( 547)					{
+            						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_8, ::borogove::Client,_gthis) HXARGC(1)
             						void _hx_run( ::borogove::ChatMessage stored){
-            							HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_516_processLiveMessage)
-HXLINE( 516)							if (::hx::IsNotNull( stored )) {
-HXLINE( 516)								_gthis->notifyMessageHandlers(stored,2);
+            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_551_processLiveMessage)
+HXLINE( 551)							if (::hx::IsNotNull( stored )) {
+HXLINE( 551)								_gthis->notifyMessageHandlers(stored,2);
             							}
             						}
             						HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 513)						{
-HXLINE( 513)							int _g5 = 0;
-HXDLIN( 513)							::Array< ::Dynamic> _g6 = _g4->inlineHashReferences();
-HXDLIN( 513)							while((_g5 < _g6->length)){
-HXLINE( 513)								 ::borogove::Hash hash1 = _g6->__get(_g5).StaticCast<  ::borogove::Hash >();
-HXDLIN( 513)								_g5 = (_g5 + 1);
-HXLINE( 514)								this->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash1),::Array_obj< ::Dynamic>::__new(1)->init(0,from));
+HXLINE( 548)						{
+HXLINE( 548)							int _g4 = 0;
+HXDLIN( 548)							::Array< ::Dynamic> _g5 = _g3->inlineHashReferences();
+HXDLIN( 548)							while((_g4 < _g5->length)){
+HXLINE( 548)								 ::borogove::Hash hash1 = _g5->__get(_g4).StaticCast<  ::borogove::Hash >();
+HXDLIN( 548)								_g4 = (_g4 + 1);
+HXLINE( 549)								this->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash1),::Array_obj< ::Dynamic>::__new(1)->init(0,from));
             							}
             						}
-HXLINE( 516)						::Dynamic _hx_tmp3 = this->persistence;
-HXDLIN( 516)						::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp3,this->accountId(),_g4), ::Dynamic(new _hx_Closure_7(_gthis)),null());
-HXLINE( 517)						if (::hx::IsNotNull( newChat->__get(0).StaticCast<  ::borogove::Chat >() )) {
-HXLINE( 517)							this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,newChat->__get(0).StaticCast<  ::borogove::Chat >()));
+HXLINE( 551)						::Dynamic _hx_tmp9 = this->persistence;
+HXDLIN( 551)						::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp9,this->accountId(),_g3), ::Dynamic(new _hx_Closure_8(_gthis)),null());
+HXLINE( 552)						if (::hx::IsNotNull( newChat->__get(0).StaticCast<  ::borogove::Chat >() )) {
+HXLINE( 552)							this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,newChat->__get(0).StaticCast<  ::borogove::Chat >()));
             						}
             					}
             				}
             				break;
             				case (int)5: {
-HXLINE( 530)					::String message1 = message->chatId;
-HXDLIN( 530)					 ::borogove::Chat _hx_tmp4 = this->getChat(message->chatId);
-HXDLIN( 530)					this->mucInvite(message1,_hx_tmp4,message->senderId,message->threadId,_g->_hx_getString(0),_g->_hx_getString(1),_g->_hx_getString(2),_g->_hx_getString(3));
+HXLINE( 574)					::String message1 = message->chatId;
+HXDLIN( 574)					 ::borogove::Chat _hx_tmp10 = this->getChat(message->chatId);
+HXDLIN( 574)					this->mucInvite(message1,_hx_tmp10,message->senderId,message->threadId,_g->_hx_getString(0),_g->_hx_getString(1),_g->_hx_getString(2),_g->_hx_getString(3));
+            				}
+            				break;
+            				case (int)6: {
+HXLINE( 583)					 ::borogove::Chat chat2 = this->getChat(message->chatId);
+HXLINE( 584)					 ::borogove::Channel channel2;
+HXDLIN( 584)					if (::hx::IsNull( chat2 )) {
+HXLINE( 584)						channel2 = null();
+            					}
+            					else {
+HXLINE( 584)						channel2 = ( ( ::borogove::Channel)(::borogove::_Util::Util_Fields__obj::downcast(chat2,::hx::ClassOf< ::borogove::Channel >())) );
+            					}
+HXLINE( 585)					if (::hx::IsNull( channel2 )) {
+HXLINE( 586)						 ::Dynamic _hx_tmp11 = ::haxe::Log_obj::trace;
+HXDLIN( 586)						::String _hx_tmp12 = (HX_("Ignoring voice request from unknown channel: ",0d,32,86,14) + stanza->toString());
+HXDLIN( 586)						_hx_tmp11(_hx_tmp12,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),586,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
+            					}
+            					else {
+            						HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_9, ::borogove::Client,_gthis, ::borogove::Channel,channel2) HXARGC(1)
+            						 ::borogove::EventResult _hx_run(bool _){
+            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_588_processLiveMessage)
+HXLINE( 588)							return _gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,channel2));
+            						}
+            						HX_END_LOCAL_FUNC1(return)
+
+HXLINE( 588)						::Dynamic _hx_tmp13 = this->persistence;
+HXDLIN( 588)						::String _hx_tmp14 = this->accountId();
+HXDLIN( 588)						 ::borogove::Channel channel3 = channel2;
+HXDLIN( 588)						::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeVoiceRequest(_hx_tmp13,_hx_tmp14,channel3,_g->_hx_getObject(0).StaticCast<  ::borogove::JID >()->asBare()->asString(),true), ::Dynamic(new _hx_Closure_9(_gthis,channel2)),null());
+            					}
             				}
             				break;
             				default:{
-HXLINE( 535)					 ::Dynamic _hx_tmp5 = ::haxe::Log_obj::trace;
-HXDLIN( 535)					::String _hx_tmp6 = (HX_("Ignoring non-chat message: ",f6,a5,6f,ca) + stanza->toString());
-HXDLIN( 535)					_hx_tmp5(_hx_tmp6,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),535,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
-HXLINE( 536)					if (::hx::IsNotNull( newChat->__get(0).StaticCast<  ::borogove::Chat >() )) {
-HXLINE( 536)						this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,newChat->__get(0).StaticCast<  ::borogove::Chat >()));
+HXLINE( 594)					 ::Dynamic _hx_tmp15 = ::haxe::Log_obj::trace;
+HXDLIN( 594)					::String _hx_tmp16 = (HX_("Ignoring non-chat message: ",f6,a5,6f,ca) + stanza->toString());
+HXDLIN( 594)					_hx_tmp15(_hx_tmp16,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),594,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
+HXLINE( 595)					if (::hx::IsNotNull( newChat->__get(0).StaticCast<  ::borogove::Chat >() )) {
+HXLINE( 595)						this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,newChat->__get(0).StaticCast<  ::borogove::Chat >()));
             					}
             				}
             			}
             		}
-HXLINE( 539)		if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE( 539)			return;
+HXLINE( 598)		if (::hx::IsEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) )) {
+HXLINE( 598)			return;
             		}
-HXLINE( 542)		 ::borogove::Stanza jmiP = stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 543)		bool _hx_tmp7;
-HXDLIN( 543)		if (::hx::IsNotNull( jmiP )) {
-HXLINE( 543)			_hx_tmp7 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiP->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 601)		 ::borogove::Stanza jmiP = stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 602)		bool _hx_tmp17;
+HXDLIN( 602)		if (::hx::IsNotNull( jmiP )) {
+HXLINE( 602)			_hx_tmp17 = ::hx::IsNotNull( jmiP->attr->get(HX_("id",db,5b,00,00)) );
             		}
             		else {
-HXLINE( 543)			_hx_tmp7 = false;
+HXLINE( 602)			_hx_tmp17 = false;
             		}
-HXDLIN( 543)		if (_hx_tmp7) {
-HXLINE( 544)			 ::borogove::calls::IncomingProposedSession session =  ::borogove::calls::IncomingProposedSession_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),from,( (::String)(::Reflect_obj::field(jmiP->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 545)			 ::borogove::DirectChat chat1 = this->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 546)			::Dynamic this1 = chat1->jingleSessions;
-HXDLIN( 546)			if (!(( ( ::haxe::ds::StringMap)(this1) )->exists(session->get_sid()))) {
-HXLINE( 547)				{
-HXLINE( 547)					::Dynamic this2 = chat1->jingleSessions;
-HXDLIN( 547)					( ( ::haxe::ds::StringMap)(this2) )->set(session->get_sid(),session);
+HXDLIN( 602)		if (_hx_tmp17) {
+HXLINE( 603)			 ::borogove::calls::IncomingProposedSession session =  ::borogove::calls::IncomingProposedSession_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),from,jmiP->attr->get_string(HX_("id",db,5b,00,00)));
+HXLINE( 604)			 ::borogove::DirectChat chat3 = this->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 605)			::Dynamic this1 = chat3->jingleSessions;
+HXDLIN( 605)			if (!(( ( ::haxe::ds::StringMap)(this1) )->exists(session->get_sid()))) {
+HXLINE( 606)				{
+HXLINE( 606)					::Dynamic this2 = chat3->jingleSessions;
+HXDLIN( 606)					( ( ::haxe::ds::StringMap)(this2) )->set(session->get_sid(),session);
             				}
-HXLINE( 548)				this->chatActivity(chat1,null());
-HXLINE( 549)				session->ring();
+HXLINE( 607)				this->chatActivity(chat3,null());
+HXLINE( 608)				session->ring();
             			}
             		}
-HXLINE( 553)		 ::borogove::Stanza jmiR = stanza->getChild(HX_("retract",01,e2,b9,fc),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 554)		bool _hx_tmp8;
-HXDLIN( 554)		if (::hx::IsNotNull( jmiR )) {
-HXLINE( 554)			_hx_tmp8 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiR->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 612)		 ::borogove::Stanza jmiR = stanza->getChild(HX_("retract",01,e2,b9,fc),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 613)		bool _hx_tmp18;
+HXDLIN( 613)		if (::hx::IsNotNull( jmiR )) {
+HXLINE( 613)			_hx_tmp18 = ::hx::IsNotNull( jmiR->attr->get(HX_("id",db,5b,00,00)) );
             		}
             		else {
-HXLINE( 554)			_hx_tmp8 = false;
+HXLINE( 613)			_hx_tmp18 = false;
             		}
-HXDLIN( 554)		if (_hx_tmp8) {
-HXLINE( 555)			 ::borogove::DirectChat chat2 = this->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 556)			::Dynamic this3 = chat2->jingleSessions;
-HXDLIN( 556)			::Dynamic session1 = ( ( ::haxe::ds::StringMap)(this3) )->get(( (::String)(::Reflect_obj::field(jmiR->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 557)			if (::hx::IsNotNull( session1 )) {
-HXLINE( 558)				::borogove::calls::Session_obj::retract(session1);
-HXLINE( 559)				{
-HXLINE( 559)					::Dynamic this4 = chat2->jingleSessions;
-HXDLIN( 559)					( ( ::haxe::ds::StringMap)(this4) )->remove(::borogove::calls::Session_obj::get_sid(session1));
+HXDLIN( 613)		if (_hx_tmp18) {
+HXLINE( 614)			 ::borogove::DirectChat chat4 = this->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 615)			::Dynamic this3 = chat4->jingleSessions;
+HXDLIN( 615)			::Dynamic session1 = ( ( ::haxe::ds::StringMap)(this3) )->get(jmiR->attr->get(HX_("id",db,5b,00,00)));
+HXLINE( 616)			if (::hx::IsNotNull( session1 )) {
+HXLINE( 617)				::borogove::calls::Session_obj::retract(session1);
+HXLINE( 618)				{
+HXLINE( 618)					::Dynamic this4 = chat4->jingleSessions;
+HXDLIN( 618)					( ( ::haxe::ds::StringMap)(this4) )->remove(::borogove::calls::Session_obj::get_sid(session1));
             				}
             			}
             		}
-HXLINE( 564)		 ::borogove::Stanza jmiProFwd;
-HXDLIN( 564)		if (::hx::IsNotNull( fwd )) {
-HXLINE( 564)			jmiProFwd = fwd->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 623)		 ::borogove::Stanza jmiProFwd;
+HXDLIN( 623)		if (::hx::IsNotNull( fwd )) {
+HXLINE( 623)			jmiProFwd = fwd->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
             		}
             		else {
-HXLINE( 564)			jmiProFwd = null();
+HXLINE( 623)			jmiProFwd = null();
             		}
-HXLINE( 565)		bool _hx_tmp9;
-HXDLIN( 565)		if (::hx::IsNotNull( jmiProFwd )) {
-HXLINE( 565)			_hx_tmp9 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiProFwd->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 624)		bool _hx_tmp19;
+HXDLIN( 624)		if (::hx::IsNotNull( jmiProFwd )) {
+HXLINE( 624)			_hx_tmp19 = ::hx::IsNotNull( jmiProFwd->attr->get(HX_("id",db,5b,00,00)) );
             		}
             		else {
-HXLINE( 565)			_hx_tmp9 = false;
+HXLINE( 624)			_hx_tmp19 = false;
             		}
-HXDLIN( 565)		if (_hx_tmp9) {
-HXLINE( 566)			 ::borogove::DirectChat chat3 = this->getDirectChat(::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(fwd->attr,HX_("to",7b,65,00,00))) ))->asBare()->asString(),null());
-HXLINE( 567)			::Dynamic this5 = chat3->jingleSessions;
-HXDLIN( 567)			::Dynamic session2 = ( ( ::haxe::ds::StringMap)(this5) )->get(( (::String)(::Reflect_obj::field(jmiProFwd->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 568)			if (::hx::IsNotNull( session2 )) {
-HXLINE( 569)				::borogove::calls::Session_obj::retract(session2);
-HXLINE( 570)				{
-HXLINE( 570)					::Dynamic this6 = chat3->jingleSessions;
-HXDLIN( 570)					( ( ::haxe::ds::StringMap)(this6) )->remove(::borogove::calls::Session_obj::get_sid(session2));
+HXDLIN( 624)		if (_hx_tmp19) {
+HXLINE( 625)			 ::borogove::DirectChat chat5 = this->getDirectChat(::borogove::JID_obj::parse(fwd->attr->get_string(HX_("to",7b,65,00,00)))->asBare()->asString(),null());
+HXLINE( 626)			::Dynamic this5 = chat5->jingleSessions;
+HXDLIN( 626)			::Dynamic session2 = ( ( ::haxe::ds::StringMap)(this5) )->get(jmiProFwd->attr->get(HX_("id",db,5b,00,00)));
+HXLINE( 627)			if (::hx::IsNotNull( session2 )) {
+HXLINE( 628)				::borogove::calls::Session_obj::retract(session2);
+HXLINE( 629)				{
+HXLINE( 629)					::Dynamic this6 = chat5->jingleSessions;
+HXDLIN( 629)					( ( ::haxe::ds::StringMap)(this6) )->remove(::borogove::calls::Session_obj::get_sid(session2));
             				}
             			}
             		}
-HXLINE( 574)		 ::borogove::Stanza jmiPro = stanza->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 575)		bool _hx_tmp10;
-HXDLIN( 575)		if (::hx::IsNotNull( jmiPro )) {
-HXLINE( 575)			_hx_tmp10 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiPro->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 633)		 ::borogove::Stanza jmiPro = stanza->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 634)		bool _hx_tmp20;
+HXDLIN( 634)		if (::hx::IsNotNull( jmiPro )) {
+HXLINE( 634)			_hx_tmp20 = ::hx::IsNotNull( jmiPro->attr->get(HX_("id",db,5b,00,00)) );
             		}
             		else {
-HXLINE( 575)			_hx_tmp10 = false;
-            		}
-HXDLIN( 575)		if (_hx_tmp10) {
-HXLINE( 576)			 ::borogove::DirectChat chat4 = this->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 577)			::Dynamic this7 = chat4->jingleSessions;
-HXDLIN( 577)			::Dynamic session3 = ( ( ::haxe::ds::StringMap)(this7) )->get(( (::String)(::Reflect_obj::field(jmiPro->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 578)			if (::hx::IsNotNull( session3 )) {
-HXLINE( 579)				try {
+HXLINE( 634)			_hx_tmp20 = false;
+            		}
+HXDLIN( 634)		if (_hx_tmp20) {
+HXLINE( 635)			 ::borogove::DirectChat chat6 = this->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 636)			::Dynamic this7 = chat6->jingleSessions;
+HXDLIN( 636)			::Dynamic session3 = ( ( ::haxe::ds::StringMap)(this7) )->get(jmiPro->attr->get(HX_("id",db,5b,00,00)));
+HXLINE( 637)			if (::hx::IsNotNull( session3 )) {
+HXLINE( 638)				try {
             					HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 580)					::Dynamic this8 = chat4->jingleSessions;
-HXDLIN( 580)					::String key = ::borogove::calls::Session_obj::get_sid(session3);
-HXDLIN( 580)					( ( ::haxe::ds::StringMap)(this8) )->set(key,::borogove::calls::Session_obj::initiate(session3,stanza));
+HXLINE( 639)					::Dynamic this8 = chat6->jingleSessions;
+HXDLIN( 639)					::String key = ::borogove::calls::Session_obj::get_sid(session3);
+HXDLIN( 639)					( ( ::haxe::ds::StringMap)(this8) )->set(key,::borogove::calls::Session_obj::initiate(session3,stanza));
             				} catch( ::Dynamic _hx_e) {
             					if (_hx_e.IsClass<  ::Dynamic >() ){
             						HX_STACK_BEGIN_CATCH
-            						 ::Dynamic _g7 = _hx_e;
-HXLINE( 581)						 ::haxe::Exception _g8 = ::haxe::Exception_obj::caught(_g7);
-HXLINE( 582)						::haxe::Log_obj::trace(HX_("JMI proceed failed",29,32,fb,3c), ::Dynamic(::hx::Anon_obj::Create(5)
+            						 ::Dynamic _g6 = _hx_e;
+HXLINE( 640)						 ::haxe::Exception _g7 = ::haxe::Exception_obj::caught(_g6);
+HXLINE( 641)						::haxe::Log_obj::trace(HX_("JMI proceed failed",29,32,fb,3c), ::Dynamic(::hx::Anon_obj::Create(5)
             							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
-            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_g8))
+            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_g7))
             							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("processLiveMessage",0c,f2,77,58))
             							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),582)));
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),641)));
             					}
             					else {
             						HX_STACK_DO_THROW(_hx_e);
@@ -1791,446 +2013,529 @@ HXLINE( 582)						::haxe::Log_obj::trace(HX_("JMI proceed failed",29,32,fb,3c),
             				}
             			}
             		}
-HXLINE( 587)		 ::borogove::Stanza jmiRej = stanza->getChild(HX_("reject",5f,51,85,02),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 588)		bool _hx_tmp11;
-HXDLIN( 588)		if (::hx::IsNotNull( jmiRej )) {
-HXLINE( 588)			_hx_tmp11 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiRej->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 646)		 ::borogove::Stanza jmiRej = stanza->getChild(HX_("reject",5f,51,85,02),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 647)		bool _hx_tmp21;
+HXDLIN( 647)		if (::hx::IsNotNull( jmiRej )) {
+HXLINE( 647)			_hx_tmp21 = ::hx::IsNotNull( jmiRej->attr->get(HX_("id",db,5b,00,00)) );
             		}
             		else {
-HXLINE( 588)			_hx_tmp11 = false;
+HXLINE( 647)			_hx_tmp21 = false;
             		}
-HXDLIN( 588)		if (_hx_tmp11) {
-HXLINE( 589)			 ::borogove::DirectChat chat5 = this->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 590)			::Dynamic this9 = chat5->jingleSessions;
-HXDLIN( 590)			::Dynamic session4 = ( ( ::haxe::ds::StringMap)(this9) )->get(( (::String)(::Reflect_obj::field(jmiRej->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 591)			if (::hx::IsNotNull( session4 )) {
-HXLINE( 592)				::borogove::calls::Session_obj::retract(session4);
-HXLINE( 593)				{
-HXLINE( 593)					::Dynamic this10 = chat5->jingleSessions;
-HXDLIN( 593)					( ( ::haxe::ds::StringMap)(this10) )->remove(::borogove::calls::Session_obj::get_sid(session4));
+HXDLIN( 647)		if (_hx_tmp21) {
+HXLINE( 648)			 ::borogove::DirectChat chat7 = this->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 649)			::Dynamic this9 = chat7->jingleSessions;
+HXDLIN( 649)			::Dynamic session4 = ( ( ::haxe::ds::StringMap)(this9) )->get(jmiRej->attr->get(HX_("id",db,5b,00,00)));
+HXLINE( 650)			if (::hx::IsNotNull( session4 )) {
+HXLINE( 651)				::borogove::calls::Session_obj::retract(session4);
+HXLINE( 652)				{
+HXLINE( 652)					::Dynamic this10 = chat7->jingleSessions;
+HXDLIN( 652)					( ( ::haxe::ds::StringMap)(this10) )->remove(::borogove::calls::Session_obj::get_sid(session4));
             				}
             			}
             		}
-HXLINE( 598)		 ::borogove::Chat chat6 = this->getChat(from->asBare()->asString());
-HXLINE( 599)		 ::borogove::Stanza chatState = stanza->getChild(null(),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d));
-HXLINE( 600)		 ::Dynamic userState;
-HXDLIN( 600)		::String _g9;
-HXDLIN( 600)		if (::hx::IsNotNull( chatState )) {
-HXLINE( 600)			_g9 = chatState->name;
+HXLINE( 657)		 ::borogove::Chat chat8 = this->getChat(from->asBare()->asString());
+HXLINE( 658)		 ::borogove::Stanza chatState = stanza->getChild(null(),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d));
+HXLINE( 659)		 ::Dynamic userState;
+HXDLIN( 659)		::String _g8;
+HXDLIN( 659)		if (::hx::IsNotNull( chatState )) {
+HXLINE( 659)			_g8 = chatState->name;
             		}
             		else {
-HXLINE( 600)			_g9 = null();
+HXLINE( 659)			_g8 = null();
             		}
-HXDLIN( 600)		if (::hx::IsNull( _g9 )) {
-HXLINE( 600)			userState = null();
+HXDLIN( 659)		if (::hx::IsNull( _g8 )) {
+HXLINE( 659)			userState = null();
             		}
             		else {
-HXLINE( 600)			::String _hx_switch_0 = _g9;
+HXLINE( 659)			::String _hx_switch_0 = _g8;
             			if (  (_hx_switch_0==HX_("active",c6,41,46,16)) ){
-HXLINE( 600)				userState = 2;
-HXDLIN( 600)				goto _hx_goto_36;
+HXLINE( 659)				userState = 2;
+HXDLIN( 659)				goto _hx_goto_39;
             			}
             			if (  (_hx_switch_0==HX_("composing",cf,0a,a5,12)) ){
-HXLINE( 600)				userState = 3;
-HXDLIN( 600)				goto _hx_goto_36;
+HXLINE( 659)				userState = 3;
+HXDLIN( 659)				goto _hx_goto_39;
             			}
             			if (  (_hx_switch_0==HX_("gone",5f,94,69,44)) ){
-HXLINE( 600)				userState = 0;
-HXDLIN( 600)				goto _hx_goto_36;
+HXLINE( 659)				userState = 0;
+HXDLIN( 659)				goto _hx_goto_39;
             			}
             			if (  (_hx_switch_0==HX_("inactive",6b,17,30,6a)) ){
-HXLINE( 600)				userState = 1;
-HXDLIN( 600)				goto _hx_goto_36;
+HXLINE( 659)				userState = 1;
+HXDLIN( 659)				goto _hx_goto_39;
             			}
             			if (  (_hx_switch_0==HX_("paused",ae,40,84,ef)) ){
-HXLINE( 600)				userState = 4;
-HXDLIN( 600)				goto _hx_goto_36;
+HXLINE( 659)				userState = 4;
+HXDLIN( 659)				goto _hx_goto_39;
             			}
             			/* default */{
-HXLINE( 600)				userState = null();
+HXLINE( 659)				userState = null();
             			}
-            			_hx_goto_36:;
+            			_hx_goto_39:;
             		}
-HXLINE( 608)		if (::hx::IsNotNull( userState )) {
-HXLINE( 609)			if (::hx::IsNull( chat6 )) {
-            				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_8, ::Dynamic,userState, ::borogove::Message,message, ::borogove::Client,_gthis) HXARGC(1)
-            				void _hx_run(::Array< ::Dynamic> members){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_610_processLiveMessage)
-HXLINE( 611)					bool _hx_tmp;
-HXDLIN( 611)					if ((members->length > 0)) {
-HXLINE( 611)						_hx_tmp = members->__get(0).StaticCast<  ::borogove::Member >()->isSelf;
-            					}
-            					else {
-HXLINE( 611)						_hx_tmp = false;
-            					}
-HXDLIN( 611)					if (_hx_tmp) {
-HXLINE( 611)						return;
-            					}
-HXLINE( 613)					_gthis->trigger(HX_("chat-state/update",5c,7b,51,96), ::Dynamic(::hx::Anon_obj::Create(2)
-            						->setFixed(0,HX_("message",c7,35,11,9a),message)
-            						->setFixed(1,HX_("userState",c6,23,de,2d),userState)));
+HXLINE( 667)		bool _hx_tmp22;
+HXDLIN( 667)		if (::hx::IsNotNull( userState )) {
+HXLINE( 667)			_hx_tmp22 = ::hx::IsNotNull( chat8 );
+            		}
+            		else {
+HXLINE( 667)			_hx_tmp22 = false;
+            		}
+HXDLIN( 667)		if (_hx_tmp22) {
+            			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_10, ::Dynamic,userState, ::borogove::Message,message, ::borogove::Client,_gthis) HXARGC(1)
+            			void _hx_run(::Array< ::Dynamic> members){
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_668_processLiveMessage)
+HXLINE( 669)				bool _hx_tmp;
+HXDLIN( 669)				if ((members->length >= 1)) {
+HXLINE( 669)					_hx_tmp = ::hx::IsNull( members->__get(0).StaticCast<  ::borogove::Member >() );
             				}
-            				HX_END_LOCAL_FUNC1((void))
-
-HXLINE( 610)				::thenshim::_Promise::Promise_Impl__obj::then(chat6->getMemberDetails(::Array_obj< ::String >::__new(1)->init(0,message->senderId)), ::Dynamic(new _hx_Closure_8(userState,message,_gthis)),null());
+            				else {
+HXLINE( 669)					_hx_tmp = true;
+            				}
+HXDLIN( 669)				if (_hx_tmp) {
+HXLINE( 669)					return;
+            				}
+HXLINE( 670)				if (members->__get(0).StaticCast<  ::borogove::Member >()->isSelf) {
+HXLINE( 670)					return;
+            				}
+HXLINE( 672)				_gthis->trigger(HX_("chat-state/update",5c,7b,51,96), ::Dynamic(::hx::Anon_obj::Create(3)
+            					->setFixed(0,HX_("message",c7,35,11,9a),message)
+            					->setFixed(1,HX_("member",5a,e2,b5,04),members->__get(0).StaticCast<  ::borogove::Member >())
+            					->setFixed(2,HX_("userState",c6,23,de,2d),userState)));
             			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXLINE( 668)			::thenshim::_Promise::Promise_Impl__obj::then(chat8->getMemberDetails(::Array_obj< ::String >::__new(1)->init(0,message->senderId)), ::Dynamic(new _hx_Closure_10(userState,message,_gthis)),null());
             		}
-HXLINE( 618)		::String memberUpdates = this->accountId();
-HXDLIN( 618)		::Array< ::Dynamic> memberUpdates1 = ::borogove::MemberUpdate_obj::extractUpdates(memberUpdates,chat6,stanza);
-HXLINE( 619)		if ((memberUpdates1->length > 0)) {
-            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_9, ::borogove::Chat,chat6) HXARGC(1)
+HXLINE( 676)		::String memberUpdates = this->accountId();
+HXDLIN( 676)		::Array< ::Dynamic> memberUpdates1 = ::borogove::MemberUpdate_obj::extractUpdates(memberUpdates,chat8,stanza);
+HXLINE( 677)		if ((memberUpdates1->length > 0)) {
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_11, ::borogove::Chat,chat8) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> members){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_638_processLiveMessage)
-HXLINE( 638)				if ((members->length > 0)) {
-HXLINE( 638)					chat6->trigger(HX_("members/update",bf,63,66,64),members);
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_695_processLiveMessage)
+HXLINE( 695)				if ((members->length > 0)) {
+HXLINE( 695)					chat8->trigger(HX_("members/update",bf,63,66,64),members);
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 620)			::haxe::Log_obj::trace(HX_("YYZZXX memberUpdates",90,f4,a1,1b), ::Dynamic(::hx::Anon_obj::Create(5)
-            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
-            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,chat6->chatId)->init(1,memberUpdates1->length))
-            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("processLiveMessage",0c,f2,77,58))
-            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            				->setFixed(4,HX_("lineNumber",dd,81,22,76),620)));
-HXLINE( 621)			 ::borogove::Channel channel1 = ( ( ::borogove::Channel)(::borogove::_Util::Util_Fields__obj::downcast(chat6,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE( 622)			 ::borogove::Stanza mucUser = stanza->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
-HXLINE( 623)			bool isFullList = false;
-HXLINE( 624)			bool _hx_tmp12;
-HXDLIN( 624)			if (::hx::IsNotNull( channel1 )) {
-HXLINE( 624)				_hx_tmp12 = ::hx::IsNotNull( mucUser );
+HXLINE( 678)			 ::borogove::Channel channel4 = ( ( ::borogove::Channel)(::borogove::_Util::Util_Fields__obj::downcast(chat8,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE( 679)			 ::borogove::Stanza mucUser = stanza->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+HXLINE( 680)			bool isFullList = false;
+HXLINE( 681)			bool _hx_tmp23;
+HXDLIN( 681)			if (::hx::IsNotNull( channel4 )) {
+HXLINE( 681)				_hx_tmp23 = ::hx::IsNotNull( mucUser );
             			}
             			else {
-HXLINE( 624)				_hx_tmp12 = false;
+HXLINE( 681)				_hx_tmp23 = false;
             			}
-HXDLIN( 624)			if (_hx_tmp12) {
-HXLINE( 625)				 ::borogove::Stanza mav = mucUser->getChild(HX_("mav",a2,0a,53,00),HX_("urn:xmpp:muc:affiliations:1",75,28,1f,fe));
-HXLINE( 626)				bool _hx_tmp13;
-HXDLIN( 626)				if (::hx::IsNotNull( mav )) {
-HXLINE( 626)					_hx_tmp13 = ::hx::IsNull( ( (::String)(::Reflect_obj::field(mav->attr,HX_("since",ba,eb,cf,7c))) ) );
+HXDLIN( 681)			if (_hx_tmp23) {
+HXLINE( 682)				 ::borogove::Stanza mav = mucUser->getChild(HX_("mav",a2,0a,53,00),HX_("urn:xmpp:muc:affiliations:1",75,28,1f,fe));
+HXLINE( 683)				bool _hx_tmp24;
+HXDLIN( 683)				if (::hx::IsNotNull( mav )) {
+HXLINE( 683)					_hx_tmp24 = ::hx::IsNull( mav->attr->get(HX_("since",ba,eb,cf,7c)) );
             				}
             				else {
-HXLINE( 626)					_hx_tmp13 = false;
+HXLINE( 683)					_hx_tmp24 = false;
             				}
-HXDLIN( 626)				if (_hx_tmp13) {
-HXLINE( 627)					isFullList = true;
+HXDLIN( 683)				if (_hx_tmp24) {
+HXLINE( 684)					isFullList = true;
             				}
             				else {
-HXLINE( 628)					bool _hx_tmp14;
-HXDLIN( 628)					if (::hx::IsNotNull( mav )) {
-HXLINE( 628)						::String _hx_tmp15 = ( (::String)(::Reflect_obj::field(mav->attr,HX_("since",ba,eb,cf,7c))) );
-HXDLIN( 628)						_hx_tmp14 = (_hx_tmp15 != channel1->mavUntil);
+HXLINE( 685)					bool _hx_tmp25;
+HXDLIN( 685)					if (::hx::IsNotNull( mav )) {
+HXLINE( 685)						::String _hx_tmp26 = mav->attr->get_string(HX_("since",ba,eb,cf,7c));
+HXDLIN( 685)						_hx_tmp25 = (_hx_tmp26 != channel4->mavUntil);
             					}
             					else {
-HXLINE( 628)						_hx_tmp14 = false;
+HXLINE( 685)						_hx_tmp25 = false;
             					}
-HXDLIN( 628)					if (_hx_tmp14) {
-HXLINE( 629)						::haxe::Log_obj::trace(HX_("MAV update with unknown previous version",e6,80,1b,7e), ::Dynamic(::hx::Anon_obj::Create(5)
+HXDLIN( 685)					if (_hx_tmp25) {
+HXLINE( 686)						::haxe::Log_obj::trace(HX_("MAV update with unknown previous version",e6,80,1b,7e), ::Dynamic(::hx::Anon_obj::Create(5)
             							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
-            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,channel1->mavUntil)->init(1,stanza))
+            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,channel4->mavUntil)->init(1,stanza))
             							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("processLiveMessage",0c,f2,77,58))
             							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),629)));
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),686)));
             					}
             				}
-HXLINE( 631)				::String channel2 = channel1->mavUntil;
-HXDLIN( 631)				 ::Dynamic tmp1;
-HXDLIN( 631)				if (::hx::IsNotNull( mav )) {
-HXLINE( 631)					tmp1 = mav->attr;
+HXLINE( 688)				::String channel5 = channel4->mavUntil;
+HXDLIN( 688)				 ::haxe::ds::StringMap tmp;
+HXDLIN( 688)				if (::hx::IsNotNull( mav )) {
+HXLINE( 688)					tmp = mav->attr;
             				}
             				else {
-HXLINE( 631)					tmp1 = null();
+HXLINE( 688)					tmp = null();
             				}
-HXDLIN( 631)				::String _hx_tmp16;
-HXDLIN( 631)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 631)					_hx_tmp16 = ( (::String)(::Reflect_obj::field(tmp1,HX_("until",9e,b8,ef,a6))) );
+HXDLIN( 688)				::String _hx_tmp27;
+HXDLIN( 688)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 688)					_hx_tmp27 = tmp->get_string(HX_("until",9e,b8,ef,a6));
             				}
             				else {
-HXLINE( 631)					_hx_tmp16 = null();
+HXLINE( 688)					_hx_tmp27 = null();
             				}
-HXDLIN( 631)				if ((channel2 != _hx_tmp16)) {
-HXLINE( 632)					 ::Dynamic tmp2;
-HXDLIN( 632)					if (::hx::IsNotNull( mav )) {
-HXLINE( 632)						tmp2 = mav->attr;
+HXDLIN( 688)				if ((channel5 != _hx_tmp27)) {
+HXLINE( 689)					 ::haxe::ds::StringMap tmp1;
+HXDLIN( 689)					if (::hx::IsNotNull( mav )) {
+HXLINE( 689)						tmp1 = mav->attr;
             					}
             					else {
-HXLINE( 632)						tmp2 = null();
+HXLINE( 689)						tmp1 = null();
             					}
-HXDLIN( 632)					::String _hx_tmp17;
-HXDLIN( 632)					if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 632)						_hx_tmp17 = ( (::String)(::Reflect_obj::field(tmp2,HX_("until",9e,b8,ef,a6))) );
+HXDLIN( 689)					::String _hx_tmp28;
+HXDLIN( 689)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 689)						_hx_tmp28 = tmp1->get_string(HX_("until",9e,b8,ef,a6));
             					}
             					else {
-HXLINE( 632)						_hx_tmp17 = null();
+HXLINE( 689)						_hx_tmp28 = null();
             					}
-HXDLIN( 632)					channel1->mavUntil = _hx_tmp17;
-HXLINE( 633)					::Dynamic _hx_tmp18 = this->persistence;
-HXDLIN( 633)					::borogove::Persistence_obj::storeChats(_hx_tmp18,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,channel1));
+HXDLIN( 689)					channel4->mavUntil = _hx_tmp28;
+HXLINE( 690)					::Dynamic _hx_tmp29 = this->persistence;
+HXDLIN( 690)					::borogove::Persistence_obj::storeChats(_hx_tmp29,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,channel4));
             				}
             			}
-HXLINE( 637)			::Dynamic _hx_tmp19 = this->persistence;
-HXDLIN( 637)			::String _hx_tmp20 = this->accountId();
-HXDLIN( 637)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMemberUpdates(_hx_tmp19,_hx_tmp20,chat6,memberUpdates1,isFullList), ::Dynamic(new _hx_Closure_9(chat6)),null());
+HXLINE( 694)			::Dynamic _hx_tmp30 = this->persistence;
+HXDLIN( 694)			::String _hx_tmp31 = this->accountId();
+HXDLIN( 694)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMemberUpdates(_hx_tmp30,_hx_tmp31,chat8,memberUpdates1,isFullList), ::Dynamic(new _hx_Closure_11(chat8)),null());
             		}
-HXLINE( 642)		this->checkForReceipts(stanza);
-HXLINE( 644)		 ::borogove::PubsubEvent pubsubEvent = ::borogove::PubsubEvent_obj::fromStanza(stanza);
-HXLINE( 645)		bool _hx_tmp21;
-HXDLIN( 645)		bool _hx_tmp22;
-HXDLIN( 645)		bool _hx_tmp23;
-HXDLIN( 645)		if (::hx::IsNotNull( pubsubEvent )) {
-HXLINE( 645)			_hx_tmp23 = ::hx::IsNotNull( pubsubEvent->getFrom() );
+HXLINE( 699)		this->checkForReceipts(stanza);
+HXLINE( 701)		 ::borogove::PubsubEvent pubsubEvent = ::borogove::PubsubEvent_obj::fromStanza(stanza);
+HXLINE( 702)		bool _hx_tmp32;
+HXDLIN( 702)		bool _hx_tmp33;
+HXDLIN( 702)		bool _hx_tmp34;
+HXDLIN( 702)		if (::hx::IsNotNull( pubsubEvent )) {
+HXLINE( 702)			_hx_tmp34 = ::hx::IsNotNull( pubsubEvent->getFrom() );
             		}
             		else {
-HXLINE( 645)			_hx_tmp23 = false;
+HXLINE( 702)			_hx_tmp34 = false;
             		}
-HXDLIN( 645)		if (_hx_tmp23) {
-HXLINE( 645)			_hx_tmp22 = (pubsubEvent->getNode() == HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
+HXDLIN( 702)		if (_hx_tmp34) {
+HXLINE( 702)			_hx_tmp33 = (pubsubEvent->getNode() == HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
             		}
             		else {
-HXLINE( 645)			_hx_tmp22 = false;
+HXLINE( 702)			_hx_tmp33 = false;
             		}
-HXDLIN( 645)		if (_hx_tmp22) {
-HXLINE( 645)			_hx_tmp21 = (pubsubEvent->getItems()->length > 0);
+HXDLIN( 702)		if (_hx_tmp33) {
+HXLINE( 702)			_hx_tmp32 = (pubsubEvent->getItems()->length > 0);
             		}
             		else {
-HXLINE( 645)			_hx_tmp21 = false;
-            		}
-HXDLIN( 645)		if (_hx_tmp21) {
-HXLINE( 646)			 ::borogove::Stanza item = pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >();
-HXLINE( 647)			::String avatarSha1Hex = ( (::String)(::Reflect_obj::field(pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("id",db,5b,00,00))) );
-HXLINE( 648)			 ::borogove::Hash tmp3 = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
-HXDLIN( 648)			::Array< unsigned char > avatarSha1;
-HXDLIN( 648)			if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 648)				avatarSha1 = tmp3->hash;
-            			}
-            			else {
-HXLINE( 648)				avatarSha1 = null();
-            			}
-HXLINE( 649)			 ::borogove::Stanza metadata = item->getChild(HX_("metadata",6f,e7,19,40),HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
-HXLINE( 650)			::Array< ::String > mime = ::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_49,1);
-HXLINE( 651)			if (::hx::IsNotNull( metadata )) {
-HXLINE( 652)				 ::borogove::Stanza info = metadata->getChild(HX_("info",6e,38,bb,45),null());
-HXLINE( 653)				bool _hx_tmp24;
-HXDLIN( 653)				if (::hx::IsNotNull( info )) {
-HXLINE( 653)					_hx_tmp24 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(info->attr,HX_("type",ba,f2,08,4d))) ) );
+HXLINE( 702)			_hx_tmp32 = false;
+            		}
+HXDLIN( 702)		if (_hx_tmp32) {
+HXLINE( 703)			 ::borogove::Stanza item = pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >();
+HXLINE( 704)			::String avatarSha1Hex = pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >()->attr->get_string(HX_("id",db,5b,00,00));
+HXLINE( 705)			 ::borogove::Hash avatarSha1 = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
+HXLINE( 706)			 ::borogove::Stanza metadata = item->getChild(HX_("metadata",6f,e7,19,40),HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
+HXLINE( 707)			::Array< ::String > mime = ::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_55,1);
+HXLINE( 708)			if (::hx::IsNotNull( metadata )) {
+HXLINE( 709)				 ::borogove::Stanza info = metadata->getChild(HX_("info",6e,38,bb,45),null());
+HXLINE( 710)				bool _hx_tmp35;
+HXDLIN( 710)				if (::hx::IsNotNull( info )) {
+HXLINE( 710)					_hx_tmp35 = ::hx::IsNotNull( info->attr->get(HX_("type",ba,f2,08,4d)) );
             				}
             				else {
-HXLINE( 653)					_hx_tmp24 = false;
+HXLINE( 710)					_hx_tmp35 = false;
             				}
-HXDLIN( 653)				if (_hx_tmp24) {
-HXLINE( 654)					mime[0] = ( (::String)(::Reflect_obj::field(info->attr,HX_("type",ba,f2,08,4d))) );
+HXDLIN( 710)				if (_hx_tmp35) {
+HXLINE( 711)					mime[0] = info->attr->get_string(HX_("type",ba,f2,08,4d));
             				}
             			}
-HXLINE( 657)			if (::hx::IsNotNull( avatarSha1 )) {
-            				HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_12, ::borogove::Client,_gthis,::Array< ::String >,mime,::String,avatarSha1Hex, ::borogove::PubsubEvent,pubsubEvent, ::borogove::DirectChat,chat7) HXARGC(1)
-            				void _hx_run(bool has){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_662_processLiveMessage)
-HXLINE( 662)					if (has) {
-HXLINE( 663)						_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat7));
+HXLINE( 714)			if (::hx::IsNotNull( avatarSha1 )) {
+            				HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_14, ::borogove::Client,_gthis,::Array< ::String >,mime,::String,avatarSha1Hex, ::borogove::PubsubEvent,pubsubEvent, ::borogove::DirectChat,chat9) HXARGC(1)
+            				void _hx_run(::String has){
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_719_processLiveMessage)
+HXLINE( 719)					if (::hx::IsNotNull( has )) {
+HXLINE( 720)						_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat9));
             					}
             					else {
-            						HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_11, ::borogove::Client,_gthis,::Array< ::String >,mime, ::borogove::DirectChat,chat7, ::borogove::queries::PubsubGet,pubsubGet1) HXARGC(0)
+            						HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_13, ::borogove::Client,_gthis,::Array< ::String >,mime, ::borogove::queries::PubsubGet,pubsubGet1, ::borogove::DirectChat,chat9) HXARGC(0)
             						void _hx_run(){
-            							HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_10, ::borogove::Client,_gthis, ::borogove::DirectChat,chat7) HXARGC(1)
-            							 ::borogove::EventResult _hx_run(bool _){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_671_processLiveMessage)
-HXLINE( 671)								return _gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat7));
+            							HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_12, ::borogove::Client,_gthis, ::borogove::DirectChat,chat9) HXARGC(1)
+            							 ::borogove::EventResult _hx_run(::String _){
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_728_processLiveMessage)
+HXLINE( 728)								return _gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat9));
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_666_processLiveMessage)
-HXLINE( 667)							 ::borogove::Stanza item = pubsubGet1->getResult()->__get(0).StaticCast<  ::borogove::Stanza >();
-HXLINE( 668)							if (::hx::IsNull( item )) {
-HXLINE( 668)								return;
+            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_723_processLiveMessage)
+HXLINE( 724)							 ::borogove::Stanza item = pubsubGet1->getResult()->__get(0).StaticCast<  ::borogove::Stanza >();
+HXLINE( 725)							if (::hx::IsNull( item )) {
+HXLINE( 725)								return;
             							}
-HXLINE( 669)							 ::borogove::Stanza dataNode = item->getChild(HX_("data",2a,56,63,42),HX_("urn:xmpp:avatar:data",0f,7e,01,4e));
-HXLINE( 670)							if (::hx::IsNull( dataNode )) {
-HXLINE( 670)								return;
+HXLINE( 726)							 ::borogove::Stanza dataNode = item->getChild(HX_("data",2a,56,63,42),HX_("urn:xmpp:avatar:data",0f,7e,01,4e));
+HXLINE( 727)							if (::hx::IsNull( dataNode )) {
+HXLINE( 727)								return;
             							}
-HXLINE( 671)							::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 671)							::String mime1 = mime->__get(0);
-HXDLIN( 671)							::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis1,mime1,::haxe::crypto::Base64_obj::decode(::StringTools_obj::replace(dataNode->getText(),HX_("\n",0a,00,00,00),HX_("",00,00,00,00)),null())->b), ::Dynamic(new _hx_Closure_10(_gthis,chat7)),null());
+HXLINE( 728)							::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 728)							::String mime1 = mime->__get(0);
+HXDLIN( 728)							::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis1,mime1,::borogove::_Source::Source_Impl__obj::ofTinkSource( ::tink::streams::Single_obj::__alloc( HX_CTX , ::tink::core::_Lazy::LazyConst_obj::__alloc( HX_CTX ,::tink::chunk::ByteChunk_obj::of(::haxe::crypto::Base64_obj::decode(::StringTools_obj::replace(dataNode->getText(),HX_("\n",0a,00,00,00),HX_("",00,00,00,00)),null())))))), ::Dynamic(new _hx_Closure_12(_gthis,chat9)),null());
             						}
             						HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 665)						::String pubsubGet = pubsubEvent->getFrom();
-HXDLIN( 665)						 ::borogove::queries::PubsubGet pubsubGet1 =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,pubsubGet,HX_("urn:xmpp:avatar:data",0f,7e,01,4e),avatarSha1Hex);
-HXLINE( 666)						pubsubGet1->onFinished( ::Dynamic(new _hx_Closure_11(_gthis,mime,chat7,pubsubGet1)));
-HXLINE( 675)						_gthis->sendQueryLazy(pubsubGet1);
+HXLINE( 722)						::String pubsubGet = pubsubEvent->getFrom();
+HXDLIN( 722)						 ::borogove::queries::PubsubGet pubsubGet1 =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,pubsubGet,HX_("urn:xmpp:avatar:data",0f,7e,01,4e),avatarSha1Hex);
+HXLINE( 723)						pubsubGet1->onFinished( ::Dynamic(new _hx_Closure_13(_gthis,mime,pubsubGet1,chat9)));
+HXLINE( 732)						_gthis->sendQueryLazy(pubsubGet1);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 658)				 ::borogove::DirectChat chat7 = this->getDirectChat(::borogove::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString(),false);
-HXLINE( 659)				chat7->setAvatarSha1(avatarSha1);
-HXLINE( 660)				::Dynamic _hx_tmp25 = this->persistence;
-HXDLIN( 660)				::String _hx_tmp26 = this->accountId();
-HXDLIN( 660)				::borogove::Persistence_obj::storeChats(_hx_tmp25,_hx_tmp26,::Array_obj< ::Dynamic>::__new(1)->init(0,chat7));
-HXLINE( 661)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(this->persistence,HX_("sha-1",90,a8,1c,7c),avatarSha1), ::Dynamic(new _hx_Closure_12(_gthis,mime,avatarSha1Hex,pubsubEvent,chat7)),null());
+HXLINE( 715)				 ::borogove::DirectChat chat9 = this->getDirectChat(::borogove::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString(),false);
+HXLINE( 716)				chat9->setAvatarSha1(avatarSha1->hash);
+HXLINE( 717)				::Dynamic _hx_tmp36 = this->persistence;
+HXDLIN( 717)				::String _hx_tmp37 = this->accountId();
+HXDLIN( 717)				::borogove::Persistence_obj::storeChats(_hx_tmp36,_hx_tmp37,::Array_obj< ::Dynamic>::__new(1)->init(0,chat9));
+HXLINE( 718)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(this->persistence,avatarSha1), ::Dynamic(new _hx_Closure_14(_gthis,mime,avatarSha1Hex,pubsubEvent,chat9)),null());
             			}
             		}
-HXLINE( 681)		 ::Dynamic _hx_tmp27 = ::haxe::Log_obj::trace;
-HXDLIN( 681)		::String _hx_tmp28 = (HX_("pubsubEvent ",09,6a,9f,e2) + ::Std_obj::string(::hx::IsNotNull( pubsubEvent )));
-HXDLIN( 681)		_hx_tmp27(_hx_tmp28,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),681,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
-HXLINE( 682)		bool _hx_tmp29;
-HXDLIN( 682)		if (::hx::IsNotNull( pubsubEvent )) {
-HXLINE( 682)			_hx_tmp29 = ::hx::IsNotNull( pubsubEvent->getFrom() );
+HXLINE( 738)		 ::Dynamic _hx_tmp38 = ::haxe::Log_obj::trace;
+HXDLIN( 738)		::String _hx_tmp39 = (HX_("pubsubEvent ",09,6a,9f,e2) + ::Std_obj::string(::hx::IsNotNull( pubsubEvent )));
+HXDLIN( 738)		_hx_tmp38(_hx_tmp39,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),738,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
+HXLINE( 739)		bool _hx_tmp40;
+HXDLIN( 739)		if (::hx::IsNotNull( pubsubEvent )) {
+HXLINE( 739)			_hx_tmp40 = ::hx::IsNotNull( pubsubEvent->getFrom() );
             		}
             		else {
-HXLINE( 682)			_hx_tmp29 = false;
-            		}
-HXDLIN( 682)		if (_hx_tmp29) {
-HXLINE( 683)			 ::borogove::JID fromBare = ::borogove::JID_obj::parse(pubsubEvent->getFrom())->asBare();
-HXLINE( 684)			::String isOwnAccount = fromBare->asString();
-HXDLIN( 684)			bool isOwnAccount1 = (isOwnAccount == this->accountId());
-HXLINE( 685)			::String pubsubNode = pubsubEvent->getNode();
-HXLINE( 686)			 ::borogove::Chat chat8 = this->getChat(fromBare->asString());
-HXLINE( 688)			bool _hx_tmp30;
-HXDLIN( 688)			bool _hx_tmp31;
-HXDLIN( 688)			if (isOwnAccount1) {
-HXLINE( 688)				_hx_tmp31 = (pubsubNode == HX_("http://jabber.org/protocol/nick",17,30,dc,e9));
+HXLINE( 739)			_hx_tmp40 = false;
+            		}
+HXDLIN( 739)		if (_hx_tmp40) {
+HXLINE( 740)			 ::borogove::JID fromBare = ::borogove::JID_obj::parse(pubsubEvent->getFrom())->asBare();
+HXLINE( 741)			::String isOwnAccount = fromBare->asString();
+HXDLIN( 741)			bool isOwnAccount1 = (isOwnAccount == this->accountId());
+HXLINE( 742)			::String pubsubNode = pubsubEvent->getNode();
+HXLINE( 743)			 ::borogove::Chat chat10 = this->getChat(fromBare->asString());
+HXLINE( 745)			bool _hx_tmp41;
+HXDLIN( 745)			bool _hx_tmp42;
+HXDLIN( 745)			if (isOwnAccount1) {
+HXLINE( 745)				_hx_tmp42 = (pubsubNode == HX_("http://jabber.org/protocol/nick",17,30,dc,e9));
             			}
             			else {
-HXLINE( 688)				_hx_tmp31 = false;
+HXLINE( 745)				_hx_tmp42 = false;
             			}
-HXDLIN( 688)			if (_hx_tmp31) {
-HXLINE( 688)				_hx_tmp30 = (pubsubEvent->getItems()->length > 0);
+HXDLIN( 745)			if (_hx_tmp42) {
+HXLINE( 745)				_hx_tmp41 = (pubsubEvent->getItems()->length > 0);
             			}
             			else {
-HXLINE( 688)				_hx_tmp30 = false;
+HXLINE( 745)				_hx_tmp41 = false;
             			}
-HXDLIN( 688)			if (_hx_tmp30) {
-HXLINE( 689)				this->updateDisplayName(pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >()->getChildText(HX_("nick",a3,7b,05,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9)));
+HXDLIN( 745)			if (_hx_tmp41) {
+HXLINE( 746)				this->updateDisplayName(pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >()->getChildText(HX_("nick",a3,7b,05,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9)));
             			}
-HXLINE( 692)			bool _hx_tmp32;
-HXDLIN( 692)			bool _hx_tmp33;
-HXDLIN( 692)			if (::hx::IsNotNull( chat8 )) {
-HXLINE( 692)				_hx_tmp33 = (pubsubNode == HX_("http://jabber.org/protocol/activity",43,2c,6e,94));
+HXLINE( 749)			bool _hx_tmp43;
+HXDLIN( 749)			bool _hx_tmp44;
+HXDLIN( 749)			if (::hx::IsNotNull( chat10 )) {
+HXLINE( 749)				_hx_tmp44 = (pubsubNode == HX_("http://jabber.org/protocol/activity",43,2c,6e,94));
             			}
             			else {
-HXLINE( 692)				_hx_tmp33 = false;
+HXLINE( 749)				_hx_tmp44 = false;
             			}
-HXDLIN( 692)			if (_hx_tmp33) {
-HXLINE( 692)				_hx_tmp32 = (pubsubEvent->getItems()->length > 0);
+HXDLIN( 749)			if (_hx_tmp44) {
+HXLINE( 749)				_hx_tmp43 = (pubsubEvent->getItems()->length > 0);
             			}
             			else {
-HXLINE( 692)				_hx_tmp32 = false;
+HXLINE( 749)				_hx_tmp43 = false;
             			}
-HXDLIN( 692)			if (_hx_tmp32) {
-HXLINE( 693)				 ::borogove::Stanza activity = pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >()->getChild(HX_("activity",cf,2d,b2,e5),HX_("http://jabber.org/protocol/activity",43,2c,6e,94));
-HXLINE( 694)				if (::hx::IsNotNull( activity )) {
-HXLINE( 695)					::String _hx_tmp34;
-HXDLIN( 695)					 ::borogove::Stanza tmp4 = activity->getChild(HX_("undefined",90,3e,0a,9d),null());
-HXDLIN( 695)					::String tmp5;
-HXDLIN( 695)					if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 695)						tmp5 = tmp4->getChildText(HX_("emoji",86,6f,d9,6f),HX_("https://ns.borogove.dev/",0d,36,29,bd));
+HXDLIN( 749)			if (_hx_tmp43) {
+HXLINE( 750)				 ::borogove::Stanza activity = pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >()->getChild(HX_("activity",cf,2d,b2,e5),HX_("http://jabber.org/protocol/activity",43,2c,6e,94));
+HXLINE( 751)				if (::hx::IsNotNull( activity )) {
+HXLINE( 752)					::String _hx_tmp45;
+HXDLIN( 752)					 ::borogove::Stanza tmp2 = activity->getChild(HX_("undefined",90,3e,0a,9d),null());
+HXDLIN( 752)					::String tmp3;
+HXDLIN( 752)					if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 752)						tmp3 = tmp2->getChildText(HX_("emoji",86,6f,d9,6f),HX_("https://ns.borogove.dev/",0d,36,29,bd));
             					}
             					else {
-HXLINE( 695)						tmp5 = null();
+HXLINE( 752)						tmp3 = null();
             					}
-HXDLIN( 695)					if (::hx::IsNotNull( tmp5 )) {
-HXLINE( 695)						_hx_tmp34 = tmp5;
+HXDLIN( 752)					if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 752)						_hx_tmp45 = tmp3;
             					}
             					else {
-HXLINE( 695)						_hx_tmp34 = HX_("",00,00,00,00);
+HXLINE( 752)						_hx_tmp45 = HX_("",00,00,00,00);
             					}
-HXDLIN( 695)					::String tmp6 = activity->getChildText(HX_("text",ad,cc,f9,4c),null());
-HXDLIN( 695)					::String _hx_tmp35;
-HXDLIN( 695)					if (::hx::IsNotNull( tmp6 )) {
-HXLINE( 695)						_hx_tmp35 = tmp6;
+HXDLIN( 752)					::String tmp4 = activity->getChildText(HX_("text",ad,cc,f9,4c),null());
+HXDLIN( 752)					::String _hx_tmp46;
+HXDLIN( 752)					if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 752)						_hx_tmp46 = tmp4;
             					}
             					else {
-HXLINE( 695)						_hx_tmp35 = HX_("",00,00,00,00);
+HXLINE( 752)						_hx_tmp46 = HX_("",00,00,00,00);
             					}
-HXDLIN( 695)					chat8->status =  ::borogove::Status_obj::__alloc( HX_CTX ,_hx_tmp34,_hx_tmp35);
-HXLINE( 696)					::Dynamic _hx_tmp36 = this->persistence;
-HXDLIN( 696)					::borogove::Persistence_obj::storeChats(_hx_tmp36,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat8));
-HXLINE( 697)					this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat8));
-HXLINE( 698)					if (isOwnAccount1) {
-HXLINE( 698)						this->sendPresence(null(),null());
+HXDLIN( 752)					chat10->status =  ::borogove::Status_obj::__alloc( HX_CTX ,_hx_tmp45,_hx_tmp46);
+HXLINE( 753)					::Dynamic _hx_tmp47 = this->persistence;
+HXDLIN( 753)					::borogove::Persistence_obj::storeChats(_hx_tmp47,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat10));
+HXLINE( 754)					this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat10));
+HXLINE( 755)					if (isOwnAccount1) {
+HXLINE( 755)						this->sendPresence(null(),null());
             					}
             				}
             			}
-HXLINE( 702)			bool _hx_tmp37;
-HXDLIN( 702)			bool _hx_tmp38;
-HXDLIN( 702)			if (isOwnAccount1) {
-HXLINE( 702)				_hx_tmp38 = (pubsubNode == HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
+HXLINE( 759)			bool _hx_tmp48;
+HXDLIN( 759)			bool _hx_tmp49;
+HXDLIN( 759)			if (isOwnAccount1) {
+HXLINE( 759)				_hx_tmp49 = (pubsubNode == HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
             			}
             			else {
-HXLINE( 702)				_hx_tmp38 = false;
+HXLINE( 759)				_hx_tmp49 = false;
             			}
-HXDLIN( 702)			if (_hx_tmp38) {
-HXLINE( 702)				_hx_tmp37 = (pubsubEvent->getItems()->length > 0);
+HXDLIN( 759)			if (_hx_tmp49) {
+HXLINE( 759)				_hx_tmp48 = (pubsubEvent->getItems()->length > 0);
             			}
             			else {
-HXLINE( 702)				_hx_tmp37 = false;
-            			}
-HXDLIN( 702)			if (_hx_tmp37) {
-HXLINE( 703)				int _g10 = 0;
-HXDLIN( 703)				::Array< ::Dynamic> _g11 = pubsubEvent->getItems();
-HXDLIN( 703)				while((_g10 < _g11->length)){
-HXLINE( 703)					 ::borogove::Stanza item1 = _g11->__get(_g10).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 703)					_g10 = (_g10 + 1);
-HXLINE( 704)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE( 705)						 ::borogove::Stanza tmp7 = item1->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
-HXDLIN( 705)						 ::borogove::Stanza upTo;
-HXDLIN( 705)						if (::hx::IsNotNull( tmp7 )) {
-HXLINE( 705)							upTo = tmp7->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+HXLINE( 759)				_hx_tmp48 = false;
+            			}
+HXDLIN( 759)			if (_hx_tmp48) {
+HXLINE( 760)				int _g9 = 0;
+HXDLIN( 760)				::Array< ::Dynamic> _g10 = pubsubEvent->getItems();
+HXDLIN( 760)				while((_g9 < _g10->length)){
+HXLINE( 760)					 ::borogove::Stanza item1 = _g10->__get(_g9).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 760)					_g9 = (_g9 + 1);
+HXLINE( 761)					if (::hx::IsNotNull( item1->attr->get(HX_("id",db,5b,00,00)) )) {
+HXLINE( 762)						 ::borogove::Stanza tmp5 = item1->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
+HXDLIN( 762)						 ::borogove::Stanza upTo;
+HXDLIN( 762)						if (::hx::IsNotNull( tmp5 )) {
+HXLINE( 762)							upTo = tmp5->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
             						}
             						else {
-HXLINE( 705)							upTo = null();
+HXLINE( 762)							upTo = null();
             						}
-HXLINE( 706)						 ::borogove::Chat chat9 = this->getChat(( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 707)						if (::hx::IsNull( chat9 )) {
-            							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_13) HXARGC(1)
+HXLINE( 763)						 ::borogove::Chat chat11 = this->getChat(item1->attr->get_string(HX_("id",db,5b,00,00)));
+HXLINE( 764)						if (::hx::IsNull( chat11 )) {
+            							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_15) HXARGC(1)
             							int _hx_run( ::borogove::Caps _){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_708_processLiveMessage)
-HXLINE( 708)								return 2;
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_765_processLiveMessage)
+HXLINE( 765)								return 2;
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-            							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_14, ::borogove::Stanza,upTo) HXARGC(1)
+            							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_16, ::borogove::Stanza,upTo) HXARGC(1)
             							void _hx_run( ::borogove::Chat chat){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_708_processLiveMessage)
-HXLINE( 708)								::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN( 708)								chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ),null());
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_765_processLiveMessage)
+HXLINE( 765)								::String _hx_tmp = upTo->attr->get_string(HX_("id",db,5b,00,00));
+HXDLIN( 765)								chat->markReadUpToId(_hx_tmp,upTo->attr->get_string(HX_("by",d7,55,00,00)),null());
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 708)							this->startChatWith(( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_13()), ::Dynamic(new _hx_Closure_14(upTo)));
+HXLINE( 765)							this->startChatWith(item1->attr->get_string(HX_("id",db,5b,00,00)), ::Dynamic(new _hx_Closure_15()), ::Dynamic(new _hx_Closure_16(upTo)));
             						}
             						else {
-            							HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_15, ::borogove::Client,_gthis, ::borogove::Chat,chat9) HXARGC(1)
+            							HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_17, ::borogove::Chat,chat11, ::borogove::Client,_gthis) HXARGC(1)
             							void _hx_run( ::Dynamic _){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_710_processLiveMessage)
-HXLINE( 711)								::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 711)								::String _hx_tmp = _gthis->accountId();
-HXDLIN( 711)								::borogove::Persistence_obj::storeChats(_gthis1,_hx_tmp,::Array_obj< ::Dynamic>::__new(1)->init(0,chat9));
-HXLINE( 712)								_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat9));
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_767_processLiveMessage)
+HXLINE( 768)								::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 768)								::String _hx_tmp = _gthis->accountId();
+HXDLIN( 768)								::borogove::Persistence_obj::storeChats(_gthis1,_hx_tmp,::Array_obj< ::Dynamic>::__new(1)->init(0,chat11));
+HXLINE( 769)								_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat11));
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-            							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_16) HXARGC(1)
+            							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_18) HXARGC(1)
             							::Dynamic _hx_run( ::Dynamic e){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_714_processLiveMessage)
-HXLINE( 714)								if (::hx::IsNotNull( e )) {
-HXLINE( 714)									return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_771_processLiveMessage)
+HXLINE( 771)								if (::hx::IsNotNull( e )) {
+HXLINE( 771)									return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
             								}
             								else {
-HXLINE( 714)									return null();
+HXLINE( 771)									return null();
             								}
-HXDLIN( 714)								return null();
+HXDLIN( 771)								return null();
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 710)							 ::borogove::Chat chat10 = chat9;
-HXDLIN( 710)							::String _hx_tmp39 = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN( 710)							::thenshim::_Promise::Promise_Impl__obj::then(chat10->markReadUpToId(_hx_tmp39,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ),null()), ::Dynamic(new _hx_Closure_15(_gthis,chat9)), ::Dynamic(new _hx_Closure_16()));
+HXLINE( 767)							 ::borogove::Chat chat12 = chat11;
+HXDLIN( 767)							::String _hx_tmp50 = upTo->attr->get_string(HX_("id",db,5b,00,00));
+HXDLIN( 767)							::thenshim::_Promise::Promise_Impl__obj::then(chat12->markReadUpToId(_hx_tmp50,upTo->attr->get_string(HX_("by",d7,55,00,00)),null()), ::Dynamic(new _hx_Closure_17(chat11,_gthis)), ::Dynamic(new _hx_Closure_18()));
+            						}
+            					}
+            				}
+            			}
+HXLINE( 776)			::haxe::Log_obj::trace((HX_("pubsubNode == ",a5,37,1e,6c) + pubsubNode),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),776,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
+HXLINE( 778)			bool _hx_tmp51;
+HXDLIN( 778)			bool _hx_tmp52;
+HXDLIN( 778)			if (isOwnAccount1) {
+HXLINE( 778)				_hx_tmp52 = (pubsubNode == HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
+            			}
+            			else {
+HXLINE( 778)				_hx_tmp52 = false;
+            			}
+HXDLIN( 778)			if (_hx_tmp52) {
+HXLINE( 778)				_hx_tmp51 = (pubsubEvent->getItems()->length > 0);
+            			}
+            			else {
+HXLINE( 778)				_hx_tmp51 = false;
+            			}
+HXDLIN( 778)			if (_hx_tmp51) {
+HXLINE( 779)				::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 780)				{
+HXLINE( 780)					int _g11 = 0;
+HXDLIN( 780)					::Array< ::Dynamic> _g12 = pubsubEvent->getItems();
+HXDLIN( 780)					while((_g11 < _g12->length)){
+HXLINE( 780)						 ::borogove::Stanza item2 = _g12->__get(_g11).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 780)						_g11 = (_g11 + 1);
+HXLINE( 781)						if (::hx::IsNotNull( item2->attr->get(HX_("id",db,5b,00,00)) )) {
+HXLINE( 782)							 ::borogove::Chat chat13 = this->getChat(item2->attr->get_string(HX_("id",db,5b,00,00)));
+HXLINE( 783)							if (::hx::IsNull( chat13 )) {
+            								HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_19, ::borogove::Stanza,item2) HXARGC(1)
+            								int _hx_run( ::borogove::Caps caps){
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_786_processLiveMessage)
+HXLINE( 787)									if (::hx::IsNull( caps )) {
+HXLINE( 787)										return 1;
+            									}
+HXLINE( 789)									 ::borogove::Identity identity = caps->identities->__get(0).StaticCast<  ::borogove::Identity >();
+HXLINE( 790)									 ::borogove::Stanza conf = item2->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
+HXLINE( 791)									if (::hx::IsNull( conf->attr->get(HX_("name",4b,72,ff,48)) )) {
+HXLINE( 792)										::String _hx_tmp;
+HXDLIN( 792)										if (::hx::IsNotNull( identity )) {
+HXLINE( 792)											_hx_tmp = identity->name;
+            										}
+            										else {
+HXLINE( 792)											_hx_tmp = null();
+            										}
+HXDLIN( 792)										conf->attr->set(HX_("name",4b,72,ff,48),_hx_tmp);
+            									}
+HXLINE( 794)									bool _hx_tmp1;
+HXDLIN( 794)									bool _hx_tmp2;
+HXDLIN( 794)									if (::hx::IsNotEq( conf->attr->get(HX_("autojoin",d9,f6,b1,3e)),HX_("1",31,00,00,00) )) {
+HXLINE( 794)										_hx_tmp2 = ::hx::IsEq( conf->attr->get(HX_("autojoin",d9,f6,b1,3e)),HX_("true",4e,a7,03,4d) );
+            									}
+            									else {
+HXLINE( 794)										_hx_tmp2 = true;
+            									}
+HXDLIN( 794)									if (!(_hx_tmp2)) {
+HXLINE( 794)										_hx_tmp1 = !(caps->isChannel(item2->attr->get_string(HX_("id",db,5b,00,00))));
+            									}
+            									else {
+HXLINE( 794)										_hx_tmp1 = true;
+            									}
+HXDLIN( 794)									if (_hx_tmp1) {
+HXLINE( 794)										return 1;
+            									}
+            									else {
+HXLINE( 794)										return 2;
+            									}
+HXDLIN( 794)									return null();
+            								}
+            								HX_END_LOCAL_FUNC1(return)
+
+            								HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_20, ::borogove::Stanza,item2) HXARGC(1)
+            								void _hx_run( ::borogove::Chat chat){
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_797_processLiveMessage)
+HXLINE( 797)									chat->updateFromBookmark(item2);
+            								}
+            								HX_END_LOCAL_FUNC1((void))
+
+HXLINE( 784)								this->startChatWith(item2->attr->get_string(HX_("id",db,5b,00,00)), ::Dynamic(new _hx_Closure_19(item2)), ::Dynamic(new _hx_Closure_20(item2)));
+            							}
+            							else {
+HXLINE( 801)								chat13->updateFromBookmark(item2);
+HXLINE( 802)								chatsToUpdate->push(chat13);
+            							}
             						}
             					}
             				}
+HXLINE( 806)				::Dynamic _hx_tmp53 = this->persistence;
+HXDLIN( 806)				::borogove::Persistence_obj::storeChats(_hx_tmp53,this->accountId(),chatsToUpdate);
+HXLINE( 807)				this->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
             			}
-HXLINE( 719)			::haxe::Log_obj::trace((HX_("pubsubNode == ",a5,37,1e,6c) + pubsubNode),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),719,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
             		}
             	}
 
@@ -2240,9 +2545,9 @@ HX_DEFINE_DYNAMIC_FUNC3(Client_obj,processLiveMessage,(void))
 void Client_obj::start(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(1)
             		::Dynamic _hx_run(bool _){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_739_start)
-HXLINE( 739)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 739)			return ::borogove::Persistence_obj::getStreamManagement(_gthis1,_gthis->accountId());
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_828_start)
+HXLINE( 828)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 828)			return ::borogove::Persistence_obj::getStreamManagement(_gthis1,_gthis->accountId());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -2250,92 +2555,92 @@ HXDLIN( 739)			return ::borogove::Persistence_obj::getStreamManagement(_gthis1,_
             		void _hx_run( ::Dynamic data){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Client,_gthis) HXARGC(1)
             			 ::borogove::EventResult _hx_run( ::Dynamic data){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_742_start)
-HXLINE( 743)				::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(data->__Field(HX_("mechanisms",fa,b0,9e,80),::hx::paccDynamic)) );
-HXDLIN( 743)				 ::Dynamic tmp1;
-HXDLIN( 743)				if (::hx::IsNotNull( tmp )) {
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_831_start)
+HXLINE( 832)				::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(data->__Field(HX_("mechanisms",fa,b0,9e,80),::hx::paccDynamic)) );
+HXDLIN( 832)				 ::Dynamic tmp1;
+HXDLIN( 832)				if (::hx::IsNotNull( tmp )) {
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             					bool _hx_run( ::Dynamic mech){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_743_start)
-HXLINE( 743)						return ( (bool)(mech->__Field(HX_("canFast",cc,aa,0d,62),::hx::paccDynamic)) );
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_832_start)
+HXLINE( 832)						return ( (bool)(mech->__Field(HX_("canFast",cc,aa,0d,62),::hx::paccDynamic)) );
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 743)					tmp1 = ::Lambda_obj::find(tmp, ::Dynamic(new _hx_Closure_1()));
+HXLINE( 832)					tmp1 = ::Lambda_obj::find(tmp, ::Dynamic(new _hx_Closure_1()));
             				}
             				else {
-HXLINE( 743)					tmp1 = null();
+HXLINE( 832)					tmp1 = null();
             				}
-HXDLIN( 743)				::String _hx_tmp;
-HXDLIN( 743)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 743)					_hx_tmp = ( (::String)(tmp1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
+HXDLIN( 832)				::String _hx_tmp;
+HXDLIN( 832)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 832)					_hx_tmp = ( (::String)(tmp1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
             				}
             				else {
-HXLINE( 743)					_hx_tmp = null();
+HXLINE( 832)					_hx_tmp = null();
             				}
-HXDLIN( 743)				_gthis->fastMechanism = _hx_tmp;
-HXLINE( 744)				bool _hx_tmp1;
-HXDLIN( 744)				if (::hx::IsNotNull( _gthis->token )) {
-HXLINE( 744)					if (::hx::IsNull( _gthis->fastMechanism )) {
-HXLINE( 744)						_hx_tmp1 = ::hx::IsNotNull( data->__Field(HX_("mechanisms",fa,b0,9e,80),::hx::paccDynamic) );
+HXDLIN( 832)				_gthis->fastMechanism = _hx_tmp;
+HXLINE( 833)				bool _hx_tmp1;
+HXDLIN( 833)				if (::hx::IsNotNull( _gthis->token )) {
+HXLINE( 833)					if (::hx::IsNull( _gthis->fastMechanism )) {
+HXLINE( 833)						_hx_tmp1 = ::hx::IsNotNull( data->__Field(HX_("mechanisms",fa,b0,9e,80),::hx::paccDynamic) );
             					}
             					else {
-HXLINE( 744)						_hx_tmp1 = false;
+HXLINE( 833)						_hx_tmp1 = false;
             					}
             				}
             				else {
-HXLINE( 744)					_hx_tmp1 = true;
+HXLINE( 833)					_hx_tmp1 = true;
             				}
-HXDLIN( 744)				if (_hx_tmp1) {
-HXLINE( 745)					 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 745)					return _gthis1->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN( 833)				if (_hx_tmp1) {
+HXLINE( 834)					 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 834)					return _gthis1->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("accountId",e8,81,54,29),_gthis->accountId())));
             				}
             				else {
-HXLINE( 747)					return _gthis->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 836)					return _gthis->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("fastCount",93,fc,67,a5),_gthis->fastCount)
             						->setFixed(1,HX_("mechanism",59,fd,7e,2e),_gthis->fastMechanism)
             						->setFixed(2,HX_("password",1b,23,d0,48),_gthis->token)));
             				}
-HXLINE( 744)				return null();
+HXLINE( 833)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::Client,_gthis) HXARGC(1)
             			 ::borogove::EventResult _hx_run( ::Dynamic data){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_750_start)
-HXLINE( 751)				if (::hx::IsNotNull( _gthis->token )) {
-HXLINE( 752)					_gthis->token = null();
-HXLINE( 753)					 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXDLIN( 753)					::String _hx_tmp = _gthis->jid->asString();
-HXDLIN( 753)					_gthis1->connect(_hx_tmp,( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) ));
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_839_start)
+HXLINE( 840)				if (::hx::IsNotNull( _gthis->token )) {
+HXLINE( 841)					_gthis->token = null();
+HXLINE( 842)					 ::borogove::GenericStream _gthis1 = _gthis->stream;
+HXDLIN( 842)					::String _hx_tmp = _gthis->jid->asString();
+HXDLIN( 842)					_gthis1->connect(_hx_tmp,( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) ));
             				}
             				else {
-HXLINE( 755)					 ::borogove::GenericStream _gthis2 = _gthis->stream;
-HXDLIN( 755)					::String _hx_tmp1 = _gthis->jid->asString();
-HXDLIN( 755)					_gthis2->connect(_hx_tmp1,( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) ));
+HXLINE( 844)					 ::borogove::GenericStream _gthis2 = _gthis->stream;
+HXDLIN( 844)					::String _hx_tmp1 = _gthis->jid->asString();
+HXDLIN( 844)					_gthis2->connect(_hx_tmp1,( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) ));
             				}
-HXLINE( 757)				return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE( 846)				return ::borogove::EventResult_obj::EventHandled_dyn();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_740_start)
-HXLINE( 741)			if (::hx::IsGreater( data->__Field(HX_("sortId",d9,7a,37,30),::hx::paccDynamic),_gthis->sortId )) {
-HXLINE( 741)				_gthis->sortId = ( (::String)(data->__Field(HX_("sortId",d9,7a,37,30),::hx::paccDynamic)) );
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_829_start)
+HXLINE( 830)			if (::hx::IsGreater( data->__Field(HX_("sortId",d9,7a,37,30),::hx::paccDynamic),_gthis->sortId )) {
+HXLINE( 830)				_gthis->sortId = ( (::String)(data->__Field(HX_("sortId",d9,7a,37,30),::hx::paccDynamic)) );
             			}
-HXLINE( 742)			_gthis->stream->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_2(_gthis)));
-HXLINE( 750)			_gthis->stream->on(HX_("auth/fail",25,45,e9,d1), ::Dynamic(new _hx_Closure_3(_gthis)));
-HXLINE( 759)			_gthis->firstSync = true;
-HXLINE( 760)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXDLIN( 760)			::String _hx_tmp = _gthis->jid->asString();
-HXDLIN( 760)			_gthis1->connect(_hx_tmp,( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) ));
+HXLINE( 831)			_gthis->stream->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_2(_gthis)));
+HXLINE( 839)			_gthis->stream->on(HX_("auth/fail",25,45,e9,d1), ::Dynamic(new _hx_Closure_3(_gthis)));
+HXLINE( 848)			_gthis->firstSync = true;
+HXLINE( 849)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
+HXDLIN( 849)			::String _hx_tmp = _gthis->jid->asString();
+HXDLIN( 849)			_gthis1->connect(_hx_tmp,( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) ));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_736_start)
-HXDLIN( 736)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 737)		this->stream->emitSMupdates = false;
-HXLINE( 738)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->startOffline(), ::Dynamic(new _hx_Closure_0(_gthis)),null()), ::Dynamic(new _hx_Closure_4(_gthis)),null());
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_825_start)
+HXDLIN( 825)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 826)		this->stream->emitSMupdates = false;
+HXLINE( 827)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->startOffline(), ::Dynamic(new _hx_Closure_0(_gthis)),null()), ::Dynamic(new _hx_Closure_4(_gthis)),null());
             	}
 
 
@@ -2344,115 +2649,133 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,start,(void))
 ::Dynamic Client_obj::startOffline(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(1)
             		::Dynamic _hx_run( ::borogove::ChatMessage point){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_774_startOffline)
-HXLINE( 775)			::String _hx_tmp;
-HXDLIN( 775)			if (::hx::IsNotNull( point )) {
-HXLINE( 775)				_hx_tmp = point->sortId;
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_863_startOffline)
+HXLINE( 864)			::String _hx_tmp;
+HXDLIN( 864)			if (::hx::IsNotNull( point )) {
+HXLINE( 864)				_hx_tmp = point->sortId;
             			}
             			else {
-HXLINE( 775)				_hx_tmp = null();
+HXLINE( 864)				_hx_tmp = null();
             			}
-HXDLIN( 775)			if (::hx::IsNotNull( _hx_tmp )) {
-HXLINE( 775)				_gthis->sortId = point->sortId;
+HXDLIN( 864)			if (::hx::IsNotNull( _hx_tmp )) {
+HXLINE( 864)				_gthis->sortId = point->sortId;
             			}
-HXLINE( 777)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 777)			return ::borogove::Persistence_obj::getLogin(_gthis1,_gthis->accountId());
+HXLINE( 866)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 866)			return ::borogove::Persistence_obj::getLogin(_gthis1,_gthis->accountId());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic login){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_778_startOffline)
-HXLINE( 779)			_gthis->token = ( (::String)(login->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic)) );
-HXLINE( 780)			_gthis->fastCount = login->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic);
-HXLINE( 781)			::String tmp = ( (::String)(login->__Field(HX_("clientId",06,73,8f,15),::hx::paccDynamic)) );
-HXDLIN( 781)			::String _hx_tmp;
-HXDLIN( 781)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 781)				_hx_tmp = tmp;
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_867_startOffline)
+HXLINE( 868)			_gthis->token = ( (::String)(login->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic)) );
+HXLINE( 869)			_gthis->rosterVer = ( (::String)(login->__Field(HX_("rosterVer",98,f5,fe,3e),::hx::paccDynamic)) );
+HXLINE( 870)			_gthis->fastCount = login->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic);
+HXLINE( 871)			::String tmp = ( (::String)(login->__Field(HX_("clientId",06,73,8f,15),::hx::paccDynamic)) );
+HXDLIN( 871)			::String _hx_tmp;
+HXDLIN( 871)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 871)				_hx_tmp = tmp;
             			}
             			else {
-HXLINE( 781)				_hx_tmp = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE( 871)				_hx_tmp = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
             			}
-HXDLIN( 781)			_gthis->stream->clientId = _hx_tmp;
-HXLINE( 782)			_gthis->jid = _gthis->jid->withResource(_gthis->stream->clientId);
-HXLINE( 783)			::String tmp1 = ( (::String)(login->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)) );
-HXDLIN( 783)			::String _hx_tmp1;
-HXDLIN( 783)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 783)				_hx_tmp1 = tmp1;
+HXDLIN( 871)			_gthis->stream->clientId = _hx_tmp;
+HXLINE( 872)			_gthis->jid = _gthis->jid->withResource(_gthis->stream->clientId);
+HXLINE( 873)			::String tmp1 = ( (::String)(login->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)) );
+HXDLIN( 873)			::String _hx_tmp1;
+HXDLIN( 873)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 873)				_hx_tmp1 = tmp1;
             			}
             			else {
-HXLINE( 783)				_hx_tmp1 = _gthis->_displayName;
+HXLINE( 873)				_hx_tmp1 = _gthis->_displayName;
             			}
-HXDLIN( 783)			_gthis->_displayName = _hx_tmp1;
-HXLINE( 785)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 785)			return ::borogove::Persistence_obj::getChats(_gthis1,_gthis->accountId());
+HXDLIN( 873)			_gthis->_displayName = _hx_tmp1;
+HXLINE( 875)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 875)			return ::borogove::Persistence_obj::getChats(_gthis1,_gthis->accountId());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::Client,_gthis) HXARGC(1)
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4, ::borogove::Client,_gthis) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> protoChats){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Client,_gthis) HXARGC(2)
             			int _hx_run( ::borogove::SerializedChat a, ::borogove::SerializedChat b){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_787_startOffline)
-HXLINE( 787)				::String a1 = a->chatId;
-HXDLIN( 787)				if ((a1 == _gthis->accountId())) {
-HXLINE( 787)					return 1;
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_877_startOffline)
+HXLINE( 877)				::String a1 = a->chatId;
+HXDLIN( 877)				if ((a1 == _gthis->accountId())) {
+HXLINE( 877)					return 1;
             				}
             				else {
-HXLINE( 787)					return 0;
+HXLINE( 877)					return 0;
             				}
-HXDLIN( 787)				return 0;
+HXDLIN( 877)				return 0;
             			}
             			HX_END_LOCAL_FUNC2(return)
 
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_786_startOffline)
-HXLINE( 787)			protoChats->sort( ::Dynamic(new _hx_Closure_2(_gthis)));
-HXLINE( 788)			 ::borogove::SerializedChat oneProtoChat = null();
-HXLINE( 789)			while(true){
-HXLINE( 789)				oneProtoChat = protoChats->pop().StaticCast<  ::borogove::SerializedChat >();
-HXDLIN( 789)				if (!(::hx::IsNotNull( oneProtoChat ))) {
-HXLINE( 789)					goto _hx_goto_63;
-            				}
-HXLINE( 790)				::Array< ::Dynamic> _gthis1 = _gthis->chats;
-HXDLIN( 790)				_gthis1->push(oneProtoChat->toChat(_gthis,_gthis->stream,_gthis->persistence));
-            			}
-            			_hx_goto_63:;
-HXLINE( 792)			 ::borogove::Client _gthis2 = _gthis;
-HXDLIN( 792)			_gthis2->getDirectChat(_gthis->accountId(),null());
-HXLINE( 793)			 ::borogove::Client _gthis3 = _gthis;
-HXDLIN( 793)			_gthis3->getDirectChat(::borogove::JID_obj::parse(_gthis->accountId())->domain,null());
-HXLINE( 794)			::Dynamic _gthis4 = _gthis->persistence;
-HXDLIN( 794)			::String _hx_tmp = _gthis->accountId();
-HXDLIN( 794)			return ::borogove::Persistence_obj::getChatsUnreadDetails(_gthis4,_hx_tmp,_gthis->chats);
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::Client,_gthis) HXARGC(1)
+            			::Dynamic _hx_run(::Array< ::Dynamic> theChats){
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_883_startOffline)
+HXLINE( 884)				_gthis->chats = theChats;
+HXLINE( 885)				{
+HXLINE( 885)					int _g = 0;
+HXDLIN( 885)					::Array< ::Dynamic> _g1 = _gthis->chats;
+HXDLIN( 885)					while((_g < _g1->length)){
+HXLINE( 885)						 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN( 885)						_g = (_g + 1);
+HXLINE( 886)						_gthis->chatsIndex->set(chat->chatId,chat);
+            					}
+            				}
+HXLINE( 888)				 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 888)				_gthis1->getDirectChat(_gthis->accountId(),null());
+HXLINE( 889)				 ::borogove::Client _gthis2 = _gthis;
+HXDLIN( 889)				_gthis2->getDirectChat(::borogove::JID_obj::parse(_gthis->accountId())->domain,null());
+HXLINE( 890)				::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN( 890)				::String _hx_tmp = _gthis->accountId();
+HXDLIN( 890)				return ::borogove::Persistence_obj::getChatsUnreadDetails(_gthis3,_hx_tmp,_gthis->chats);
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_876_startOffline)
+HXLINE( 877)			protoChats->sort( ::Dynamic(new _hx_Closure_2(_gthis)));
+HXLINE( 878)			 ::borogove::SerializedChat oneProtoChat = null();
+HXLINE( 879)			::Array< ::Dynamic> chatPromises = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 880)			while(true){
+HXLINE( 880)				oneProtoChat = protoChats->pop().StaticCast<  ::borogove::SerializedChat >();
+HXDLIN( 880)				if (!(::hx::IsNotNull( oneProtoChat ))) {
+HXLINE( 880)					goto _hx_goto_71;
+            				}
+HXLINE( 881)				chatPromises->push(oneProtoChat->toChat(_gthis,_gthis->stream,_gthis->persistence));
+            			}
+            			_hx_goto_71:;
+HXLINE( 883)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(chatPromises), ::Dynamic(new _hx_Closure_3(_gthis)),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4, ::borogove::Client,_gthis) HXARGC(1)
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_5, ::borogove::Client,_gthis) HXARGC(1)
             		bool _hx_run(::Array< ::Dynamic> details){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_795_startOffline)
-HXLINE( 796)			{
-HXLINE( 796)				int _g = 0;
-HXDLIN( 796)				while((_g < details->length)){
-HXLINE( 796)					 ::Dynamic detail = details->__get(_g);
-HXDLIN( 796)					_g = (_g + 1);
-HXLINE( 797)					 ::borogove::Chat chat = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
-HXLINE( 798)					if (::hx::IsNotNull( chat )) {
-HXLINE( 799)						chat->setLastMessage(( ( ::borogove::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
-HXLINE( 800)						chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_892_startOffline)
+HXLINE( 893)			{
+HXLINE( 893)				int _g = 0;
+HXDLIN( 893)				while((_g < details->length)){
+HXLINE( 893)					 ::Dynamic detail = details->__get(_g);
+HXDLIN( 893)					_g = (_g + 1);
+HXLINE( 894)					 ::borogove::Chat chat = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
+HXLINE( 895)					if (::hx::IsNotNull( chat )) {
+HXLINE( 896)						chat->setLastMessage(( ( ::borogove::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
+HXLINE( 897)						chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
             					}
             				}
             			}
-HXLINE( 803)			_gthis->sortChats();
-HXLINE( 804)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
-HXLINE( 805)			return true;
+HXLINE( 900)			_gthis->sortChats();
+HXLINE( 901)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
+HXLINE( 902)			return true;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_769_startOffline)
-HXDLIN( 769)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 772)		__hxcpp_collect(true);
-HXLINE( 774)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 774)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::syncPoint(_hx_tmp,this->accountId(),null()), ::Dynamic(new _hx_Closure_0(_gthis)),null()), ::Dynamic(new _hx_Closure_1(_gthis)),null()), ::Dynamic(new _hx_Closure_3(_gthis)),null()), ::Dynamic(new _hx_Closure_4(_gthis)),null());
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_858_startOffline)
+HXDLIN( 858)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 861)		__hxcpp_collect(true);
+HXLINE( 863)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 863)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::syncPoint(_hx_tmp,this->accountId(),null()), ::Dynamic(new _hx_Closure_0(_gthis)),null()), ::Dynamic(new _hx_Closure_1(_gthis)),null()), ::Dynamic(new _hx_Closure_4(_gthis)),null()), ::Dynamic(new _hx_Closure_5(_gthis)),null());
             	}
 
 
@@ -2486,26 +2809,27 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->startOffline(
 void Client_obj::logout(bool completely){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_818_logout)
-HXLINE( 818)			_gthis->stream->disconnect();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_916_logout)
+HXLINE( 916)			_gthis->stream->disconnect();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_814_logout)
-HXDLIN( 814)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 815)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 815)		::borogove::Persistence_obj::removeAccount(_hx_tmp,this->accountId(),completely);
-HXLINE( 816)		 ::borogove::queries::Push2Disable disable =  ::borogove::queries::Push2Disable_obj::__alloc( HX_CTX ,this->jid->asBare()->asString());
-HXLINE( 817)		disable->onFinished( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 820)		this->sendQuery(disable);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_911_logout)
+HXDLIN( 911)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 912)		this->channelPinger->stopTimer();
+HXLINE( 913)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 913)		::borogove::Persistence_obj::removeAccount(_hx_tmp,this->accountId(),completely);
+HXLINE( 914)		 ::borogove::queries::Push2Disable disable =  ::borogove::queries::Push2Disable_obj::__alloc( HX_CTX ,this->jid->asBare()->asString());
+HXLINE( 915)		disable->onFinished( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 918)		this->sendQuery(disable);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,logout,(void))
 
 void Client_obj::usePassword(::String password){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_830_usePassword)
-HXDLIN( 830)		this->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_928_usePassword)
+HXDLIN( 928)		this->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("requestToken",2a,35,fd,af),this->fastMechanism)
             			->setFixed(1,HX_("password",1b,23,d0,48),password)));
             	}
@@ -2514,87 +2838,185 @@ HXDLIN( 830)		this->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,usePassword,(void))
 
 ::String Client_obj::accountId(){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_839_accountId)
-HXDLIN( 839)		return this->jid->asBare()->asString();
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_937_accountId)
+HXDLIN( 937)		return this->jid->asBare()->asString();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,accountId,return )
 
 ::String Client_obj::displayName(){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_848_displayName)
-HXDLIN( 848)		return this->_displayName;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_946_displayName)
+HXDLIN( 946)		return this->_displayName;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,displayName,return )
 
+void Client_obj::setPhoto( ::borogove::AttachmentSource source,bool publicAccess){
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_955_setPhoto)
+HXDLIN( 955)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 956)		if ((source->size > 128000)) {
+HXLINE( 956)			HX_STACK_DO_THROW(HX_("Size limit of 128KB",a9,c1,4c,64));
+            		}
+HXLINE( 957)		 ::haxe::io::BytesOutput out =  ::haxe::io::BytesOutput_obj::__alloc( HX_CTX );
+HXLINE( 958)		 ::haxe::io::BytesOutput out1 = out;
+HXDLIN( 958)		 ::tink::io::std::OutputSink sink =  ::tink::io::std::OutputSink_obj::__alloc( HX_CTX ,HX_("bytes",6b,08,98,bd),out1,::tink::io::_Worker::Worker_Impl__obj::get());
+HXLINE( 959)		{
+            			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::borogove::AttachmentSource,source,bool,publicAccess, ::haxe::io::BytesOutput,out) HXARGC(1)
+            			void _hx_run( ::tink::io::PipeResult _){
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_959_setPhoto)
+HXLINE( 960)				 ::haxe::io::Bytes bytes = out->getBytes();
+HXLINE( 961)				::String b64 = ::haxe::crypto::Base64_obj::encode(bytes,null());
+HXLINE( 962)				::String sha1 = ::borogove::Hash_obj::sha1(bytes)->toHex();
+HXLINE( 963)				::haxe::Log_obj::trace(HX_("set avatar",d7,54,99,b2), ::Dynamic(::hx::Anon_obj::Create(5)
+            					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
+            					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(4)->init(0,sha1)->init(1,b64)->init(2,bytes)->init(3,source))
+            					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("setPhoto",b0,31,28,d0))
+            					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),963)));
+HXLINE( 965)				 ::borogove::Client _gthis1 = _gthis;
+HXLINE( 966)				 ::borogove::Stanza _hx_tmp =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))),null())->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:avatar:data",0f,7e,01,4e))),null())->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("id",db,5b,00,00),sha1)),null())->textTag(HX_("data",2a,56,63,42),b64, ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:avatar:data",0f,7e,01,4e))),null());
+HXLINE( 977)				::String _hx_tmp1;
+HXDLIN( 977)				if (publicAccess) {
+HXLINE( 977)					_hx_tmp1 = HX_("open",ca,03,b4,49);
+            				}
+            				else {
+HXLINE( 977)					_hx_tmp1 = HX_("presence",3b,52,d7,66);
+            				}
+HXLINE( 965)				_gthis1->publishWithOptions(_hx_tmp, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            					->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
+            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
+            					->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/pubsub#publish-options",f4,9c,72,50),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#type",9a,0e,c3,59))),null())->textTag(HX_("value",71,7f,b8,31),HX_("urn:xmpp:avatar:data",0f,7e,01,4e),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#deliver_payloads",df,36,1b,95))),null())->textTag(HX_("value",71,7f,b8,31),HX_("false",a3,35,4f,fb),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#persist_items",75,44,6b,ad))),null())->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#max_items",05,69,9f,7c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("1",31,00,00,00),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#access_model",6e,cf,ac,1d))),null())->textTag(HX_("value",71,7f,b8,31),_hx_tmp1,null(),null())->up());
+HXLINE( 980)				 ::borogove::Client _gthis2 = _gthis;
+HXLINE( 981)				 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))),null())->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee))),null())->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("id",db,5b,00,00),sha1)),null())->tag(HX_("metadata",6f,e7,19,40), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee))),null());
+HXLINE( 986)				::String _hx_tmp3 = ::Std_obj::string(source->size);
+HXLINE( 981)				 ::borogove::Stanza _hx_tmp4 = _hx_tmp2->tag(HX_("info",6e,38,bb,45), ::Dynamic(::hx::Anon_obj::Create(3)
+            					->setFixed(0,HX_("bytes",6b,08,98,bd),_hx_tmp3)
+            					->setFixed(1,HX_("id",db,5b,00,00),sha1)
+            					->setFixed(2,HX_("type",ba,f2,08,4d),source->type)),null());
+HXLINE( 993)				::String _hx_tmp5;
+HXDLIN( 993)				if (publicAccess) {
+HXLINE( 993)					_hx_tmp5 = HX_("open",ca,03,b4,49);
+            				}
+            				else {
+HXLINE( 993)					_hx_tmp5 = HX_("presence",3b,52,d7,66);
+            				}
+HXLINE( 980)				_gthis2->publishWithOptions(_hx_tmp4, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            					->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
+            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
+            					->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/pubsub#publish-options",f4,9c,72,50),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#type",9a,0e,c3,59))),null())->textTag(HX_("value",71,7f,b8,31),HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#deliver_payloads",df,36,1b,95))),null())->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#persist_items",75,44,6b,ad))),null())->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#max_items",05,69,9f,7c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("1",31,00,00,00),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#access_model",6e,cf,ac,1d))),null())->textTag(HX_("value",71,7f,b8,31),_hx_tmp5,null(),null())->up());
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXLINE( 959)			::String name = source->name;
+HXDLIN( 959)			 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
+HXDLIN( 959)			 ::Dynamic options = null();
+HXDLIN( 959)			options =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXDLIN( 959)			::Dynamic this1 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
+HXDLIN( 959)			 ::Dynamic _g = options->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
+HXDLIN( 959)			int this2;
+HXDLIN( 959)			if (::hx::IsNull( _g )) {
+HXLINE( 959)				this2 = 65536;
+            			}
+            			else {
+HXLINE( 959)				this2 = ( (int)(_g) );
+            			}
+HXDLIN( 959)			::tink::io::_Source::Source_Impl__obj::pipeTo( ::tink::io::std::InputSource_obj::__alloc( HX_CTX ,name,input,this1,::haxe::io::Bytes_obj::alloc(this2),0),sink,null())->handle( ::Dynamic(new _hx_Closure_0(_gthis,source,publicAccess,out)));
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Client_obj,setPhoto,(void))
+
 void Client_obj::setProfile( ::borogove::ProfileBuilder profile,bool publicAccess){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::ProfileItem item){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_858_setProfile)
-HXLINE( 858)			return (item->key == HX_("fn",48,59,00,00));
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1005_setProfile)
+HXLINE(1005)			return (item->key == HX_("fn",48,59,00,00));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_857_setProfile)
-HXLINE( 858)		 ::borogove::ProfileItem fn = ( ( ::borogove::ProfileItem)(::Lambda_obj::find(profile->build()->items, ::Dynamic(new _hx_Closure_0()))) );
-HXLINE( 859)		if (::hx::IsNotNull( fn )) {
-HXLINE( 860)			::String fnText = fn->text()->__get(0);
-HXLINE( 861)			bool _hx_tmp;
-HXDLIN( 861)			bool _hx_tmp1;
-HXDLIN( 861)			if (::hx::IsNotNull( fnText )) {
-HXLINE( 861)				_hx_tmp1 = (fnText != HX_("",00,00,00,00));
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1004_setProfile)
+HXLINE(1005)		 ::borogove::ProfileItem fn = ( ( ::borogove::ProfileItem)(::Lambda_obj::find(profile->build()->items, ::Dynamic(new _hx_Closure_0()))) );
+HXLINE(1006)		if (::hx::IsNotNull( fn )) {
+HXLINE(1007)			::String fnText = fn->text()->__get(0);
+HXLINE(1008)			bool _hx_tmp;
+HXDLIN(1008)			bool _hx_tmp1;
+HXDLIN(1008)			if (::hx::IsNotNull( fnText )) {
+HXLINE(1008)				_hx_tmp1 = (fnText != HX_("",00,00,00,00));
             			}
             			else {
-HXLINE( 861)				_hx_tmp1 = false;
+HXLINE(1008)				_hx_tmp1 = false;
             			}
-HXDLIN( 861)			if (_hx_tmp1) {
-HXLINE( 861)				_hx_tmp = (fnText != this->displayName());
+HXDLIN(1008)			if (_hx_tmp1) {
+HXLINE(1008)				_hx_tmp = (fnText != this->displayName());
             			}
             			else {
-HXLINE( 861)				_hx_tmp = false;
+HXLINE(1008)				_hx_tmp = false;
             			}
-HXDLIN( 861)			if (_hx_tmp) {
+HXDLIN(1008)			if (_hx_tmp) {
             				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             				void _hx_run( ::borogove::Stanza response){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_869_setProfile)
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1016_setProfile)
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 862)				 ::borogove::GenericStream _hx_tmp2 = this->stream;
-HXDLIN( 862)				_hx_tmp2->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("node",02,0a,0a,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9))))->tag(HX_("item",13,c5,bf,45),null())->textTag(HX_("nick",a3,7b,05,49),fnText, ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/nick",17,30,dc,e9))))->up()->up()->up(), ::Dynamic(new _hx_Closure_1()));
-            			}
-            		}
-HXLINE( 875)		 ::borogove::Stanza _hx_tmp3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:vcard4",4a,89,04,19))));
-HXDLIN( 875)		 ::borogove::Stanza _hx_tmp4 = _hx_tmp3->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7())));
-HXDLIN( 875)		 ::borogove::Stanza _hx_tmp5 = _hx_tmp4->addChild(profile->buildStanza());
-HXLINE( 887)		::String _hx_tmp6;
-HXDLIN( 887)		if (publicAccess) {
-HXLINE( 887)			_hx_tmp6 = HX_("open",ca,03,b4,49);
+HXLINE(1009)				 ::borogove::GenericStream _hx_tmp2 = this->stream;
+HXDLIN(1009)				_hx_tmp2->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))),null())->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("node",02,0a,0a,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9))),null())->tag(HX_("item",13,c5,bf,45),null(),null())->textTag(HX_("nick",a3,7b,05,49),fnText, ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/nick",17,30,dc,e9))),null())->up()->up()->up(), ::Dynamic(new _hx_Closure_1()));
+            			}
+            		}
+HXLINE(1022)		 ::borogove::Stanza _hx_tmp3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))),null())->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:vcard4",4a,89,04,19))),null());
+HXDLIN(1022)		 ::borogove::Stanza _hx_tmp4 = _hx_tmp3->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7())),null());
+HXDLIN(1022)		 ::borogove::Stanza _hx_tmp5 = _hx_tmp4->addChild(profile->buildStanza());
+HXLINE(1034)		::String _hx_tmp6;
+HXDLIN(1034)		if (publicAccess) {
+HXLINE(1034)			_hx_tmp6 = HX_("open",ca,03,b4,49);
             		}
             		else {
-HXLINE( 887)			_hx_tmp6 = HX_("presence",3b,52,d7,66);
+HXLINE(1034)			_hx_tmp6 = HX_("presence",3b,52,d7,66);
             		}
-HXLINE( 874)		this->publishWithOptions(_hx_tmp5, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1021)		this->publishWithOptions(_hx_tmp5, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))))->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
-            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))))->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/pubsub#publish-options",f4,9c,72,50),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#title",b8,5d,59,26))))->textTag(HX_("value",71,7f,b8,31),HX_("Profile",09,71,9a,c0),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#type",9a,0e,c3,59))))->textTag(HX_("value",71,7f,b8,31),HX_("urn:ietf:params:xml:ns:vcard-4.0",6e,ca,81,21),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#deliver_payloads",df,36,1b,95))))->textTag(HX_("value",71,7f,b8,31),HX_("false",a3,35,4f,fb),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#persist_items",75,44,6b,ad))))->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#max_items",05,69,9f,7c))))->textTag(HX_("value",71,7f,b8,31),HX_("1",31,00,00,00),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#access_model",6e,cf,ac,1d))))->textTag(HX_("value",71,7f,b8,31),_hx_tmp6,null())->up());
+            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/pubsub#publish-options",f4,9c,72,50),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#title",b8,5d,59,26))),null())->textTag(HX_("value",71,7f,b8,31),HX_("Profile",09,71,9a,c0),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#type",9a,0e,c3,59))),null())->textTag(HX_("value",71,7f,b8,31),HX_("urn:ietf:params:xml:ns:vcard-4.0",6e,ca,81,21),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#deliver_payloads",df,36,1b,95))),null())->textTag(HX_("value",71,7f,b8,31),HX_("false",a3,35,4f,fb),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#persist_items",75,44,6b,ad))),null())->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#max_items",05,69,9f,7c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("1",31,00,00,00),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#access_model",6e,cf,ac,1d))),null())->textTag(HX_("value",71,7f,b8,31),_hx_tmp6,null(),null())->up());
             	}
 
 
@@ -2603,320 +3025,596 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,setProfile,(void))
 void Client_obj::setStatus( ::borogove::Status status,::hx::Null< int >  __o_expires,::hx::Null< bool >  __o_publicAccess){
             		int expires = __o_expires.Default(86400);
             		bool publicAccess = __o_publicAccess.Default(false);
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_899_setStatus)
-HXLINE( 900)		 ::borogove::Stanza _hx_tmp =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("node",02,0a,0a,49),HX_("http://jabber.org/protocol/activity",43,2c,6e,94))));
-HXDLIN( 900)		 ::borogove::Stanza _hx_tmp1 = _hx_tmp->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7())));
-HXDLIN( 900)		 ::borogove::Stanza _hx_tmp2 = _hx_tmp1->addChild(status->toStanza());
-HXLINE( 905)		 ::borogove::Stanza _hx_tmp3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1046_setStatus)
+HXLINE(1047)		 ::borogove::Stanza _hx_tmp =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))),null())->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("node",02,0a,0a,49),HX_("http://jabber.org/protocol/activity",43,2c,6e,94))),null());
+HXDLIN(1047)		 ::borogove::Stanza _hx_tmp1 = _hx_tmp->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7())),null());
+HXDLIN(1047)		 ::borogove::Stanza _hx_tmp2 = _hx_tmp1->addChild(status->toStanza());
+HXLINE(1052)		 ::borogove::Stanza _hx_tmp3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))))->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
-            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))))->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/pubsub#publish-options",f4,9c,72,50),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#type",9a,0e,c3,59))))->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/activity",43,2c,6e,94),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#deliver_payloads",df,36,1b,95))))->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#persist_items",75,44,6b,ad))))->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#max_items",05,69,9f,7c))))->textTag(HX_("value",71,7f,b8,31),HX_("1",31,00,00,00),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#item_expire",eb,88,54,80))));
-HXLINE( 911)		::String _hx_tmp4 = ::Std_obj::string(expires);
-HXLINE( 912)		::String _hx_tmp5;
-HXDLIN( 912)		if (publicAccess) {
-HXLINE( 912)			_hx_tmp5 = HX_("open",ca,03,b4,49);
+            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/pubsub#publish-options",f4,9c,72,50),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#type",9a,0e,c3,59))),null())->textTag(HX_("value",71,7f,b8,31),HX_("http://jabber.org/protocol/activity",43,2c,6e,94),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#deliver_payloads",df,36,1b,95))),null())->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#persist_items",75,44,6b,ad))),null())->textTag(HX_("value",71,7f,b8,31),HX_("true",4e,a7,03,4d),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#max_items",05,69,9f,7c))),null())->textTag(HX_("value",71,7f,b8,31),HX_("1",31,00,00,00),null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#item_expire",eb,88,54,80))),null());
+HXLINE(1058)		::String _hx_tmp4 = ::Std_obj::string(expires);
+HXLINE(1059)		::String _hx_tmp5;
+HXDLIN(1059)		if (publicAccess) {
+HXLINE(1059)			_hx_tmp5 = HX_("open",ca,03,b4,49);
             		}
             		else {
-HXLINE( 912)			_hx_tmp5 = HX_("presence",3b,52,d7,66);
+HXLINE(1059)			_hx_tmp5 = HX_("presence",3b,52,d7,66);
             		}
-HXLINE( 899)		this->publishWithOptions(_hx_tmp2,_hx_tmp3->textTag(HX_("value",71,7f,b8,31),_hx_tmp4,null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#access_model",6e,cf,ac,1d))))->textTag(HX_("value",71,7f,b8,31),_hx_tmp5,null())->up());
+HXLINE(1046)		this->publishWithOptions(_hx_tmp2,_hx_tmp3->textTag(HX_("value",71,7f,b8,31),_hx_tmp4,null(),null())->up()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("var",e7,de,59,00),HX_("pubsub#access_model",6e,cf,ac,1d))),null())->textTag(HX_("value",71,7f,b8,31),_hx_tmp5,null(),null())->up());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Client_obj,setStatus,(void))
 
 bool Client_obj::updateDisplayName(::String fn){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_916_updateDisplayName)
-HXLINE( 917)		bool _hx_tmp;
-HXDLIN( 917)		bool _hx_tmp1;
-HXDLIN( 917)		if (::hx::IsNotNull( fn )) {
-HXLINE( 917)			_hx_tmp1 = (fn == HX_("",00,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1063_updateDisplayName)
+HXLINE(1064)		bool _hx_tmp;
+HXDLIN(1064)		bool _hx_tmp1;
+HXDLIN(1064)		if (::hx::IsNotNull( fn )) {
+HXLINE(1064)			_hx_tmp1 = (fn == HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 917)			_hx_tmp1 = true;
+HXLINE(1064)			_hx_tmp1 = true;
             		}
-HXDLIN( 917)		if (!(_hx_tmp1)) {
-HXLINE( 917)			_hx_tmp = (fn == this->displayName());
+HXDLIN(1064)		if (!(_hx_tmp1)) {
+HXLINE(1064)			_hx_tmp = (fn == this->displayName());
             		}
             		else {
-HXLINE( 917)			_hx_tmp = true;
+HXLINE(1064)			_hx_tmp = true;
             		}
-HXDLIN( 917)		if (_hx_tmp) {
-HXLINE( 917)			return false;
+HXDLIN(1064)		if (_hx_tmp) {
+HXLINE(1064)			return false;
             		}
-HXLINE( 918)		this->_displayName = fn;
-HXLINE( 919)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN( 919)		::String _hx_tmp3 = this->jid->asBare()->asString();
-HXDLIN( 919)		::String tmp = this->stream->clientId;
-HXDLIN( 919)		::String _hx_tmp4;
-HXDLIN( 919)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 919)			_hx_tmp4 = tmp;
+HXLINE(1065)		this->_displayName = fn;
+HXLINE(1066)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1066)		::String _hx_tmp3 = this->jid->asBare()->asString();
+HXDLIN(1066)		::String tmp = this->stream->clientId;
+HXDLIN(1066)		::String _hx_tmp4;
+HXDLIN(1066)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1066)			_hx_tmp4 = tmp;
             		}
             		else {
-HXLINE( 919)			_hx_tmp4 = this->jid->resource;
+HXLINE(1066)			_hx_tmp4 = this->jid->resource;
             		}
-HXDLIN( 919)		::borogove::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,fn,null());
-HXLINE( 920)		this->pingAllChannels(false);
-HXLINE( 921)		return true;
+HXDLIN(1066)		::borogove::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,fn,this->rosterVer,null());
+HXLINE(1067)		this->pingAllChannels(false);
+HXLINE(1068)		return true;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,updateDisplayName,return )
 
+void Client_obj::preferE2ee(int preference){
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1077_preferE2ee)
+HXLINE(1078)		::Array< int > _this = this->outgoingE2EEPreference;
+HXDLIN(1078)		::Array< int > _g = ::Array_obj< int >::__new(0);
+HXDLIN(1078)		{
+HXLINE(1078)			int _g1 = 0;
+HXDLIN(1078)			while((_g1 < _this->length)){
+HXLINE(1078)				int v = _this->__get(_g1);
+HXDLIN(1078)				_g1 = (_g1 + 1);
+HXDLIN(1078)				if ((v != preference)) {
+HXLINE(1078)					_g->push(v);
+            				}
+            			}
+            		}
+HXDLIN(1078)		this->outgoingE2EEPreference = _g;
+HXLINE(1079)		this->outgoingE2EEPreference->unshift(preference);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Client_obj,preferE2ee,(void))
+
+void Client_obj::banE2ee(int preference){
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1089_banE2ee)
+HXDLIN(1089)		::Array< int > _this = this->outgoingE2EEPreference;
+HXDLIN(1089)		::Array< int > _g = ::Array_obj< int >::__new(0);
+HXDLIN(1089)		{
+HXDLIN(1089)			int _g1 = 0;
+HXDLIN(1089)			while((_g1 < _this->length)){
+HXDLIN(1089)				int v = _this->__get(_g1);
+HXDLIN(1089)				_g1 = (_g1 + 1);
+HXDLIN(1089)				if ((v != preference)) {
+HXDLIN(1089)					_g->push(v);
+            				}
+            			}
+            		}
+HXDLIN(1089)		this->outgoingE2EEPreference = _g;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Client_obj,banE2ee,(void))
+
  ::borogove::EventResult Client_obj::onConnected( ::Dynamic data){
-            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(2)
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis) HXARGC(2)
             		void _hx_run( ::Dynamic service, ::borogove::Caps caps){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_957_onConnected)
-HXLINE( 957)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 957)			::String _hx_tmp = _gthis->accountId();
-HXDLIN( 957)			::String _hx_tmp1 = ( ( ::borogove::JID)(service->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
-HXDLIN( 957)			::borogove::Persistence_obj::storeService(_gthis1,_hx_tmp,_hx_tmp1, ::Dynamic(service->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)), ::Dynamic(service->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)),caps);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1137_onConnected)
+HXLINE(1137)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1137)			::String _hx_tmp = _gthis->accountId();
+HXDLIN(1137)			::String _hx_tmp1 = ( ( ::borogove::JID)(service->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
+HXDLIN(1137)			::borogove::Persistence_obj::storeService(_gthis1,_hx_tmp,_hx_tmp1, ::Dynamic(service->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)), ::Dynamic(service->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)),caps);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::Client,_gthis) HXARGC(0)
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_5, ::borogove::Client,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Client,_gthis) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4, ::borogove::Client,_gthis) HXARGC(1)
             			void _hx_run(bool syncFinished){
-            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis) HXARGC(1)
+            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::Client,_gthis) HXARGC(1)
             				void _hx_run(::Array< ::Dynamic> details){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_974_onConnected)
-HXLINE( 975)					{
-HXLINE( 975)						int _g = 0;
-HXDLIN( 975)						while((_g < details->length)){
-HXLINE( 975)							 ::Dynamic detail = details->__get(_g);
-HXDLIN( 975)							_g = (_g + 1);
-HXLINE( 976)							 ::borogove::Chat chat;
-HXDLIN( 976)							 ::borogove::Chat tmp = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
-HXDLIN( 976)							if (::hx::IsNotNull( tmp )) {
-HXLINE( 976)								chat = tmp;
+            					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Client,_gthis) HXARGC(0)
+            					void _hx_run(){
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1185_onConnected)
+HXLINE(1185)						_gthis->checkForResends();
+            					}
+            					HX_END_LOCAL_FUNC0((void))
+
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1155_onConnected)
+HXLINE(1156)					{
+HXLINE(1156)						int _g = 0;
+HXDLIN(1156)						while((_g < details->length)){
+HXLINE(1156)							 ::Dynamic detail = details->__get(_g);
+HXDLIN(1156)							_g = (_g + 1);
+HXLINE(1157)							 ::borogove::Chat chat;
+HXDLIN(1157)							 ::borogove::Chat tmp = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
+HXDLIN(1157)							if (::hx::IsNotNull( tmp )) {
+HXLINE(1157)								chat = tmp;
             							}
             							else {
-HXLINE( 976)								chat = _gthis->getDirectChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ),false);
+HXLINE(1157)								chat = _gthis->getDirectChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ),false);
             							}
-HXLINE( 977)							 ::borogove::ChatMessage initialLast = chat->lastMessage;
-HXLINE( 978)							if (::hx::IsNotNull( detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic) )) {
-HXLINE( 978)								chat->setLastMessage(( ( ::borogove::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
+HXLINE(1158)							 ::borogove::ChatMessage initialLast = chat->lastMessage;
+HXLINE(1159)							if (::hx::IsNotNull( detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic) )) {
+HXLINE(1159)								chat->setLastMessage(( ( ::borogove::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
             							}
-HXLINE( 979)							chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
-HXLINE( 980)							bool _hx_tmp;
-HXDLIN( 980)							bool _hx_tmp1;
-HXDLIN( 980)							if (::hx::IsGreater( detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic),0 )) {
-HXLINE( 980)								_hx_tmp1 = ::hx::IsNotNull( initialLast );
+HXLINE(1160)							chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
+HXLINE(1161)							bool _hx_tmp;
+HXDLIN(1161)							bool _hx_tmp1;
+HXDLIN(1161)							if (::hx::IsGreater( detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic),0 )) {
+HXLINE(1161)								_hx_tmp1 = ::hx::IsNotNull( initialLast );
             							}
             							else {
-HXLINE( 980)								_hx_tmp1 = false;
+HXLINE(1161)								_hx_tmp1 = false;
             							}
-HXDLIN( 980)							if (_hx_tmp1) {
-HXLINE( 980)								_hx_tmp = !(initialLast->canReplace(chat->lastMessage));
+HXDLIN(1161)							if (_hx_tmp1) {
+HXLINE(1161)								_hx_tmp = !(initialLast->canReplace(chat->lastMessage));
             							}
             							else {
-HXLINE( 980)								_hx_tmp = false;
+HXLINE(1161)								_hx_tmp = false;
             							}
-HXDLIN( 980)							if (_hx_tmp) {
-HXLINE( 981)								_gthis->chatActivity(chat,false);
+HXDLIN(1161)							if (_hx_tmp) {
+HXLINE(1162)								_gthis->chatActivity(chat,false);
             							}
             						}
             					}
-HXLINE( 984)					_gthis->sortChats();
-HXLINE( 985)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
-HXLINE( 987)					if (_gthis->sendAvailable) {
-HXLINE( 989)						 ::borogove::Client _gthis1 = _gthis;
-HXLINE( 990)						::String _hx_tmp2 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXLINE( 989)						_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1165)					_gthis->sortChats();
+HXLINE(1166)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
+HXLINE(1168)					if (_gthis->sendAvailable) {
+HXLINE(1170)						 ::borogove::Client _gthis1 = _gthis;
+HXLINE(1171)						::String _hx_tmp2 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE(1170)						_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp2)
-            							->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("enable",83,ae,87,f8), ::Dynamic(::hx::Anon_obj::Create(1)
-            							->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:carbons:2",02,86,9e,df))))->up());
-HXLINE( 994)						_gthis->sendPresence(null(),null());
-HXLINE( 995)						_gthis->joinAllChannels();
-            					}
-HXLINE( 997)					_gthis->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 998)					::haxe::Log_obj::trace(HX_("SYNC: done",c3,a6,82,dd),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),998,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
+            							->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("enable",83,ae,87,f8), ::Dynamic(::hx::Anon_obj::Create(1)
+            							->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:carbons:2",02,86,9e,df))),null())->up());
+HXLINE(1176)						 ::borogove::Client _gthis2 = _gthis;
+HXLINE(1177)						::String _hx_tmp3 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE(1176)						_gthis2->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp3)
+            							->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("prefs",30,48,88,c8), ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("default",c1,d8,c3,9b),HX_("always",cf,0e,d7,46))
+            							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:mam:2",f5,ef,8c,da))),null())->up());
+HXLINE(1181)						_gthis->sendPresence(null(),null());
+HXLINE(1182)						_gthis->joinAllChannels();
+            					}
+HXLINE(1185)					::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_2(_gthis)),5000);
+HXLINE(1186)					_gthis->channelPinger->startTimer();
+HXLINE(1187)					_gthis->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE(1188)					::haxe::Log_obj::trace(HX_("SYNC: done",c3,a6,82,dd),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),1188,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_963_onConnected)
-HXLINE( 964)				if (!(syncFinished)) {
-HXLINE( 965)					::haxe::Log_obj::trace(HX_("SYNC: failed",3e,4e,5e,fa),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),965,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 966)					_gthis->inSync = false;
-HXLINE( 967)					_gthis->stream->disconnect();
-HXLINE( 969)					return;
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1143_onConnected)
+HXLINE(1144)				if (!(syncFinished)) {
+HXLINE(1145)					::haxe::Log_obj::trace(HX_("SYNC: failed",3e,4e,5e,fa),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),1145,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
+HXLINE(1146)					_gthis->inSync = false;
+HXLINE(1147)					_gthis->stream->disconnect();
+HXLINE(1149)					return;
             				}
-HXLINE( 972)				::haxe::Log_obj::trace(HX_("SYNC: details",21,c5,8e,ac),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),972,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 973)				_gthis->inSync = true;
-HXLINE( 974)				::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 974)				::String _hx_tmp = _gthis->accountId();
-HXDLIN( 974)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getChatsUnreadDetails(_gthis1,_hx_tmp,_gthis->chats), ::Dynamic(new _hx_Closure_1(_gthis)),null());
+HXLINE(1152)				::haxe::Log_obj::trace(HX_("SYNC: details",21,c5,8e,ac),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),1152,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
+HXLINE(1153)				_gthis->inSync = true;
+HXLINE(1154)				_gthis->firstSync = false;
+HXLINE(1155)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1155)				::String _hx_tmp = _gthis->accountId();
+HXDLIN(1155)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getChatsUnreadDetails(_gthis1,_hx_tmp,_gthis->chats), ::Dynamic(new _hx_Closure_3(_gthis)),null());
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_961_onConnected)
-HXLINE( 962)			::haxe::Log_obj::trace(HX_("SYNC: MAM",58,33,e1,36),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),962,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 963)			_gthis->sync( ::Dynamic(new _hx_Closure_2(_gthis)));
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1141_onConnected)
+HXLINE(1142)			::haxe::Log_obj::trace(HX_("SYNC: MAM",58,33,e1,36),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),1142,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
+HXLINE(1143)			_gthis->sync( ::Dynamic(new _hx_Closure_4(_gthis)));
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_924_onConnected)
-HXDLIN( 924)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 925)		bool _hx_tmp;
-HXDLIN( 925)		if (::hx::IsNotNull( data )) {
-HXLINE( 925)			_hx_tmp = ::hx::IsNotNull( data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) );
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1092_onConnected)
+HXDLIN(1092)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1093)		bool _hx_tmp;
+HXDLIN(1093)		if (::hx::IsNotNull( data )) {
+HXLINE(1093)			_hx_tmp = ::hx::IsNotNull( data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) );
             		}
             		else {
-HXLINE( 925)			_hx_tmp = false;
+HXLINE(1093)			_hx_tmp = false;
             		}
-HXDLIN( 925)		if (_hx_tmp) {
-HXLINE( 926)			this->jid = ::borogove::JID_obj::parse(( (::String)(data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ));
-HXLINE( 927)			bool _hx_tmp1;
-HXDLIN( 927)			if (::hx::IsNull( this->stream->clientId )) {
-HXLINE( 927)				_hx_tmp1 = !(this->jid->isBare());
+HXDLIN(1093)		if (_hx_tmp) {
+HXLINE(1094)			this->jid = ::borogove::JID_obj::parse(( (::String)(data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ));
+HXLINE(1095)			bool _hx_tmp1;
+HXDLIN(1095)			if (::hx::IsNull( this->stream->clientId )) {
+HXLINE(1095)				_hx_tmp1 = !(this->jid->isBare());
             			}
             			else {
-HXLINE( 927)				_hx_tmp1 = false;
+HXLINE(1095)				_hx_tmp1 = false;
             			}
-HXDLIN( 927)			if (_hx_tmp1) {
-HXLINE( 927)				::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN( 927)				::String _hx_tmp3 = this->jid->asBare()->asString();
-HXDLIN( 927)				::String _hx_tmp4;
-HXDLIN( 927)				::String tmp = this->stream->clientId;
-HXDLIN( 927)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 927)					_hx_tmp4 = tmp;
+HXDLIN(1095)			if (_hx_tmp1) {
+HXLINE(1095)				::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1095)				::String _hx_tmp3 = this->jid->asBare()->asString();
+HXDLIN(1095)				::String _hx_tmp4;
+HXDLIN(1095)				::String tmp = this->stream->clientId;
+HXDLIN(1095)				if (::hx::IsNotNull( tmp )) {
+HXLINE(1095)					_hx_tmp4 = tmp;
             				}
             				else {
-HXLINE( 927)					_hx_tmp4 = this->jid->resource;
-            				}
-HXDLIN( 927)				::borogove::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,this->displayName(),null());
-            			}
-            		}
-HXLINE( 930)		if (( (bool)(data->__Field(HX_("resumed",17,0e,58,6b),::hx::paccDynamic)) )) {
-HXLINE( 931)			this->inSync = true;
-HXLINE( 932)			if (this->firstSync) {
-HXLINE( 935)				int _g = 0;
-HXDLIN( 935)				::Array< ::Dynamic> _g1 = this->getChats();
-HXDLIN( 935)				while((_g < _g1->length)){
-HXLINE( 935)					 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN( 935)					_g = (_g + 1);
-HXLINE( 936)					 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE( 937)					if (::hx::IsNotNull( channel )) {
-HXLINE( 938)						channel->inSync = true;
-            					}
-            				}
-            			}
-HXLINE( 943)			this->stream->emitSMupdates = true;
-HXLINE( 944)			this->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 945)			this->trigger(HX_("chats/update",3d,8e,1d,14),this->chats);
-HXLINE( 946)			return ::borogove::EventResult_obj::EventHandled_dyn();
-            		}
-HXLINE( 950)		::Dynamic _hx_tmp5 = this->persistence;
-HXDLIN( 950)		::borogove::Persistence_obj::clearMemberPresence(_hx_tmp5,this->accountId(),null());
-HXLINE( 951)		{
-HXLINE( 951)			int _g2 = 0;
-HXDLIN( 951)			::Array< ::Dynamic> _g3 = this->chats;
-HXDLIN( 951)			while((_g2 < _g3->length)){
-HXLINE( 951)				 ::borogove::Chat chat1 = _g3->__get(_g2).StaticCast<  ::borogove::Chat >();
-HXDLIN( 951)				_g2 = (_g2 + 1);
-HXLINE( 952)				 ::borogove::DirectChat directChat = ( ( ::borogove::DirectChat)(::borogove::_Util::Util_Fields__obj::downcast(chat1,::hx::ClassOf< ::borogove::DirectChat >())) );
-HXLINE( 953)				if (::hx::IsNotNull( directChat )) {
-HXLINE( 953)					directChat->presence->clear();
-            				}
-            			}
-            		}
-HXLINE( 956)		this->discoverServices( ::borogove::JID_obj::__alloc( HX_CTX ,null(),this->jid->domain,null(),null()),null(), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 959)		this->rosterGet();
-HXLINE( 960)		::haxe::Log_obj::trace(HX_("SYNC: bookmarks",1c,91,b3,0d),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),960,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 961)		this->bookmarksGet( ::Dynamic(new _hx_Closure_3(_gthis)));
-HXLINE(1003)		this->trigger(HX_("session-started",0a,96,19,bc), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE(1005)		return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE(1095)					_hx_tmp4 = this->jid->resource;
+            				}
+HXDLIN(1095)				::String _hx_tmp5 = this->displayName();
+HXDLIN(1095)				::borogove::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,_hx_tmp5,this->rosterVer,null());
+            			}
+            		}
+HXLINE(1098)		if (( (bool)(data->__Field(HX_("resumed",17,0e,58,6b),::hx::paccDynamic)) )) {
+HXLINE(1099)			this->inSync = true;
+HXLINE(1100)			if (this->firstSync) {
+            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(0)
+            				void _hx_run(){
+            					HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1119_onConnected)
+HXLINE(1119)					_gthis->checkForResends();
+            				}
+            				HX_END_LOCAL_FUNC0((void))
+
+HXLINE(1103)				{
+HXLINE(1103)					int _g = 0;
+HXDLIN(1103)					::Array< ::Dynamic> _g1 = this->getChannels();
+HXDLIN(1103)					while((_g < _g1->length)){
+HXLINE(1103)						 ::borogove::Channel channel = _g1->__get(_g).StaticCast<  ::borogove::Channel >();
+HXDLIN(1103)						_g = (_g + 1);
+HXLINE(1104)						bool _hx_tmp6;
+HXDLIN(1104)						if (::hx::IsNotNull( channel->self )) {
+HXLINE(1104)							_hx_tmp6 = ::hx::IsNotNull( channel->sortId );
+            						}
+            						else {
+HXLINE(1104)							_hx_tmp6 = false;
+            						}
+HXDLIN(1104)						channel->inSync = _hx_tmp6;
+HXLINE(1105)						::haxe::Log_obj::trace(HX_("SYNC: channel inSync",1e,d0,1c,33), ::Dynamic(::hx::Anon_obj::Create(5)
+            							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
+            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(5)
+            								->setFixed(0,HX_("inSync",e0,98,c5,88),channel->inSync)
+            								->setFixed(1,HX_("chatId",d3,04,77,b7),channel->chatId)
+            								->setFixed(2,HX_("isJoined",53,76,73,e9),::hx::IsNotNull( channel->self ))
+            								->setFixed(3,HX_("reason",c4,0f,9d,fc),HX_("resume from disk",a0,91,b6,7f))
+            								->setFixed(4,HX_("sortId",d9,7a,37,30),channel->sortId))))
+            							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("onConnected",aa,c5,39,c5))
+            							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),1105)));
+HXLINE(1115)						if (!(channel->inSync)) {
+HXLINE(1115)							channel->join(null());
+            						}
+            					}
+            				}
+HXLINE(1117)				this->firstSync = false;
+HXLINE(1119)				::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),5000);
+            			}
+HXLINE(1122)			this->stream->emitSMupdates = true;
+HXLINE(1123)			this->channelPinger->startTimer();
+HXLINE(1124)			this->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE(1125)			this->trigger(HX_("chats/update",3d,8e,1d,14),this->chats);
+HXLINE(1126)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            		}
+HXLINE(1130)		::Dynamic _hx_tmp7 = this->persistence;
+HXDLIN(1130)		::borogove::Persistence_obj::clearMemberPresence(_hx_tmp7,this->accountId(),null());
+HXLINE(1131)		{
+HXLINE(1131)			int _g2 = 0;
+HXDLIN(1131)			::Array< ::Dynamic> _g3 = this->chats;
+HXDLIN(1131)			while((_g2 < _g3->length)){
+HXLINE(1131)				 ::borogove::Chat chat = _g3->__get(_g2).StaticCast<  ::borogove::Chat >();
+HXDLIN(1131)				_g2 = (_g2 + 1);
+HXLINE(1132)				 ::borogove::DirectChat directChat = ( ( ::borogove::DirectChat)(::borogove::_Util::Util_Fields__obj::downcast(chat,::hx::ClassOf< ::borogove::DirectChat >())) );
+HXLINE(1133)				if (::hx::IsNotNull( directChat )) {
+HXLINE(1133)					directChat->presence->clear();
+            				}
+            			}
+            		}
+HXLINE(1136)		this->discoverServices( ::borogove::JID_obj::__alloc( HX_CTX ,null(),this->jid->domain,null(),null()),null(), ::Dynamic(new _hx_Closure_1(_gthis)));
+HXLINE(1139)		this->rosterGet();
+HXLINE(1140)		::haxe::Log_obj::trace(HX_("SYNC: bookmarks",1c,91,b3,0d),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),1140,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
+HXLINE(1141)		this->bookmarksGet( ::Dynamic(new _hx_Closure_5(_gthis)));
+HXLINE(1193)		this->trigger(HX_("session-started",0a,96,19,bc), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE(1195)		return ::borogove::EventResult_obj::EventHandled_dyn();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,onConnected,return )
 
-::Dynamic Client_obj::prepareAttachment( ::borogove::AttachmentSource source){
-            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::borogove::AttachmentSource,source, ::borogove::Client,_gthis) HXARGC(1)
-            		::Dynamic _hx_run(::Array< ::Dynamic> services){
-            			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_2, ::borogove::Client,_gthis, ::borogove::AttachmentSource,source,::Array< ::Dynamic>,services, ::haxe::crypto::Sha256,sha256) HXARGC(2)
-            			void _hx_run( ::Dynamic resolve, ::Dynamic reject){
-            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::crypto::Sha256,sha256) HXARGC(1)
-            				 ::tink::streams::Handled _hx_run(::Dynamic chunk){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1018_prepareAttachment)
-HXLINE(1019)					 ::haxe::crypto::Sha256 sha2561 = sha256;
-HXDLIN(1019)					sha2561->update(::tink::chunk::ChunkObject_obj::toBytes(chunk));
-HXLINE(1020)					return ::tink::streams::Handled_obj::Resume_dyn();
+::Dynamic Client_obj::fetchAttachment( ::borogove::ChatAttachment attachment){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::ChatAttachment,attachment) HXARGC(1)
+            		 ::borogove::ChatAttachment _hx_run( ::Dynamic r){
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1203_fetchAttachment)
+HXLINE(1204)			if (::hx::IsNotNull( r )) {
+HXLINE(1205)				attachment->cachedAt = ( (::String)(r->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)) );
+HXLINE(1206)				if ((attachment->hashes->length < 1)) {
+HXLINE(1206)					attachment->hashes->push( ::Dynamic(r->__Field(HX_("hash",ce,2f,08,45),::hx::paccDynamic)));
+            				}
+            			}
+HXLINE(1208)			return attachment;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1199_fetchAttachment)
+HXLINE(1201)		if (::hx::IsNotNull( attachment->cachedAt )) {
+HXLINE(1201)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(attachment);
+            		}
+HXLINE(1203)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchUris(attachment->uris->copy()), ::Dynamic(new _hx_Closure_0(attachment)),null());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Client_obj,fetchAttachment,return )
+
+::Dynamic Client_obj::fetchUris(::Array< ::String > uris){
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1212_fetchUris)
+HXDLIN(1212)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1213)		if ((uris->length < 1)) {
+HXLINE(1213)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            		}
+HXLINE(1215)		::String uri = ( (::String)(uris->shift()) );
+HXLINE(1216)		 ::Dynamic aesgcm = ::borogove::_XEP0454::XEP0454_Fields__obj::parse(uri);
+HXLINE(1217)		if (::hx::IsNotNull( aesgcm )) {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis, ::Dynamic,aesgcm) HXARGC(1)
+            			::Dynamic _hx_run( ::haxe::io::Bytes data){
+            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::io::Bytes,data) HXARGC(1)
+            				 ::Dynamic _hx_run(::String id){
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1219_fetchUris)
+HXLINE(1219)					return  ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(0,HX_("id",db,5b,00,00),id)
+            						->setFixed(1,HX_("hash",ce,2f,08,45),::borogove::Hash_obj::sha256(data)));
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-            				HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_1, ::borogove::AttachmentSource,source, ::borogove::Client,_gthis, ::Dynamic,resolve, ::Dynamic,reject,::Array< ::Dynamic>,services, ::haxe::crypto::Sha256,sha256) HXARGC(1)
-            				void _hx_run( ::tink::streams::Conclusion o){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1021_prepareAttachment)
-HXLINE(1021)					if ((o->_hx_getIndex() == 3)) {
-HXLINE(1023)						 ::borogove::Client _gthis1 = _gthis;
-HXDLIN(1023)						 ::borogove::AttachmentSource source1 = source;
-HXDLIN(1023)						::Array< ::Dynamic> services1 = services;
-HXDLIN(1023)						::Array< unsigned char > _hx_tmp = sha256->digest()->b;
-HXDLIN(1023)						_gthis1->prepareAttachmentFor(source1,services1,::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-256",32,dd,04,3b),_hx_tmp)),resolve);
-            					}
-            					else {
-HXLINE(1025)						::haxe::Log_obj::trace(HX_("Error computing attachment hash",07,33,1d,57), ::Dynamic(::hx::Anon_obj::Create(5)
-            							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
-            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,o))
-            							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("prepareAttachment",4a,6c,4b,52))
-            							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),1025)));
-HXLINE(1026)						reject(o);
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1219_fetchUris)
+HXLINE(1219)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1219)				::String aesgcm1 = ( (::String)(aesgcm->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)) );
+HXDLIN(1219)				return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis1,aesgcm1,::borogove::_Source::Source_Impl__obj::ofTinkSource( ::tink::streams::Single_obj::__alloc( HX_CTX , ::tink::core::_Lazy::LazyConst_obj::__alloc( HX_CTX ,::tink::chunk::ByteChunk_obj::of(data))))), ::Dynamic(new _hx_Closure_0(data)),null());
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::borogove::Client,_gthis,::Array< ::String >,uris) HXARGC(1)
+            			::Dynamic _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1220_fetchUris)
+HXLINE(1221)				 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN(1221)				::String _hx_tmp1;
+HXDLIN(1221)				if (::hx::IsNull( e )) {
+HXLINE(1221)					_hx_tmp1 = HX_("null",87,9e,0e,49);
+            				}
+            				else {
+HXLINE(1221)					_hx_tmp1 = ::Std_obj::string(e);
+            				}
+HXDLIN(1221)				_hx_tmp(HX_("fetchAttachment",bd,6c,63,61), ::Dynamic(::hx::Anon_obj::Create(5)
+            					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
+            					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_hx_tmp1))
+            					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("fetchUris",e1,b8,57,24))
+            					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1221)));
+HXLINE(1222)				return _gthis->fetchUris(uris);
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+HXLINE(1218)			return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::_XEP0454::XEP0454_Fields__obj::fetch(aesgcm), ::Dynamic(new _hx_Closure_1(_gthis,aesgcm)), ::Dynamic(new _hx_Closure_2(_gthis,uris)));
+            		}
+HXLINE(1227)		bool _hx_tmp;
+HXDLIN(1227)		if (!(::StringTools_obj::startsWith(uri,HX_("http://",52,75,cd,5a)))) {
+HXLINE(1227)			_hx_tmp = ::StringTools_obj::startsWith(uri,HX_("https://",cf,b4,ae,3e));
+            		}
+            		else {
+HXLINE(1227)			_hx_tmp = true;
+            		}
+HXDLIN(1227)		if (_hx_tmp) {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_5,::String,uri, ::borogove::IncrementalHash,sha256) HXARGC(2)
+            			void _hx_run( ::Dynamic resolve, ::Dynamic reject){
+            				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_4, ::Dynamic,resolve, ::Dynamic,reject, ::borogove::IncrementalHash,sha256) HXARGC(1)
+            				void _hx_run( ::tink::core::Outcome rOrErr){
+            					HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1230_fetchUris)
+HXLINE(1230)					switch((int)(rOrErr->_hx_getIndex())){
+            						case (int)0: {
+HXLINE(1231)							 ::tink::http::IncomingResponse _g = ( ( ::tink::http::IncomingResponse)(rOrErr->_hx_getObject(0)) );
+HXLINE(1232)							if ((( ( ::tink::http::ResponseHeaderBase)(_g->header) )->statusCode != 200)) {
+HXLINE(1233)								reject(( ( ::tink::http::ResponseHeaderBase)(_g->header) )->statusCode);
+            							}
+            							else {
+            								HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::IncrementalHash,sha256) HXARGC(1)
+            								::Dynamic _hx_run(::Dynamic chunk){
+            									HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1241_fetchUris)
+HXLINE(1242)									 ::borogove::IncrementalHash sha2561 = sha256;
+HXDLIN(1242)									sha2561->update(::tink::chunk::ChunkObject_obj::toBytes(chunk)->b);
+HXLINE(1243)									return chunk;
+            								}
+            								HX_END_LOCAL_FUNC1(return)
+
+HXLINE(1235)								::String mime;
+HXDLIN(1235)								 ::tink::core::Outcome _g1 = ( ( ::tink::http::Header)(_g->header) )->contentType();
+HXDLIN(1235)								if ((_g1->_hx_getIndex() == 0)) {
+HXLINE(1235)									mime = ( ( ::tink::http::ContentType)(_g1->_hx_getObject(0)) )->toString();
+            								}
+            								else {
+HXLINE(1235)									mime = HX_("application/octet-stream",5d,f8,82,30);
+            								}
+HXLINE(1239)								 ::Dynamic resolve1 = resolve;
+HXLINE(1241)								::Dynamic _hx_tmp = ::tink::io::_Source::Source_Impl__obj::chunked(_g->body);
+HXLINE(1239)								resolve1( ::Dynamic(::hx::Anon_obj::Create(2)
+            									->setFixed(0,HX_("body",a2,7a,1b,41),::borogove::_Source::Source_Impl__obj::ofTinkSource(::tink::streams::StreamObject_obj::map(_hx_tmp,::tink::streams::_Stream::Mapping_Impl__obj::ofPlain( ::Dynamic(new _hx_Closure_3(sha256))))))
+            									->setFixed(1,HX_("mime",b4,4d,5c,48),mime)));
+            							}
+            						}
+            						break;
+            						case (int)1: {
+HXLINE(1248)							reject(rOrErr->_hx_getObject(0));
+            						}
+            						break;
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1018_prepareAttachment)
-HXLINE(1018)				::String name = source->name;
-HXDLIN(1018)				 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
-HXDLIN(1018)				 ::Dynamic options = null();
-HXDLIN(1018)				options =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXDLIN(1018)				::Dynamic this1 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
-HXDLIN(1018)				 ::Dynamic _g = options->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
-HXDLIN(1018)				int this2;
-HXDLIN(1018)				if (::hx::IsNull( _g )) {
-HXLINE(1018)					this2 = 65536;
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1230_fetchUris)
+HXLINE(1230)				 ::Dynamic options = null();
+HXDLIN(1230)				::tink::http::Fetch_obj::fetch(::tink::_Url::Url_Impl__obj::fromString(uri),options)->handle( ::Dynamic(new _hx_Closure_4(resolve,reject,sha256)));
+            			}
+            			HX_END_LOCAL_FUNC2((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_7, ::borogove::Client,_gthis, ::borogove::IncrementalHash,sha256) HXARGC(1)
+            			::Dynamic _hx_run( ::Dynamic r){
+            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_6, ::borogove::IncrementalHash,sha256) HXARGC(1)
+            				 ::Dynamic _hx_run(::String id){
+            					HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1251_fetchUris)
+HXLINE(1251)					return  ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(0,HX_("id",db,5b,00,00),id)
+            						->setFixed(1,HX_("hash",ce,2f,08,45),sha256->digest()));
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1251_fetchUris)
+HXLINE(1251)				return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis->persistence, ::Dynamic(r->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)), ::Dynamic(r->__Field(HX_("body",a2,7a,1b,41),::hx::paccDynamic))), ::Dynamic(new _hx_Closure_6(sha256)),null());
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_8, ::borogove::Client,_gthis,::Array< ::String >,uris) HXARGC(1)
+            			::Dynamic _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1252_fetchUris)
+HXLINE(1252)				return _gthis->fetchUris(uris);
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+HXLINE(1228)			 ::borogove::IncrementalHash sha256 = ::borogove::Hash_obj::sha256incr();
+HXLINE(1229)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_5(uri,sha256))), ::Dynamic(new _hx_Closure_7(_gthis,sha256)), ::Dynamic(new _hx_Closure_8(_gthis,uris)));
+            		}
+HXLINE(1256)		return this->fetchUris(uris);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Client_obj,fetchUris,return )
+
+::Dynamic Client_obj::prepareAttachment( ::borogove::AttachmentSource source,::hx::Null< bool >  __o_encrypt){
+            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_5, ::borogove::Client,_gthis, ::borogove::AttachmentSource,source,bool,encrypt) HXARGC(1)
+            		::Dynamic _hx_run(::Array< ::Dynamic> services){
+            			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::AttachmentSource,source, ::borogove::Client,_gthis,::Array< ::Dynamic>,services) HXARGC(2)
+            			::Dynamic _hx_run(::Dynamic tsource,int size){
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1273_prepareAttachment)
+HXLINE(1273)				return _gthis->prepareAttachmentFor(tsource,source->name,size,source->type,services,null());
+            			}
+            			HX_END_LOCAL_FUNC2(return)
+
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::IncrementalHash,sha256) HXARGC(1)
+            			::Dynamic _hx_run(::Dynamic chunk){
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1282_prepareAttachment)
+HXLINE(1283)				 ::borogove::IncrementalHash sha2561 = sha256;
+HXDLIN(1283)				sha2561->update(::tink::chunk::ChunkObject_obj::toBytes(chunk)->b);
+HXLINE(1284)				return chunk;
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
+            			::Dynamic _hx_run(::cpp::VirtualArray results){
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1299_prepareAttachment)
+HXLINE(1299)				return results->__get(0);
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1270_prepareAttachment)
+HXLINE(1271)			 ::borogove::IncrementalHash sha256 = ::borogove::Hash_obj::sha256incr();
+HXLINE(1272)			 ::Dynamic httpPut =  ::Dynamic(new _hx_Closure_0(source,_gthis,services));
+HXLINE(1282)			::String name = source->name;
+HXDLIN(1282)			 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
+HXDLIN(1282)			 ::Dynamic options = null();
+HXDLIN(1282)			options =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXDLIN(1282)			::Dynamic tinkSource = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
+HXDLIN(1282)			 ::Dynamic _g = options->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
+HXDLIN(1282)			int tinkSource1;
+HXDLIN(1282)			if (::hx::IsNull( _g )) {
+HXLINE(1282)				tinkSource1 = 65536;
+            			}
+            			else {
+HXLINE(1282)				tinkSource1 = ( (int)(_g) );
+            			}
+HXDLIN(1282)			::Dynamic tinkSource2 = ::tink::io::_Source::Source_Impl__obj::chunked( ::tink::io::std::InputSource_obj::__alloc( HX_CTX ,name,input,tinkSource,::haxe::io::Bytes_obj::alloc(tinkSource1),0));
+HXDLIN(1282)			::Dynamic tinkSource3 = ::tink::streams::StreamObject_obj::map(tinkSource2,::tink::streams::_Stream::Mapping_Impl__obj::ofPlain( ::Dynamic(new _hx_Closure_1(sha256))));
+HXLINE(1289)			 ::Dynamic _hx_tmp;
+HXDLIN(1289)			if (encrypt) {
+HXLINE(1290)				if ((source->size < (int)1000000000)) {
+            					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::borogove::AttachmentSource,source, ::borogove::IncrementalHash,sha256) HXARGC(1)
+            					 ::borogove::ChatAttachment _hx_run( ::Dynamic o){
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1291_prepareAttachment)
+HXLINE(1291)						::String source1 = source->name;
+HXDLIN(1291)						::String source2 = source->type;
+HXDLIN(1291)						int o1 = ( (int)(o->__Field(HX_("size",c1,a0,53,4c),::hx::paccDynamic)) );
+HXDLIN(1291)						::Array< ::String > _hx_tmp = ::Array_obj< ::String >::__new(1)->init(0, ::Dynamic(o->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic)));
+HXDLIN(1291)						return  ::borogove::ChatAttachment_obj::__alloc( HX_CTX ,source1,source2,o1,_hx_tmp,::Array_obj< ::Dynamic>::__new(1)->init(0,sha256->digest()));
+            					}
+            					HX_END_LOCAL_FUNC1(return)
+
+HXLINE(1289)					_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::_XEP0454::XEP0454_Fields__obj::put(tinkSource3,httpPut), ::Dynamic(new _hx_Closure_2(source,sha256)),null());
             				}
             				else {
-HXLINE(1018)					this2 = ( (int)(_g) );
+HXLINE(1289)					_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("Attachment is too big for current encryption options",84,54,76,c3));
             				}
-HXDLIN(1018)				::Dynamic this3 = ::tink::io::_Source::Source_Impl__obj::chunked( ::tink::io::std::InputSource_obj::__alloc( HX_CTX ,name,input,this1,::haxe::io::Bytes_obj::alloc(this2),0));
-HXDLIN(1018)				::tink::streams::StreamObject_obj::forEach(this3,::tink::streams::_Stream::Handler_Impl__obj::ofSafeSync( ::Dynamic(new _hx_Closure_0(sha256))))->handle( ::Dynamic(new _hx_Closure_1(source,_gthis,resolve,reject,services,sha256)));
             			}
-            			HX_END_LOCAL_FUNC2((void))
+            			else {
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::borogove::AttachmentSource,source, ::borogove::IncrementalHash,sha256) HXARGC(1)
+            				 ::borogove::ChatAttachment _hx_run(::String uri){
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1296_prepareAttachment)
+HXLINE(1296)					::String source1 = source->name;
+HXDLIN(1296)					::String source2 = source->type;
+HXDLIN(1296)					int source3 = source->size;
+HXDLIN(1296)					return  ::borogove::ChatAttachment_obj::__alloc( HX_CTX ,source1,source2,source3,::Array_obj< ::String >::__new(1)->init(0,uri),::Array_obj< ::Dynamic>::__new(1)->init(0,sha256->digest()));
+            				}
+            				HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1015_prepareAttachment)
-HXLINE(1016)			 ::haxe::crypto::Sha256 sha256 =  ::haxe::crypto::Sha256_obj::__alloc( HX_CTX );
-HXLINE(1017)			return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,source,services,sha256)));
+HXLINE(1289)				_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::then(httpPut(tinkSource3,source->size), ::Dynamic(new _hx_Closure_3(source,sha256)),null());
+            			}
+HXLINE(1288)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(::cpp::VirtualArray_obj::__new(2)->init(0,_hx_tmp)->init(1,::borogove::Persistence_obj::storeMedia(_gthis->persistence,source->type,::borogove::_Source::Source_Impl__obj::ofTinkSource(tinkSource3)))), ::Dynamic(new _hx_Closure_4()),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1014_prepareAttachment)
-HXDLIN(1014)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1015)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1015)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::findServicesWithFeature(_hx_tmp,this->accountId(),HX_("urn:xmpp:http:upload:0",0d,db,46,68)), ::Dynamic(new _hx_Closure_3(source,_gthis)),null());
+            		bool encrypt = __o_encrypt.Default(true);
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1269_prepareAttachment)
+HXDLIN(1269)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1270)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1270)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::findServicesWithFeature(_hx_tmp,this->accountId(),HX_("urn:xmpp:http:upload:0",0d,db,46,68)), ::Dynamic(new _hx_Closure_5(_gthis,source,encrypt)),null());
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC1(Client_obj,prepareAttachment,return )
+HX_DEFINE_DYNAMIC_FUNC2(Client_obj,prepareAttachment,return )
 
-void Client_obj::prepareAttachment__fromC( ::borogove::AttachmentSource source,::cpp::Function< void  (void*,void*) > handler,void* handler__context){
+void Client_obj::prepareAttachment__fromC( ::borogove::AttachmentSource source,::hx::Null< bool >  __o_encrypt,::cpp::Function< void  (void*,void*) > handler,void* handler__context){
+            		bool encrypt = __o_encrypt.Default(true);
             	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_365_prepareAttachment__fromC)
 HXDLIN( 365)		if (::hx::IsNull( handler )) {
-HXDLIN( 365)			this->prepareAttachment(source);
+HXDLIN( 365)			this->prepareAttachment(source,encrypt);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
@@ -2949,115 +3647,215 @@ HXDLIN( 365)				handler(null(),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->prepareAttachment(source), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->prepareAttachment(source,encrypt), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
 
-void Client_obj::prepareAttachmentFor( ::borogove::AttachmentSource source,::Array< ::Dynamic> services,::Array< ::Dynamic> hashes, ::Dynamic callback){
-            		HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_2, ::borogove::AttachmentSource,source, ::borogove::Client,_gthis,::Array< ::Dynamic>,hashes,::Array< ::Dynamic>,services, ::borogove::queries::HttpUploadSlot,httpUploadSlot, ::Dynamic,callback) HXARGC(0)
-            		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1039_prepareAttachmentFor)
-HXLINE(1040)			 ::Dynamic slot = httpUploadSlot->getResult();
-HXLINE(1041)			if (::hx::IsNull( slot )) {
-HXLINE(1042)				 ::borogove::Client _gthis1 = _gthis;
-HXDLIN(1042)				 ::borogove::AttachmentSource source1 = source;
-HXDLIN(1042)				::Array< ::Dynamic> _hx_tmp = services->slice(1,null());
-HXDLIN(1042)				_gthis1->prepareAttachmentFor(source1,_hx_tmp,hashes,callback);
-            			}
-            			else {
-            				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
-            				::Dynamic _hx_run( ::tink::core::TypedError e){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1044_prepareAttachmentFor)
-HXLINE(1044)					::haxe::Log_obj::trace(HX_("prepareAttachmentFor ERROR",a7,5d,62,48), ::Dynamic(::hx::Anon_obj::Create(5)
-            						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
-            						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,e))
-            						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("prepareAttachmentFor",df,5c,bf,82))
-            						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),1044)));
-HXDLIN(1044)					HX_STACK_DO_THROW(e);
-HXDLIN(1044)					return null();
+::Dynamic Client_obj::prepareAttachmentFor(::Dynamic source,::String name,int size,::String mime,::Array< ::Dynamic> services,::Dynamic httpClient){
+            		HX_BEGIN_LOCAL_FUNC_S9(::hx::LocalFunc,_hx_Closure_3,::String,name, ::borogove::Client,_gthis,::Dynamic,source,::String,mime,::Dynamic,httpClient,::Array< ::Dynamic>,services,int,size, ::borogove::queries::HttpUploadSlot,httpUploadSlot,::String,serviceId) HXARGC(2)
+            		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
+            			HX_BEGIN_LOCAL_FUNC_S11(::hx::LocalFunc,_hx_Closure_2,::String,name,::Dynamic,source, ::borogove::Client,_gthis,::String,mime,::Dynamic,httpClient, ::Dynamic,resolve, ::Dynamic,reject,::Array< ::Dynamic>,services,int,size, ::borogove::queries::HttpUploadSlot,httpUploadSlot,::String,serviceId) HXARGC(0)
+            			void _hx_run(){
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1314_prepareAttachmentFor)
+HXLINE(1315)				 ::Dynamic slot = httpUploadSlot->getResult();
+HXLINE(1316)				if (::hx::IsNull( slot )) {
+HXLINE(1317)					 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(1317)					::Dynamic source1 = source;
+HXDLIN(1317)					::String name1 = name;
+HXDLIN(1317)					int size1 = size;
+HXDLIN(1317)					::String mime1 = mime;
+HXDLIN(1317)					::Array< ::Dynamic> services1 = services;
+HXDLIN(1317)					::Dynamic _hx_tmp = _gthis1->tryNextAttachmentService(source1,name1,size1,mime1,services1, ::borogove::AttachmentUploadError_obj::__alloc( HX_CTX ,HX_("invalid-slot",54,fe,85,47),HX_("HTTP Upload service returned an invalid or missing upload slot",e3,49,5f,42),serviceId,null(),null(),null()),httpClient);
+HXDLIN(1317)					::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp,resolve,reject);
             				}
-            				HX_END_LOCAL_FUNC1(return)
-
-            				HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis, ::Dynamic,slot, ::borogove::AttachmentSource,source,::Array< ::Dynamic>,hashes,::Array< ::Dynamic>,services, ::Dynamic,callback) HXARGC(1)
-            				void _hx_run( ::tink::core::Outcome o){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1045_prepareAttachmentFor)
-HXLINE(1045)					if ((o->_hx_getIndex() == 0)) {
-HXLINE(1046)						if ((( ( ::tink::http::ResponseHeaderBase)(( ( ::tink::http::Message)(o->_hx_getObject(0)) )->header) )->statusCode == 201)) {
-HXLINE(1047)							callback( ::borogove::ChatAttachment_obj::__alloc( HX_CTX ,source->name,source->type,source->size,::Array_obj< ::String >::__new(1)->init(0, ::Dynamic(slot->__Field(HX_("get",96,80,4e,00),::hx::paccDynamic))),hashes));
+            				else {
+            					HX_BEGIN_LOCAL_FUNC_S11(::hx::LocalFunc,_hx_Closure_0,::String,name,::Dynamic,source, ::borogove::Client,_gthis, ::Dynamic,slot,::String,mime,::Dynamic,httpClient, ::Dynamic,resolve, ::Dynamic,reject,::Array< ::Dynamic>,services,int,size,::String,serviceId) HXARGC(1)
+            					void _hx_run(int statusCode){
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1324_prepareAttachmentFor)
+HXLINE(1324)						if ((statusCode == 201)) {
+HXLINE(1325)							resolve( ::Dynamic(slot->__Field(HX_("get",96,80,4e,00),::hx::paccDynamic)));
             						}
             						else {
-HXLINE(1049)							 ::borogove::Client _gthis1 = _gthis;
-HXDLIN(1049)							 ::borogove::AttachmentSource source1 = source;
-HXDLIN(1049)							::Array< ::Dynamic> _hx_tmp = services->slice(1,null());
-HXDLIN(1049)							_gthis1->prepareAttachmentFor(source1,_hx_tmp,hashes,callback);
+HXLINE(1327)							 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(1327)							::Dynamic source1 = source;
+HXDLIN(1327)							::String name1 = name;
+HXDLIN(1327)							int size1 = size;
+HXDLIN(1327)							::String mime1 = mime;
+HXDLIN(1327)							::Array< ::Dynamic> services1 = services;
+HXDLIN(1327)							::Dynamic _hx_tmp = _gthis1->tryNextAttachmentService(source1,name1,size1,mime1,services1, ::borogove::AttachmentUploadError_obj::__alloc( HX_CTX ,HX_("http-failure",45,e3,c1,aa),(HX_("HTTP Upload PUT failed with status ",7f,eb,8e,50) + statusCode),serviceId,statusCode,null(),null()),httpClient);
+HXDLIN(1327)							::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp,resolve,reject);
             						}
             					}
-            					else {
-HXLINE(1049)						 ::borogove::Client _gthis2 = _gthis;
-HXDLIN(1049)						 ::borogove::AttachmentSource source2 = source;
-HXDLIN(1049)						::Array< ::Dynamic> _hx_tmp1 = services->slice(1,null());
-HXDLIN(1049)						_gthis2->prepareAttachmentFor(source2,_hx_tmp1,hashes,callback);
+            					HX_END_LOCAL_FUNC1((void))
+
+            					HX_BEGIN_LOCAL_FUNC_S10(::hx::LocalFunc,_hx_Closure_1,::String,name,::Dynamic,source, ::borogove::Client,_gthis,::String,mime,::Dynamic,httpClient, ::Dynamic,resolve, ::Dynamic,reject,::Array< ::Dynamic>,services,int,size,::String,serviceId) HXARGC(1)
+            					::Dynamic _hx_run( ::Dynamic e){
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1334_prepareAttachmentFor)
+HXLINE(1335)						 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(1335)						::Dynamic source1 = source;
+HXDLIN(1335)						::String name1 = name;
+HXDLIN(1335)						int size1 = size;
+HXDLIN(1335)						::String mime1 = mime;
+HXDLIN(1335)						::Array< ::Dynamic> services1 = services;
+HXDLIN(1335)						::Dynamic _hx_tmp = _gthis1->tryNextAttachmentService(source1,name1,size1,mime1,services1, ::borogove::AttachmentUploadError_obj::__alloc( HX_CTX ,HX_("network-failure",6b,a2,0e,cf),HX_("HTTP Upload PUT request failed",c6,58,79,66),serviceId,null(),e,null()),httpClient);
+HXLINE(1334)						return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp,resolve,reject);
             					}
-            				}
-            				HX_END_LOCAL_FUNC1((void))
+            					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1044)				 ::Dynamic url = ::tink::_Url::Url_Impl__obj::fromString(( (::String)(slot->__Field(HX_("put",cf,62,55,00),::hx::paccDynamic)) ));
-HXDLIN(1044)				::Array< ::Dynamic> slot1 = ( (::Array< ::Dynamic>)(slot->__Field(HX_("putHeaders",37,9f,1e,a4),::hx::paccDynamic)) );
-HXDLIN(1044)				::String options = HX_("Content-Length",fa,f8,b6,65).toLowerCase();
-HXDLIN(1044)				::Array< ::Dynamic> options1 = slot1->concat(::Array_obj< ::Dynamic>::__new(1)->init(0, ::tink::http::HeaderField_obj::__alloc( HX_CTX ,options,::tink::http::_Header::HeaderValue_Impl__obj::ofInt(source->size))));
-HXDLIN(1044)				::String name = source->name;
-HXDLIN(1044)				 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
-HXDLIN(1044)				 ::Dynamic options2 = null();
-HXDLIN(1044)				options2 =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXDLIN(1044)				::Dynamic options3 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options2->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
-HXDLIN(1044)				 ::Dynamic _g = options2->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
-HXDLIN(1044)				int options4;
-HXDLIN(1044)				if (::hx::IsNull( _g )) {
-HXLINE(1044)					options4 = 65536;
+HXLINE(1323)					::thenshim::_Promise::Promise_Impl__obj::then(_gthis->putAttachment(( (::String)(slot->__Field(HX_("put",cf,62,55,00),::hx::paccDynamic)) ),( (::Array< ::Dynamic>)(slot->__Field(HX_("putHeaders",37,9f,1e,a4),::hx::paccDynamic)) ),source,size,httpClient), ::Dynamic(new _hx_Closure_0(name,source,_gthis,slot,mime,httpClient,resolve,reject,services,size,serviceId)), ::Dynamic(new _hx_Closure_1(name,source,_gthis,mime,httpClient,resolve,reject,services,size,serviceId)));
             				}
-            				else {
-HXLINE(1044)					options4 = ( (int)(_g) );
+            			}
+            			HX_END_LOCAL_FUNC0((void))
+
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1313_prepareAttachmentFor)
+HXLINE(1314)			httpUploadSlot->onFinished( ::Dynamic(new _hx_Closure_2(name,source,_gthis,mime,httpClient,resolve,reject,services,size,httpUploadSlot,serviceId)));
+HXLINE(1345)			_gthis->sendQuery(httpUploadSlot);
+            		}
+            		HX_END_LOCAL_FUNC2((void))
+
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1303_prepareAttachmentFor)
+HXDLIN(1303)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1304)		if ((services->length < 1)) {
+HXLINE(1305)			::haxe::Log_obj::trace(HX_("No HTTP upload service found",d1,5a,61,46),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),1305,HX_("borogove.Client",18,dc,e6,c0),HX_("prepareAttachmentFor",df,5c,bf,82)));
+HXLINE(1306)			return ::thenshim::_Promise::Promise_Impl__obj::reject( ::borogove::AttachmentUploadError_obj::__alloc( HX_CTX ,HX_("no-service",e9,34,b7,26),HX_("No HTTP Upload service was discovered",d0,9e,b6,c2),null(),null(),null(),null()));
+            		}
+HXLINE(1311)		::String serviceId = ( (::String)(services->__get(0)->__Field(HX_("serviceId",70,93,d4,bc),::hx::paccDynamic)) );
+HXLINE(1312)		 ::borogove::queries::HttpUploadSlot httpUploadSlot =  ::borogove::queries::HttpUploadSlot_obj::__alloc( HX_CTX ,serviceId,name,size,mime);
+HXLINE(1313)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_3(name,_gthis,source,mime,httpClient,services,size,httpUploadSlot,serviceId)));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC6(Client_obj,prepareAttachmentFor,return )
+
+::Dynamic Client_obj::putAttachment(::String url,::Array< ::Dynamic> headers,::Dynamic source,int size,::Dynamic httpClient){
+            		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_3,::Dynamic,source,::Dynamic,httpClient,int,size,::Array< ::Dynamic>,headers,::String,url) HXARGC(2)
+            		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
+            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            			::Dynamic _hx_run( ::tink::core::TypedError e){
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1354_putAttachment)
+HXLINE(1354)				HX_STACK_DO_THROW(e);
+HXDLIN(1354)				return null();
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::Dynamic,resolve, ::Dynamic,reject) HXARGC(1)
+            			void _hx_run( ::tink::core::Outcome o){
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1356_putAttachment)
+HXLINE(1356)				switch((int)(o->_hx_getIndex())){
+            					case (int)0: {
+            						HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,resolve, ::Dynamic,reject, ::tink::http::IncomingResponse,res) HXARGC(1)
+            						void _hx_run( ::tink::core::Outcome body){
+            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1358_putAttachment)
+HXLINE(1358)							switch((int)(body->_hx_getIndex())){
+            								case (int)0: {
+HXLINE(1359)									resolve(( ( ::tink::http::ResponseHeaderBase)(res->header) )->statusCode);
+            								}
+            								break;
+            								case (int)1: {
+HXLINE(1360)									reject(body->_hx_getObject(0));
+            								}
+            								break;
+            							}
+            						}
+            						HX_END_LOCAL_FUNC1((void))
+
+HXLINE(1357)						 ::tink::http::IncomingResponse res = ( ( ::tink::http::IncomingResponse)(o->_hx_getObject(0)) );
+HXLINE(1358)						::tink::io::RealSourceTools_obj::all(res->body)->handle( ::Dynamic(new _hx_Closure_1(resolve,reject,res)));
+            					}
+            					break;
+            					case (int)1: {
+HXLINE(1362)						reject(o->_hx_getObject(0));
+            					}
+            					break;
             				}
-HXDLIN(1044)				::tink::http::_Fetch::FetchResponse_Impl__obj::all(::tink::http::Fetch_obj::fetch(url, ::Dynamic(::hx::Anon_obj::Create(3)
-            					->setFixed(0,HX_("method",e1,f6,5a,09),HX_("PUT",af,fe,3c,00))
-            					->setFixed(1,HX_("body",a2,7a,1b,41),::tink::io::RealSourceTools_obj::idealize( ::tink::io::std::InputSource_obj::__alloc( HX_CTX ,name,input,options3,::haxe::io::Bytes_obj::alloc(options4),0), ::Dynamic(new _hx_Closure_0())))
-            					->setFixed(2,HX_("headers",46,52,08,63),options1))))->handle( ::Dynamic(new _hx_Closure_1(_gthis,slot,source,hashes,services,callback)));
             			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1351_putAttachment)
+HXLINE(1351)			 ::Dynamic url1 = ::tink::_Url::Url_Impl__obj::fromString(url);
+HXLINE(1353)			::Array< ::Dynamic> headers1 = headers;
+HXDLIN(1353)			::String options = HX_("Content-Length",fa,f8,b6,65).toLowerCase();
+HXDLIN(1353)			::Array< ::Dynamic> options1 = headers1->concat(::Array_obj< ::Dynamic>::__new(1)->init(0, ::tink::http::HeaderField_obj::__alloc( HX_CTX ,options,::tink::http::_Header::HeaderValue_Impl__obj::ofInt(size))));
+HXLINE(1354)			::Dynamic options2 = ::tink::io::RealSourceTools_obj::idealize(source, ::Dynamic(new _hx_Closure_0()));
+HXLINE(1355)			 ::tink::http::ClientType options3;
+HXDLIN(1355)			if (::hx::IsNull( httpClient )) {
+HXLINE(1355)				options3 = null();
+            			}
+            			else {
+HXLINE(1355)				options3 = ::tink::http::ClientType_obj::Custom(httpClient);
+            			}
+HXLINE(1351)			::tink::http::Fetch_obj::fetch(url1, ::Dynamic(::hx::Anon_obj::Create(4)
+            				->setFixed(0,HX_("method",e1,f6,5a,09),HX_("PUT",af,fe,3c,00))
+            				->setFixed(1,HX_("client",4b,ca,4f,0a),options3)
+            				->setFixed(2,HX_("body",a2,7a,1b,41),options2)
+            				->setFixed(3,HX_("headers",46,52,08,63),options1)))->handle( ::Dynamic(new _hx_Closure_2(resolve,reject)));
             		}
-            		HX_END_LOCAL_FUNC0((void))
+            		HX_END_LOCAL_FUNC2((void))
+
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1350_putAttachment)
+HXDLIN(1350)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_3(source,httpClient,size,headers,url)));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC5(Client_obj,putAttachment,return )
+
+::Dynamic Client_obj::tryNextAttachmentService(::Dynamic source,::String name,int size,::String mime,::Array< ::Dynamic> services, ::borogove::AttachmentUploadError failure,::Dynamic httpClient){
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            		::String _hx_run(::String result){
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1380_tryNextAttachmentService)
+HXLINE(1380)			return result;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1032_prepareAttachmentFor)
-HXDLIN(1032)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1033)		if ((services->length < 1)) {
-HXLINE(1034)			::haxe::Log_obj::trace(HX_("No HTTP upload service found",d1,5a,61,46),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),1034,HX_("borogove.Client",18,dc,e6,c0),HX_("prepareAttachmentFor",df,5c,bf,82)));
-HXLINE(1035)			callback(null());
-HXLINE(1036)			return;
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::AttachmentUploadError,failure) HXARGC(1)
+            		::Dynamic _hx_run( ::Dynamic e){
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1380_tryNextAttachmentService)
+HXLINE(1381)			 ::borogove::AttachmentUploadError next;
+HXDLIN(1381)			if (::Std_obj::isOfType(e,::hx::ClassOf< ::borogove::AttachmentUploadError >())) {
+HXLINE(1381)				next = ( ( ::borogove::AttachmentUploadError)(e) );
+            			}
+            			else {
+HXLINE(1381)				next =  ::borogove::AttachmentUploadError_obj::__alloc( HX_CTX ,HX_("network-failure",6b,a2,0e,cf),HX_("HTTP Upload request failed",f5,32,92,89),null(),null(),e,null());
+            			}
+HXLINE(1393)			 ::Dynamic next1 = next->cause;
+HXLINE(1394)			::Array< ::Dynamic> _hx_tmp;
+HXDLIN(1394)			if ((next->code == HX_("all-services-failed",60,08,03,62))) {
+HXLINE(1394)				_hx_tmp = next->failures;
+            			}
+            			else {
+HXLINE(1394)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,next);
+            			}
+HXLINE(1388)			return ::thenshim::_Promise::Promise_Impl__obj::reject( ::borogove::AttachmentUploadError_obj::__alloc( HX_CTX ,HX_("all-services-failed",60,08,03,62),HX_("All discovered HTTP Upload services failed",7f,75,6a,7f),null(),null(),next1,::Array_obj< ::Dynamic>::__new(1)->init(0,failure)->concat(_hx_tmp)));
             		}
-HXLINE(1038)		 ::borogove::queries::HttpUploadSlot httpUploadSlot =  ::borogove::queries::HttpUploadSlot_obj::__alloc( HX_CTX ,( (::String)(services->__get(0)->__Field(HX_("serviceId",70,93,d4,bc),::hx::paccDynamic)) ),source->name,source->size,source->type,hashes);
-HXLINE(1039)		httpUploadSlot->onFinished( ::Dynamic(new _hx_Closure_2(source,_gthis,hashes,services,httpUploadSlot,callback)));
-HXLINE(1053)		this->sendQuery(httpUploadSlot);
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1367_tryNextAttachmentService)
+HXLINE(1368)		::Array< ::Dynamic> remaining = services->slice(1,null());
+HXLINE(1369)		if ((remaining->length < 1)) {
+HXLINE(1370)			return ::thenshim::_Promise::Promise_Impl__obj::reject( ::borogove::AttachmentUploadError_obj::__alloc( HX_CTX ,HX_("all-services-failed",60,08,03,62),HX_("All discovered HTTP Upload services failed",7f,75,6a,7f),null(),null(),failure->cause,::Array_obj< ::Dynamic>::__new(1)->init(0,failure)));
+            		}
+HXLINE(1380)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->prepareAttachmentFor(source,name,size,mime,remaining,httpClient), ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1(failure)));
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC4(Client_obj,prepareAttachmentFor,(void))
+HX_DEFINE_DYNAMIC_FUNC7(Client_obj,tryNextAttachmentService,return )
 
 ::Array< ::Dynamic> Client_obj::getChats(){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1060_getChats)
-HXDLIN(1060)		::Array< ::Dynamic> _this = this->chats;
-HXDLIN(1060)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN(1060)		{
-HXDLIN(1060)			int _g1 = 0;
-HXDLIN(1060)			while((_g1 < _this->length)){
-HXDLIN(1060)				 ::borogove::Chat v = _this->__get(_g1).StaticCast<  ::borogove::Chat >();
-HXDLIN(1060)				_g1 = (_g1 + 1);
-HXDLIN(1060)				if ((v->uiState != 2)) {
-HXDLIN(1060)					_g->push(v);
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1403_getChats)
+HXDLIN(1403)		::Array< ::Dynamic> _this = this->chats;
+HXDLIN(1403)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(1403)		{
+HXDLIN(1403)			int _g1 = 0;
+HXDLIN(1403)			while((_g1 < _this->length)){
+HXDLIN(1403)				 ::borogove::Chat v = _this->__get(_g1).StaticCast<  ::borogove::Chat >();
+HXDLIN(1403)				_g1 = (_g1 + 1);
+HXDLIN(1403)				if ((v->uiState != 2)) {
+HXDLIN(1403)					_g->push(v);
             				}
             			}
             		}
-HXDLIN(1060)		return _g;
+HXDLIN(1403)		return _g;
             	}
 
 
@@ -3074,9 +3872,42 @@ HXDLIN( 363)		return ( (size_t)(out->length) );
             	}
 
 
+::Array< ::Dynamic> Client_obj::getChannels(){
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1407_getChannels)
+HXDLIN(1407)		::Array< ::Dynamic> _this = this->getChats();
+HXDLIN(1407)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN(1407)		{
+HXDLIN(1407)			int _g = 0;
+HXDLIN(1407)			int _g1 = _this->length;
+HXDLIN(1407)			while((_g < _g1)){
+HXDLIN(1407)				_g = (_g + 1);
+HXDLIN(1407)				int i = (_g - 1);
+HXDLIN(1407)				{
+HXDLIN(1407)					 ::borogove::Channel inValue = ( ( ::borogove::Channel)(::Std_obj::downcast(_hx_array_unsafe_get(_this,i),::hx::ClassOf< ::borogove::Channel >())) );
+HXDLIN(1407)					result->__unsafe_set(i,inValue);
+            				}
+            			}
+            		}
+HXDLIN(1407)		::Array< ::Dynamic> _g2 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(1407)		{
+HXDLIN(1407)			int _g3 = 0;
+HXDLIN(1407)			while((_g3 < result->length)){
+HXDLIN(1407)				 ::borogove::Channel v = result->__get(_g3).StaticCast<  ::borogove::Channel >();
+HXDLIN(1407)				_g3 = (_g3 + 1);
+HXDLIN(1407)				if (::hx::IsNotNull( v )) {
+HXDLIN(1407)					_g2->push(v);
+            				}
+            			}
+            		}
+HXDLIN(1407)		return _g2;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Client_obj,getChannels,return )
+
  ::borogove::AvailableChatIterator Client_obj::findAvailableChats(::String q){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1070_findAvailableChats)
-HXDLIN(1070)		return  ::borogove::AvailableChatIterator_obj::__alloc( HX_CTX ,q,::hx::ObjectPtr<OBJ_>(this),this->persistence);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1417_findAvailableChats)
+HXDLIN(1417)		return  ::borogove::AvailableChatIterator_obj::__alloc( HX_CTX ,q,::hx::ObjectPtr<OBJ_>(this),this->persistence);
             	}
 
 
@@ -3085,178 +3916,178 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,findAvailableChats,return )
 ::Dynamic Client_obj::availableChatSources(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_6) HXARGC(1)
             		::Array< ::String > _hx_run(::Array< ::String > ss){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1124_availableChatSources)
-HXLINE(1125)			 ::haxe::ds::StringMap found =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1126)			::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
-HXDLIN(1126)			{
-HXLINE(1126)				int _g1 = 0;
-HXDLIN(1126)				while((_g1 < ss->length)){
-HXLINE(1126)					::String v = ss->__get(_g1);
-HXDLIN(1126)					_g1 = (_g1 + 1);
-HXLINE(1127)					bool didFind;
-HXDLIN(1127)					 ::Dynamic tmp = found->get(v);
-HXDLIN(1127)					if (::hx::IsNotNull( tmp )) {
-HXLINE(1127)						didFind = ( (bool)(tmp) );
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1471_availableChatSources)
+HXLINE(1472)			 ::haxe::ds::StringMap found =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1473)			::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
+HXDLIN(1473)			{
+HXLINE(1473)				int _g1 = 0;
+HXDLIN(1473)				while((_g1 < ss->length)){
+HXLINE(1473)					::String v = ss->__get(_g1);
+HXDLIN(1473)					_g1 = (_g1 + 1);
+HXLINE(1474)					bool didFind;
+HXDLIN(1474)					 ::Dynamic tmp = found->get(v);
+HXDLIN(1474)					if (::hx::IsNotNull( tmp )) {
+HXLINE(1474)						didFind = ( (bool)(tmp) );
             					}
             					else {
-HXLINE(1127)						didFind = false;
+HXLINE(1474)						didFind = false;
             					}
-HXLINE(1128)					found->set(v,true);
-HXLINE(1126)					bool _hx_tmp;
-HXLINE(1129)					if ((v != HX_("",00,00,00,00))) {
-HXLINE(1126)						_hx_tmp = !(didFind);
+HXLINE(1475)					found->set(v,true);
+HXLINE(1473)					bool _hx_tmp;
+HXLINE(1476)					if ((v != HX_("",00,00,00,00))) {
+HXLINE(1473)						_hx_tmp = !(didFind);
             					}
             					else {
-HXLINE(1126)						_hx_tmp = false;
+HXLINE(1473)						_hx_tmp = false;
             					}
-HXDLIN(1126)					if (_hx_tmp) {
-HXLINE(1126)						_g->push(v);
+HXDLIN(1473)					if (_hx_tmp) {
+HXLINE(1473)						_g->push(v);
             					}
             				}
             			}
-HXDLIN(1126)			return _g;
+HXDLIN(1473)			return _g;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1076_availableChatSources)
-HXDLIN(1076)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1077)		::Array< ::Dynamic> sources = ::Array_obj< ::Dynamic>::__new(1)->init(0,::thenshim::_Promise::Promise_Impl__obj::resolve(HX_("Name",6b,9e,d8,33)));
-HXLINE(1079)		{
-HXLINE(1079)			int _g = 0;
-HXDLIN(1079)			::Array< ::Dynamic> _g1 = this->chats;
-HXDLIN(1079)			while((_g < _g1->length)){
-HXLINE(1079)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(1079)				_g = (_g + 1);
-HXLINE(1080)				if (chat->isTrusted()) {
-HXLINE(1081)					 ::haxe::ds::StringMap resources =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1082)					{
-HXLINE(1082)						 ::Dynamic _g2 = ::borogove::Caps_obj::withIdentity(chat->getCaps(),HX_("gateway",04,40,59,91),null());
-HXDLIN(1082)						while(( (bool)(_g2->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1082)							 ::Dynamic _g3 = _g2->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXDLIN(1082)							::String resource = ( (::String)(_g3->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) );
-HXDLIN(1082)							 ::borogove::Caps caps = ( ( ::borogove::Caps)(_g3->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) );
-HXDLIN(1082)							{
-HXLINE(1084)								::Array< ::Dynamic> identities = caps->identities;
-HXLINE(1086)								bool _hx_tmp;
-HXDLIN(1086)								bool _hx_tmp1;
-HXDLIN(1086)								if ((chat->chatId.indexOf(HX_("@",40,00,00,00),null()) >= 0)) {
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1423_availableChatSources)
+HXDLIN(1423)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1424)		::Array< ::Dynamic> sources = ::Array_obj< ::Dynamic>::__new(1)->init(0,::thenshim::_Promise::Promise_Impl__obj::resolve(HX_("Name",6b,9e,d8,33)));
+HXLINE(1426)		{
+HXLINE(1426)			int _g = 0;
+HXDLIN(1426)			::Array< ::Dynamic> _g1 = this->chats;
+HXDLIN(1426)			while((_g < _g1->length)){
+HXLINE(1426)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1426)				_g = (_g + 1);
+HXLINE(1427)				if (chat->isTrusted()) {
+HXLINE(1428)					 ::haxe::ds::StringMap resources =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1429)					{
+HXLINE(1429)						 ::Dynamic _g2 = ::borogove::Caps_obj::withIdentity(chat->getCaps(),HX_("gateway",04,40,59,91),null());
+HXDLIN(1429)						while(( (bool)(_g2->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1429)							 ::Dynamic _g3 = _g2->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN(1429)							::String resource = ( (::String)(_g3->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) );
+HXDLIN(1429)							 ::borogove::Caps caps = ( ( ::borogove::Caps)(_g3->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) );
+HXDLIN(1429)							{
+HXLINE(1431)								::Array< ::Dynamic> identities = caps->identities;
+HXLINE(1433)								bool _hx_tmp;
+HXDLIN(1433)								bool _hx_tmp1;
+HXDLIN(1433)								if ((chat->chatId.indexOf(HX_("@",40,00,00,00),null()) >= 0)) {
             									HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             									bool _hx_run( ::borogove::Identity i){
-            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1086_availableChatSources)
-HXLINE(1086)										return (i->category == HX_("conference",1c,2b,83,41));
+            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1433_availableChatSources)
+HXLINE(1433)										return (i->category == HX_("conference",1c,2b,83,41));
             									}
             									HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1086)									_hx_tmp1 = ::hx::IsNull( ::Lambda_obj::find(identities, ::Dynamic(new _hx_Closure_0())) );
+HXLINE(1433)									_hx_tmp1 = ::hx::IsNull( ::Lambda_obj::find(identities, ::Dynamic(new _hx_Closure_0())) );
             								}
             								else {
-HXLINE(1086)									_hx_tmp1 = true;
+HXLINE(1433)									_hx_tmp1 = true;
             								}
-HXDLIN(1086)								if (_hx_tmp1) {
+HXDLIN(1433)								if (_hx_tmp1) {
             									HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             									bool _hx_run( ::borogove::Identity i){
-            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1087_availableChatSources)
-HXLINE(1087)										return (i->category == HX_("client",4b,ca,4f,0a));
+            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1434_availableChatSources)
+HXLINE(1434)										return (i->category == HX_("client",4b,ca,4f,0a));
             									}
             									HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1086)									_hx_tmp = ::hx::IsNull( ::Lambda_obj::find(identities, ::Dynamic(new _hx_Closure_1())) );
+HXLINE(1433)									_hx_tmp = ::hx::IsNull( ::Lambda_obj::find(identities, ::Dynamic(new _hx_Closure_1())) );
             								}
             								else {
-HXLINE(1086)									_hx_tmp = false;
+HXLINE(1433)									_hx_tmp = false;
             								}
-HXLINE(1085)								if (_hx_tmp) {
-HXLINE(1089)									::String _hx_tmp2;
-HXDLIN(1089)									if (::hx::IsNull( resource )) {
-HXLINE(1089)										_hx_tmp2 = ::borogove::_Chat::Chat_Fields__obj::nullSentinel;
+HXLINE(1432)								if (_hx_tmp) {
+HXLINE(1436)									::String _hx_tmp2;
+HXDLIN(1436)									if (::hx::IsNull( resource )) {
+HXLINE(1436)										_hx_tmp2 = ::borogove::_Chat::Chat_Fields__obj::nullSentinel;
             									}
             									else {
-HXLINE(1089)										_hx_tmp2 = resource;
+HXLINE(1436)										_hx_tmp2 = resource;
             									}
-HXDLIN(1089)									resources->set(_hx_tmp2,caps);
+HXDLIN(1436)									resources->set(_hx_tmp2,caps);
             								}
             							}
             						}
             					}
-HXLINE(1092)					bool _hx_tmp3;
-HXDLIN(1092)					bool _hx_tmp4;
-HXDLIN(1092)					if (!(resources->exists(::borogove::_Chat::Chat_Fields__obj::nullSentinel))) {
-HXLINE(1092)						_hx_tmp4 = !(this->sendAvailable);
+HXLINE(1439)					bool _hx_tmp3;
+HXDLIN(1439)					bool _hx_tmp4;
+HXDLIN(1439)					if (!(resources->exists(::borogove::_Chat::Chat_Fields__obj::nullSentinel))) {
+HXLINE(1439)						_hx_tmp4 = !(this->sendAvailable);
             					}
             					else {
-HXLINE(1092)						_hx_tmp4 = false;
+HXLINE(1439)						_hx_tmp4 = false;
             					}
-HXDLIN(1092)					if (_hx_tmp4) {
-HXLINE(1092)						_hx_tmp3 = ::borogove::JID_obj::parse(chat->chatId)->isDomain();
+HXDLIN(1439)					if (_hx_tmp4) {
+HXLINE(1439)						_hx_tmp3 = ::borogove::JID_obj::parse(chat->chatId)->isDomain();
             					}
             					else {
-HXLINE(1092)						_hx_tmp3 = false;
+HXLINE(1439)						_hx_tmp3 = false;
             					}
-HXDLIN(1092)					if (_hx_tmp3) {
-HXLINE(1093)						resources->set(::borogove::_Chat::Chat_Fields__obj::nullSentinel,::borogove::CapsRepo_obj::empty);
+HXDLIN(1439)					if (_hx_tmp3) {
+HXLINE(1440)						resources->set(::borogove::_Chat::Chat_Fields__obj::nullSentinel,::borogove::CapsRepo_obj::empty);
             					}
-HXLINE(1095)					{
+HXLINE(1442)					{
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2,::Array< ::Dynamic>,iter_keys) HXARGC(0)
             						bool _hx_run(){
-            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1095_availableChatSources)
-HXLINE(1095)							return ( (bool)(iter_keys->__get(0)->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
+            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1442_availableChatSources)
+HXLINE(1442)							return ( (bool)(iter_keys->__get(0)->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
             						}
             						HX_END_LOCAL_FUNC0(return)
 
             						HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3,::Array< ::Dynamic>,iter_map,::Array< ::Dynamic>,iter_keys) HXARGC(0)
             						 ::Dynamic _hx_run(){
-            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1095_availableChatSources)
-HXLINE(1095)							::String key = ( (::String)(iter_keys->__get(0)->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1095)							 ::Dynamic v =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1442_availableChatSources)
+HXLINE(1442)							::String key = ( (::String)(iter_keys->__get(0)->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1442)							 ::Dynamic v =  ::Dynamic(::hx::Anon_obj::Create(2)
             								->setFixed(0,HX_("key",9f,89,51,00),key)
             								->setFixed(1,HX_("value",71,7f,b8,31),( ( ::borogove::Caps)(::haxe::IMap_obj::get(iter_map->__get(0),key)) )));
-HXDLIN(1095)							if (::hx::IsEq( v->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic),::borogove::_Chat::Chat_Fields__obj::nullSentinel )) {
-HXLINE(1095)								return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN(1442)							if (::hx::IsEq( v->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic),::borogove::_Chat::Chat_Fields__obj::nullSentinel )) {
+HXLINE(1442)								return  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("key",9f,89,51,00),null())
             									->setFixed(1,HX_("value",71,7f,b8,31), ::Dynamic(v->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic))));
             							}
             							else {
-HXLINE(1095)								return v;
+HXLINE(1442)								return v;
             							}
-HXDLIN(1095)							return null();
+HXDLIN(1442)							return null();
             						}
             						HX_END_LOCAL_FUNC0(return)
 
-HXLINE(1095)						::Array< ::Dynamic> iter_map = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN(1095)						::Array< ::Dynamic> iter_keys = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN(1095)						::Dynamic map = resources;
-HXDLIN(1095)						iter_map[0] = map;
-HXDLIN(1095)						iter_keys[0] = ::haxe::IMap_obj::keys(map);
-HXDLIN(1095)						 ::Dynamic _g_hasNext =  ::Dynamic(new _hx_Closure_2(iter_keys));
-HXDLIN(1095)						 ::Dynamic _g_next =  ::Dynamic(new _hx_Closure_3(iter_map,iter_keys));
-HXDLIN(1095)						while(( (bool)(_g_hasNext()) )){
-HXLINE(1095)							 ::Dynamic _g4 = _g_next();
-HXDLIN(1095)							::String resource1 = ( (::String)(_g4->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) );
-HXDLIN(1095)							 ::borogove::Caps caps1 = ( ( ::borogove::Caps)(_g4->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) );
-HXDLIN(1095)							{
+HXLINE(1442)						::Array< ::Dynamic> iter_map = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(1442)						::Array< ::Dynamic> iter_keys = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(1442)						::Dynamic map = resources;
+HXDLIN(1442)						iter_map[0] = map;
+HXDLIN(1442)						iter_keys[0] = ::haxe::IMap_obj::keys(map);
+HXDLIN(1442)						 ::Dynamic _g_hasNext =  ::Dynamic(new _hx_Closure_2(iter_keys));
+HXDLIN(1442)						 ::Dynamic _g_next =  ::Dynamic(new _hx_Closure_3(iter_map,iter_keys));
+HXDLIN(1442)						while(( (bool)(_g_hasNext()) )){
+HXLINE(1442)							 ::Dynamic _g4 = _g_next();
+HXDLIN(1442)							::String resource1 = ( (::String)(_g4->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) );
+HXDLIN(1442)							 ::borogove::Caps caps1 = ( ( ::borogove::Caps)(_g4->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) );
+HXDLIN(1442)							{
             								HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_5, ::borogove::Client,_gthis, ::borogove::Caps,caps1, ::borogove::queries::JabberIqGatewayGet,jigGet) HXARGC(2)
             								void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             									HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_4, ::borogove::Caps,caps1, ::Dynamic,resolve, ::borogove::queries::JabberIqGatewayGet,jigGet) HXARGC(0)
             									void _hx_run(){
-            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1100_availableChatSources)
-HXLINE(1101)										 ::haxe::ds::Either result = jigGet->getResult();
-HXLINE(1102)										if (::hx::IsNull( result )) {
-HXLINE(1103)											 ::borogove::Identity identity = caps1->identities->__get(0).StaticCast<  ::borogove::Identity >();
-HXLINE(1104)											if (::hx::IsNull( identity )) {
-HXLINE(1105)												resolve(HX_("",00,00,00,00));
+            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1447_availableChatSources)
+HXLINE(1448)										 ::haxe::ds::Either result = jigGet->getResult();
+HXLINE(1449)										if (::hx::IsNull( result )) {
+HXLINE(1450)											 ::borogove::Identity identity = caps1->identities->__get(0).StaticCast<  ::borogove::Identity >();
+HXLINE(1451)											if (::hx::IsNull( identity )) {
+HXLINE(1452)												resolve(HX_("",00,00,00,00));
             											}
             											else {
-HXLINE(1107)												resolve(identity->type);
+HXLINE(1454)												resolve(identity->type);
             											}
             										}
             										else {
-HXLINE(1110)											switch((int)(result->_hx_getIndex())){
+HXLINE(1457)											switch((int)(result->_hx_getIndex())){
             												case (int)0: {
-HXLINE(1111)													resolve(HX_("",00,00,00,00));
+HXLINE(1458)													resolve(HX_("",00,00,00,00));
             												}
             												break;
             												case (int)1: {
-HXLINE(1112)													resolve(result->_hx_getObject(0));
+HXLINE(1459)													resolve(result->_hx_getObject(0));
             												}
             												break;
             											}
@@ -3264,40 +4095,40 @@ HXLINE(1112)													resolve(result->_hx_getObject(0));
             									}
             									HX_END_LOCAL_FUNC0((void))
 
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1099_availableChatSources)
-HXLINE(1100)									jigGet->onFinished( ::Dynamic(new _hx_Closure_4(caps1,resolve,jigGet)));
-HXLINE(1116)									_gthis->sendQuery(jigGet);
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1446_availableChatSources)
+HXLINE(1447)									jigGet->onFinished( ::Dynamic(new _hx_Closure_4(caps1,resolve,jigGet)));
+HXLINE(1463)									_gthis->sendQuery(jigGet);
             								}
             								HX_END_LOCAL_FUNC2((void))
 
-HXLINE(1096)								 ::borogove::JID bareJid = ::borogove::JID_obj::parse(chat->chatId);
-HXLINE(1097)								::String bareJid1 = bareJid->node;
-HXDLIN(1097)								::String bareJid2 = bareJid->domain;
-HXDLIN(1097)								::String fullJid;
-HXDLIN(1097)								bool fullJid1;
-HXDLIN(1097)								if (bareJid->isDomain()) {
-HXLINE(1097)									fullJid1 = (resource1 == HX_("",00,00,00,00));
+HXLINE(1443)								 ::borogove::JID bareJid = ::borogove::JID_obj::parse(chat->chatId);
+HXLINE(1444)								::String bareJid1 = bareJid->node;
+HXDLIN(1444)								::String bareJid2 = bareJid->domain;
+HXDLIN(1444)								::String fullJid;
+HXDLIN(1444)								bool fullJid1;
+HXDLIN(1444)								if (bareJid->isDomain()) {
+HXLINE(1444)									fullJid1 = (resource1 == HX_("",00,00,00,00));
             								}
             								else {
-HXLINE(1097)									fullJid1 = false;
+HXLINE(1444)									fullJid1 = false;
             								}
-HXDLIN(1097)								if (fullJid1) {
-HXLINE(1097)									fullJid = null();
+HXDLIN(1444)								if (fullJid1) {
+HXLINE(1444)									fullJid = null();
             								}
             								else {
-HXLINE(1097)									fullJid = resource1;
+HXLINE(1444)									fullJid = resource1;
             								}
-HXLINE(1098)								 ::borogove::queries::JabberIqGatewayGet jigGet =  ::borogove::queries::JabberIqGatewayGet_obj::__alloc( HX_CTX , ::borogove::JID_obj::__alloc( HX_CTX ,bareJid1,bareJid2,fullJid,null())->asString(),null());
-HXLINE(1099)								sources->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_5(_gthis,caps1,jigGet))));
+HXLINE(1445)								 ::borogove::queries::JabberIqGatewayGet jigGet =  ::borogove::queries::JabberIqGatewayGet_obj::__alloc( HX_CTX , ::borogove::JID_obj::__alloc( HX_CTX ,bareJid1,bareJid2,fullJid,null())->asString(),null());
+HXLINE(1446)								sources->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_5(_gthis,caps1,jigGet))));
             							}
             						}
             					}
             				}
             			}
             		}
-HXLINE(1122)		sources->push(::thenshim::_Promise::Promise_Impl__obj::resolve(HX_("ID",db,3f,00,00)));
-HXLINE(1123)		sources->push(::thenshim::_Promise::Promise_Impl__obj::resolve(HX_("URI",4c,c7,40,00)));
-HXLINE(1124)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(sources), ::Dynamic(new _hx_Closure_6()),null());
+HXLINE(1469)		sources->push(::thenshim::_Promise::Promise_Impl__obj::resolve(HX_("ID",db,3f,00,00)));
+HXLINE(1470)		sources->push(::thenshim::_Promise::Promise_Impl__obj::resolve(HX_("URI",4c,c7,40,00)));
+HXLINE(1471)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(sources), ::Dynamic(new _hx_Closure_6()),null());
             	}
 
 
@@ -3330,94 +4161,105 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->availableChat
 
 
  ::borogove::Chat Client_obj::startChat( ::borogove::AvailableChat availableChat){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1139_startChat)
-HXLINE(1140)		 ::borogove::Chat existingChat = this->getChat(availableChat->chatId);
-HXLINE(1141)		if (::hx::IsNotNull( existingChat )) {
-HXLINE(1142)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(existingChat,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE(1143)			bool _hx_tmp;
-HXDLIN(1143)			bool _hx_tmp1;
-HXDLIN(1143)			if (::hx::IsNull( channel )) {
-HXLINE(1143)				_hx_tmp1 = availableChat->isChannel();
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1486_startChat)
+HXLINE(1487)		 ::borogove::Chat existingChat = this->getChat(availableChat->chatId);
+HXLINE(1488)		if (::hx::IsNotNull( existingChat )) {
+HXLINE(1489)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(existingChat,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE(1490)			bool _hx_tmp;
+HXDLIN(1490)			bool _hx_tmp1;
+HXDLIN(1490)			if (::hx::IsNull( channel )) {
+HXLINE(1490)				_hx_tmp1 = availableChat->isChannel();
             			}
             			else {
-HXLINE(1143)				_hx_tmp1 = false;
+HXLINE(1490)				_hx_tmp1 = false;
             			}
-HXDLIN(1143)			if (!(_hx_tmp1)) {
-HXLINE(1143)				if (::hx::IsNotNull( channel )) {
-HXLINE(1143)					_hx_tmp = !(availableChat->isChannel());
+HXDLIN(1490)			if (!(_hx_tmp1)) {
+HXLINE(1490)				if (::hx::IsNotNull( channel )) {
+HXLINE(1490)					_hx_tmp = !(availableChat->isChannel());
             				}
             				else {
-HXLINE(1143)					_hx_tmp = false;
+HXLINE(1490)					_hx_tmp = false;
             				}
             			}
             			else {
-HXLINE(1143)				_hx_tmp = true;
-            			}
-HXDLIN(1143)			if (_hx_tmp) {
-HXLINE(1144)				::Array< ::Dynamic> _this = this->chats;
-HXDLIN(1144)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN(1144)				{
-HXLINE(1144)					int _g1 = 0;
-HXDLIN(1144)					while((_g1 < _this->length)){
-HXLINE(1144)						 ::borogove::Chat v = _this->__get(_g1).StaticCast<  ::borogove::Chat >();
-HXDLIN(1144)						_g1 = (_g1 + 1);
-HXDLIN(1144)						if ((v->chatId != availableChat->chatId)) {
-HXLINE(1144)							_g->push(v);
+HXLINE(1490)				_hx_tmp = true;
+            			}
+HXDLIN(1490)			if (_hx_tmp) {
+HXLINE(1491)				::Array< ::Dynamic> _this = this->chats;
+HXDLIN(1491)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(1491)				{
+HXLINE(1491)					int _g1 = 0;
+HXDLIN(1491)					while((_g1 < _this->length)){
+HXLINE(1491)						 ::borogove::Chat v = _this->__get(_g1).StaticCast<  ::borogove::Chat >();
+HXDLIN(1491)						_g1 = (_g1 + 1);
+HXDLIN(1491)						if ((v->chatId != availableChat->chatId)) {
+HXLINE(1491)							_g->push(v);
             						}
             					}
             				}
-HXDLIN(1144)				this->chats = _g;
+HXDLIN(1491)				this->chats = _g;
             			}
             			else {
-HXLINE(1146)				if ((existingChat->uiState == 2)) {
-HXLINE(1146)					existingChat->uiState = 1;
+HXLINE(1493)				if ((existingChat->uiState == 2)) {
+HXLINE(1493)					existingChat->uiState = 1;
             				}
-HXLINE(1147)				if (::hx::IsNotNull( channel )) {
-HXLINE(1147)					channel->selfPing(true);
+HXLINE(1494)				if (::hx::IsNotNull( channel )) {
+HXLINE(1494)					channel->selfPing(true);
             				}
-HXLINE(1148)				::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1148)				::borogove::Persistence_obj::storeChats(_hx_tmp2,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,existingChat));
-HXLINE(1149)				this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,existingChat));
-HXLINE(1150)				return existingChat;
+HXLINE(1495)				::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1495)				::borogove::Persistence_obj::storeChats(_hx_tmp2,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,existingChat));
+HXLINE(1496)				this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,existingChat));
+HXLINE(1497)				return existingChat;
             			}
             		}
-HXLINE(1154)		 ::borogove::Chat chat;
-HXDLIN(1154)		if (availableChat->isChannel()) {
-HXLINE(1155)			 ::borogove::Channel channel1 =  ::borogove::Channel_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,availableChat->chatId,1,false,false,null(),null(),null(),availableChat->caps);
-HXLINE(1156)			channel1->setupNotifications();
-HXLINE(1157)			this->chats->unshift(channel1);
-HXLINE(1158)			channel1->selfPing(false);
-HXLINE(1154)			chat = channel1;
+HXLINE(1501)		 ::borogove::Chat chat;
+HXDLIN(1501)		if (availableChat->isChannel()) {
+HXLINE(1502)			 ::borogove::Channel channel1 =  ::borogove::Channel_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,availableChat->chatId,1,false,false,null(),null(),null(),availableChat->caps);
+HXLINE(1503)			channel1->setupNotifications();
+HXLINE(1504)			this->chats->unshift(channel1);
+HXLINE(1505)			this->chatsIndex->set(channel1->chatId,( ( ::borogove::Chat)(channel1) ));
+HXLINE(1506)			channel1->selfPing(false);
+HXLINE(1501)			chat = channel1;
             		}
             		else {
-HXLINE(1154)			chat = this->getDirectChat(availableChat->chatId,false);
+HXLINE(1501)			chat = this->getDirectChat(availableChat->chatId,false);
+            		}
+HXLINE(1511)		if (::hx::IsNotNull( availableChat->rosterItem )) {
+HXLINE(1512)			chat->updateFromRoster(availableChat->rosterItem);
             		}
-HXLINE(1163)		::Dynamic _hx_tmp3 = this->persistence;
-HXDLIN(1163)		::borogove::Persistence_obj::storeChats(_hx_tmp3,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
-HXLINE(1164)		this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
-HXLINE(1165)		return chat;
+HXLINE(1514)		::Dynamic _hx_tmp3 = this->persistence;
+HXDLIN(1514)		::borogove::Persistence_obj::storeChats(_hx_tmp3,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE(1515)		this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXLINE(1516)		return chat;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,startChat,return )
 
  ::borogove::Chat Client_obj::getChat(::String chatId){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1174_getChat)
-HXDLIN(1174)		::Array< ::Dynamic> it = this->chats;
-HXDLIN(1174)		 ::borogove::Chat result = null();
-HXDLIN(1174)		{
-HXDLIN(1174)			int _g = 0;
-HXDLIN(1174)			while((_g < it->length)){
-HXDLIN(1174)				 ::borogove::Chat v = it->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(1174)				_g = (_g + 1);
-HXDLIN(1174)				if ((v->chatId == chatId)) {
-HXDLIN(1174)					result = v;
-HXDLIN(1174)					goto _hx_goto_125;
-            				}
-            			}
-            			_hx_goto_125:;
-            		}
-HXDLIN(1174)		return result;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1524_getChat)
+HXLINE(1525)		 ::borogove::Chat found = ( ( ::borogove::Chat)(this->chatsIndex->get(chatId)) );
+HXLINE(1528)		if (::hx::IsNull( found )) {
+HXLINE(1529)			::Array< ::Dynamic> it = this->chats;
+HXDLIN(1529)			 ::borogove::Chat result = null();
+HXDLIN(1529)			{
+HXLINE(1529)				int _g = 0;
+HXDLIN(1529)				while((_g < it->length)){
+HXLINE(1529)					 ::borogove::Chat v = it->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1529)					_g = (_g + 1);
+HXDLIN(1529)					if ((v->chatId == chatId)) {
+HXLINE(1529)						result = v;
+HXDLIN(1529)						goto _hx_goto_169;
+            					}
+            				}
+            				_hx_goto_169:;
+            			}
+HXDLIN(1529)			found = result;
+HXLINE(1530)			if (::hx::IsNotNull( found )) {
+HXLINE(1530)				this->chatsIndex->set(chatId,found);
+            			}
+            		}
+HXLINE(1533)		return found;
             	}
 
 
@@ -3428,45 +4270,45 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,getChat,return )
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::borogove::ModerationAction,action, ::Dynamic,resolve) HXARGC(1)
             			void _hx_run( ::borogove::ChatMessage moderateMessage){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1180_moderateMessage)
-HXLINE(1181)				if (::hx::IsNull( moderateMessage )) {
-HXLINE(1181)					resolve(null());
-HXDLIN(1181)					return;
-            				}
-HXLINE(1182)				{
-HXLINE(1182)					int _g = 0;
-HXDLIN(1182)					::Array< ::Dynamic> _g1 = moderateMessage->attachments;
-HXDLIN(1182)					while((_g < _g1->length)){
-HXLINE(1182)						 ::borogove::ChatAttachment attachment = _g1->__get(_g).StaticCast<  ::borogove::ChatAttachment >();
-HXDLIN(1182)						_g = (_g + 1);
-HXLINE(1183)						{
-HXLINE(1183)							int _g2 = 0;
-HXDLIN(1183)							::Array< ::Dynamic> _g3 = attachment->hashes;
-HXDLIN(1183)							while((_g2 < _g3->length)){
-HXLINE(1183)								 ::borogove::Hash hash = _g3->__get(_g2).StaticCast<  ::borogove::Hash >();
-HXDLIN(1183)								_g2 = (_g2 + 1);
-HXLINE(1184)								::borogove::Persistence_obj::removeMedia(_gthis->persistence,hash->algorithm,hash->hash);
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1539_moderateMessage)
+HXLINE(1540)				if (::hx::IsNull( moderateMessage )) {
+HXLINE(1540)					resolve(null());
+HXDLIN(1540)					return;
+            				}
+HXLINE(1541)				{
+HXLINE(1541)					int _g = 0;
+HXDLIN(1541)					::Array< ::Dynamic> _g1 = moderateMessage->attachments;
+HXDLIN(1541)					while((_g < _g1->length)){
+HXLINE(1541)						 ::borogove::ChatAttachment attachment = _g1->__get(_g).StaticCast<  ::borogove::ChatAttachment >();
+HXDLIN(1541)						_g = (_g + 1);
+HXLINE(1542)						{
+HXLINE(1542)							int _g2 = 0;
+HXDLIN(1542)							::Array< ::Dynamic> _g3 = attachment->hashes;
+HXDLIN(1542)							while((_g2 < _g3->length)){
+HXLINE(1542)								 ::borogove::Hash hash = _g3->__get(_g2).StaticCast<  ::borogove::Hash >();
+HXDLIN(1542)								_g2 = (_g2 + 1);
+HXLINE(1543)								::borogove::Persistence_obj::removeMedia(_gthis->persistence,hash->algorithm,hash->hash);
             							}
             						}
             					}
             				}
-HXLINE(1187)				moderateMessage = ::borogove::ChatMessageBuilder_obj::makeModerated(moderateMessage,action->timestamp,action->moderatorId,action->reason);
-HXLINE(1188)				::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1188)				::borogove::Persistence_obj::updateMessage(_gthis1,_gthis->accountId(),moderateMessage);
-HXLINE(1189)				resolve(moderateMessage);
+HXLINE(1546)				moderateMessage = ::borogove::ChatMessageBuilder_obj::makeModerated(moderateMessage,action->timeSent,action->timeReceived,action->moderatorId,action->reason);
+HXLINE(1547)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1547)				::borogove::Persistence_obj::updateMessage(_gthis1,_gthis->accountId(),moderateMessage);
+HXLINE(1548)				resolve(moderateMessage);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1180_moderateMessage)
-HXLINE(1180)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1180)			::String _hx_tmp = _gthis->accountId();
-HXDLIN(1180)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessage(_gthis1,_hx_tmp,action->chatId,action->moderateServerId,null()), ::Dynamic(new _hx_Closure_0(_gthis,action,resolve)),null());
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1539_moderateMessage)
+HXLINE(1539)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1539)			::String _hx_tmp = _gthis->accountId();
+HXDLIN(1539)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessage(_gthis1,_hx_tmp,action->chatId,action->moderateServerId,null()), ::Dynamic(new _hx_Closure_0(_gthis,action,resolve)),null());
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1178_moderateMessage)
-HXDLIN(1178)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1179)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,action)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1537_moderateMessage)
+HXDLIN(1537)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1538)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,action)));
             	}
 
 
@@ -3474,56 +4316,57 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,moderateMessage,return )
 
  ::borogove::DirectChat Client_obj::getDirectChat(::String chatId,::hx::Null< bool >  __o_triggerIfNew){
             		bool triggerIfNew = __o_triggerIfNew.Default(true);
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1195_getDirectChat)
-HXLINE(1196)		{
-HXLINE(1196)			int _g = 0;
-HXDLIN(1196)			::Array< ::Dynamic> _g1 = this->chats;
-HXDLIN(1196)			while((_g < _g1->length)){
-HXLINE(1196)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(1196)				_g = (_g + 1);
-HXLINE(1197)				bool _hx_tmp;
-HXDLIN(1197)				if (::Std_obj::isOfType(chat,::hx::ClassOf< ::borogove::DirectChat >())) {
-HXLINE(1197)					_hx_tmp = (chat->chatId == chatId);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1554_getDirectChat)
+HXLINE(1555)		{
+HXLINE(1555)			int _g = 0;
+HXDLIN(1555)			::Array< ::Dynamic> _g1 = this->chats;
+HXDLIN(1555)			while((_g < _g1->length)){
+HXLINE(1555)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1555)				_g = (_g + 1);
+HXLINE(1556)				bool _hx_tmp;
+HXDLIN(1556)				if (::Std_obj::isOfType(chat,::hx::ClassOf< ::borogove::DirectChat >())) {
+HXLINE(1556)					_hx_tmp = (chat->chatId == chatId);
             				}
             				else {
-HXLINE(1197)					_hx_tmp = false;
+HXLINE(1556)					_hx_tmp = false;
             				}
-HXDLIN(1197)				if (_hx_tmp) {
-HXLINE(1198)					return ( ( ::borogove::DirectChat)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::DirectChat >())) );
+HXDLIN(1556)				if (_hx_tmp) {
+HXLINE(1557)					return ( ( ::borogove::DirectChat)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::DirectChat >())) );
             				}
             			}
             		}
-HXLINE(1201)		 ::borogove::DirectChat chat1 =  ::borogove::DirectChat_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,chatId,null(),null(),null(),null(),null(),null(),null());
-HXLINE(1202)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1202)		::borogove::Persistence_obj::storeChats(_hx_tmp1,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
-HXLINE(1203)		this->chats->push(chat1);
-HXLINE(1204)		this->chatActivity(chat1,triggerIfNew);
-HXLINE(1205)		return chat1;
+HXLINE(1560)		 ::borogove::DirectChat chat1 =  ::borogove::DirectChat_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,chatId,null(),null(),null(),null(),null(),null(),null());
+HXLINE(1561)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1561)		::borogove::Persistence_obj::storeChats(_hx_tmp1,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
+HXLINE(1562)		this->chats->push(chat1);
+HXLINE(1563)		this->chatsIndex->set(chat1->chatId,( ( ::borogove::Chat)(chat1) ));
+HXLINE(1564)		this->chatActivity(chat1,triggerIfNew);
+HXLINE(1565)		return chat1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,getDirectChat,return )
 
 void Client_obj::enablePush(::String push_service,::String endpoint,::Array< unsigned char > p256dh,::Array< unsigned char > auth,int grace,::Array< unsigned char > vapid_private_pkcs8,::Array< ::String > claims){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1256_enablePush)
-HXLINE(1257)		bool _hx_tmp;
-HXDLIN(1257)		if (::hx::IsNotNull( vapid_private_pkcs8 )) {
-HXLINE(1257)			_hx_tmp = (::haxe::io::Bytes_obj::ofData(vapid_private_pkcs8)->length == 0);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1616_enablePush)
+HXLINE(1617)		bool _hx_tmp;
+HXDLIN(1617)		if (::hx::IsNotNull( vapid_private_pkcs8 )) {
+HXLINE(1617)			_hx_tmp = (::haxe::io::Bytes_obj::ofData(vapid_private_pkcs8)->length == 0);
             		}
             		else {
-HXLINE(1257)			_hx_tmp = false;
+HXLINE(1617)			_hx_tmp = false;
             		}
-HXDLIN(1257)		if (_hx_tmp) {
-HXLINE(1257)			vapid_private_pkcs8 = null();
+HXDLIN(1617)		if (_hx_tmp) {
+HXLINE(1617)			vapid_private_pkcs8 = null();
             		}
-HXLINE(1258)		::Array< ::String > _hx_tmp1;
-HXDLIN(1258)		if (::hx::IsNotNull( claims )) {
-HXLINE(1258)			_hx_tmp1 = claims;
+HXLINE(1618)		::Array< ::String > _hx_tmp1;
+HXDLIN(1618)		if (::hx::IsNotNull( claims )) {
+HXLINE(1618)			_hx_tmp1 = claims;
             		}
             		else {
-HXLINE(1258)			_hx_tmp1 = ::Array_obj< ::String >::__new(0);
+HXLINE(1618)			_hx_tmp1 = ::Array_obj< ::String >::__new(0);
             		}
-HXDLIN(1258)		this->enabledPushData =  ::Dynamic(::hx::Anon_obj::Create(7)
+HXDLIN(1618)		this->enabledPushData =  ::Dynamic(::hx::Anon_obj::Create(7)
             			->setFixed(0,HX_("grace",f8,03,ea,99),grace)
             			->setFixed(1,HX_("p256dh",e7,0a,33,b5),p256dh)
             			->setFixed(2,HX_("push_service",90,f1,d2,f8),push_service)
@@ -3531,59 +4374,59 @@ HXDLIN(1258)		this->enabledPushData =  ::Dynamic(::hx::Anon_obj::Create(7)
             			->setFixed(4,HX_("claims",77,1d,09,05),_hx_tmp1)
             			->setFixed(5,HX_("endpoint",95,d6,5f,31),endpoint)
             			->setFixed(6,HX_("auth",68,df,76,40),auth));
-HXLINE(1260)		::Array< ::Dynamic> filters = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1261)		{
-HXLINE(1261)			int _g = 0;
-HXDLIN(1261)			::Array< ::Dynamic> _g1 = this->chats;
-HXDLIN(1261)			while((_g < _g1->length)){
-HXLINE(1261)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(1261)				_g = (_g + 1);
-HXLINE(1262)				if (chat->notificationsFiltered()) {
-HXLINE(1263)					::String chat1 = chat->chatId;
-HXDLIN(1263)					bool _hx_tmp2 = chat->notifyMention();
-HXDLIN(1263)					filters->push( ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE(1620)		::Array< ::Dynamic> filters = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1621)		{
+HXLINE(1621)			int _g = 0;
+HXDLIN(1621)			::Array< ::Dynamic> _g1 = this->chats;
+HXDLIN(1621)			while((_g < _g1->length)){
+HXLINE(1621)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1621)				_g = (_g + 1);
+HXLINE(1622)				if (chat->notificationsFiltered()) {
+HXLINE(1623)					::String chat1 = chat->chatId;
+HXDLIN(1623)					bool _hx_tmp2 = chat->notifyMention();
+HXDLIN(1623)					filters->push( ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("mention",ea,9e,bf,b9),_hx_tmp2)
             						->setFixed(1,HX_("reply",2a,09,c6,e6),chat->notifyReply())
             						->setFixed(2,HX_("jid",c5,ca,50,00),chat1)));
             				}
             			}
             		}
-HXLINE(1267)		 ::haxe::ds::StringMap _g2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXDLIN(1267)		_g2->set(HX_("aud",f0,00,4a,00),( (::Array< ::String >)(::tink::_Url::Url_Impl__obj::parse(endpoint,null())->__Field(HX_("hosts",0b,ac,62,2b),::hx::paccDynamic)) )->__get(0));
-HXLINE(1268)		{
-HXLINE(1268)			int _g3 = 0;
-HXDLIN(1268)			::Array< ::String > _g4;
-HXDLIN(1268)			if (::hx::IsNotNull( claims )) {
-HXLINE(1268)				_g4 = claims;
+HXLINE(1627)		 ::haxe::ds::StringMap _g2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXDLIN(1627)		_g2->set(HX_("aud",f0,00,4a,00),( (::Array< ::String >)(::tink::_Url::Url_Impl__obj::parse(endpoint,null())->__Field(HX_("hosts",0b,ac,62,2b),::hx::paccDynamic)) )->__get(0));
+HXLINE(1628)		{
+HXLINE(1628)			int _g3 = 0;
+HXDLIN(1628)			::Array< ::String > _g4;
+HXDLIN(1628)			if (::hx::IsNotNull( claims )) {
+HXLINE(1628)				_g4 = claims;
             			}
             			else {
-HXLINE(1268)				_g4 = ::Array_obj< ::String >::__new(0);
+HXLINE(1628)				_g4 = ::Array_obj< ::String >::__new(0);
             			}
-HXDLIN(1268)			int _g5 = _g4->length;
-HXDLIN(1268)			while((_g3 < _g5)){
-HXLINE(1268)				_g3 = (_g3 + 1);
-HXDLIN(1268)				int i = (_g3 - 1);
-HXLINE(1269)				if ((::hx::Mod(i,2) == 0)) {
-HXLINE(1270)					_g2->set(claims->__get(i),claims->__get((i + 1)));
+HXDLIN(1628)			int _g5 = _g4->length;
+HXDLIN(1628)			while((_g3 < _g5)){
+HXLINE(1628)				_g3 = (_g3 + 1);
+HXDLIN(1628)				int i = (_g3 - 1);
+HXLINE(1629)				if ((::hx::Mod(i,2) == 0)) {
+HXLINE(1630)					_g2->set(claims->__get(i),claims->__get((i + 1)));
             				}
             			}
             		}
-HXLINE(1275)		::String _hx_tmp3 = this->jid->asBare()->asString();
-HXLINE(1280)		::String _hx_tmp4;
-HXDLIN(1280)		if (::hx::IsNull( vapid_private_pkcs8 )) {
-HXLINE(1280)			_hx_tmp4 = null();
+HXLINE(1635)		::String _hx_tmp3 = this->jid->asBare()->asString();
+HXLINE(1640)		::String _hx_tmp4;
+HXDLIN(1640)		if (::hx::IsNull( vapid_private_pkcs8 )) {
+HXLINE(1640)			_hx_tmp4 = null();
             		}
             		else {
-HXLINE(1280)			_hx_tmp4 = HX_("ES256",65,db,a8,f1);
+HXLINE(1640)			_hx_tmp4 = HX_("ES256",65,db,a8,f1);
             		}
-HXLINE(1281)		 ::haxe::io::Bytes _hx_tmp5;
-HXDLIN(1281)		if (::hx::IsNull( vapid_private_pkcs8 )) {
-HXLINE(1281)			_hx_tmp5 = null();
+HXLINE(1641)		 ::haxe::io::Bytes _hx_tmp5;
+HXDLIN(1641)		if (::hx::IsNull( vapid_private_pkcs8 )) {
+HXLINE(1641)			_hx_tmp5 = null();
             		}
             		else {
-HXLINE(1281)			_hx_tmp5 = ::haxe::io::Bytes_obj::ofData(vapid_private_pkcs8);
+HXLINE(1641)			_hx_tmp5 = ::haxe::io::Bytes_obj::ofData(vapid_private_pkcs8);
             		}
-HXLINE(1274)		this->sendQuery( ::borogove::queries::Push2Enable_obj::__alloc( HX_CTX ,_hx_tmp3,push_service,endpoint,::haxe::io::Bytes_obj::ofData(p256dh),::haxe::io::Bytes_obj::ofData(auth),_hx_tmp4,_hx_tmp5,_g2,grace,filters));
+HXLINE(1634)		this->sendQuery( ::borogove::queries::Push2Enable_obj::__alloc( HX_CTX ,_hx_tmp3,push_service,endpoint,::haxe::io::Bytes_obj::ofData(p256dh),::haxe::io::Bytes_obj::ofData(auth),_hx_tmp4,_hx_tmp5,_g2,grace,filters));
             	}
 
 
@@ -3657,11 +4500,11 @@ HXLINE( 354)		this->enablePush(push_service,endpoint,_hx_tmp,_hx_tmp1,grace,_hx_
 HX_DEFINE_DYNAMIC_FUNC11(Client_obj,enablePush__fromC,(void))
 
 void Client_obj::updatePushIfEnabled(){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1289_updatePushIfEnabled)
-HXLINE(1290)		if (::hx::IsNull( this->enabledPushData )) {
-HXLINE(1290)			return;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1649_updatePushIfEnabled)
+HXLINE(1650)		if (::hx::IsNull( this->enabledPushData )) {
+HXLINE(1650)			return;
             		}
-HXLINE(1291)		this->enablePush(( (::String)(this->enabledPushData->__Field(HX_("push_service",90,f1,d2,f8),::hx::paccDynamic)) ),( (::String)(this->enabledPushData->__Field(HX_("endpoint",95,d6,5f,31),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("p256dh",e7,0a,33,b5),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("auth",68,df,76,40),::hx::paccDynamic)) ),( (int)(this->enabledPushData->__Field(HX_("grace",f8,03,ea,99),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("vapid_private_pkcs8",32,d7,0a,03),::hx::paccDynamic)) ),( (::Array< ::String >)(this->enabledPushData->__Field(HX_("claims",77,1d,09,05),::hx::paccDynamic)) ));
+HXLINE(1651)		this->enablePush(( (::String)(this->enabledPushData->__Field(HX_("push_service",90,f1,d2,f8),::hx::paccDynamic)) ),( (::String)(this->enabledPushData->__Field(HX_("endpoint",95,d6,5f,31),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("p256dh",e7,0a,33,b5),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("auth",68,df,76,40),::hx::paccDynamic)) ),( (int)(this->enabledPushData->__Field(HX_("grace",f8,03,ea,99),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("vapid_private_pkcs8",32,d7,0a,03),::hx::paccDynamic)) ),( (::Array< ::String >)(this->enabledPushData->__Field(HX_("claims",77,1d,09,05),::hx::paccDynamic)) ));
             	}
 
 
@@ -3670,15 +4513,15 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,updatePushIfEnabled,(void))
 int Client_obj::addPasswordNeededListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1302_addPasswordNeededListener)
-HXLINE(1303)			handler(_gthis);
-HXLINE(1304)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1662_addPasswordNeededListener)
+HXLINE(1663)			handler(_gthis);
+HXLINE(1664)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1301_addPasswordNeededListener)
-HXDLIN(1301)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1302)		return this->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_0(_gthis,handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1661_addPasswordNeededListener)
+HXDLIN(1661)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1662)		return this->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_0(_gthis,handler)));
             	}
 
 
@@ -3715,14 +4558,14 @@ HXDLIN( 367)		return this->addPasswordNeededListener( ::Dynamic(new _hx_Closure_
 int Client_obj::addStatusOnlineListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1316_addStatusOnlineListener)
-HXLINE(1317)			handler();
-HXLINE(1318)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1676_addStatusOnlineListener)
+HXLINE(1677)			handler();
+HXLINE(1678)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1316_addStatusOnlineListener)
-HXDLIN(1316)		return this->on(HX_("status/online",10,05,0e,d2), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1676_addStatusOnlineListener)
+HXDLIN(1676)		return this->on(HX_("status/online",10,05,0e,d2), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3744,14 +4587,14 @@ HXDLIN( 367)		return this->addStatusOnlineListener( ::Dynamic(new _hx_Closure_0(
 int Client_obj::addStatusOfflineListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1330_addStatusOfflineListener)
-HXLINE(1331)			handler();
-HXLINE(1332)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1690_addStatusOfflineListener)
+HXLINE(1691)			handler();
+HXLINE(1692)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1330_addStatusOfflineListener)
-HXDLIN(1330)		return this->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1690_addStatusOfflineListener)
+HXDLIN(1690)		return this->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3773,14 +4616,14 @@ HXDLIN( 367)		return this->addStatusOfflineListener( ::Dynamic(new _hx_Closure_0
 int Client_obj::addConnectionFailedListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1344_addConnectionFailedListener)
-HXLINE(1345)			handler();
-HXLINE(1346)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1704_addConnectionFailedListener)
+HXLINE(1705)			handler();
+HXLINE(1706)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1344_addConnectionFailedListener)
-HXDLIN(1344)		return this->stream->on(HX_("status/error",eb,19,84,6f), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1704_addConnectionFailedListener)
+HXDLIN(1704)		return this->stream->on(HX_("status/error",eb,19,84,6f), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3802,13 +4645,13 @@ HXDLIN( 367)		return this->addConnectionFailedListener( ::Dynamic(new _hx_Closur
 int Client_obj::addTlsCheckListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1359_addTlsCheckListener)
-HXLINE(1359)			return ::borogove::EventResult_obj::EventValue(handler( ::Dynamic(data->__Field(HX_("pem",d8,54,55,00),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("dnsNames",5f,19,aa,5a),::hx::paccDynamic))));
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1719_addTlsCheckListener)
+HXLINE(1719)			return ::borogove::EventResult_obj::EventValue(handler( ::Dynamic(data->__Field(HX_("pem",d8,54,55,00),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("dnsNames",5f,19,aa,5a),::hx::paccDynamic))));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1358_addTlsCheckListener)
-HXDLIN(1358)		return this->stream->on(HX_("tls/check",74,a0,4c,75), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1718_addTlsCheckListener)
+HXDLIN(1718)		return this->stream->on(HX_("tls/check",74,a0,4c,75), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3859,14 +4702,14 @@ HXDLIN( 367)		return this->addTlsCheckListener( ::Dynamic(new _hx_Closure_0(hand
 int Client_obj::addChatMessageListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1397_addChatMessageListener)
-HXLINE(1398)			handler( ::Dynamic(data->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("event",1a,c8,c4,75),::hx::paccDynamic)));
-HXLINE(1399)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1757_addChatMessageListener)
+HXLINE(1758)			handler( ::Dynamic(data->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("event",1a,c8,c4,75),::hx::paccDynamic)));
+HXLINE(1759)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1397_addChatMessageListener)
-HXDLIN(1397)		return this->on(HX_("message/new",d8,fc,71,67), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1757_addChatMessageListener)
+HXDLIN(1757)		return this->on(HX_("message/new",d8,fc,71,67), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3903,14 +4746,14 @@ HXDLIN( 367)		return this->addChatMessageListener( ::Dynamic(new _hx_Closure_0(h
 int Client_obj::addSyncMessageListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::borogove::ChatMessage data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1412_addSyncMessageListener)
-HXLINE(1413)			handler(data);
-HXLINE(1414)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1772_addSyncMessageListener)
+HXLINE(1773)			handler(data);
+HXLINE(1774)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1412_addSyncMessageListener)
-HXDLIN(1412)		return this->on(HX_("message/sync",e3,76,a8,1f), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1772_addSyncMessageListener)
+HXDLIN(1772)		return this->on(HX_("message/sync",e3,76,a8,1f), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3945,76 +4788,83 @@ HXDLIN( 367)		return this->addSyncMessageListener( ::Dynamic(new _hx_Closure_0(h
 
 
 int Client_obj::addChatsUpdatedListener( ::Dynamic handler){
-            		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_3, ::haxe::ds::StringMap,updateChatBuffer,::Array< ::Dynamic>,updateChatTimer, ::Dynamic,handler,::Array< Float >,lastCall) HXARGC(1)
+            		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis, ::haxe::ds::StringMap,updateChatBuffer,::Array< ::Dynamic>,updateChatTimer, ::Dynamic,handler,::Array< Float >,lastCall) HXARGC(1)
             		 ::borogove::EventResult _hx_run(::Array< ::Dynamic> data){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1429_addChatsUpdatedListener)
-HXLINE(1430)			Float now = ( ::__time_stamp() * ( (Float)(1000) ));
-HXLINE(1431)			if (::hx::IsNotNull( updateChatTimer->__get(0).StaticCast<  ::haxe::Timer >() )) {
-HXLINE(1432)				updateChatTimer->__get(0).StaticCast<  ::haxe::Timer >()->stop();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1789_addChatsUpdatedListener)
+HXLINE(1790)			Float now = ( ::__time_stamp() * ( (Float)(1000) ));
+HXLINE(1791)			if (::hx::IsNotNull( updateChatTimer->__get(0).StaticCast<  ::haxe::Timer >() )) {
+HXLINE(1792)				updateChatTimer->__get(0).StaticCast<  ::haxe::Timer >()->stop();
             			}
-HXLINE(1434)			{
-HXLINE(1434)				int _g = 0;
-HXDLIN(1434)				while((_g < data->length)){
-HXLINE(1434)					 ::borogove::Chat chat = data->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(1434)					_g = (_g + 1);
-HXLINE(1435)					updateChatBuffer->set(chat->chatId,chat);
+HXLINE(1794)			{
+HXLINE(1794)				int _g = 0;
+HXDLIN(1794)				while((_g < data->length)){
+HXLINE(1794)					 ::borogove::Chat chat = data->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1794)					_g = (_g + 1);
+HXLINE(1795)					if (::hx::IsNull( _gthis->getChat(chat->chatId) )) {
+HXLINE(1795)						::haxe::Log_obj::trace(HX_("chats/update was triggered for a chat not in chats",9c,88,8c,56),::hx::SourceInfo(HX_("borogove/Util.hx",ae,4b,19,66),111,HX_("borogove._Util.Util_Fields_",03,41,c9,1a),HX_("assert",c6,46,03,4c)));
+HXDLIN(1795)						__builtin_trap();
+            					}
+HXLINE(1796)					updateChatBuffer->set(chat->chatId,true);
             				}
             			}
-HXLINE(1437)			bool _hx_tmp;
-HXDLIN(1437)			if (!((lastCall->__get(0) < 0))) {
-HXLINE(1437)				_hx_tmp = ((now - lastCall->__get(0)) >= 500);
+HXLINE(1798)			bool _hx_tmp;
+HXDLIN(1798)			if (!((lastCall->__get(0) < 0))) {
+HXLINE(1798)				_hx_tmp = ((now - lastCall->__get(0)) >= 500);
             			}
             			else {
-HXLINE(1437)				_hx_tmp = true;
+HXLINE(1798)				_hx_tmp = true;
             			}
-HXDLIN(1437)			if (_hx_tmp) {
-            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::ds::StringMap,_e) HXARGC(0)
-            				 ::Dynamic _hx_run(){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1439_addChatsUpdatedListener)
-HXLINE(1439)					return _e->iterator();
+HXDLIN(1798)			if (_hx_tmp) {
+HXLINE(1799)				lastCall[0] = now;
+HXLINE(1800)				::Array< ::Dynamic> toSend = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1801)				{
+HXLINE(1801)					::Dynamic map = updateChatBuffer;
+HXDLIN(1801)					::Dynamic _g_map = map;
+HXDLIN(1801)					 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN(1801)					while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1801)						::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1801)						::haxe::IMap_obj::get(_g_map,key);
+HXLINE(1802)						toSend->push(_gthis->getChat(key));
+            					}
             				}
-            				HX_END_LOCAL_FUNC0(return)
-
-HXLINE(1438)				lastCall[0] = now;
-HXLINE(1439)				 ::Dynamic handler1 = handler;
-HXDLIN(1439)				 ::haxe::ds::StringMap _e = updateChatBuffer;
-HXDLIN(1439)				handler1(::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(_e))))));
-HXLINE(1440)				updateChatTimer[0] = null();
-HXLINE(1441)				updateChatBuffer->clear();
+HXLINE(1804)				handler(toSend);
+HXLINE(1805)				updateChatTimer[0] = null();
+HXLINE(1806)				updateChatBuffer->clear();
             			}
             			else {
-            				HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_2, ::haxe::ds::StringMap,updateChatBuffer,::Array< ::Dynamic>,updateChatTimer, ::Dynamic,handler,::Array< Float >,lastCall) HXARGC(0)
+            				HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::haxe::ds::StringMap,updateChatBuffer,::Array< ::Dynamic>,updateChatTimer, ::Dynamic,handler,::Array< Float >,lastCall) HXARGC(0)
             				void _hx_run(){
-            					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::haxe::ds::StringMap,_e) HXARGC(0)
-            					 ::Dynamic _hx_run(){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1445_addChatsUpdatedListener)
-HXLINE(1445)						return _e->iterator();
-            					}
-            					HX_END_LOCAL_FUNC0(return)
-
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1443_addChatsUpdatedListener)
-HXLINE(1444)					lastCall[0] = ( ::__time_stamp() * ( (Float)(1000) ));
-HXLINE(1445)					 ::Dynamic handler1 = handler;
-HXDLIN(1445)					 ::haxe::ds::StringMap _e = updateChatBuffer;
-HXDLIN(1445)					handler1(::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_1(_e))))));
-HXLINE(1446)					updateChatTimer[0] = null();
-HXLINE(1447)					updateChatBuffer->clear();
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1808_addChatsUpdatedListener)
+HXLINE(1809)					lastCall[0] = ( ::__time_stamp() * ( (Float)(1000) ));
+HXLINE(1810)					::Array< ::Dynamic> toSend = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1811)					{
+HXLINE(1811)						::Dynamic map = updateChatBuffer;
+HXDLIN(1811)						::Dynamic _g_map = map;
+HXDLIN(1811)						 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN(1811)						while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1811)							::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1811)							::haxe::IMap_obj::get(_g_map,key);
+HXLINE(1812)							toSend->push(_gthis->getChat(key));
+            						}
+            					}
+HXLINE(1814)					handler(toSend);
+HXLINE(1815)					updateChatTimer[0] = null();
+HXLINE(1816)					updateChatBuffer->clear();
             				}
             				HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1443)				updateChatTimer[0] = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_2(updateChatBuffer,updateChatTimer,handler,lastCall)),500);
+HXLINE(1808)				updateChatTimer[0] = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis,updateChatBuffer,updateChatTimer,handler,lastCall)),500);
             			}
-HXLINE(1450)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE(1819)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1425_addChatsUpdatedListener)
-HXLINE(1426)		 ::haxe::ds::StringMap updateChatBuffer =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1427)		::Array< Float > lastCall = ::Array_obj< Float >::fromData( _hx_array_data_c0e6dc18_174,1);
-HXLINE(1428)		::Array< ::Dynamic> updateChatTimer = ::Array_obj< ::Dynamic>::__new(1)->init(0,null());
-HXLINE(1429)		return this->on(HX_("chats/update",3d,8e,1d,14), ::Dynamic(new _hx_Closure_3(updateChatBuffer,updateChatTimer,handler,lastCall)));
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1785_addChatsUpdatedListener)
+HXDLIN(1785)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1786)		 ::haxe::ds::StringMap updateChatBuffer =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1787)		::Array< Float > lastCall = ::Array_obj< Float >::fromData( _hx_array_data_c0e6dc18_218,1);
+HXLINE(1788)		::Array< ::Dynamic> updateChatTimer = ::Array_obj< ::Dynamic>::__new(1)->init(0,null());
+HXLINE(1789)		return this->on(HX_("chats/update",3d,8e,1d,14), ::Dynamic(new _hx_Closure_1(_gthis,updateChatBuffer,updateChatTimer,handler,lastCall)));
             	}
 
 
@@ -4051,14 +4901,14 @@ HXDLIN( 367)		return this->addChatsUpdatedListener( ::Dynamic(new _hx_Closure_0(
 int Client_obj::addCallRingListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1463_addCallRingListener)
-HXLINE(1464)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)));
-HXLINE(1465)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1832_addCallRingListener)
+HXLINE(1833)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)));
+HXLINE(1834)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1463_addCallRingListener)
-HXDLIN(1463)		return this->on(HX_("call/ring",01,8e,91,54), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1832_addCallRingListener)
+HXDLIN(1832)		return this->on(HX_("call/ring",01,8e,91,54), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -4095,14 +4945,14 @@ HXDLIN( 367)		return this->addCallRingListener( ::Dynamic(new _hx_Closure_0(hand
 int Client_obj::addCallRetractListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1477_addCallRetractListener)
-HXLINE(1478)			handler( ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("sid",0e,9f,57,00),::hx::paccDynamic)));
-HXLINE(1479)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1846_addCallRetractListener)
+HXLINE(1847)			handler( ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("sid",0e,9f,57,00),::hx::paccDynamic)));
+HXLINE(1848)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1477_addCallRetractListener)
-HXDLIN(1477)		return this->on(HX_("call/retract",50,bc,8d,db), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1846_addCallRetractListener)
+HXDLIN(1846)		return this->on(HX_("call/retract",50,bc,8d,db), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -4152,14 +5002,14 @@ HXDLIN( 367)		return this->addCallRetractListener( ::Dynamic(new _hx_Closure_0(h
 int Client_obj::addCallRingingListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run(::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1491_addCallRingingListener)
-HXLINE(1492)			handler(data);
-HXLINE(1493)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1860_addCallRingingListener)
+HXLINE(1861)			handler(data);
+HXLINE(1862)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1491_addCallRingingListener)
-HXDLIN(1491)		return this->on(HX_("call/ringing",81,75,54,f9), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1860_addCallRingingListener)
+HXDLIN(1860)		return this->on(HX_("call/ringing",81,75,54,f9), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -4196,14 +5046,14 @@ HXDLIN( 367)		return this->addCallRingingListener( ::Dynamic(new _hx_Closure_0(h
 int Client_obj::addCallUpdateStatusListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1505_addCallUpdateStatusListener)
-HXLINE(1506)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)));
-HXLINE(1507)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1874_addCallUpdateStatusListener)
+HXLINE(1875)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)));
+HXLINE(1876)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1505_addCallUpdateStatusListener)
-HXDLIN(1505)		return this->on(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1874_addCallUpdateStatusListener)
+HXDLIN(1874)		return this->on(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -4240,14 +5090,14 @@ HXDLIN( 367)		return this->addCallUpdateStatusListener( ::Dynamic(new _hx_Closur
 int Client_obj::addCallMediaListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1521_addCallMediaListener)
-HXLINE(1522)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("audio",d6,78,80,27),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("video",7b,14,fc,36),::hx::paccDynamic)));
-HXLINE(1523)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1890_addCallMediaListener)
+HXLINE(1891)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("audio",d6,78,80,27),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("video",7b,14,fc,36),::hx::paccDynamic)));
+HXLINE(1892)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1521_addCallMediaListener)
-HXDLIN(1521)		return this->on(HX_("call/media",73,5d,1d,c7), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1890_addCallMediaListener)
+HXDLIN(1890)		return this->on(HX_("call/media",73,5d,1d,c7), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -4284,14 +5134,14 @@ HXDLIN( 367)		return this->addCallMediaListener( ::Dynamic(new _hx_Closure_0(han
 int Client_obj::addCallTrackListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1536_addCallTrackListener)
-HXLINE(1537)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("streams",f3,db,44,f6),::hx::paccDynamic)));
-HXLINE(1538)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1905_addCallTrackListener)
+HXLINE(1906)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("streams",f3,db,44,f6),::hx::paccDynamic)));
+HXLINE(1907)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1536_addCallTrackListener)
-HXDLIN(1536)		return this->on(HX_("call/track",1a,e7,80,d7), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1905_addCallTrackListener)
+HXDLIN(1905)		return this->on(HX_("call/track",1a,e7,80,d7), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -4356,24 +5206,26 @@ HXDLIN( 367)		return this->addCallTrackListener( ::Dynamic(new _hx_Closure_0(han
 
 
 void Client_obj::setInForeground(){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1546_setInForeground)
-HXLINE(1547)		if (!(this->stream->csi)) {
-HXLINE(1547)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1915_setInForeground)
+HXLINE(1916)		if (!(this->stream->csi)) {
+HXLINE(1916)			return;
             		}
-HXLINE(1548)		this->stream->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:csi:0",13,f1,6d,24)))));
+HXLINE(1917)		 ::borogove::GenericStream _hx_tmp = this->stream;
+HXDLIN(1917)		_hx_tmp->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:csi:0",13,f1,6d,24))),null()));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,setInForeground,(void))
 
 void Client_obj::setNotInForeground(){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1554_setNotInForeground)
-HXLINE(1555)		if (!(this->stream->csi)) {
-HXLINE(1555)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1923_setNotInForeground)
+HXLINE(1924)		if (!(this->stream->csi)) {
+HXLINE(1924)			return;
             		}
-HXLINE(1556)		this->stream->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("inactive",6b,17,30,6a), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:csi:0",13,f1,6d,24)))));
+HXLINE(1925)		 ::borogove::GenericStream _hx_tmp = this->stream;
+HXDLIN(1925)		_hx_tmp->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("inactive",6b,17,30,6a), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:csi:0",13,f1,6d,24))),null()));
             	}
 
 
@@ -4382,101 +5234,174 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,setNotInForeground,(void))
 ::Dynamic Client_obj::fetchMediaByHash(::Array< ::Dynamic> hashes,::Array< ::Dynamic> counterparts){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		 ::Dynamic _hx_run( ::Dynamic x){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1564_fetchMediaByHash)
-HXLINE(1564)			return x;
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1933_fetchMediaByHash)
+HXLINE(1933)			return x;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis,::Array< ::Dynamic>,hashes,::Array< ::Dynamic>,counterparts) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1564_fetchMediaByHash)
-HXLINE(1564)			 ::borogove::Client _gthis1 = _gthis;
-HXDLIN(1564)			::Array< ::Dynamic> hashes1 = hashes;
-HXDLIN(1564)			return _gthis1->fetchMediaByHash(hashes1,counterparts->slice(1,null()));
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1933_fetchMediaByHash)
+HXLINE(1933)			 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(1933)			::Array< ::Dynamic> hashes1 = hashes;
+HXDLIN(1933)			return _gthis1->fetchMediaByHash(hashes1,counterparts->slice(1,null()));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1560_fetchMediaByHash)
-HXDLIN(1560)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1563)		bool _hx_tmp;
-HXDLIN(1563)		if ((hashes->length >= 1)) {
-HXLINE(1563)			_hx_tmp = (counterparts->length < 1);
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1929_fetchMediaByHash)
+HXDLIN(1929)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1932)		bool _hx_tmp;
+HXDLIN(1932)		if ((hashes->length >= 1)) {
+HXLINE(1932)			_hx_tmp = (counterparts->length < 1);
             		}
             		else {
-HXLINE(1563)			_hx_tmp = true;
+HXLINE(1932)			_hx_tmp = true;
             		}
-HXDLIN(1563)		if (_hx_tmp) {
-HXLINE(1563)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no counterparts left",64,15,a4,38));
+HXDLIN(1932)		if (_hx_tmp) {
+HXLINE(1932)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no counterparts left",64,15,a4,38));
             		}
-HXLINE(1564)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchMediaByHashOneCounterpart(hashes,counterparts->__get(0).StaticCast<  ::borogove::JID >()), ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1(_gthis,hashes,counterparts)));
+HXLINE(1933)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchMediaByHashOneCounterpart(hashes,counterparts->__get(0).StaticCast<  ::borogove::JID >()), ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1(_gthis,hashes,counterparts)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,fetchMediaByHash,return )
 
+::Dynamic Client_obj::maybeAutodownloadAttachments( ::borogove::Chat chat, ::borogove::ChatMessage message){
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
+            		bool _hx_run(::Array< ::Dynamic> _){
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1958_maybeAutodownloadAttachments)
+HXLINE(1958)			return true;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1937_maybeAutodownloadAttachments)
+HXDLIN(1937)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1938)		if (::hx::IsNull( chat )) {
+HXLINE(1938)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
+            		}
+HXLINE(1939)		::String chat1 = chat->chatId;
+HXDLIN(1939)		if ((chat1 != message->chatId())) {
+HXLINE(1939)			HX_STACK_DO_THROW(HX_("Message not in that chat",fc,3f,16,f8));
+            		}
+HXLINE(1940)		if (!(chat->isTrusted())) {
+HXLINE(1940)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
+            		}
+HXLINE(1941)		 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE(1942)		bool _hx_tmp;
+HXDLIN(1942)		if (::hx::IsNotNull( channel )) {
+HXLINE(1942)			_hx_tmp = !(channel->isPrivate());
+            		}
+            		else {
+HXLINE(1942)			_hx_tmp = false;
+            		}
+HXDLIN(1942)		if (_hx_tmp) {
+HXLINE(1942)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(true);
+            		}
+HXLINE(1944)		::String chatDomain = ::borogove::JID_obj::parse(chat->chatId)->domain;
+HXLINE(1945)		::Array< ::Dynamic> ps = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1946)		{
+HXLINE(1946)			int _g = 0;
+HXDLIN(1946)			::Array< ::Dynamic> _g1 = message->attachments;
+HXDLIN(1946)			while((_g < _g1->length)){
+            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::String,chatDomain) HXARGC(1)
+            				bool _hx_run(::String uri){
+            					HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1947_maybeAutodownloadAttachments)
+HXLINE(1947)					::String _hx_tmp = uri.split(HX_("/",2f,00,00,00))->__get(2).split(HX_(":",3a,00,00,00))->__get(0);
+HXDLIN(1947)					return ::StringTools_obj::endsWith(_hx_tmp,chatDomain);
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+HXLINE(1946)				 ::borogove::ChatAttachment attachment = _g1->__get(_g).StaticCast<  ::borogove::ChatAttachment >();
+HXDLIN(1946)				_g = (_g + 1);
+HXLINE(1947)				if (::hx::IsNotNull( ::Lambda_obj::find(attachment->uris, ::Dynamic(new _hx_Closure_0(chatDomain))) )) {
+            					HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis, ::borogove::ChatMessage,message, ::borogove::ChatAttachment,attachment) HXARGC(1)
+            					::Dynamic _hx_run( ::borogove::ChatAttachment lookedUp){
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1948_maybeAutodownloadAttachments)
+HXLINE(1949)						if (::hx::IsNotNull( lookedUp->cachedAt )) {
+HXLINE(1949)							return ::thenshim::_Promise::Promise_Impl__obj::resolve(lookedUp);
+            						}
+HXLINE(1951)						return message->fetchAttachment(attachment,_gthis,false);
+            					}
+            					HX_END_LOCAL_FUNC1(return)
+
+HXLINE(1948)					ps->push(::thenshim::_Promise::Promise_Impl__obj::then(attachment->lookup(this->persistence), ::Dynamic(new _hx_Closure_1(_gthis,message,attachment)),null()));
+            				}
+            			}
+            		}
+HXLINE(1956)		if ((ps->length < 1)) {
+HXLINE(1956)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
+            		}
+HXLINE(1958)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(ps), ::Dynamic(new _hx_Closure_2()),null());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Client_obj,maybeAutodownloadAttachments,return )
+
 ::Dynamic Client_obj::fetchMediaByHashOneCounterpart(::Array< ::Dynamic> hashes, ::borogove::JID counterpart){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_5, ::borogove::JID,counterpart, ::borogove::Client,_gthis,::Array< ::Dynamic>,hashes) HXARGC(1)
-            		::Dynamic _hx_run(bool has){
+            		::Dynamic _hx_run(::String has){
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_2, ::borogove::JID,counterpart, ::borogove::Client,_gthis,::Array< ::Dynamic>,hashes) HXARGC(2)
             			void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             				HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis, ::Dynamic,resolve, ::Dynamic,reject, ::borogove::queries::BoB,q1) HXARGC(0)
             				void _hx_run(){
-            					HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1575_fetchMediaByHashOneCounterpart)
-HXLINE(1576)					 ::Dynamic r = q1->getResult();
-HXLINE(1577)					if (::hx::IsNull( r )) {
-HXLINE(1578)						reject(HX_("bad or no result from BoB query",ad,e0,04,ee));
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1969_fetchMediaByHashOneCounterpart)
+HXLINE(1970)					 ::Dynamic r = q1->getResult();
+HXLINE(1971)					if (::hx::IsNull( r )) {
+HXLINE(1972)						reject(HX_("bad or no result from BoB query",ad,e0,04,ee));
             					}
             					else {
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,resolve) HXARGC(1)
-            						void _hx_run(bool _){
-            							HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1580_fetchMediaByHashOneCounterpart)
-HXLINE(1580)							resolve(null());
+            						void _hx_run(::String _){
+            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1974_fetchMediaByHashOneCounterpart)
+HXLINE(1974)							resolve(null());
             						}
             						HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1580)						::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis->persistence, ::Dynamic(r->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)),( ( ::haxe::io::Bytes)(r->__Field(HX_("bytes",6b,08,98,bd),::hx::paccDynamic)) )->b), ::Dynamic(new _hx_Closure_0(resolve)),null());
+HXLINE(1974)						::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1974)						::String r1 = ( (::String)(r->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) );
+HXDLIN(1974)						::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis1,r1,::borogove::_Source::Source_Impl__obj::ofTinkSource( ::tink::streams::Single_obj::__alloc( HX_CTX , ::tink::core::_Lazy::LazyConst_obj::__alloc( HX_CTX ,::tink::chunk::ByteChunk_obj::of(( ( ::haxe::io::Bytes)(r->__Field(HX_("bytes",6b,08,98,bd),::hx::paccDynamic)) )))))), ::Dynamic(new _hx_Closure_0(resolve)),null());
             					}
             				}
             				HX_END_LOCAL_FUNC0((void))
 
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1573_fetchMediaByHashOneCounterpart)
-HXLINE(1574)				::String q = counterpart->asString();
-HXDLIN(1574)				 ::borogove::queries::BoB q1 = ::borogove::queries::BoB_obj::forHash(q,hashes->__get(0).StaticCast<  ::borogove::Hash >());
-HXLINE(1575)				q1->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,resolve,reject,q1)));
-HXLINE(1583)				_gthis->sendQueryLazy(q1);
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1967_fetchMediaByHashOneCounterpart)
+HXLINE(1968)				::String q = counterpart->asString();
+HXDLIN(1968)				 ::borogove::queries::BoB q1 = ::borogove::queries::BoB_obj::forHash(q,hashes->__get(0).StaticCast<  ::borogove::Hash >());
+HXLINE(1969)				q1->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,resolve,reject,q1)));
+HXLINE(1977)				_gthis->sendQueryLazy(q1);
             			}
             			HX_END_LOCAL_FUNC2((void))
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             			 ::Dynamic _hx_run( ::Dynamic x){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1584_fetchMediaByHashOneCounterpart)
-HXLINE(1584)				return x;
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1978_fetchMediaByHashOneCounterpart)
+HXLINE(1978)				return x;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_4, ::borogove::JID,counterpart, ::borogove::Client,_gthis,::Array< ::Dynamic>,hashes) HXARGC(1)
             			::Dynamic _hx_run( ::Dynamic _){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1584_fetchMediaByHashOneCounterpart)
-HXLINE(1584)				 ::borogove::Client _gthis1 = _gthis;
-HXDLIN(1584)				::Array< ::Dynamic> _hx_tmp = hashes->slice(1,null());
-HXDLIN(1584)				return _gthis1->fetchMediaByHashOneCounterpart(_hx_tmp,counterpart);
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1978_fetchMediaByHashOneCounterpart)
+HXLINE(1978)				 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(1978)				::Array< ::Dynamic> _hx_tmp = hashes->slice(1,null());
+HXDLIN(1978)				return _gthis1->fetchMediaByHashOneCounterpart(_hx_tmp,counterpart);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1570_fetchMediaByHashOneCounterpart)
-HXLINE(1571)			if (has) {
-HXLINE(1571)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1964_fetchMediaByHashOneCounterpart)
+HXLINE(1965)			if (::hx::IsNotNull( has )) {
+HXLINE(1965)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             			}
-HXLINE(1573)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(counterpart,_gthis,hashes))), ::Dynamic(new _hx_Closure_3()), ::Dynamic(new _hx_Closure_4(counterpart,_gthis,hashes)));
+HXLINE(1967)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(counterpart,_gthis,hashes))), ::Dynamic(new _hx_Closure_3()), ::Dynamic(new _hx_Closure_4(counterpart,_gthis,hashes)));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1567_fetchMediaByHashOneCounterpart)
-HXDLIN(1567)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1568)		if ((hashes->length < 1)) {
-HXLINE(1568)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no hashes left",8c,68,e6,69));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1961_fetchMediaByHashOneCounterpart)
+HXDLIN(1961)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1962)		if ((hashes->length < 1)) {
+HXLINE(1962)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no hashes left",8c,68,e6,69));
             		}
-HXLINE(1570)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(this->persistence,hashes->__get(0).StaticCast<  ::borogove::Hash >()->algorithm,hashes->__get(0).StaticCast<  ::borogove::Hash >()->hash), ::Dynamic(new _hx_Closure_5(counterpart,_gthis,hashes)),null());
+HXLINE(1964)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(this->persistence,hashes->__get(0).StaticCast<  ::borogove::Hash >()), ::Dynamic(new _hx_Closure_5(counterpart,_gthis,hashes)),null());
             	}
 
 
@@ -4485,50 +5410,50 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,fetchMediaByHashOneCounterpart,return )
 void Client_obj::chatActivity( ::borogove::Chat chat,::hx::Null< bool >  __o_trigger){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Chat,chat) HXARGC(1)
             		bool _hx_run( ::borogove::Chat c){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1596_chatActivity)
-HXLINE(1596)			return (c->chatId == chat->chatId);
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1990_chatActivity)
+HXLINE(1990)			return (c->chatId == chat->chatId);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		bool trigger = __o_trigger.Default(true);
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1589_chatActivity)
-HXLINE(1590)		if (chat->isBlocked) {
-HXLINE(1590)			return;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1983_chatActivity)
+HXLINE(1984)		if (chat->isBlocked) {
+HXLINE(1984)			return;
             		}
-HXLINE(1591)		if ((chat->uiState == 2)) {
-HXLINE(1592)			chat->uiState = 1;
-HXLINE(1593)			::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1593)			::String _hx_tmp1 = this->accountId();
-HXDLIN(1593)			::borogove::Persistence_obj::storeChats(_hx_tmp,_hx_tmp1,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE(1985)		if ((chat->uiState == 2)) {
+HXLINE(1986)			chat->uiState = 1;
+HXLINE(1987)			::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1987)			::String _hx_tmp1 = this->accountId();
+HXDLIN(1987)			::borogove::Persistence_obj::storeChats(_hx_tmp,_hx_tmp1,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
             		}
-HXLINE(1595)		int pinnedCount;
-HXDLIN(1595)		if ((chat->uiState == 0)) {
-HXLINE(1595)			pinnedCount = 0;
+HXLINE(1989)		int pinnedCount;
+HXDLIN(1989)		if ((chat->uiState == 0)) {
+HXLINE(1989)			pinnedCount = 0;
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             			int _hx_run( ::borogove::Chat item,int result){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1595_chatActivity)
-HXLINE(1595)				int pinnedCount;
-HXDLIN(1595)				if ((item->uiState == 0)) {
-HXLINE(1595)					pinnedCount = 1;
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1989_chatActivity)
+HXLINE(1989)				int pinnedCount;
+HXDLIN(1989)				if ((item->uiState == 0)) {
+HXLINE(1989)					pinnedCount = 1;
             				}
             				else {
-HXLINE(1595)					pinnedCount = 0;
+HXLINE(1989)					pinnedCount = 0;
             				}
-HXDLIN(1595)				return (result + pinnedCount);
+HXDLIN(1989)				return (result + pinnedCount);
             			}
             			HX_END_LOCAL_FUNC2(return)
 
-HXLINE(1595)			pinnedCount = ( (int)(::Lambda_obj::fold(this->chats, ::Dynamic(new _hx_Closure_0()),0)) );
+HXLINE(1989)			pinnedCount = ( (int)(::Lambda_obj::fold(this->chats, ::Dynamic(new _hx_Closure_0()),0)) );
             		}
-HXLINE(1596)		int idx = ::Lambda_obj::findIndex(this->chats, ::Dynamic(new _hx_Closure_1(chat)));
-HXLINE(1597)		if ((idx > pinnedCount)) {
-HXLINE(1598)			this->chats->removeRange(idx,1);
-HXLINE(1599)			this->chats->insert(pinnedCount,chat);
+HXLINE(1990)		int idx = ::Lambda_obj::findIndex(this->chats, ::Dynamic(new _hx_Closure_1(chat)));
+HXLINE(1991)		if ((idx > pinnedCount)) {
+HXLINE(1992)			this->chats->removeRange(idx,1);
+HXLINE(1993)			this->chats->insert(pinnedCount,chat);
             		}
-HXLINE(1601)		if (trigger) {
-HXLINE(1601)			this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXLINE(1995)		if (trigger) {
+HXLINE(1995)			this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             		}
             	}
 
@@ -4538,63 +5463,63 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,chatActivity,(void))
 void Client_obj::sortChats(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             		int _hx_run( ::borogove::Chat a, ::borogove::Chat b){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1607_sortChats)
-HXLINE(1607)			if ((a->uiState == b->uiState)) {
-HXLINE(1608)				 ::borogove::ChatMessage tmp = a->lastMessage;
-HXDLIN(1608)				::String tmp1;
-HXDLIN(1608)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1608)					tmp1 = tmp->timestamp;
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2001_sortChats)
+HXLINE(2001)			if ((a->uiState == b->uiState)) {
+HXLINE(2002)				 ::borogove::ChatMessage tmp = a->lastMessage;
+HXDLIN(2002)				::String tmp1;
+HXDLIN(2002)				if (::hx::IsNotNull( tmp )) {
+HXLINE(2002)					tmp1 = tmp->timeReceived;
             				}
             				else {
-HXLINE(1608)					tmp1 = null();
+HXLINE(2002)					tmp1 = null();
             				}
-HXDLIN(1608)				::String tcompare;
-HXDLIN(1608)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1608)					tcompare = tmp1;
+HXDLIN(2002)				::String tcompare;
+HXDLIN(2002)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE(2002)					tcompare = tmp1;
             				}
             				else {
-HXLINE(1608)					tcompare = HX_("0",30,00,00,00);
+HXLINE(2002)					tcompare = HX_("0",30,00,00,00);
             				}
-HXDLIN(1608)				 ::borogove::ChatMessage tmp2 = b->lastMessage;
-HXDLIN(1608)				::String tmp3;
-HXDLIN(1608)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1608)					tmp3 = tmp2->timestamp;
+HXDLIN(2002)				 ::borogove::ChatMessage tmp2 = b->lastMessage;
+HXDLIN(2002)				::String tmp3;
+HXDLIN(2002)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE(2002)					tmp3 = tmp2->timeReceived;
             				}
             				else {
-HXLINE(1608)					tmp3 = null();
+HXLINE(2002)					tmp3 = null();
             				}
-HXDLIN(1608)				::String tcompare1;
-HXDLIN(1608)				if (::hx::IsNotNull( tmp3 )) {
-HXLINE(1608)					tcompare1 = tmp3;
+HXDLIN(2002)				::String tcompare1;
+HXDLIN(2002)				if (::hx::IsNotNull( tmp3 )) {
+HXLINE(2002)					tcompare1 = tmp3;
             				}
             				else {
-HXLINE(1608)					tcompare1 = HX_("0",30,00,00,00);
+HXLINE(2002)					tcompare1 = HX_("0",30,00,00,00);
             				}
-HXDLIN(1608)				int tcompare2 = -(::Reflect_obj::compare(tcompare,tcompare1));
-HXLINE(1609)				if ((tcompare2 != 0)) {
-HXLINE(1609)					return tcompare2;
+HXDLIN(2002)				int tcompare2 = -(::Reflect_obj::compare(tcompare,tcompare1));
+HXLINE(2003)				if ((tcompare2 != 0)) {
+HXLINE(2003)					return tcompare2;
             				}
-HXLINE(1610)				::String _hx_tmp = a->getDisplayName();
-HXDLIN(1610)				return ::Reflect_obj::compare(_hx_tmp,b->getDisplayName());
+HXLINE(2004)				::String _hx_tmp = a->getDisplayName();
+HXDLIN(2004)				return ::Reflect_obj::compare(_hx_tmp,b->getDisplayName());
             			}
             			else {
-HXLINE(1612)				return ::Reflect_obj::compare(a->uiState,b->uiState);
+HXLINE(2006)				return ::Reflect_obj::compare(a->uiState,b->uiState);
             			}
-HXLINE(1607)			return 0;
+HXLINE(2001)			return 0;
             		}
             		HX_END_LOCAL_FUNC2(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1606_sortChats)
-HXDLIN(1606)		this->chats->sort( ::Dynamic(new _hx_Closure_0()));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2000_sortChats)
+HXDLIN(2000)		this->chats->sort( ::Dynamic(new _hx_Closure_0()));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,sortChats,(void))
 
 ::String Client_obj::nextSortId(){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1618_nextSortId)
-HXLINE(1619)		this->sortId = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(this->sortId,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
-HXLINE(1620)		return this->sortId;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2012_nextSortId)
+HXLINE(2013)		this->sortId = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(this->sortId,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
+HXLINE(2014)		return this->sortId;
             	}
 
 
@@ -4603,34 +5528,202 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,nextSortId,return )
 ::Dynamic Client_obj::storeMessageBuilder( ::borogove::ChatMessageBuilder builder){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		 ::borogove::ChatMessage _hx_run(::Array< ::Dynamic> result){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1626_storeMessageBuilder)
-HXLINE(1626)			return result->__get(0).StaticCast<  ::borogove::ChatMessage >();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2029_storeMessageBuilder)
+HXLINE(2029)			return result->__get(0).StaticCast<  ::borogove::ChatMessage >();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1624_storeMessageBuilder)
-HXLINE(1625)		if (::hx::IsNull( builder->sortId )) {
-HXLINE(1625)			builder->sortId = this->nextSortId();
-            		}
-HXLINE(1626)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,builder->build())), ::Dynamic(new _hx_Closure_0()),null());
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2018_storeMessageBuilder)
+HXLINE(2019)		if (::hx::IsNull( builder->sortId )) {
+HXLINE(2020)			::String lower = this->sortId;
+HXLINE(2021)			builder->sortId = this->nextSortId();
+HXLINE(2025)			::String _hx_tmp = ::borogove::Date_obj::format(::Date_obj::now());
+HXLINE(2022)			builder->debug =  ::Dynamic(::hx::Anon_obj::Create(4)
+            				->setFixed(0,HX_("now",16,d9,53,00),_hx_tmp)
+            				->setFixed(1,HX_("sortId",d9,7a,37,30), ::Dynamic(::hx::Anon_obj::Create(3)
+            					->setFixed(0,HX_("upper",62,19,3f,a8),null())
+            					->setFixed(1,HX_("method",e1,f6,5a,09),HX_("between",c8,91,b3,66))
+            					->setFixed(2,HX_("lower",01,fa,ff,78),lower)))
+            				->setFixed(2,HX_("source",db,b0,31,32),HX_("outgoing",6c,18,89,c7))
+            				->setFixed(3,HX_("path",a5,e5,51,4a),HX_("Client#storeMessageBuilder",7d,0b,fe,b3)));
+            		}
+HXLINE(2029)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,builder->build())), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,storeMessageBuilder,return )
 
 ::Dynamic Client_obj::storeMessages(::Array< ::Dynamic> messages){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1631_storeMessages)
-HXDLIN(1631)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1631)		return ::borogove::Persistence_obj::storeMessages(_hx_tmp,this->accountId(),messages);
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis) HXARGC(1)
+            		::Dynamic _hx_run(::Array< ::Dynamic> updatedMessages){
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2050_storeMessages)
+HXLINE(2050)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(2050)			return ::borogove::Persistence_obj::storeMessages(_gthis1,_gthis->accountId(),updatedMessages);
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2033_storeMessages)
+HXDLIN(2033)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2034)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(messages->length);
+HXDLIN(2034)		{
+HXLINE(2034)			int _g = 0;
+HXDLIN(2034)			int _g1 = messages->length;
+HXDLIN(2034)			while((_g < _g1)){
+HXLINE(2034)				_g = (_g + 1);
+HXDLIN(2034)				int i = (_g - 1);
+HXDLIN(2034)				{
+HXLINE(2034)					 ::borogove::ChatMessage m = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
+HXDLIN(2034)					::Dynamic inValue;
+HXLINE(2035)					bool inValue1;
+HXDLIN(2035)					 ::borogove::EncryptionInfo tmp = m->encryption;
+HXDLIN(2035)					 ::Dynamic inValue2;
+HXDLIN(2035)					if (::hx::IsNotNull( tmp )) {
+HXLINE(2035)						inValue2 = tmp->status;
+            					}
+            					else {
+HXLINE(2035)						inValue2 = null();
+            					}
+HXDLIN(2035)					if (::hx::IsEq( inValue2,1 )) {
+HXLINE(2035)						bool inValue3;
+HXDLIN(2035)						if (!(m->isIncoming())) {
+HXLINE(2035)							inValue3 = ::hx::IsNotNull( m->localId );
+            						}
+            						else {
+HXLINE(2035)							inValue3 = false;
+            						}
+HXDLIN(2035)						if (!(inValue3)) {
+HXLINE(2035)							inValue1 = ::hx::IsNotNull( m->serverId );
+            						}
+            						else {
+HXLINE(2035)							inValue1 = true;
+            						}
+            					}
+            					else {
+HXLINE(2035)						inValue1 = false;
+            					}
+HXDLIN(2035)					if (inValue1) {
+            						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::ChatMessage,m) HXARGC(1)
+            						 ::borogove::ChatMessage _hx_run( ::borogove::ChatMessage existing){
+            							HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2036_storeMessages)
+HXLINE(2037)							if (::hx::IsNull( existing )) {
+HXLINE(2037)								return m;
+            							}
+HXLINE(2039)							::haxe::Log_obj::trace(HX_("Merging failed decryyption with existing local copy",09,e1,d8,f0), ::Dynamic(::hx::Anon_obj::Create(5)
+            								->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
+            								->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,m)->init(1,existing))
+            								->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("storeMessages",cd,f1,bd,e9))
+            								->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
+            								->setFixed(4,HX_("lineNumber",dd,81,22,76),2039)));
+HXLINE(2040)							 ::borogove::ChatMessageBuilder b = ::borogove::ChatMessageBuilder_obj::fromMessage(existing);
+HXLINE(2041)							if (::hx::IsNotNull( m->serverId )) {
+HXLINE(2041)								b->serverId = m->serverId;
+            							}
+HXLINE(2042)							if (::hx::IsNotNull( m->serverIdBy )) {
+HXLINE(2042)								b->serverIdBy = m->serverIdBy;
+            							}
+HXLINE(2043)							b->syncPoint = m->syncPoint;
+HXLINE(2044)							b->sortId = m->sortId;
+HXLINE(2045)							b->status = m->status;
+HXLINE(2046)							return b->build();
+            						}
+            						HX_END_LOCAL_FUNC1(return)
+
+HXLINE(2036)						::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(2036)						::String inValue4 = _gthis->accountId();
+HXDLIN(2036)						::String inValue5 = m->chatId();
+HXDLIN(2036)						::String inValue6;
+HXDLIN(2036)						if (m->isIncoming()) {
+HXLINE(2036)							inValue6 = m->serverId;
+            						}
+            						else {
+HXLINE(2036)							inValue6 = null();
+            						}
+HXLINE(2034)						inValue = ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessage(_gthis1,inValue4,inValue5,inValue6,m->localId), ::Dynamic(new _hx_Closure_0(m)),null());
+            					}
+            					else {
+HXLINE(2034)						inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(m);
+            					}
+HXDLIN(2034)					result->__unsafe_set(i,inValue);
+            				}
+            			}
+            		}
+HXDLIN(2034)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_1(_gthis)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,storeMessages,return )
 
+void Client_obj::checkForResends(){
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis,::String,tooOld) HXARGC(1)
+            		void _hx_run(::Array< ::Dynamic> messages){
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2059_checkForResends)
+HXLINE(2059)			int _g = 0;
+HXDLIN(2059)			::Array< ::Dynamic> _g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(2059)			{
+HXLINE(2059)				int _g2 = 0;
+HXDLIN(2059)				while((_g2 < messages->length)){
+HXLINE(2059)					 ::borogove::ChatMessage v = messages->__get(_g2).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(2059)					_g2 = (_g2 + 1);
+HXDLIN(2059)					if ((v->type != 1)) {
+HXLINE(2059)						_g1->push(v);
+            					}
+            				}
+            			}
+HXDLIN(2059)			while((_g < _g1->length)){
+HXLINE(2059)				 ::borogove::ChatMessage m = _g1->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(2059)				_g = (_g + 1);
+HXLINE(2060)				if ((m->timeSent < tooOld)) {
+            					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(1)
+            					void _hx_run( ::borogove::ChatMessage newM){
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2062_checkForResends)
+HXLINE(2062)						_gthis->notifyMessageHandlers(newM,3);
+            					}
+            					HX_END_LOCAL_FUNC1((void))
+
+HXLINE(2061)					::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(2061)					::String _hx_tmp = _gthis->accountId();
+HXDLIN(2061)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,m->localId,3,HX_("Message too old to auto-resend",72,59,1d,0c)), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+            				}
+            				else {
+HXLINE(2065)					 ::borogove::Client _gthis2 = _gthis;
+HXDLIN(2065)					 ::borogove::Chat chat = _gthis2->getChat(m->chatId());
+HXLINE(2066)					if (::hx::IsNull( chat )) {
+HXLINE(2067)						 ::Dynamic _hx_tmp1 = ::haxe::Log_obj::trace;
+HXDLIN(2067)						_hx_tmp1(HX_("Resend chat not found",12,b4,22,97), ::Dynamic(::hx::Anon_obj::Create(5)
+            							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
+            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,m->chatId())->init(1,m))
+            							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("checkForResends",77,10,3f,34))
+            							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),2067)));
+            					}
+            					else {
+HXLINE(2069)						 ::borogove::Stanza stanza = m->asStanza();
+HXLINE(2072)						::String _hx_tmp2 = _gthis->accountId();
+HXLINE(2070)						stanza->textTag(HX_("delay",83,d7,26,d7),HX_("Resending after reconnect",9a,68,d4,da), ::Dynamic(::hx::Anon_obj::Create(3)
+            							->setFixed(0,HX_("stamp",03,70,0b,84),m->timeSent)
+            							->setFixed(1,HX_("from",6a,a5,c2,43),_hx_tmp2)
+            							->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:delay",e7,f1,95,ae))),null());
+HXLINE(2076)						chat->sendMessageStanza(stanza,null(),null());
+            					}
+            				}
+            			}
+            		}
+            		HX_END_LOCAL_FUNC1((void))
+
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2053_checkForResends)
+HXDLIN(2053)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2054)		::String tooOld = ::borogove::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-10800000.))));
+HXLINE(2058)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN(2058)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesByStatus(_hx_tmp,this->accountId(),0), ::Dynamic(new _hx_Closure_1(_gthis,tooOld)),null());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Client_obj,checkForResends,(void))
+
 void Client_obj::sendQuery( ::borogove::queries::GenericQuery query){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1636_sendQuery)
-HXDLIN(1636)		 ::borogove::GenericStream _hx_tmp = this->stream;
-HXDLIN(1636)		_hx_tmp->sendIq(query->getQueryStanza(),query->handleResponse_dyn());
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2085_sendQuery)
+HXDLIN(2085)		 ::borogove::GenericStream _hx_tmp = this->stream;
+HXDLIN(2085)		_hx_tmp->sendIq(query->getQueryStanza(),query->handleResponse_dyn());
             	}
 
 
@@ -4639,91 +5732,91 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,sendQuery,(void))
 void Client_obj::sendNextLazyQuery(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1643_sendNextLazyQuery)
-HXLINE(1644)			{
-HXLINE(1644)				{
-HXLINE(1645)					 ::borogove::queries::GenericQuery query = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
-HXLINE(1646)					if (::hx::IsNotNull( query )) {
-HXLINE(1646)						_gthis->sendQuery(query);
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2092_sendNextLazyQuery)
+HXLINE(2093)			{
+HXLINE(2093)				{
+HXLINE(2094)					 ::borogove::queries::GenericQuery query = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
+HXLINE(2095)					if (::hx::IsNotNull( query )) {
+HXLINE(2095)						_gthis->sendQuery(query);
             					}
             				}
-HXLINE(1644)				{
-HXLINE(1645)					 ::borogove::queries::GenericQuery query1 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
-HXLINE(1646)					if (::hx::IsNotNull( query1 )) {
-HXLINE(1646)						_gthis->sendQuery(query1);
+HXLINE(2093)				{
+HXLINE(2094)					 ::borogove::queries::GenericQuery query1 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
+HXLINE(2095)					if (::hx::IsNotNull( query1 )) {
+HXLINE(2095)						_gthis->sendQuery(query1);
             					}
             				}
-HXLINE(1644)				{
-HXLINE(1645)					 ::borogove::queries::GenericQuery query2 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
-HXLINE(1646)					if (::hx::IsNotNull( query2 )) {
-HXLINE(1646)						_gthis->sendQuery(query2);
+HXLINE(2093)				{
+HXLINE(2094)					 ::borogove::queries::GenericQuery query2 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
+HXLINE(2095)					if (::hx::IsNotNull( query2 )) {
+HXLINE(2095)						_gthis->sendQuery(query2);
             					}
             				}
-HXLINE(1644)				{
-HXLINE(1645)					 ::borogove::queries::GenericQuery query3 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
-HXLINE(1646)					if (::hx::IsNotNull( query3 )) {
-HXLINE(1646)						_gthis->sendQuery(query3);
+HXLINE(2093)				{
+HXLINE(2094)					 ::borogove::queries::GenericQuery query3 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
+HXLINE(2095)					if (::hx::IsNotNull( query3 )) {
+HXLINE(2095)						_gthis->sendQuery(query3);
             					}
             				}
-HXLINE(1644)				{
-HXLINE(1645)					 ::borogove::queries::GenericQuery query4 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
-HXLINE(1646)					if (::hx::IsNotNull( query4 )) {
-HXLINE(1646)						_gthis->sendQuery(query4);
+HXLINE(2093)				{
+HXLINE(2094)					 ::borogove::queries::GenericQuery query4 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
+HXLINE(2095)					if (::hx::IsNotNull( query4 )) {
+HXLINE(2095)						_gthis->sendQuery(query4);
             					}
             				}
-HXLINE(1644)				{
-HXLINE(1645)					 ::borogove::queries::GenericQuery query5 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
-HXLINE(1646)					if (::hx::IsNotNull( query5 )) {
-HXLINE(1646)						_gthis->sendQuery(query5);
+HXLINE(2093)				{
+HXLINE(2094)					 ::borogove::queries::GenericQuery query5 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
+HXLINE(2095)					if (::hx::IsNotNull( query5 )) {
+HXLINE(2095)						_gthis->sendQuery(query5);
             					}
             				}
-HXLINE(1644)				{
-HXLINE(1645)					 ::borogove::queries::GenericQuery query6 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
-HXLINE(1646)					if (::hx::IsNotNull( query6 )) {
-HXLINE(1646)						_gthis->sendQuery(query6);
+HXLINE(2093)				{
+HXLINE(2094)					 ::borogove::queries::GenericQuery query6 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
+HXLINE(2095)					if (::hx::IsNotNull( query6 )) {
+HXLINE(2095)						_gthis->sendQuery(query6);
             					}
             				}
-HXLINE(1644)				{
-HXLINE(1645)					 ::borogove::queries::GenericQuery query7 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
-HXLINE(1646)					if (::hx::IsNotNull( query7 )) {
-HXLINE(1646)						_gthis->sendQuery(query7);
+HXLINE(2093)				{
+HXLINE(2094)					 ::borogove::queries::GenericQuery query7 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
+HXLINE(2095)					if (::hx::IsNotNull( query7 )) {
+HXLINE(2095)						_gthis->sendQuery(query7);
             					}
             				}
-HXLINE(1644)				{
-HXLINE(1645)					 ::borogove::queries::GenericQuery query8 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
-HXLINE(1646)					if (::hx::IsNotNull( query8 )) {
-HXLINE(1646)						_gthis->sendQuery(query8);
+HXLINE(2093)				{
+HXLINE(2094)					 ::borogove::queries::GenericQuery query8 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
+HXLINE(2095)					if (::hx::IsNotNull( query8 )) {
+HXLINE(2095)						_gthis->sendQuery(query8);
             					}
             				}
-HXLINE(1644)				{
-HXLINE(1645)					 ::borogove::queries::GenericQuery query9 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
-HXLINE(1646)					if (::hx::IsNotNull( query9 )) {
-HXLINE(1646)						_gthis->sendQuery(query9);
+HXLINE(2093)				{
+HXLINE(2094)					 ::borogove::queries::GenericQuery query9 = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
+HXLINE(2095)					if (::hx::IsNotNull( query9 )) {
+HXLINE(2095)						_gthis->sendQuery(query9);
             					}
             				}
             			}
-HXLINE(1649)			_gthis->lazyQueryTimer = null();
-HXLINE(1650)			if ((_gthis->queriesToSend->length > 0)) {
-HXLINE(1650)				_gthis->sendNextLazyQuery();
+HXLINE(2098)			_gthis->lazyQueryTimer = null();
+HXLINE(2099)			if ((_gthis->queriesToSend->length > 0)) {
+HXLINE(2099)				_gthis->sendNextLazyQuery();
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1641_sendNextLazyQuery)
-HXDLIN(1641)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1642)		if (::hx::IsNotNull( this->lazyQueryTimer )) {
-HXLINE(1642)			return;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2090_sendNextLazyQuery)
+HXDLIN(2090)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2091)		if (::hx::IsNotNull( this->lazyQueryTimer )) {
+HXLINE(2091)			return;
             		}
-HXLINE(1643)		this->lazyQueryTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),2000);
+HXLINE(2092)		this->lazyQueryTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),2000);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,sendNextLazyQuery,(void))
 
 void Client_obj::sendQueryLazy( ::borogove::queries::GenericQuery query){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1655_sendQueryLazy)
-HXLINE(1656)		this->queriesToSend->push(query);
-HXLINE(1657)		this->sendNextLazyQuery();
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2104_sendQueryLazy)
+HXLINE(2105)		this->queriesToSend->push(query);
+HXLINE(2106)		this->sendNextLazyQuery();
             	}
 
 
@@ -4732,114 +5825,116 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,sendQueryLazy,(void))
 void Client_obj::publishWithOptions( ::borogove::Stanza stanza, ::borogove::Stanza options){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis, ::borogove::Stanza,options, ::borogove::Stanza,stanza) HXARGC(1)
             		void _hx_run( ::borogove::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1667_publishWithOptions)
-HXLINE(1667)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE(1668)				 ::borogove::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
-HXDLIN(1668)				 ::borogove::Stanza preconditionError;
-HXDLIN(1668)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1668)					preconditionError = tmp->getChild(HX_("precondition-not-met",2d,db,78,db),HX_("http://jabber.org/protocol/pubsub#errors",97,74,3a,a8));
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2119_publishWithOptions)
+HXLINE(2119)			if (::hx::IsEq( response->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) )) {
+HXLINE(2120)				 ::borogove::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
+HXDLIN(2120)				 ::borogove::Stanza preconditionError;
+HXDLIN(2120)				if (::hx::IsNotNull( tmp )) {
+HXLINE(2120)					preconditionError = tmp->getChild(HX_("precondition-not-met",2d,db,78,db),HX_("http://jabber.org/protocol/pubsub#errors",97,74,3a,a8));
             				}
             				else {
-HXLINE(1668)					preconditionError = null();
+HXLINE(2120)					preconditionError = null();
             				}
-HXLINE(1669)				if (::hx::IsNotNull( preconditionError )) {
+HXLINE(2121)				if (::hx::IsNotNull( preconditionError )) {
             					HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::borogove::Stanza,options, ::borogove::Stanza,stanza) HXARGC(1)
             					void _hx_run( ::borogove::Stanza response){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1677_publishWithOptions)
-HXLINE(1677)						if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("result",dd,68,84,08))) {
-HXLINE(1678)							_gthis->publishWithOptions(stanza,options);
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2129_publishWithOptions)
+HXLINE(2129)						if (::hx::IsEq( response->attr->get(HX_("type",ba,f2,08,4d)),HX_("result",dd,68,84,08) )) {
+HXLINE(2130)							_gthis->publishWithOptions(stanza,options);
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1671)					 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXLINE(1672)					 ::borogove::Stanza _hx_tmp =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub#owner",c7,28,a3,08))));
-HXLINE(1674)					::String _hx_tmp1 = stanza->findText(HX_("{http://jabber.org/protocol/pubsub}pubsub/publish@node",5e,1b,df,ac));
-HXLINE(1671)					_gthis1->sendIq(_hx_tmp->tag(HX_("configure",e6,f9,5b,c0), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("node",02,0a,0a,49),_hx_tmp1)))->addChild(options), ::Dynamic(new _hx_Closure_0(_gthis,options,stanza)));
+HXLINE(2123)					 ::borogove::GenericStream _gthis1 = _gthis->stream;
+HXLINE(2124)					 ::borogove::Stanza _hx_tmp =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub#owner",c7,28,a3,08))),null());
+HXLINE(2126)					::String _hx_tmp1 = stanza->findText(HX_("{http://jabber.org/protocol/pubsub}pubsub/publish@node",5e,1b,df,ac));
+HXLINE(2123)					_gthis1->sendIq(_hx_tmp->tag(HX_("configure",e6,f9,5b,c0), ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("node",02,0a,0a,49),_hx_tmp1)),null())->addChild(options), ::Dynamic(new _hx_Closure_0(_gthis,options,stanza)));
             				}
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1661_publishWithOptions)
-HXDLIN(1661)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1662)		 ::borogove::Stanza clone = stanza->clone();
-HXLINE(1663)		clone->findChild(HX_("{http://jabber.org/protocol/pubsub}pubsub/publish",64,a4,8d,39))->tag(HX_("publish-options",60,0b,5c,74),null())->addChild(options);
-HXLINE(1664)		this->stream->sendIq(clone, ::Dynamic(new _hx_Closure_1(_gthis,options,stanza)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2110_publishWithOptions)
+HXDLIN(2110)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2111)		 ::borogove::Stanza clone = stanza->clone();
+HXLINE(2112)		clone->findChild(HX_("{http://jabber.org/protocol/pubsub}pubsub",24,cb,f7,a3))->tag(HX_("publish-options",60,0b,5c,74),null(),null())->addChild(options);
+HXLINE(2116)		this->stream->sendIq(clone, ::Dynamic(new _hx_Closure_1(_gthis,options,stanza)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,publishWithOptions,(void))
 
 void Client_obj::sendStanza( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1689_sendStanza)
-HXLINE(1690)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE(1690)			 ::Dynamic this1 = stanza->attr;
-HXDLIN(1690)			::Reflect_obj::setField(this1,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7());
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2141_sendStanza)
+HXLINE(2142)		this->channelPinger->pingDueInWindow();
+HXLINE(2143)		if (::hx::IsNull( stanza->attr->get(HX_("id",db,5b,00,00)) )) {
+HXLINE(2143)			 ::haxe::ds::StringMap stanza1 = stanza->attr;
+HXDLIN(2143)			stanza1->set(HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7());
             		}
-HXLINE(1691)		this->stream->sendStanza(stanza);
+HXLINE(2144)		this->stream->sendStanza(stanza);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,sendStanza,(void))
 
 void Client_obj::sendPresence(::String to, ::Dynamic augment){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1695_sendPresence)
-HXLINE(1696)		 ::Dynamic stanza;
-HXDLIN(1696)		if (::hx::IsNull( to )) {
-HXLINE(1696)			stanza =  ::Dynamic(::hx::Anon_obj::Create(0));
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2148_sendPresence)
+HXLINE(2149)		 ::borogove::Caps stanza = this->caps;
+HXDLIN(2149)		 ::Dynamic stanza1;
+HXDLIN(2149)		if (::hx::IsNull( to )) {
+HXLINE(2149)			stanza1 =  ::Dynamic(::hx::Anon_obj::Create(0));
             		}
             		else {
-HXLINE(1696)			stanza =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(2149)			stanza1 =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("to",7b,65,00,00),to));
             		}
-HXDLIN(1696)		 ::borogove::Stanza stanza1 = this->caps->addC( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66),stanza));
-HXLINE(1697)		::String stanza2 = this->displayName();
-HXLINE(1696)		 ::borogove::Stanza stanza3 = stanza1->textTag(HX_("nick",a3,7b,05,49),stanza2, ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/nick",17,30,dc,e9))));
-HXLINE(1699)		 ::borogove::Chat tmp = this->getChat(this->accountId());
-HXDLIN(1699)		 ::borogove::Status status;
-HXDLIN(1699)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1699)			status = tmp->status;
+HXDLIN(2149)		 ::borogove::Stanza stanza2 = stanza->addC( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66),stanza1,null()));
+HXLINE(2150)		::String stanza3 = this->displayName();
+HXLINE(2149)		 ::borogove::Stanza stanza4 = stanza2->textTag(HX_("nick",a3,7b,05,49),stanza3, ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/nick",17,30,dc,e9))),null());
+HXLINE(2152)		 ::borogove::Chat tmp = this->getChat(this->accountId());
+HXDLIN(2152)		 ::borogove::Status status;
+HXDLIN(2152)		if (::hx::IsNotNull( tmp )) {
+HXLINE(2152)			status = tmp->status;
             		}
             		else {
-HXLINE(1699)			status = null();
+HXLINE(2152)			status = null();
             		}
-HXLINE(1700)		::String statusText;
-HXDLIN(1700)		::String tmp1;
-HXDLIN(1700)		if (::hx::IsNotNull( status )) {
-HXLINE(1700)			tmp1 = status->toString();
+HXLINE(2153)		::String statusText;
+HXDLIN(2153)		::String tmp1;
+HXDLIN(2153)		if (::hx::IsNotNull( status )) {
+HXLINE(2153)			tmp1 = status->toString();
             		}
             		else {
-HXLINE(1700)			tmp1 = null();
+HXLINE(2153)			tmp1 = null();
             		}
-HXDLIN(1700)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1700)			statusText = tmp1;
+HXDLIN(2153)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(2153)			statusText = tmp1;
             		}
             		else {
-HXLINE(1700)			statusText = HX_("",00,00,00,00);
+HXLINE(2153)			statusText = HX_("",00,00,00,00);
             		}
-HXLINE(1701)		if ((statusText != HX_("",00,00,00,00))) {
-HXLINE(1701)			stanza3->textTag(HX_("status",32,e7,fb,05),statusText,null());
+HXLINE(2154)		if ((statusText != HX_("",00,00,00,00))) {
+HXLINE(2154)			stanza4->textTag(HX_("status",32,e7,fb,05),statusText,null(),null());
             		}
-HXLINE(1703)		 ::Dynamic _hx_tmp;
-HXDLIN(1703)		if (::hx::IsNotNull( augment )) {
-HXLINE(1703)			_hx_tmp = augment;
+HXLINE(2156)		 ::Dynamic _hx_tmp;
+HXDLIN(2156)		if (::hx::IsNotNull( augment )) {
+HXLINE(2156)			_hx_tmp = augment;
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			 ::borogove::Stanza _hx_run( ::borogove::Stanza s){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1703_sendPresence)
-HXLINE(1703)				return s;
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2156_sendPresence)
+HXLINE(2156)				return s;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1703)			_hx_tmp =  ::Dynamic(new _hx_Closure_0());
+HXLINE(2156)			_hx_tmp =  ::Dynamic(new _hx_Closure_0());
             		}
-HXDLIN(1703)		this->sendStanza(( ( ::borogove::Stanza)(_hx_tmp(stanza3)) ));
+HXDLIN(2156)		this->sendStanza(( ( ::borogove::Stanza)(_hx_tmp(stanza4)) ));
             	}
 
 
@@ -4848,89 +5943,89 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,sendPresence,(void))
 void Client_obj::getIceServers( ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::queries::ExtDiscoGet,extDiscoGet, ::Dynamic,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1710_getIceServers)
-HXLINE(1711)			 ::haxe::ds::StringMap didUrl =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1712)			::Array< ::Dynamic> servers = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1713)			{
-HXLINE(1713)				int _g = 0;
-HXDLIN(1713)				::Array< ::Dynamic> _g1;
-HXDLIN(1713)				::Array< ::Dynamic> tmp = extDiscoGet->getResult();
-HXDLIN(1713)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1713)					_g1 = tmp;
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2163_getIceServers)
+HXLINE(2164)			 ::haxe::ds::StringMap didUrl =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(2165)			::Array< ::Dynamic> servers = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2166)			{
+HXLINE(2166)				int _g = 0;
+HXDLIN(2166)				::Array< ::Dynamic> _g1;
+HXDLIN(2166)				::Array< ::Dynamic> tmp = extDiscoGet->getResult();
+HXDLIN(2166)				if (::hx::IsNotNull( tmp )) {
+HXLINE(2166)					_g1 = tmp;
             				}
             				else {
-HXLINE(1713)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2166)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
             				}
-HXDLIN(1713)				while((_g < _g1->length)){
-HXLINE(1713)					 ::borogove::Stanza service = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(1713)					_g = (_g + 1);
-HXLINE(1714)					if (!(::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_234,4)->contains(( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) )))) {
-HXLINE(1714)						continue;
+HXDLIN(2166)				while((_g < _g1->length)){
+HXLINE(2166)					 ::borogove::Stanza service = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(2166)					_g = (_g + 1);
+HXLINE(2167)					if (!(::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_291,4)->contains(service->attr->get(HX_("type",ba,f2,08,4d))))) {
+HXLINE(2167)						continue;
             					}
-HXLINE(1715)					::String host = ( (::String)(::Reflect_obj::field(service->attr,HX_("host",68,cf,12,45))) );
-HXLINE(1716)					bool _hx_tmp;
-HXDLIN(1716)					if (::hx::IsNotNull( host )) {
-HXLINE(1716)						_hx_tmp = (host == HX_("",00,00,00,00));
+HXLINE(2168)					::String host = service->attr->get_string(HX_("host",68,cf,12,45));
+HXLINE(2169)					bool _hx_tmp;
+HXDLIN(2169)					if (::hx::IsNotNull( host )) {
+HXLINE(2169)						_hx_tmp = (host == HX_("",00,00,00,00));
             					}
             					else {
-HXLINE(1716)						_hx_tmp = true;
+HXLINE(2169)						_hx_tmp = true;
             					}
-HXDLIN(1716)					if (_hx_tmp) {
-HXLINE(1716)						continue;
+HXDLIN(2169)					if (_hx_tmp) {
+HXLINE(2169)						continue;
             					}
-HXLINE(1717)					 ::Dynamic port = ::Std_obj::parseInt(( (::String)(::Reflect_obj::field(service->attr,HX_("port",81,83,5c,4a))) ));
-HXLINE(1718)					bool _hx_tmp1;
-HXDLIN(1718)					bool _hx_tmp2;
-HXDLIN(1718)					if (::hx::IsNotNull( port )) {
-HXLINE(1718)						_hx_tmp2 = ::hx::IsLess( port,1 );
+HXLINE(2170)					 ::Dynamic port = ::Std_obj::parseInt(service->attr->get_string(HX_("port",81,83,5c,4a)));
+HXLINE(2171)					bool _hx_tmp1;
+HXDLIN(2171)					bool _hx_tmp2;
+HXDLIN(2171)					if (::hx::IsNotNull( port )) {
+HXLINE(2171)						_hx_tmp2 = ::hx::IsLess( port,1 );
             					}
             					else {
-HXLINE(1718)						_hx_tmp2 = true;
+HXLINE(2171)						_hx_tmp2 = true;
             					}
-HXDLIN(1718)					if (!(_hx_tmp2)) {
-HXLINE(1718)						_hx_tmp1 = ::hx::IsGreater( port,65535 );
+HXDLIN(2171)					if (!(_hx_tmp2)) {
+HXLINE(2171)						_hx_tmp1 = ::hx::IsGreater( port,65535 );
             					}
             					else {
-HXLINE(1718)						_hx_tmp1 = true;
+HXLINE(2171)						_hx_tmp1 = true;
             					}
-HXDLIN(1718)					if (_hx_tmp1) {
-HXLINE(1718)						continue;
+HXDLIN(2171)					if (_hx_tmp1) {
+HXLINE(2171)						continue;
             					}
-HXLINE(1719)					bool isTurn = ::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_235,2)->contains(( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) ));
-HXLINE(1720)					::String url = (( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) ) + HX_(":",3a,00,00,00));
-HXDLIN(1720)					::String url1;
-HXDLIN(1720)					if ((host.indexOf(HX_(":",3a,00,00,00),null()) >= 0)) {
-HXLINE(1720)						url1 = ((HX_("[",5b,00,00,00) + host) + HX_("]",5d,00,00,00));
+HXLINE(2172)					bool isTurn = ::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_292,2)->contains(service->attr->get(HX_("type",ba,f2,08,4d)));
+HXLINE(2173)					::String url = (service->attr->get(HX_("type",ba,f2,08,4d)) + HX_(":",3a,00,00,00));
+HXDLIN(2173)					::String url1;
+HXDLIN(2173)					if ((host.indexOf(HX_(":",3a,00,00,00),null()) >= 0)) {
+HXLINE(2173)						url1 = ((HX_("[",5b,00,00,00) + host) + HX_("]",5d,00,00,00));
             					}
             					else {
-HXLINE(1720)						url1 = host;
+HXLINE(2173)						url1 = host;
             					}
-HXDLIN(1720)					::String url2;
-HXDLIN(1720)					if (isTurn) {
-HXLINE(1720)						url2 = (HX_("?transport=",73,c9,f2,13) + ( (::String)(::Reflect_obj::field(service->attr,HX_("transport",a9,4f,2f,4c))) ));
+HXDLIN(2173)					::String url2;
+HXDLIN(2173)					if (isTurn) {
+HXLINE(2173)						url2 = (HX_("?transport=",73,c9,f2,13) + service->attr->get(HX_("transport",a9,4f,2f,4c)));
             					}
             					else {
-HXLINE(1720)						url2 = HX_("",00,00,00,00);
+HXLINE(2173)						url2 = HX_("",00,00,00,00);
             					}
-HXDLIN(1720)					::String url3 = ((((url + url1) + HX_(":",3a,00,00,00)) + port) + url2);
-HXLINE(1721)					if (!(didUrl->exists(url3))) {
-HXLINE(1723)						::String _hx_tmp3 = ( (::String)(::Reflect_obj::field(service->attr,HX_("username",16,86,eb,20))) );
-HXLINE(1722)						servers->push( ::Dynamic(::hx::Anon_obj::Create(3)
-            							->setFixed(0,HX_("credential",d7,89,b2,20),( (::String)(::Reflect_obj::field(service->attr,HX_("password",1b,23,d0,48))) ))
+HXDLIN(2173)					::String url3 = ((((url + url1) + HX_(":",3a,00,00,00)) + port) + url2);
+HXLINE(2174)					if (!(didUrl->exists(url3))) {
+HXLINE(2176)						::String _hx_tmp3 = service->attr->get_string(HX_("username",16,86,eb,20));
+HXLINE(2175)						servers->push( ::Dynamic(::hx::Anon_obj::Create(3)
+            							->setFixed(0,HX_("credential",d7,89,b2,20),service->attr->get(HX_("password",1b,23,d0,48)))
             							->setFixed(1,HX_("username",16,86,eb,20),_hx_tmp3)
             							->setFixed(2,HX_("urls",24,d6,ac,4d),::Array_obj< ::String >::__new(1)->init(0,url3))));
-HXLINE(1727)						didUrl->set(url3,true);
+HXLINE(2180)						didUrl->set(url3,true);
             					}
             				}
             			}
-HXLINE(1730)			callback(servers);
+HXLINE(2183)			callback(servers);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1708_getIceServers)
-HXLINE(1709)		 ::borogove::queries::ExtDiscoGet extDiscoGet =  ::borogove::queries::ExtDiscoGet_obj::__alloc( HX_CTX ,this->jid->domain);
-HXLINE(1710)		extDiscoGet->onFinished( ::Dynamic(new _hx_Closure_0(extDiscoGet,callback)));
-HXLINE(1732)		this->sendQuery(extDiscoGet);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2161_getIceServers)
+HXLINE(2162)		 ::borogove::queries::ExtDiscoGet extDiscoGet =  ::borogove::queries::ExtDiscoGet_obj::__alloc( HX_CTX ,this->jid->domain);
+HXLINE(2163)		extDiscoGet->onFinished( ::Dynamic(new _hx_Closure_0(extDiscoGet,callback)));
+HXLINE(2185)		this->sendQuery(extDiscoGet);
             	}
 
 
@@ -4939,104 +6034,111 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,getIceServers,(void))
 void Client_obj::discoverServices( ::borogove::JID target,::String node, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis, ::Dynamic,callback, ::borogove::queries::DiscoItemsGet,itemsGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1740_discoverServices)
-HXLINE(1740)			int _g = 0;
-HXDLIN(1740)			::Array< ::Dynamic> _g1;
-HXDLIN(1740)			::Array< ::Dynamic> tmp = itemsGet->getResult();
-HXDLIN(1740)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1740)				_g1 = tmp;
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2193_discoverServices)
+HXLINE(2193)			int _g = 0;
+HXDLIN(2193)			::Array< ::Dynamic> _g1;
+HXDLIN(2193)			::Array< ::Dynamic> tmp = itemsGet->getResult();
+HXDLIN(2193)			if (::hx::IsNotNull( tmp )) {
+HXLINE(2193)				_g1 = tmp;
             			}
             			else {
-HXLINE(1740)				_g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2193)				_g1 = ::Array_obj< ::Dynamic>::__new(0);
             			}
-HXDLIN(1740)			while((_g < _g1->length)){
+HXDLIN(2193)			while((_g < _g1->length)){
             				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::queries::DiscoInfoGet,infoGet1, ::Dynamic,item, ::Dynamic,callback) HXARGC(0)
             				void _hx_run(){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1743_discoverServices)
-HXLINE(1743)					 ::Dynamic callback1 = callback;
-HXDLIN(1743)					 ::Dynamic item1 = item;
-HXDLIN(1743)					 ::borogove::Caps tmp = infoGet1->getResult();
-HXDLIN(1743)					 ::borogove::Caps _hx_tmp;
-HXDLIN(1743)					if (::hx::IsNotNull( tmp )) {
-HXLINE(1743)						_hx_tmp = tmp;
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2196_discoverServices)
+HXLINE(2196)					 ::Dynamic callback1 = callback;
+HXDLIN(2196)					 ::Dynamic item1 = item;
+HXDLIN(2196)					 ::borogove::Caps tmp = infoGet1->getResult();
+HXDLIN(2196)					 ::borogove::Caps _hx_tmp;
+HXDLIN(2196)					if (::hx::IsNotNull( tmp )) {
+HXLINE(2196)						_hx_tmp = tmp;
             					}
             					else {
-HXLINE(1743)						_hx_tmp = ::borogove::CapsRepo_obj::empty;
+HXLINE(2196)						_hx_tmp = ::borogove::CapsRepo_obj::empty;
             					}
-HXDLIN(1743)					callback1(item1,_hx_tmp);
+HXDLIN(2196)					callback1(item1,_hx_tmp);
             				}
             				HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1740)				 ::Dynamic item = _g1->__get(_g);
-HXDLIN(1740)				_g = (_g + 1);
-HXLINE(1741)				::String infoGet = ( ( ::borogove::JID)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
-HXDLIN(1741)				 ::borogove::queries::DiscoInfoGet infoGet1 =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,infoGet,( (::String)(item->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) ));
-HXLINE(1742)				infoGet1->onFinished( ::Dynamic(new _hx_Closure_0(infoGet1,item,callback)));
-HXLINE(1745)				_gthis->sendQuery(infoGet1);
+HXLINE(2193)				 ::Dynamic item = _g1->__get(_g);
+HXDLIN(2193)				_g = (_g + 1);
+HXLINE(2194)				::String infoGet = ( ( ::borogove::JID)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
+HXDLIN(2194)				 ::borogove::queries::DiscoInfoGet infoGet1 =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,infoGet,( (::String)(item->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) ));
+HXLINE(2195)				infoGet1->onFinished( ::Dynamic(new _hx_Closure_0(infoGet1,item,callback)));
+HXLINE(2198)				_gthis->sendQuery(infoGet1);
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1737_discoverServices)
-HXDLIN(1737)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1738)		 ::borogove::queries::DiscoItemsGet itemsGet =  ::borogove::queries::DiscoItemsGet_obj::__alloc( HX_CTX ,target->asString(),node);
-HXLINE(1739)		itemsGet->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,callback,itemsGet)));
-HXLINE(1748)		this->sendQuery(itemsGet);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2190_discoverServices)
+HXDLIN(2190)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2191)		 ::borogove::queries::DiscoItemsGet itemsGet =  ::borogove::queries::DiscoItemsGet_obj::__alloc( HX_CTX ,target->asString(),node);
+HXLINE(2192)		itemsGet->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,callback,itemsGet)));
+HXLINE(2201)		this->sendQuery(itemsGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Client_obj,discoverServices,(void))
 
 void Client_obj::notifyMessageHandlers( ::borogove::ChatMessage message,int event){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1752_notifyMessageHandlers)
-HXLINE(1753)		 ::borogove::Chat chat = this->getChat(message->chatId());
-HXLINE(1754)		bool _hx_tmp;
-HXDLIN(1754)		if (::hx::IsNotNull( chat )) {
-HXLINE(1754)			_hx_tmp = chat->isBlocked;
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2205_notifyMessageHandlers)
+HXLINE(2206)		 ::borogove::Chat chat = this->getChat(message->chatId());
+HXLINE(2207)		bool _hx_tmp;
+HXDLIN(2207)		if (::hx::IsNotNull( chat )) {
+HXLINE(2207)			_hx_tmp = chat->isBlocked;
             		}
             		else {
-HXLINE(1754)			_hx_tmp = false;
+HXLINE(2207)			_hx_tmp = false;
+            		}
+HXDLIN(2207)		if (_hx_tmp) {
+HXLINE(2207)			return;
             		}
-HXDLIN(1754)		if (_hx_tmp) {
-HXLINE(1754)			return;
+HXLINE(2209)		bool _hx_tmp1;
+HXDLIN(2209)		bool _hx_tmp2;
+HXDLIN(2209)		bool _hx_tmp3;
+HXDLIN(2209)		bool _hx_tmp4;
+HXDLIN(2209)		bool _hx_tmp5;
+HXDLIN(2209)		if ((event == 0)) {
+HXLINE(2209)			_hx_tmp5 = (message->type == 0);
+            		}
+            		else {
+HXLINE(2209)			_hx_tmp5 = false;
             		}
-HXLINE(1756)		bool _hx_tmp1;
-HXDLIN(1756)		bool _hx_tmp2;
-HXDLIN(1756)		bool _hx_tmp3;
-HXDLIN(1756)		bool _hx_tmp4;
-HXDLIN(1756)		if ((event == 0)) {
-HXLINE(1756)			_hx_tmp4 = (message->type == 0);
+HXDLIN(2209)		if (_hx_tmp5) {
+HXLINE(2209)			_hx_tmp4 = message->isIncoming();
             		}
             		else {
-HXLINE(1756)			_hx_tmp4 = false;
+HXLINE(2209)			_hx_tmp4 = false;
             		}
-HXDLIN(1756)		if (_hx_tmp4) {
-HXLINE(1756)			_hx_tmp3 = ::hx::IsNotNull( message->localId );
+HXDLIN(2209)		if (_hx_tmp4) {
+HXLINE(2209)			_hx_tmp3 = ::hx::IsNotNull( message->localId );
             		}
             		else {
-HXLINE(1756)			_hx_tmp3 = false;
+HXLINE(2209)			_hx_tmp3 = false;
             		}
-HXDLIN(1756)		if (_hx_tmp3) {
-HXLINE(1756)			_hx_tmp2 = ::hx::IsNotNull( chat );
+HXDLIN(2209)		if (_hx_tmp3) {
+HXLINE(2209)			_hx_tmp2 = ::hx::IsNotNull( chat );
             		}
             		else {
-HXLINE(1756)			_hx_tmp2 = false;
+HXLINE(2209)			_hx_tmp2 = false;
             		}
-HXDLIN(1756)		if (_hx_tmp2) {
-HXLINE(1756)			_hx_tmp1 = chat->isTrusted();
+HXDLIN(2209)		if (_hx_tmp2) {
+HXLINE(2209)			_hx_tmp1 = chat->isTrusted();
             		}
             		else {
-HXLINE(1756)			_hx_tmp1 = false;
+HXLINE(2209)			_hx_tmp1 = false;
             		}
-HXDLIN(1756)		if (_hx_tmp1) {
-HXLINE(1758)			::String _hx_tmp5 = message->from->asString();
-HXLINE(1757)			this->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
-            				->setFixed(0,HX_("to",7b,65,00,00),_hx_tmp5)
-            				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->tag(HX_("received",21,45,fd,e2), ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN(2209)		if (_hx_tmp1) {
+HXLINE(2211)			::String _hx_tmp6 = message->from->asString();
+HXLINE(2210)			this->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(0,HX_("to",7b,65,00,00),_hx_tmp6)
+            				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))),null())->tag(HX_("received",21,45,fd,e2), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("id",db,5b,00,00),message->localId)
-            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:receipts",d7,40,8f,8c)))));
+            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:receipts",d7,40,8f,8c))),null()));
             		}
-HXLINE(1763)		this->trigger(HX_("message/new",d8,fc,71,67), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2216)		this->trigger(HX_("message/new",d8,fc,71,67), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("message",c7,35,11,9a),message)
             			->setFixed(1,HX_("event",1a,c8,c4,75),event)));
             	}
@@ -5045,58 +6147,65 @@ HXLINE(1763)		this->trigger(HX_("message/new",d8,fc,71,67), ::Dynamic(::hx::Anon
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,notifyMessageHandlers,(void))
 
 void Client_obj::notifySyncMessageHandlers( ::borogove::ChatMessage message){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1767_notifySyncMessageHandlers)
-HXLINE(1768)		bool _hx_tmp;
-HXDLIN(1768)		if (::hx::IsNotNull( message )) {
-HXLINE(1768)			_hx_tmp = (message->versions->length > 1);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2220_notifySyncMessageHandlers)
+HXLINE(2221)		bool _hx_tmp;
+HXDLIN(2221)		if (::hx::IsNotNull( message )) {
+HXLINE(2221)			_hx_tmp = (message->versions->length > 1);
             		}
             		else {
-HXLINE(1768)			_hx_tmp = true;
+HXLINE(2221)			_hx_tmp = true;
             		}
-HXDLIN(1768)		if (_hx_tmp) {
-HXLINE(1768)			return;
+HXDLIN(2221)		if (_hx_tmp) {
+HXLINE(2221)			return;
             		}
-HXLINE(1769)		 ::borogove::Chat chat = this->getChat(message->chatId());
-HXLINE(1770)		bool _hx_tmp1;
-HXDLIN(1770)		if (::hx::IsNotNull( chat )) {
-HXLINE(1770)			_hx_tmp1 = chat->isBlocked;
+HXLINE(2222)		 ::borogove::Chat chat = this->getChat(message->chatId());
+HXLINE(2223)		bool _hx_tmp1;
+HXDLIN(2223)		if (::hx::IsNotNull( chat )) {
+HXLINE(2223)			_hx_tmp1 = chat->isBlocked;
             		}
             		else {
-HXLINE(1770)			_hx_tmp1 = false;
+HXLINE(2223)			_hx_tmp1 = false;
             		}
-HXDLIN(1770)		if (_hx_tmp1) {
-HXLINE(1770)			return;
+HXDLIN(2223)		if (_hx_tmp1) {
+HXLINE(2223)			return;
             		}
-HXLINE(1772)		bool _hx_tmp2;
-HXDLIN(1772)		bool _hx_tmp3;
-HXDLIN(1772)		bool _hx_tmp4;
-HXDLIN(1772)		if ((message->type == 0)) {
-HXLINE(1772)			_hx_tmp4 = ::hx::IsNotNull( message->localId );
+HXLINE(2225)		bool _hx_tmp2;
+HXDLIN(2225)		bool _hx_tmp3;
+HXDLIN(2225)		bool _hx_tmp4;
+HXDLIN(2225)		bool _hx_tmp5;
+HXDLIN(2225)		if ((message->type == 0)) {
+HXLINE(2225)			_hx_tmp5 = message->isIncoming();
             		}
             		else {
-HXLINE(1772)			_hx_tmp4 = false;
+HXLINE(2225)			_hx_tmp5 = false;
             		}
-HXDLIN(1772)		if (_hx_tmp4) {
-HXLINE(1772)			_hx_tmp3 = ::hx::IsNotNull( chat );
+HXDLIN(2225)		if (_hx_tmp5) {
+HXLINE(2225)			_hx_tmp4 = ::hx::IsNotNull( message->localId );
             		}
             		else {
-HXLINE(1772)			_hx_tmp3 = false;
+HXLINE(2225)			_hx_tmp4 = false;
             		}
-HXDLIN(1772)		if (_hx_tmp3) {
-HXLINE(1772)			_hx_tmp2 = chat->isTrusted();
+HXDLIN(2225)		if (_hx_tmp4) {
+HXLINE(2225)			_hx_tmp3 = ::hx::IsNotNull( chat );
             		}
             		else {
-HXLINE(1772)			_hx_tmp2 = false;
+HXLINE(2225)			_hx_tmp3 = false;
             		}
-HXDLIN(1772)		if (_hx_tmp2) {
-HXLINE(1774)			::String _hx_tmp5 = message->from->asString();
-HXLINE(1773)			this->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
-            				->setFixed(0,HX_("to",7b,65,00,00),_hx_tmp5)
-            				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->tag(HX_("received",21,45,fd,e2), ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN(2225)		if (_hx_tmp3) {
+HXLINE(2225)			_hx_tmp2 = chat->isTrusted();
+            		}
+            		else {
+HXLINE(2225)			_hx_tmp2 = false;
+            		}
+HXDLIN(2225)		if (_hx_tmp2) {
+HXLINE(2227)			::String _hx_tmp6 = message->from->asString();
+HXLINE(2226)			this->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(0,HX_("to",7b,65,00,00),_hx_tmp6)
+            				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))),null())->tag(HX_("received",21,45,fd,e2), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("id",db,5b,00,00),message->localId)
-            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:receipts",d7,40,8f,8c)))));
+            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:receipts",d7,40,8f,8c))),null()));
             		}
-HXLINE(1779)		this->trigger(HX_("message/sync",e3,76,a8,1f),message);
+HXLINE(2232)		this->trigger(HX_("message/sync",e3,76,a8,1f),message);
             	}
 
 
@@ -5105,30 +6214,46 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,notifySyncMessageHandlers,(void))
 void Client_obj::rosterGet(){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::borogove::queries::RosterGet,rosterGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1784_rosterGet)
-HXLINE(1785)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1786)			{
-HXLINE(1786)				int _g = 0;
-HXDLIN(1786)				::Array< ::Dynamic> _g1 = rosterGet->getResult();
-HXDLIN(1786)				while((_g < _g1->length)){
-HXLINE(1786)					 ::Dynamic item = _g1->__get(_g);
-HXDLIN(1786)					_g = (_g + 1);
-HXLINE(1787)					 ::borogove::DirectChat chat = _gthis->getDirectChat(( (::String)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),false);
-HXLINE(1788)					chat->updateFromRoster(item);
-HXLINE(1789)					chatsToUpdate->push(chat);
-            				}
-            			}
-HXLINE(1791)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1791)			::borogove::Persistence_obj::storeChats(_gthis1,_gthis->accountId(),chatsToUpdate);
-HXLINE(1792)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2237_rosterGet)
+HXLINE(2238)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2242)			{
+HXLINE(2242)				int _g = 0;
+HXDLIN(2242)				::Array< ::Dynamic> _g1 = rosterGet->getResult();
+HXDLIN(2242)				while((_g < _g1->length)){
+HXLINE(2242)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(2242)					_g = (_g + 1);
+HXLINE(2243)					 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(2243)					 ::borogove::DirectChat chat = _gthis1->getDirectChat(item->attr->get_string(HX_("jid",c5,ca,50,00)),false);
+HXLINE(2244)					chat->updateFromRoster(item);
+HXLINE(2245)					chatsToUpdate->push(chat);
+            				}
+            			}
+HXLINE(2247)			if (::hx::IsNotNull( rosterGet->ver )) {
+HXLINE(2248)				_gthis->rosterVer = rosterGet->ver;
+HXLINE(2249)				::Dynamic _gthis2 = _gthis->persistence;
+HXDLIN(2249)				::String _hx_tmp = _gthis->accountId();
+HXDLIN(2249)				::String _hx_tmp1;
+HXDLIN(2249)				::String tmp = _gthis->stream->clientId;
+HXDLIN(2249)				if (::hx::IsNotNull( tmp )) {
+HXLINE(2249)					_hx_tmp1 = tmp;
+            				}
+            				else {
+HXLINE(2249)					_hx_tmp1 = _gthis->jid->resource;
+            				}
+HXDLIN(2249)				::String _hx_tmp2 = _gthis->displayName();
+HXDLIN(2249)				::borogove::Persistence_obj::storeLogin(_gthis2,_hx_tmp,_hx_tmp1,_hx_tmp2,_gthis->rosterVer,null());
+            			}
+HXLINE(2251)			::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN(2251)			::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
+HXLINE(2252)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1782_rosterGet)
-HXDLIN(1782)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1783)		 ::borogove::queries::RosterGet rosterGet =  ::borogove::queries::RosterGet_obj::__alloc( HX_CTX ,null());
-HXLINE(1784)		rosterGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,rosterGet)));
-HXLINE(1794)		this->sendQuery(rosterGet);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2235_rosterGet)
+HXDLIN(2235)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2236)		 ::borogove::queries::RosterGet rosterGet =  ::borogove::queries::RosterGet_obj::__alloc( HX_CTX ,this->rosterVer);
+HXLINE(2237)		rosterGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,rosterGet)));
+HXLINE(2254)		this->sendQuery(rosterGet);
             	}
 
 
@@ -5137,184 +6262,193 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,rosterGet,(void))
 void Client_obj::startChatWith(::String jid, ::Dynamic handleCaps, ::Dynamic handleChat){
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::Dynamic,handleChat, ::Dynamic,handleCaps, ::borogove::queries::DiscoInfoGet,discoGet,::String,jid) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1799_startChatWith)
-HXLINE(1800)			 ::borogove::Caps resultCaps = discoGet->getResult();
-HXLINE(1801)			int uiState = ( (int)(handleCaps(resultCaps)) );
-HXLINE(1802)			if (::hx::IsNull( resultCaps )) {
-HXLINE(1803)				 ::borogove::Stanza tmp = discoGet->responseStanza;
-HXDLIN(1803)				 ::borogove::Stanza tmp1;
-HXDLIN(1803)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1803)					tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2259_startChatWith)
+HXLINE(2260)			 ::borogove::Caps resultCaps = discoGet->getResult();
+HXLINE(2261)			int uiState = ( (int)(handleCaps(resultCaps)) );
+HXLINE(2262)			if (::hx::IsNull( resultCaps )) {
+HXLINE(2263)				 ::borogove::Stanza tmp = discoGet->responseStanza;
+HXDLIN(2263)				 ::borogove::Stanza tmp1;
+HXDLIN(2263)				if (::hx::IsNotNull( tmp )) {
+HXLINE(2263)					tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
             				}
             				else {
-HXLINE(1803)					tmp1 = null();
+HXLINE(2263)					tmp1 = null();
             				}
-HXDLIN(1803)				 ::borogove::Stanza err;
-HXDLIN(1803)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1803)					err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
+HXDLIN(2263)				 ::borogove::Stanza err;
+HXDLIN(2263)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE(2263)					err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
             				}
             				else {
-HXLINE(1803)					err = null();
+HXLINE(2263)					err = null();
             				}
-HXLINE(1804)				bool _hx_tmp;
-HXDLIN(1804)				bool _hx_tmp1;
-HXDLIN(1804)				if (::hx::IsNotNull( err )) {
-HXLINE(1804)					::String _hx_tmp2;
-HXDLIN(1804)					if (::hx::IsNotNull( err )) {
-HXLINE(1804)						_hx_tmp2 = err->name;
+HXLINE(2264)				bool _hx_tmp;
+HXDLIN(2264)				bool _hx_tmp1;
+HXDLIN(2264)				if (::hx::IsNotNull( err )) {
+HXLINE(2264)					::String _hx_tmp2;
+HXDLIN(2264)					if (::hx::IsNotNull( err )) {
+HXLINE(2264)						_hx_tmp2 = err->name;
             					}
             					else {
-HXLINE(1804)						_hx_tmp2 = null();
+HXLINE(2264)						_hx_tmp2 = null();
             					}
-HXDLIN(1804)					_hx_tmp1 = (_hx_tmp2 == HX_("service-unavailable",f8,3c,11,1c));
+HXDLIN(2264)					_hx_tmp1 = (_hx_tmp2 == HX_("service-unavailable",f8,3c,11,1c));
             				}
             				else {
-HXLINE(1804)					_hx_tmp1 = true;
+HXLINE(2264)					_hx_tmp1 = true;
             				}
-HXDLIN(1804)				if (!(_hx_tmp1)) {
-HXLINE(1804)					::String _hx_tmp3;
-HXDLIN(1804)					if (::hx::IsNotNull( err )) {
-HXLINE(1804)						_hx_tmp3 = err->name;
+HXDLIN(2264)				if (!(_hx_tmp1)) {
+HXLINE(2264)					::String _hx_tmp3;
+HXDLIN(2264)					if (::hx::IsNotNull( err )) {
+HXLINE(2264)						_hx_tmp3 = err->name;
             					}
             					else {
-HXLINE(1804)						_hx_tmp3 = null();
+HXLINE(2264)						_hx_tmp3 = null();
             					}
-HXDLIN(1804)					_hx_tmp = (_hx_tmp3 == HX_("feature-not-implemented",71,20,2e,96));
+HXDLIN(2264)					_hx_tmp = (_hx_tmp3 == HX_("feature-not-implemented",71,20,2e,96));
             				}
             				else {
-HXLINE(1804)					_hx_tmp = true;
+HXLINE(2264)					_hx_tmp = true;
             				}
-HXDLIN(1804)				if (_hx_tmp) {
-HXLINE(1805)					 ::borogove::DirectChat chat = _gthis->getDirectChat(jid,false);
-HXLINE(1806)					chat->uiState = uiState;
-HXLINE(1807)					handleChat(chat);
-HXLINE(1808)					::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1808)					::borogove::Persistence_obj::storeChats(_gthis1,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
-HXLINE(1809)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXDLIN(2264)				if (_hx_tmp) {
+HXLINE(2265)					 ::borogove::DirectChat chat = _gthis->getDirectChat(jid,false);
+HXLINE(2266)					chat->uiState = uiState;
+HXLINE(2267)					handleChat(chat);
+HXLINE(2268)					::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(2268)					::borogove::Persistence_obj::storeChats(_gthis1,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE(2269)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             				}
             			}
             			else {
-HXLINE(1812)				 ::borogove::Caps cachedCaps = _gthis->capsRepo->add(resultCaps,null());
-HXLINE(1813)				if (cachedCaps->isChannel(jid)) {
-HXLINE(1814)					 ::borogove::Channel chat1 =  ::borogove::Channel_obj::__alloc( HX_CTX ,_gthis,_gthis->stream,_gthis->persistence,jid,uiState,false,false,null(),null(),null(),cachedCaps);
-HXLINE(1815)					chat1->setupNotifications();
-HXLINE(1816)					_gthis->chats->unshift(chat1);
-HXLINE(1817)					bool _hx_tmp4;
-HXDLIN(1817)					if (_gthis->inSync) {
-HXLINE(1817)						_hx_tmp4 = _gthis->sendAvailable;
+HXLINE(2272)				 ::borogove::Caps cachedCaps = _gthis->capsRepo->add(resultCaps,null());
+HXLINE(2273)				if (cachedCaps->isChannel(jid)) {
+HXLINE(2274)					 ::borogove::Chat existing = _gthis->getChat(jid);
+HXLINE(2275)					 ::borogove::Chat chat1;
+HXDLIN(2275)					if (::hx::IsNull( existing )) {
+HXLINE(2276)						 ::borogove::Channel channel =  ::borogove::Channel_obj::__alloc( HX_CTX ,_gthis,_gthis->stream,_gthis->persistence,jid,uiState,false,false,null(),null(),null(),cachedCaps);
+HXLINE(2277)						channel->setupNotifications();
+HXLINE(2278)						bool chat2;
+HXDLIN(2278)						if (_gthis->inSync) {
+HXLINE(2278)							chat2 = _gthis->sendAvailable;
+            						}
+            						else {
+HXLINE(2278)							chat2 = false;
+            						}
+HXDLIN(2278)						if (chat2) {
+HXLINE(2278)							channel->selfPing(false);
+            						}
+HXLINE(2279)						_gthis->chatsIndex->set(channel->chatId,( ( ::borogove::Chat)(channel) ));
+HXLINE(2280)						_gthis->chats->unshift(channel);
+HXLINE(2275)						chat1 = channel;
             					}
             					else {
-HXLINE(1817)						_hx_tmp4 = false;
+HXLINE(2275)						chat1 = existing;
             					}
-HXDLIN(1817)					if (_hx_tmp4) {
-HXLINE(1817)						chat1->selfPing(false);
-            					}
-HXLINE(1818)					handleChat(chat1);
-HXLINE(1819)					::Dynamic _gthis2 = _gthis->persistence;
-HXDLIN(1819)					::borogove::Persistence_obj::storeChats(_gthis2,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
-HXLINE(1820)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat1));
+HXLINE(2285)					handleChat(chat1);
+HXLINE(2286)					::Dynamic _gthis2 = _gthis->persistence;
+HXDLIN(2286)					::borogove::Persistence_obj::storeChats(_gthis2,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
+HXLINE(2287)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat1));
             				}
             				else {
-HXLINE(1822)					 ::borogove::DirectChat chat2 = _gthis->getDirectChat(jid,false);
-HXLINE(1823)					chat2->uiState = uiState;
-HXLINE(1824)					handleChat(chat2);
-HXLINE(1825)					::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN(1825)					::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat2));
-HXLINE(1826)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat2));
+HXLINE(2289)					 ::borogove::DirectChat chat3 = _gthis->getDirectChat(jid,false);
+HXLINE(2290)					chat3->uiState = uiState;
+HXLINE(2291)					handleChat(chat3);
+HXLINE(2292)					::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN(2292)					::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat3));
+HXLINE(2293)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat3));
             				}
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1797_startChatWith)
-HXDLIN(1797)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1798)		 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,jid,null());
-HXLINE(1799)		discoGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,handleChat,handleCaps,discoGet,jid)));
-HXLINE(1830)		this->sendQuery(discoGet);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2257_startChatWith)
+HXDLIN(2257)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2258)		 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,jid,null());
+HXLINE(2259)		discoGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,handleChat,handleCaps,discoGet,jid)));
+HXLINE(2297)		this->sendQuery(discoGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Client_obj,startChatWith,(void))
 
 void Client_obj::mucInvite(::String chatId, ::borogove::Chat chat,::String senderId,::String threadId,::String serverId,::String serverIdBy,::String reason,::String password){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1833_mucInvite)
-HXDLIN(1833)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1834)		if (::hx::IsNull( chat )) {
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2300_mucInvite)
+HXDLIN(2300)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2301)		if (::hx::IsNull( chat )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			int _hx_run( ::borogove::Caps _){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1835_mucInvite)
-HXLINE(1835)				return 3;
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2302_mucInvite)
+HXLINE(2302)				return 3;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S8(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis,::String,serverId,::String,senderId,::String,chatId,::String,serverIdBy,::String,password,::String,reason,::String,threadId) HXARGC(1)
             			void _hx_run( ::borogove::Chat chat){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1836_mucInvite)
-HXLINE(1836)				_gthis->mucInvite(chatId,chat,senderId,threadId,serverId,serverIdBy,reason,password);
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2303_mucInvite)
+HXLINE(2303)				_gthis->mucInvite(chatId,chat,senderId,threadId,serverId,serverIdBy,reason,password);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1835)			this->startChatWith(chatId, ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1(_gthis,serverId,senderId,chatId,serverIdBy,password,reason,threadId)));
-HXLINE(1838)			return;
+HXLINE(2302)			this->startChatWith(chatId, ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1(_gthis,serverId,senderId,chatId,serverIdBy,password,reason,threadId)));
+HXLINE(2305)			return;
             		}
-HXLINE(1842)		bool _hx_tmp;
-HXDLIN(1842)		if ((chat->uiState != 2)) {
-HXLINE(1842)			_hx_tmp = (chat->uiState != 3);
+HXLINE(2309)		bool _hx_tmp;
+HXDLIN(2309)		if ((chat->uiState != 2)) {
+HXLINE(2309)			_hx_tmp = (chat->uiState != 3);
             		}
             		else {
-HXLINE(1842)			_hx_tmp = false;
+HXLINE(2309)			_hx_tmp = false;
             		}
-HXDLIN(1842)		if (_hx_tmp) {
-HXLINE(1842)			return;
+HXDLIN(2309)		if (_hx_tmp) {
+HXLINE(2309)			return;
             		}
-HXLINE(1844)		chat->extensions->removeChildren(HX_("invite",c9,f1,db,9f),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
-HXLINE(1845)		 ::borogove::Stanza inviteExt = chat->extensions->tag(HX_("invite",c9,f1,db,9f), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2311)		chat->extensions->removeChildren(HX_("invite",c9,f1,db,9f),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+HXLINE(2312)		 ::borogove::Stanza inviteExt = chat->extensions->tag(HX_("invite",c9,f1,db,9f), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("from",6a,a5,c2,43),senderId)
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))));
-HXLINE(1846)		if (::hx::IsNotNull( reason )) {
-HXLINE(1846)			inviteExt->textTag(HX_("reason",c4,0f,9d,fc),reason,null());
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))),null());
+HXLINE(2313)		if (::hx::IsNotNull( reason )) {
+HXLINE(2313)			inviteExt->textTag(HX_("reason",c4,0f,9d,fc),reason,null(),null());
             		}
-HXLINE(1847)		if (::hx::IsNotNull( password )) {
-HXLINE(1847)			inviteExt->textTag(HX_("password",1b,23,d0,48),password,null());
+HXLINE(2314)		if (::hx::IsNotNull( password )) {
+HXLINE(2314)			inviteExt->textTag(HX_("password",1b,23,d0,48),password,null(),null());
             		}
-HXLINE(1848)		if (::hx::IsNotNull( threadId )) {
-HXLINE(1848)			inviteExt->tag(HX_("continue",67,e0,c8,31), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("thread",ca,7a,b9,8e),threadId)))->up();
+HXLINE(2315)		if (::hx::IsNotNull( threadId )) {
+HXLINE(2315)			inviteExt->tag(HX_("continue",67,e0,c8,31), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("thread",ca,7a,b9,8e),threadId)),null())->up();
             		}
-HXLINE(1849)		bool _hx_tmp1;
-HXDLIN(1849)		if (::hx::IsNotNull( serverId )) {
-HXLINE(1849)			_hx_tmp1 = ::hx::IsNotNull( serverIdBy );
+HXLINE(2316)		bool _hx_tmp1;
+HXDLIN(2316)		if (::hx::IsNotNull( serverId )) {
+HXLINE(2316)			_hx_tmp1 = ::hx::IsNotNull( serverIdBy );
             		}
             		else {
-HXLINE(1849)			_hx_tmp1 = false;
+HXLINE(2316)			_hx_tmp1 = false;
             		}
-HXDLIN(1849)		if (_hx_tmp1) {
-HXLINE(1850)			inviteExt->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN(2316)		if (_hx_tmp1) {
+HXLINE(2317)			inviteExt->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("by",d7,55,00,00),serverIdBy)
             				->setFixed(1,HX_("id",db,5b,00,00),serverId)
-            				->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sid:0",a8,4b,37,54))))->up();
+            				->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sid:0",a8,4b,37,54))),null())->up();
             		}
-HXLINE(1852)		inviteExt->up();
-HXLINE(1853)		chat->uiState = 3;
-HXLINE(1854)		this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
-HXLINE(1855)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1855)		::borogove::Persistence_obj::storeChats(_hx_tmp2,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE(2319)		inviteExt->up();
+HXLINE(2320)		chat->uiState = 3;
+HXLINE(2321)		this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXLINE(2322)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(2322)		::borogove::Persistence_obj::storeChats(_hx_tmp2,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC8(Client_obj,mucInvite,(void))
 
 void Client_obj::serverBlocked(::String blocked){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1858_serverBlocked)
-HXLINE(1859)		 ::borogove::Chat chat;
-HXDLIN(1859)		 ::borogove::Chat tmp = this->getChat(blocked);
-HXDLIN(1859)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1859)			chat = tmp;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2325_serverBlocked)
+HXLINE(2326)		 ::borogove::Chat chat;
+HXDLIN(2326)		 ::borogove::Chat tmp = this->getChat(blocked);
+HXDLIN(2326)		if (::hx::IsNotNull( tmp )) {
+HXLINE(2326)			chat = tmp;
             		}
             		else {
-HXLINE(1859)			chat = this->getDirectChat(blocked,false);
+HXLINE(2326)			chat = this->getDirectChat(blocked,false);
             		}
-HXLINE(1860)		chat->block(false,null(),false);
+HXLINE(2327)		chat->block(false,null(),false);
             	}
 
 
@@ -5323,212 +6457,212 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,serverBlocked,(void))
 void Client_obj::bookmarksGet( ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::borogove::queries::BlocklistGet,blockingGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1867_bookmarksGet)
-HXLINE(1867)			int _g = 0;
-HXDLIN(1867)			::Array< ::String > _g1 = blockingGet->getResult();
-HXDLIN(1867)			while((_g < _g1->length)){
-HXLINE(1867)				::String blocked = _g1->__get(_g);
-HXDLIN(1867)				_g = (_g + 1);
-HXLINE(1868)				_gthis->serverBlocked(blocked);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2334_bookmarksGet)
+HXLINE(2334)			int _g = 0;
+HXDLIN(2334)			::Array< ::String > _g1 = blockingGet->getResult();
+HXDLIN(2334)			while((_g < _g1->length)){
+HXLINE(2334)				::String blocked = _g1->__get(_g);
+HXDLIN(2334)				_g = (_g + 1);
+HXLINE(2335)				_gthis->serverBlocked(blocked);
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_5, ::borogove::Client,_gthis, ::borogove::queries::PubsubGet,mdsGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1874_bookmarksGet)
-HXLINE(1875)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1876)			{
-HXLINE(1876)				int _g = 0;
-HXDLIN(1876)				::Array< ::Dynamic> _g1 = mdsGet->getResult();
-HXDLIN(1876)				while((_g < _g1->length)){
-HXLINE(1876)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(1876)					_g = (_g + 1);
-HXLINE(1877)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE(1878)						 ::borogove::Stanza tmp = item->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
-HXDLIN(1878)						 ::borogove::Stanza upTo;
-HXDLIN(1878)						if (::hx::IsNotNull( tmp )) {
-HXLINE(1878)							upTo = tmp->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2341_bookmarksGet)
+HXLINE(2342)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2343)			{
+HXLINE(2343)				int _g = 0;
+HXDLIN(2343)				::Array< ::Dynamic> _g1 = mdsGet->getResult();
+HXDLIN(2343)				while((_g < _g1->length)){
+HXLINE(2343)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(2343)					_g = (_g + 1);
+HXLINE(2344)					if (::hx::IsNotNull( item->attr->get(HX_("id",db,5b,00,00)) )) {
+HXLINE(2345)						 ::borogove::Stanza tmp = item->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
+HXDLIN(2345)						 ::borogove::Stanza upTo;
+HXDLIN(2345)						if (::hx::IsNotNull( tmp )) {
+HXLINE(2345)							upTo = tmp->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
             						}
             						else {
-HXLINE(1878)							upTo = null();
+HXLINE(2345)							upTo = null();
             						}
-HXLINE(1879)						 ::borogove::Client _gthis1 = _gthis;
-HXDLIN(1879)						 ::borogove::Chat chat = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ));
-HXLINE(1880)						if (::hx::IsNull( chat )) {
+HXLINE(2346)						 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(2346)						 ::borogove::Chat chat = _gthis1->getChat(item->attr->get_string(HX_("id",db,5b,00,00)));
+HXLINE(2347)						if (::hx::IsNull( chat )) {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             							int _hx_run( ::borogove::Caps _){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1881_bookmarksGet)
-HXLINE(1881)								return 2;
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2348_bookmarksGet)
+HXLINE(2348)								return 2;
             							}
             							HX_END_LOCAL_FUNC1(return)
 
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Stanza,upTo) HXARGC(1)
             							void _hx_run( ::borogove::Chat chat){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1881_bookmarksGet)
-HXLINE(1881)								::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN(1881)								chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ),null());
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2348_bookmarksGet)
+HXLINE(2348)								::String _hx_tmp = upTo->attr->get_string(HX_("id",db,5b,00,00));
+HXDLIN(2348)								chat->markReadUpToId(_hx_tmp,upTo->attr->get_string(HX_("by",d7,55,00,00)),null());
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1881)							 ::borogove::Client _gthis2 = _gthis;
-HXDLIN(1881)							_gthis2->startChatWith(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2(upTo)));
+HXLINE(2348)							 ::borogove::Client _gthis2 = _gthis;
+HXDLIN(2348)							_gthis2->startChatWith(item->attr->get_string(HX_("id",db,5b,00,00)), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2(upTo)));
             						}
             						else {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             							::Dynamic _hx_run( ::Dynamic _){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1883_bookmarksGet)
-HXLINE(1883)								return null();
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2350_bookmarksGet)
+HXLINE(2350)								return null();
             							}
             							HX_END_LOCAL_FUNC1(return)
 
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
             							::Dynamic _hx_run( ::Dynamic e){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1883_bookmarksGet)
-HXLINE(1883)								if (::hx::IsNotNull( e )) {
-HXLINE(1883)									return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2350_bookmarksGet)
+HXLINE(2350)								if (::hx::IsNotNull( e )) {
+HXLINE(2350)									return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
             								}
             								else {
-HXLINE(1883)									return null();
+HXLINE(2350)									return null();
             								}
-HXDLIN(1883)								return null();
+HXDLIN(2350)								return null();
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1883)							::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN(1883)							::thenshim::_Promise::Promise_Impl__obj::then(chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ),false), ::Dynamic(new _hx_Closure_3()), ::Dynamic(new _hx_Closure_4()));
-HXLINE(1884)							chatsToUpdate->push(chat);
+HXLINE(2350)							::String _hx_tmp = upTo->attr->get_string(HX_("id",db,5b,00,00));
+HXDLIN(2350)							::thenshim::_Promise::Promise_Impl__obj::then(chat->markReadUpToId(_hx_tmp,upTo->attr->get_string(HX_("by",d7,55,00,00)),false), ::Dynamic(new _hx_Closure_3()), ::Dynamic(new _hx_Closure_4()));
+HXLINE(2351)							chatsToUpdate->push(chat);
             						}
             					}
             				}
             			}
-HXLINE(1888)			::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN(1888)			::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
+HXLINE(2355)			::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN(2355)			::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_8, ::borogove::Client,_gthis, ::borogove::queries::PubsubGet,pubsubGet, ::Dynamic,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1893_bookmarksGet)
-HXLINE(1894)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1895)			{
-HXLINE(1895)				int _g = 0;
-HXDLIN(1895)				::Array< ::Dynamic> _g1 = pubsubGet->getResult();
-HXDLIN(1895)				while((_g < _g1->length)){
-HXLINE(1895)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(1895)					_g = (_g + 1);
-HXLINE(1896)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE(1897)						 ::borogove::Client _gthis1 = _gthis;
-HXDLIN(1897)						 ::borogove::Chat chat = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ));
-HXLINE(1898)						if (::hx::IsNull( chat )) {
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2360_bookmarksGet)
+HXLINE(2361)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2362)			{
+HXLINE(2362)				int _g = 0;
+HXDLIN(2362)				::Array< ::Dynamic> _g1 = pubsubGet->getResult();
+HXDLIN(2362)				while((_g < _g1->length)){
+HXLINE(2362)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(2362)					_g = (_g + 1);
+HXLINE(2363)					if (::hx::IsNotNull( item->attr->get(HX_("id",db,5b,00,00)) )) {
+HXLINE(2364)						 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(2364)						 ::borogove::Chat chat = _gthis1->getChat(item->attr->get_string(HX_("id",db,5b,00,00)));
+HXLINE(2365)						if (::hx::IsNull( chat )) {
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_6, ::borogove::Stanza,item) HXARGC(1)
             							int _hx_run( ::borogove::Caps caps){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1901_bookmarksGet)
-HXLINE(1902)								if (::hx::IsNull( caps )) {
-HXLINE(1902)									return 1;
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2368_bookmarksGet)
+HXLINE(2369)								if (::hx::IsNull( caps )) {
+HXLINE(2369)									return 1;
             								}
-HXLINE(1904)								 ::borogove::Identity identity = caps->identities->__get(0).StaticCast<  ::borogove::Identity >();
-HXLINE(1905)								 ::borogove::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
-HXLINE(1906)								if (::hx::IsNull( ( (::String)(::Reflect_obj::field(conf->attr,HX_("name",4b,72,ff,48))) ) )) {
-HXLINE(1907)									::String value;
-HXDLIN(1907)									if (::hx::IsNotNull( identity )) {
-HXLINE(1907)										value = identity->name;
+HXLINE(2371)								 ::borogove::Identity identity = caps->identities->__get(0).StaticCast<  ::borogove::Identity >();
+HXLINE(2372)								 ::borogove::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
+HXLINE(2373)								if (::hx::IsNull( conf->attr->get(HX_("name",4b,72,ff,48)) )) {
+HXLINE(2374)									::String _hx_tmp;
+HXDLIN(2374)									if (::hx::IsNotNull( identity )) {
+HXLINE(2374)										_hx_tmp = identity->name;
             									}
             									else {
-HXLINE(1907)										value = null();
+HXLINE(2374)										_hx_tmp = null();
             									}
-HXDLIN(1907)									::Reflect_obj::setField(conf->attr,HX_("name",4b,72,ff,48),value);
+HXDLIN(2374)									conf->attr->set(HX_("name",4b,72,ff,48),_hx_tmp);
             								}
-HXLINE(1909)								bool _hx_tmp;
-HXDLIN(1909)								bool _hx_tmp1;
-HXDLIN(1909)								if ((( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) != HX_("1",31,00,00,00))) {
-HXLINE(1909)									_hx_tmp1 = (( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) == HX_("true",4e,a7,03,4d));
+HXLINE(2376)								bool _hx_tmp1;
+HXDLIN(2376)								bool _hx_tmp2;
+HXDLIN(2376)								if (::hx::IsNotEq( conf->attr->get(HX_("autojoin",d9,f6,b1,3e)),HX_("1",31,00,00,00) )) {
+HXLINE(2376)									_hx_tmp2 = ::hx::IsEq( conf->attr->get(HX_("autojoin",d9,f6,b1,3e)),HX_("true",4e,a7,03,4d) );
             								}
             								else {
-HXLINE(1909)									_hx_tmp1 = true;
+HXLINE(2376)									_hx_tmp2 = true;
             								}
-HXDLIN(1909)								if (!(_hx_tmp1)) {
-HXLINE(1909)									_hx_tmp = !(caps->isChannel(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) )));
+HXDLIN(2376)								if (!(_hx_tmp2)) {
+HXLINE(2376)									_hx_tmp1 = !(caps->isChannel(item->attr->get_string(HX_("id",db,5b,00,00))));
             								}
             								else {
-HXLINE(1909)									_hx_tmp = true;
+HXLINE(2376)									_hx_tmp1 = true;
             								}
-HXDLIN(1909)								if (_hx_tmp) {
-HXLINE(1909)									return 1;
+HXDLIN(2376)								if (_hx_tmp1) {
+HXLINE(2376)									return 1;
             								}
             								else {
-HXLINE(1909)									return 2;
+HXLINE(2376)									return 2;
             								}
-HXDLIN(1909)								return null();
+HXDLIN(2376)								return null();
             							}
             							HX_END_LOCAL_FUNC1(return)
 
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::borogove::Stanza,item) HXARGC(1)
             							void _hx_run( ::borogove::Chat chat){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1912_bookmarksGet)
-HXLINE(1912)								chat->updateFromBookmark(item);
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2379_bookmarksGet)
+HXLINE(2379)								chat->updateFromBookmark(item);
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1899)							 ::borogove::Client _gthis2 = _gthis;
-HXDLIN(1899)							_gthis2->startChatWith(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_6(item)), ::Dynamic(new _hx_Closure_7(item)));
+HXLINE(2366)							 ::borogove::Client _gthis2 = _gthis;
+HXDLIN(2366)							_gthis2->startChatWith(item->attr->get_string(HX_("id",db,5b,00,00)), ::Dynamic(new _hx_Closure_6(item)), ::Dynamic(new _hx_Closure_7(item)));
             						}
             						else {
-HXLINE(1916)							chat->updateFromBookmark(item);
-HXLINE(1917)							chatsToUpdate->push(chat);
+HXLINE(2383)							chat->updateFromBookmark(item);
+HXLINE(2384)							chatsToUpdate->push(chat);
             						}
             					}
             				}
             			}
-HXLINE(1921)			::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN(1921)			::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
-HXLINE(1922)			callback();
+HXLINE(2388)			::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN(2388)			::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
+HXLINE(2389)			callback();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1864_bookmarksGet)
-HXDLIN(1864)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1865)		 ::borogove::queries::BlocklistGet blockingGet =  ::borogove::queries::BlocklistGet_obj::__alloc( HX_CTX );
-HXLINE(1866)		blockingGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,blockingGet)));
-HXLINE(1871)		this->sendQuery(blockingGet);
-HXLINE(1873)		 ::borogove::queries::PubsubGet mdsGet =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb),null());
-HXLINE(1874)		mdsGet->onFinished( ::Dynamic(new _hx_Closure_5(_gthis,mdsGet)));
-HXLINE(1890)		this->sendQuery(mdsGet);
-HXLINE(1892)		 ::borogove::queries::PubsubGet pubsubGet =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d),null());
-HXLINE(1893)		pubsubGet->onFinished( ::Dynamic(new _hx_Closure_8(_gthis,pubsubGet,callback)));
-HXLINE(1924)		this->sendQuery(pubsubGet);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2331_bookmarksGet)
+HXDLIN(2331)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2332)		 ::borogove::queries::BlocklistGet blockingGet =  ::borogove::queries::BlocklistGet_obj::__alloc( HX_CTX );
+HXLINE(2333)		blockingGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,blockingGet)));
+HXLINE(2338)		this->sendQuery(blockingGet);
+HXLINE(2340)		 ::borogove::queries::PubsubGet mdsGet =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb),null());
+HXLINE(2341)		mdsGet->onFinished( ::Dynamic(new _hx_Closure_5(_gthis,mdsGet)));
+HXLINE(2357)		this->sendQuery(mdsGet);
+HXLINE(2359)		 ::borogove::queries::PubsubGet pubsubGet =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d),null());
+HXLINE(2360)		pubsubGet->onFinished( ::Dynamic(new _hx_Closure_8(_gthis,pubsubGet,callback)));
+HXLINE(2391)		this->sendQuery(pubsubGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,bookmarksGet,(void))
 
 void Client_obj::checkForReceipts( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1927_checkForReceipts)
-HXDLIN(1927)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1928)		{
-HXLINE(1928)			int _g = 0;
-HXDLIN(1928)			::Array< ::Dynamic> _g1 = stanza->allTags(HX_("received",21,45,fd,e2),HX_("urn:xmpp:receipts",d7,40,8f,8c));
-HXDLIN(1928)			while((_g < _g1->length)){
-HXLINE(1928)				 ::borogove::Stanza receipt = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(1928)				_g = (_g + 1);
-HXLINE(1929)				::String id = ( (::String)(::Reflect_obj::field(receipt->attr,HX_("id",db,5b,00,00))) );
-HXLINE(1930)				if (::hx::IsNotNull( id )) {
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2394_checkForReceipts)
+HXDLIN(2394)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2397)		{
+HXLINE(2397)			int _g = 0;
+HXDLIN(2397)			::Array< ::Dynamic> _g1 = stanza->allTags(HX_("received",21,45,fd,e2),HX_("urn:xmpp:receipts",d7,40,8f,8c));
+HXDLIN(2397)			while((_g < _g1->length)){
+HXLINE(2397)				 ::borogove::Stanza receipt = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(2397)				_g = (_g + 1);
+HXLINE(2398)				::String id = receipt->attr->get_string(HX_("id",db,5b,00,00));
+HXLINE(2399)				if (::hx::IsNotNull( id )) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(1)
             					void _hx_run( ::borogove::ChatMessage m){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1936_checkForReceipts)
-HXLINE(1936)						_gthis->notifyMessageHandlers(m,3);
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2405_checkForReceipts)
+HXLINE(2405)						_gthis->notifyMessageHandlers(m,3);
             					}
             					HX_END_LOCAL_FUNC1((void))
 
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             					::Dynamic _hx_run( ::Dynamic _){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1936_checkForReceipts)
-HXLINE(1936)						return null();
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2405_checkForReceipts)
+HXLINE(2405)						return null();
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1931)					::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1931)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_hx_tmp,this->accountId(),id,2,null()), ::Dynamic(new _hx_Closure_0(_gthis)), ::Dynamic(new _hx_Closure_1()));
+HXLINE(2400)					::Dynamic _hx_tmp = this->persistence;
+HXDLIN(2400)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_hx_tmp,this->accountId(),id,2,null()), ::Dynamic(new _hx_Closure_0(_gthis)), ::Dynamic(new _hx_Closure_1()));
             				}
             			}
             		}
@@ -5538,21 +6672,21 @@ HXDLIN(1931)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persi
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,checkForReceipts,(void))
 
 void Client_obj::sync( ::Dynamic callback){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1941_sync)
-HXDLIN(1941)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1942)		if (::Std_obj::isOfType(this->persistence,::hx::ClassOf< ::borogove::persistence::Dummy >())) {
-HXLINE(1943)			callback(true);
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2410_sync)
+HXDLIN(2410)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2411)		if (::Std_obj::isOfType(this->persistence,::hx::ClassOf< ::borogove::persistence::Dummy >())) {
+HXLINE(2412)			callback(true);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::Dynamic,callback) HXARGC(1)
             			void _hx_run( ::borogove::ChatMessage point){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1945_sync)
-HXLINE(1945)				_gthis->doSync(callback,point,null());
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2414_sync)
+HXLINE(2414)				_gthis->doSync(callback,point,null());
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1945)			::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1945)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::syncPoint(_hx_tmp,this->accountId(),null()), ::Dynamic(new _hx_Closure_0(_gthis,callback)),null());
+HXLINE(2414)			::Dynamic _hx_tmp = this->persistence;
+HXDLIN(2414)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::syncPoint(_hx_tmp,this->accountId(),null()), ::Dynamic(new _hx_Closure_0(_gthis,callback)),null());
             		}
             	}
 
@@ -5560,25 +6694,25 @@ HXDLIN(1945)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persist
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,sync,(void))
 
 void Client_obj::onMAMJMI(::String sid, ::borogove::Stanza stanza){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1950_onMAMJMI)
-HXLINE(1951)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE(1951)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2419_onMAMJMI)
+HXLINE(2420)		if (::hx::IsNull( stanza->attr->get(HX_("from",6a,a5,c2,43)) )) {
+HXLINE(2420)			return;
             		}
-HXLINE(1952)		 ::borogove::JID from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE(1953)		 ::borogove::DirectChat chat = this->getDirectChat(from->asBare()->asString(),null());
-HXLINE(1954)		if (chat->jingleSessions->exists(sid)) {
-HXLINE(1954)			return;
+HXLINE(2421)		 ::borogove::JID from = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)));
+HXLINE(2422)		 ::borogove::DirectChat chat = this->getDirectChat(from->asBare()->asString(),null());
+HXLINE(2423)		if (chat->jingleSessions->exists(sid)) {
+HXLINE(2423)			return;
             		}
-HXLINE(1956)		if (::hx::IsNull( stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07)) )) {
-HXLINE(1956)			return;
+HXLINE(2425)		if (::hx::IsNull( stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07)) )) {
+HXLINE(2425)			return;
             		}
-HXLINE(1957)		 ::borogove::calls::IncomingProposedSession session =  ::borogove::calls::IncomingProposedSession_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),from,sid);
-HXLINE(1958)		{
-HXLINE(1958)			::Dynamic this1 = chat->jingleSessions;
-HXDLIN(1958)			( ( ::haxe::ds::StringMap)(this1) )->set(session->get_sid(),session);
+HXLINE(2426)		 ::borogove::calls::IncomingProposedSession session =  ::borogove::calls::IncomingProposedSession_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),from,sid);
+HXLINE(2427)		{
+HXLINE(2427)			::Dynamic this1 = chat->jingleSessions;
+HXDLIN(2427)			( ( ::haxe::ds::StringMap)(this1) )->set(session->get_sid(),session);
             		}
-HXLINE(1959)		this->chatActivity(chat,null());
-HXLINE(1960)		session->ring();
+HXLINE(2428)		this->chatActivity(chat,null());
+HXLINE(2429)		session->ring();
             	}
 
 
@@ -5587,168 +6721,207 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,onMAMJMI,(void))
 void Client_obj::doSync( ::Dynamic callback, ::borogove::ChatMessage syncPoint,::String sortA){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             		 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1975_doSync)
-HXLINE(1976)			builder->syncPoint = true;
-HXLINE(1977)			return builder;
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2448_doSync)
+HXLINE(2449)			builder->syncPoint = true;
+HXLINE(2450)			return builder;
             		}
             		HX_END_LOCAL_FUNC2(return)
 
-            		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_8, ::borogove::MessageSync,sync2, ::borogove::Client,_gthis, ::haxe::ds::StringMap,chatIds, ::Dynamic,callback) HXARGC(1)
+            		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_10, ::borogove::MessageSync,sync2, ::borogove::Client,_gthis, ::haxe::ds::StringMap,chatIds, ::Dynamic,callback) HXARGC(1)
             		void _hx_run( ::Dynamic messageList){
-            			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_6, ::borogove::MessageSync,sync2, ::borogove::Client,_gthis, ::haxe::ds::StringMap,chatIds, ::Dynamic,callback) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::borogove::Client,_gthis) HXARGC(1)
+            			::Dynamic _hx_run(::Array< ::Dynamic> ms){
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2497_doSync)
+HXLINE(2497)				return _gthis->storeMessages(ms);
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+            			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_8, ::borogove::MessageSync,sync2, ::borogove::Client,_gthis, ::haxe::ds::StringMap,chatIds, ::Dynamic,callback) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> results){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2013_doSync)
-HXLINE(2014)				{
-HXLINE(2014)					int _g = 0;
-HXDLIN(2014)					while((_g < results->length)){
-HXLINE(2014)						::Array< ::Dynamic> messages = results->__get(_g).StaticCast< ::Array< ::Dynamic> >();
-HXDLIN(2014)						_g = (_g + 1);
-HXLINE(2015)						if (::hx::IsNotNull( messages )) {
-HXLINE(2016)							int _g1 = 0;
-HXDLIN(2016)							while((_g1 < messages->length)){
-HXLINE(2016)								 ::borogove::ChatMessage message = messages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(2016)								_g1 = (_g1 + 1);
-HXLINE(2017)								_gthis->notifySyncMessageHandlers(message);
-HXLINE(2018)								_gthis->sortId = message->sortId;
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2499_doSync)
+HXLINE(2500)				{
+HXLINE(2500)					int _g = 0;
+HXDLIN(2500)					while((_g < results->length)){
+HXLINE(2500)						::Array< ::Dynamic> messages = results->__get(_g).StaticCast< ::Array< ::Dynamic> >();
+HXDLIN(2500)						_g = (_g + 1);
+HXLINE(2501)						if (::hx::IsNotNull( messages )) {
+HXLINE(2502)							int _g1 = 0;
+HXDLIN(2502)							while((_g1 < messages->length)){
+HXLINE(2502)								 ::borogove::ChatMessage message = messages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(2502)								_g1 = (_g1 + 1);
+HXLINE(2503)								_gthis->notifySyncMessageHandlers(message);
+HXLINE(2504)								_gthis->sortId = message->sortId;
             							}
             						}
             					}
             				}
-HXLINE(2023)				if (sync2->hasMore()) {
-HXLINE(2024)					sync2->fetchNext();
+HXLINE(2509)				if (sync2->hasMore()) {
+HXLINE(2510)					sync2->fetchNext();
             				}
             				else {
-HXLINE(2027)					{
-HXLINE(2027)						::Dynamic this1 = sync2->jmi;
-HXDLIN(2027)						 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN(2027)						while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(2027)							::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(2027)							 ::borogove::Stanza _g_value = ( ( ::borogove::Stanza)(::haxe::IMap_obj::get(this1,key)) );
-HXLINE(2028)							_gthis->onMAMJMI(key,_g_value);
+HXLINE(2513)					{
+HXLINE(2513)						::Dynamic this1 = sync2->jmi;
+HXDLIN(2513)						 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN(2513)						while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(2513)							::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(2513)							 ::borogove::Stanza _g_value = ( ( ::borogove::Stanza)(::haxe::IMap_obj::get(this1,key)) );
+HXLINE(2514)							_gthis->onMAMJMI(key,_g_value);
             						}
             					}
-HXLINE(2031)					{
-HXLINE(2031)						::Dynamic map = chatIds;
-HXDLIN(2031)						 ::Dynamic _g_keys1 = ::haxe::IMap_obj::keys(map);
-HXDLIN(2031)						while(( (bool)(_g_keys1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(2031)							::String key1 = ( (::String)(_g_keys1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(2031)							::haxe::IMap_obj::get(map,key1);
-HXLINE(2034)							if (::hx::IsNull( _gthis->getChat(key1) )) {
-HXLINE(2034)								_gthis->getDirectChat(key1,null());
+HXLINE(2517)					{
+HXLINE(2517)						::Dynamic map = chatIds;
+HXDLIN(2517)						 ::Dynamic _g_keys1 = ::haxe::IMap_obj::keys(map);
+HXDLIN(2517)						while(( (bool)(_g_keys1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(2517)							::String key1 = ( (::String)(_g_keys1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(2517)							::haxe::IMap_obj::get(map,key1);
+HXLINE(2520)							if (::hx::IsNull( _gthis->getChat(key1) )) {
+HXLINE(2520)								_gthis->getDirectChat(key1,null());
             							}
             						}
             					}
-HXLINE(2036)					if (::hx::IsNotNull( callback )) {
-HXLINE(2036)						callback(true);
+HXLINE(2522)					if (::hx::IsNotNull( callback )) {
+HXLINE(2522)						callback(true);
             					}
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::Dynamic,callback) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_9, ::Dynamic,callback) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2039_doSync)
-HXLINE(2040)				 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN(2040)				::String _hx_tmp1;
-HXDLIN(2040)				if (::hx::IsNull( e )) {
-HXLINE(2040)					_hx_tmp1 = HX_("null",87,9e,0e,49);
-            				}
-            				else {
-HXLINE(2040)					_hx_tmp1 = ::Std_obj::string(e);
-            				}
-HXDLIN(2040)				_hx_tmp(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2525_doSync)
+HXLINE(2526)				::haxe::Log_obj::trace(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
-            					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_hx_tmp1))
+            					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,e))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),2040)));
-HXLINE(2041)				callback(false);
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),2526)));
+HXLINE(2527)				callback(false);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1980_doSync)
-HXLINE(1981)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1982)			::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1983)			{
-HXLINE(1983)				int _g = 0;
-HXDLIN(1983)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
-HXDLIN(1983)				while((_g < _g1->length)){
-HXLINE(1983)					 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
-HXDLIN(1983)					_g = (_g + 1);
-HXLINE(1984)					{
-HXLINE(1984)						 ::borogove::MessageStanza _g2 = m->parsed;
-HXDLIN(1984)						switch((int)(_g2->_hx_getIndex())){
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2453_doSync)
+HXLINE(2454)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2455)			::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2456)			{
+HXLINE(2456)				int _g = 0;
+HXDLIN(2456)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
+HXDLIN(2456)				while((_g < _g1->length)){
+HXLINE(2456)					 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
+HXDLIN(2456)					_g = (_g + 1);
+HXLINE(2457)					{
+HXLINE(2457)						 ::borogove::MessageStanza _g2 = m->parsed;
+HXDLIN(2457)						switch((int)(_g2->_hx_getIndex())){
             							case (int)0: {
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             								::Array< ::Dynamic> _hx_run( ::borogove::ChatMessage m){
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2002_doSync)
-HXLINE(2002)									return ::Array_obj< ::Dynamic>::__new(1)->init(0,m);
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2488_doSync)
+HXLINE(2488)									return ::Array_obj< ::Dynamic>::__new(1)->init(0,m);
             								}
             								HX_END_LOCAL_FUNC1(return)
 
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             								::Array< ::Dynamic> _hx_run( ::Dynamic _){
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2002_doSync)
-HXLINE(2002)									return ::Array_obj< ::Dynamic>::__new(0);
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2488_doSync)
+HXLINE(2488)									return ::Array_obj< ::Dynamic>::__new(0);
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1997)								::Dynamic _gthis1 = _gthis->persistence;
-HXLINE(1998)								::String _hx_tmp = _gthis->accountId();
-HXLINE(1997)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2())));
+HXLINE(2483)								::Dynamic _gthis1 = _gthis->persistence;
+HXLINE(2484)								::String _hx_tmp = _gthis->accountId();
+HXLINE(2483)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2())));
             							}
             							break;
             							case (int)1: {
-HXLINE(1985)								 ::borogove::ChatMessage _g3 = _g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1985)								{
-HXLINE(1986)									chatMessages->push(_g3);
-HXLINE(1987)									if ((_g3->type == 0)) {
-HXLINE(1987)										::String k = _g3->chatId();
-HXDLIN(1987)										chatIds->set(k,true);
+HXLINE(2458)								 ::borogove::ChatMessage message = _g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
+HXLINE(2459)								bool _hx_tmp1;
+HXDLIN(2459)								if (_gthis->blockIncomingWithoutE2EE) {
+HXLINE(2459)									_hx_tmp1 = ::hx::IsNull( m->encryption );
+            								}
+            								else {
+HXLINE(2459)									_hx_tmp1 = false;
+            								}
+HXDLIN(2459)								if (_hx_tmp1) {
+HXLINE(2461)									 ::borogove::Client _gthis2 = _gthis;
+HXLINE(2462)									::String message1 = message->localId;
+HXDLIN(2462)									 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+            										->setFixed(0,HX_("id",db,5b,00,00),message1)
+            										->setFixed(1,HX_("to",7b,65,00,00),message->from->asString())
+            										->setFixed(2,HX_("type",ba,f2,08,4d),HX_("error",c8,cb,29,73))),null());
+HXLINE(2463)									::String _hx_tmp3 = _gthis->jid->asString();
+HXLINE(2461)									_gthis2->sendStanza(_hx_tmp2->tag(HX_("error",c8,cb,29,73), ::Dynamic(::hx::Anon_obj::Create(2)
+            										->setFixed(0,HX_("by",d7,55,00,00),_hx_tmp3)
+            										->setFixed(1,HX_("type",ba,f2,08,4d),HX_("cancel",7a,ed,33,b8))),null())->tag(HX_("policy-violation",4a,ce,a9,ac), ::Dynamic(::hx::Anon_obj::Create(1)
+            										->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30))),null())->up()->textTag(HX_("text",ad,cc,f9,4c),HX_("E2EE Required",12,e2,8b,1e), ::Dynamic(::hx::Anon_obj::Create(1)
+            										->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30))),null()));
+            								}
+            								else {
+            									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::ChatMessage,message) HXARGC(1)
+            									 ::borogove::ChatMessage _hx_run(bool _){
+            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2471_doSync)
+HXLINE(2471)										return message;
+            									}
+            									HX_END_LOCAL_FUNC1(return)
+
+HXLINE(2468)									{
+HXLINE(2468)										int _g3 = 0;
+HXDLIN(2468)										::Array< ::Dynamic> _g4 = message->inlineHashReferences();
+HXDLIN(2468)										while((_g3 < _g4->length)){
+HXLINE(2468)											 ::borogove::Hash hash = _g4->__get(_g3).StaticCast<  ::borogove::Hash >();
+HXDLIN(2468)											_g3 = (_g3 + 1);
+HXLINE(2469)											_gthis->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,message->from));
+            										}
+            									}
+HXLINE(2471)									 ::borogove::Client _gthis3 = _gthis;
+HXDLIN(2471)									 ::borogove::Client _gthis4 = _gthis;
+HXDLIN(2471)									 ::borogove::Chat _hx_tmp4 = _gthis4->getChat(message->chatId());
+HXDLIN(2471)									chatMessages->push(::thenshim::_Promise::Promise_Impl__obj::then(_gthis3->maybeAutodownloadAttachments(_hx_tmp4,message), ::Dynamic(new _hx_Closure_3(message)),null()));
+HXLINE(2472)									if ((message->type == 0)) {
+HXLINE(2472)										::String k = message->chatId();
+HXDLIN(2472)										chatIds->set(k,true);
             									}
             								}
             							}
             							break;
             							case (int)3: {
-            								HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_4, ::borogove::Client,_gthis, ::borogove::ModerationAction,action) HXARGC(2)
+            								HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_5, ::borogove::Client,_gthis, ::borogove::ModerationAction,action) HXARGC(2)
             								void _hx_run( ::Dynamic resolve, ::Dynamic reject){
-            									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,resolve) HXARGC(1)
+            									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4, ::Dynamic,resolve) HXARGC(1)
             									void _hx_run( ::borogove::ChatMessage _){
-            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1994_doSync)
-HXLINE(1994)										resolve(null());
+            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2480_doSync)
+HXLINE(2480)										resolve(null());
             									}
             									HX_END_LOCAL_FUNC1((void))
 
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1994_doSync)
-HXLINE(1994)									::thenshim::_Promise::Promise_Impl__obj::then(_gthis->moderateMessage(action), ::Dynamic(new _hx_Closure_3(resolve)),null());
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2480_doSync)
+HXLINE(2480)									::thenshim::_Promise::Promise_Impl__obj::then(_gthis->moderateMessage(action), ::Dynamic(new _hx_Closure_4(resolve)),null());
             								}
             								HX_END_LOCAL_FUNC2((void))
 
-HXLINE(1992)								 ::borogove::ModerationAction action = _g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >();
-HXLINE(1993)								promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_4(_gthis,action))));
+HXLINE(2478)								 ::borogove::ModerationAction action = _g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >();
+HXLINE(2479)								promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_5(_gthis,action))));
             							}
             							break;
             							case (int)4: {
-            								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_5) HXARGC(1)
+            								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_6) HXARGC(1)
             								::Dynamic _hx_run( ::borogove::ChatMessage _){
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1990_doSync)
-HXLINE(1990)									return null();
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2476_doSync)
+HXLINE(2476)									return null();
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1990)								::Dynamic _gthis2 = _gthis->persistence;
-HXLINE(1989)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_5()),null()));
+HXLINE(2476)								::Dynamic _gthis5 = _gthis->persistence;
+HXLINE(2475)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_gthis5,_gthis->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_6()),null()));
             							}
             							break;
             							case (int)5: {
-HXLINE(2004)								 ::borogove::Client _gthis3 = _gthis;
-HXDLIN(2004)								::String m1 = m->chatId;
-HXDLIN(2004)								 ::borogove::Chat _hx_tmp1 = _gthis->getChat(m->chatId);
-HXDLIN(2004)								_gthis3->mucInvite(m1,_hx_tmp1,m->senderId,m->threadId,_g2->_hx_getString(0),_g2->_hx_getString(1),_g2->_hx_getString(2),_g2->_hx_getString(3));
+HXLINE(2490)								 ::borogove::Client _gthis6 = _gthis;
+HXDLIN(2490)								::String m1 = m->chatId;
+HXDLIN(2490)								 ::borogove::Chat _hx_tmp5 = _gthis->getChat(m->chatId);
+HXDLIN(2490)								_gthis6->mucInvite(m1,_hx_tmp5,m->senderId,m->threadId,_g2->_hx_getString(0),_g2->_hx_getString(1),_g2->_hx_getString(2),_g2->_hx_getString(3));
             							}
             							break;
-            							case (int)6: {
-HXLINE(2006)								_gthis->checkForReceipts(_g2->_hx_getObject(0).StaticCast<  ::borogove::Stanza >());
+            							case (int)7: {
+HXLINE(2492)								_gthis->checkForReceipts(_g2->_hx_getObject(0).StaticCast<  ::borogove::Stanza >());
             							}
             							break;
             							default:{
@@ -5757,93 +6930,110 @@ HXLINE(2006)								_gthis->checkForReceipts(_g2->_hx_getObject(0).StaticCast<
             					}
             				}
             			}
-HXLINE(2011)			promises->push(_gthis->storeMessages(chatMessages));
-HXLINE(2012)			::haxe::Log_obj::trace(HX_("SYNC: MAM page wait for writes",ad,4c,95,21),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),2012,HX_("borogove.Client",18,dc,e6,c0),HX_("doSync",86,5f,63,1c)));
-HXLINE(2013)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_6(sync2,_gthis,chatIds,callback)), ::Dynamic(new _hx_Closure_7(callback)));
+HXLINE(2497)			promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(chatMessages), ::Dynamic(new _hx_Closure_7(_gthis)),null()));
+HXLINE(2498)			::haxe::Log_obj::trace(HX_("SYNC: MAM page wait for writes",ad,4c,95,21),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),2498,HX_("borogove.Client",18,dc,e6,c0),HX_("doSync",86,5f,63,1c)));
+HXLINE(2499)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_8(sync2,_gthis,chatIds,callback)), ::Dynamic(new _hx_Closure_9(callback)));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_9, ::borogove::Client,_gthis, ::borogove::ChatMessage,syncPoint, ::Dynamic,callback) HXARGC(1)
+            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_11, ::borogove::Client,_gthis, ::borogove::ChatMessage,syncPoint, ::Dynamic,callback) HXARGC(1)
             		void _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2045_doSync)
-HXLINE(2045)			if (::hx::IsNotNull( syncPoint )) {
-HXLINE(2047)				_gthis->doSync(callback,null(),syncPoint->sortId);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2531_doSync)
+HXLINE(2531)			if (::hx::IsNotNull( syncPoint )) {
+HXLINE(2533)				_gthis->doSync(callback,null(),syncPoint->sortId);
             			}
             			else {
-HXLINE(2049)				::haxe::Log_obj::trace(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(2535)				::haxe::Log_obj::trace(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,stanza))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),2049)));
-HXLINE(2050)				if (::hx::IsNotNull( callback )) {
-HXLINE(2050)					callback(false);
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),2535)));
+HXLINE(2536)				if (::hx::IsNotNull( callback )) {
+HXLINE(2536)					callback(false);
             				}
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1964_doSync)
-HXDLIN(1964)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1965)		::String thirtyDaysAgo = ::borogove::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-2592000000.))));
-HXLINE(1971)		 ::Dynamic sync;
-HXDLIN(1971)		if (::hx::IsNull( syncPoint )) {
-HXLINE(1971)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2433_doSync)
+HXDLIN(2433)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(2434)		::String thirtyDaysAgo = ::borogove::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-2592000000.))));
+HXLINE(2437)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXLINE(2439)		::String _hx_tmp1 = this->accountId();
+HXDLIN(2439)		::String _hx_tmp2;
+HXDLIN(2439)		if (::hx::IsNotNull( syncPoint )) {
+HXLINE(2439)			_hx_tmp2 = syncPoint->serverId;
+            		}
+            		else {
+HXLINE(2439)			_hx_tmp2 = null();
+            		}
+HXDLIN(2439)		::String _hx_tmp3;
+HXDLIN(2439)		if (::hx::IsNotNull( syncPoint )) {
+HXLINE(2439)			_hx_tmp3 = syncPoint->sortId;
+            		}
+            		else {
+HXLINE(2439)			_hx_tmp3 = null();
+            		}
+HXLINE(2437)		_hx_tmp(HX_("SYNC: initialize MessageSync",53,9b,9a,5d), ::Dynamic(::hx::Anon_obj::Create(5)
+            			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
+            			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(5)
+            				->setFixed(0,HX_("sortA",23,4b,ca,80),sortA)
+            				->setFixed(1,HX_("reason",c4,0f,9d,fc),HX_("client doSync",bb,1c,77,4c))
+            				->setFixed(2,HX_("accountId",e8,81,54,29),_hx_tmp1)
+            				->setFixed(3,HX_("syncPointSortId",ae,d4,b4,51),_hx_tmp3)
+            				->setFixed(4,HX_("syncPointServerId",93,3a,99,61),_hx_tmp2))))
+            			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
+            			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),2437)));
+HXLINE(2444)		 ::Dynamic sync;
+HXDLIN(2444)		if (::hx::IsNull( syncPoint )) {
+HXLINE(2444)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("startTime",8f,45,f0,05),thirtyDaysAgo));
             		}
             		else {
-HXLINE(1971)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(2444)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("after",1c,66,a2,1d),syncPoint->serverId))));
             		}
-HXLINE(1972)		::String sync1;
-HXDLIN(1972)		if (::hx::IsNotNull( sortA )) {
-HXLINE(1972)			sync1 = sortA;
+HXLINE(2445)		::String sync1;
+HXDLIN(2445)		if (::hx::IsNotNull( sortA )) {
+HXLINE(2445)			sync1 = sortA;
             		}
             		else {
-HXLINE(1972)			if (::hx::IsNotNull( syncPoint )) {
-HXLINE(1972)				sync1 = syncPoint->sortId;
+HXLINE(2445)			if (::hx::IsNotNull( syncPoint )) {
+HXLINE(2445)				sync1 = syncPoint->sortId;
             			}
             			else {
-HXLINE(1972)				sync1 = null();
+HXLINE(2445)				sync1 = null();
             			}
             		}
-HXLINE(1968)		 ::borogove::MessageSync sync2 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,sync,sync1,null(),null());
-HXLINE(1975)		sync2->addContext( ::Dynamic(new _hx_Closure_0()));
-HXLINE(1979)		 ::haxe::ds::StringMap chatIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1980)		sync2->onMessages( ::Dynamic(new _hx_Closure_8(sync2,_gthis,chatIds,callback)));
-HXLINE(2044)		sync2->onError( ::Dynamic(new _hx_Closure_9(_gthis,syncPoint,callback)));
-HXLINE(2053)		sync2->fetchNext();
+HXLINE(2441)		 ::borogove::MessageSync sync2 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,sync,sync1,null(),null());
+HXLINE(2448)		sync2->addContext( ::Dynamic(new _hx_Closure_0()));
+HXLINE(2452)		 ::haxe::ds::StringMap chatIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(2453)		sync2->onMessages( ::Dynamic(new _hx_Closure_10(sync2,_gthis,chatIds,callback)));
+HXLINE(2530)		sync2->onError( ::Dynamic(new _hx_Closure_11(_gthis,syncPoint,callback)));
+HXLINE(2539)		sync2->fetchNext();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Client_obj,doSync,(void))
 
 void Client_obj::pingAllChannels(bool refresh){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2057_pingAllChannels)
-HXDLIN(2057)		int _g = 0;
-HXDLIN(2057)		::Array< ::Dynamic> _g1 = this->getChats();
-HXDLIN(2057)		while((_g < _g1->length)){
-HXDLIN(2057)			 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(2057)			_g = (_g + 1);
-HXLINE(2058)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE(2059)			if (::hx::IsNotNull( channel )) {
-HXLINE(2059)				bool _hx_tmp;
-HXDLIN(2059)				if (!(refresh)) {
-HXLINE(2059)					 ::borogove::Caps _hx_tmp1;
-HXDLIN(2059)					if (::hx::IsNotNull( channel )) {
-HXLINE(2059)						_hx_tmp1 = channel->disco;
-            					}
-            					else {
-HXLINE(2059)						_hx_tmp1 = null();
-            					}
-HXDLIN(2059)					_hx_tmp = ::hx::IsNull( _hx_tmp1 );
-            				}
-            				else {
-HXLINE(2059)					_hx_tmp = true;
-            				}
-HXDLIN(2059)				channel->selfPing(_hx_tmp);
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2543_pingAllChannels)
+HXDLIN(2543)		int _g = 0;
+HXDLIN(2543)		::Array< ::Dynamic> _g1 = this->getChannels();
+HXDLIN(2543)		while((_g < _g1->length)){
+HXDLIN(2543)			 ::borogove::Channel channel = _g1->__get(_g).StaticCast<  ::borogove::Channel >();
+HXDLIN(2543)			_g = (_g + 1);
+HXLINE(2544)			bool _hx_tmp;
+HXDLIN(2544)			if (!(refresh)) {
+HXLINE(2544)				_hx_tmp = ::hx::IsNull( channel->disco );
+            			}
+            			else {
+HXLINE(2544)				_hx_tmp = true;
             			}
+HXDLIN(2544)			channel->selfPing(_hx_tmp);
             		}
             	}
 
@@ -5851,35 +7041,32 @@ HXDLIN(2059)				channel->selfPing(_hx_tmp);
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,pingAllChannels,(void))
 
 void Client_obj::joinAllChannels(){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2064_joinAllChannels)
-HXDLIN(2064)		int _g = 0;
-HXDLIN(2064)		::Array< ::Dynamic> _g1 = this->getChats();
-HXDLIN(2064)		while((_g < _g1->length)){
-HXDLIN(2064)			 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(2064)			_g = (_g + 1);
-HXLINE(2065)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE(2066)			if (::hx::IsNotNull( channel )) {
-HXLINE(2067)				if ((channel->disco->identities->length < 1)) {
-            					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,channel) HXARGC(0)
-            					void _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2069_joinAllChannels)
-HXLINE(2069)						channel->join();
-            					}
-            					HX_END_LOCAL_FUNC0((void))
-
-HXLINE(2068)					channel->refreshDisco( ::Dynamic(new _hx_Closure_0(channel)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2549_joinAllChannels)
+HXDLIN(2549)		int _g = 0;
+HXDLIN(2549)		::Array< ::Dynamic> _g1 = this->getChannels();
+HXDLIN(2549)		while((_g < _g1->length)){
+HXDLIN(2549)			 ::borogove::Channel channel = _g1->__get(_g).StaticCast<  ::borogove::Channel >();
+HXDLIN(2549)			_g = (_g + 1);
+HXLINE(2550)			if ((channel->disco->identities->length < 1)) {
+            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,channel) HXARGC(0)
+            				void _hx_run(){
+            					HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2552_joinAllChannels)
+HXLINE(2552)					channel->join(true);
             				}
-            				else {
-            					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,channel) HXARGC(0)
-            					void _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2073_joinAllChannels)
-HXLINE(2073)						channel->refreshDisco(null());
-            					}
-            					HX_END_LOCAL_FUNC0((void))
+            				HX_END_LOCAL_FUNC0((void))
 
-HXLINE(2072)					channel->join();
-HXLINE(2073)					::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(channel)),30000);
+HXLINE(2551)				channel->refreshDisco( ::Dynamic(new _hx_Closure_0(channel)));
+            			}
+            			else {
+            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,channel) HXARGC(0)
+            				void _hx_run(){
+            					HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_2556_joinAllChannels)
+HXLINE(2556)					channel->refreshDisco(null());
             				}
+            				HX_END_LOCAL_FUNC0((void))
+
+HXLINE(2555)				channel->join(true);
+HXLINE(2556)				::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(channel)),30000);
             			}
             		}
             	}
@@ -5909,9 +7096,12 @@ void Client_obj::__Mark(HX_MARK_PARAMS)
 {
 	HX_MARK_BEGIN_CLASS(Client);
 	HX_MARK_MEMBER_NAME(sendAvailable,"sendAvailable");
+	HX_MARK_MEMBER_NAME(blockIncomingWithoutE2EE,"blockIncomingWithoutE2EE");
+	HX_MARK_MEMBER_NAME(outgoingE2EEPreference,"outgoingE2EEPreference");
 	HX_MARK_MEMBER_NAME(stream,"stream");
 	HX_MARK_MEMBER_NAME(jid,"jid");
 	HX_MARK_MEMBER_NAME(chats,"chats");
+	HX_MARK_MEMBER_NAME(chatsIndex,"chatsIndex");
 	HX_MARK_MEMBER_NAME(persistence,"persistence");
 	HX_MARK_MEMBER_NAME(capsRepo,"capsRepo");
 	HX_MARK_MEMBER_NAME(caps,"caps");
@@ -5920,11 +7110,12 @@ void Client_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(token,"token");
 	HX_MARK_MEMBER_NAME(fastCount,"fastCount");
 	HX_MARK_MEMBER_NAME(sortId,"sortId");
+	HX_MARK_MEMBER_NAME(rosterVer,"rosterVer");
 	HX_MARK_MEMBER_NAME(pendingCaps,"pendingCaps");
 	HX_MARK_MEMBER_NAME(brokenAvatars,"brokenAvatars");
-	HX_MARK_MEMBER_NAME(encryptionPolicy,"encryptionPolicy");
 	HX_MARK_MEMBER_NAME(inSync,"inSync");
 	HX_MARK_MEMBER_NAME(firstSync,"firstSync");
+	HX_MARK_MEMBER_NAME(channelPinger,"channelPinger");
 	HX_MARK_MEMBER_NAME(enabledPushData,"enabledPushData");
 	HX_MARK_MEMBER_NAME(lazyQueryTimer,"lazyQueryTimer");
 	HX_MARK_MEMBER_NAME(queriesToSend,"queriesToSend");
@@ -5935,9 +7126,12 @@ void Client_obj::__Mark(HX_MARK_PARAMS)
 void Client_obj::__Visit(HX_VISIT_PARAMS)
 {
 	HX_VISIT_MEMBER_NAME(sendAvailable,"sendAvailable");
+	HX_VISIT_MEMBER_NAME(blockIncomingWithoutE2EE,"blockIncomingWithoutE2EE");
+	HX_VISIT_MEMBER_NAME(outgoingE2EEPreference,"outgoingE2EEPreference");
 	HX_VISIT_MEMBER_NAME(stream,"stream");
 	HX_VISIT_MEMBER_NAME(jid,"jid");
 	HX_VISIT_MEMBER_NAME(chats,"chats");
+	HX_VISIT_MEMBER_NAME(chatsIndex,"chatsIndex");
 	HX_VISIT_MEMBER_NAME(persistence,"persistence");
 	HX_VISIT_MEMBER_NAME(capsRepo,"capsRepo");
 	HX_VISIT_MEMBER_NAME(caps,"caps");
@@ -5946,11 +7140,12 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(token,"token");
 	HX_VISIT_MEMBER_NAME(fastCount,"fastCount");
 	HX_VISIT_MEMBER_NAME(sortId,"sortId");
+	HX_VISIT_MEMBER_NAME(rosterVer,"rosterVer");
 	HX_VISIT_MEMBER_NAME(pendingCaps,"pendingCaps");
 	HX_VISIT_MEMBER_NAME(brokenAvatars,"brokenAvatars");
-	HX_VISIT_MEMBER_NAME(encryptionPolicy,"encryptionPolicy");
 	HX_VISIT_MEMBER_NAME(inSync,"inSync");
 	HX_VISIT_MEMBER_NAME(firstSync,"firstSync");
+	HX_VISIT_MEMBER_NAME(channelPinger,"channelPinger");
 	HX_VISIT_MEMBER_NAME(enabledPushData,"enabledPushData");
 	HX_VISIT_MEMBER_NAME(lazyQueryTimer,"lazyQueryTimer");
 	HX_VISIT_MEMBER_NAME(queriesToSend,"queriesToSend");
@@ -5980,18 +7175,22 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"doSync") ) { return ::hx::Val( doSync_dyn() ); }
 		break;
 	case 7:
+		if (HX_FIELD_EQ(inName,"banE2ee") ) { return ::hx::Val( banE2ee_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getChat") ) { return ::hx::Val( getChat_dyn() ); }
 		break;
 	case 8:
 		if (HX_FIELD_EQ(inName,"capsRepo") ) { return ::hx::Val( capsRepo ); }
+		if (HX_FIELD_EQ(inName,"setPhoto") ) { return ::hx::Val( setPhoto_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getChats") ) { return ::hx::Val( getChats_dyn() ); }
 		if (HX_FIELD_EQ(inName,"onMAMJMI") ) { return ::hx::Val( onMAMJMI_dyn() ); }
 		break;
 	case 9:
 		if (HX_FIELD_EQ(inName,"fastCount") ) { return ::hx::Val( fastCount ); }
+		if (HX_FIELD_EQ(inName,"rosterVer") ) { return ::hx::Val( rosterVer ); }
 		if (HX_FIELD_EQ(inName,"firstSync") ) { return ::hx::Val( firstSync ); }
 		if (HX_FIELD_EQ(inName,"accountId") ) { return ::hx::Val( accountId_dyn() ); }
 		if (HX_FIELD_EQ(inName,"setStatus") ) { return ::hx::Val( setStatus_dyn() ); }
+		if (HX_FIELD_EQ(inName,"fetchUris") ) { return ::hx::Val( fetchUris_dyn() ); }
 		if (HX_FIELD_EQ(inName,"startChat") ) { return ::hx::Val( startChat_dyn() ); }
 		if (HX_FIELD_EQ(inName,"sortChats") ) { return ::hx::Val( sortChats_dyn() ); }
 		if (HX_FIELD_EQ(inName,"sendQuery") ) { return ::hx::Val( sendQuery_dyn() ); }
@@ -5999,7 +7198,9 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"mucInvite") ) { return ::hx::Val( mucInvite_dyn() ); }
 		break;
 	case 10:
+		if (HX_FIELD_EQ(inName,"chatsIndex") ) { return ::hx::Val( chatsIndex ); }
 		if (HX_FIELD_EQ(inName,"setProfile") ) { return ::hx::Val( setProfile_dyn() ); }
+		if (HX_FIELD_EQ(inName,"preferE2ee") ) { return ::hx::Val( preferE2ee_dyn() ); }
 		if (HX_FIELD_EQ(inName,"enablePush") ) { return ::hx::Val( enablePush_dyn() ); }
 		if (HX_FIELD_EQ(inName,"nextSortId") ) { return ::hx::Val( nextSortId_dyn() ); }
 		if (HX_FIELD_EQ(inName,"sendStanza") ) { return ::hx::Val( sendStanza_dyn() ); }
@@ -6010,6 +7211,7 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"usePassword") ) { return ::hx::Val( usePassword_dyn() ); }
 		if (HX_FIELD_EQ(inName,"displayName") ) { return ::hx::Val( displayName_dyn() ); }
 		if (HX_FIELD_EQ(inName,"onConnected") ) { return ::hx::Val( onConnected_dyn() ); }
+		if (HX_FIELD_EQ(inName,"getChannels") ) { return ::hx::Val( getChannels_dyn() ); }
 		break;
 	case 12:
 		if (HX_FIELD_EQ(inName,"_displayName") ) { return ::hx::Val( _displayName ); }
@@ -6022,6 +7224,8 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"sendAvailable") ) { return ::hx::Val( sendAvailable ); }
 		if (HX_FIELD_EQ(inName,"fastMechanism") ) { return ::hx::Val( fastMechanism ); }
 		if (HX_FIELD_EQ(inName,"brokenAvatars") ) { return ::hx::Val( brokenAvatars ); }
+		if (HX_FIELD_EQ(inName,"channelPinger") ) { return ::hx::Val( channelPinger ); }
+		if (HX_FIELD_EQ(inName,"putAttachment") ) { return ::hx::Val( putAttachment_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getDirectChat") ) { return ::hx::Val( getDirectChat_dyn() ); }
 		if (HX_FIELD_EQ(inName,"storeMessages") ) { return ::hx::Val( storeMessages_dyn() ); }
 		if (HX_FIELD_EQ(inName,"queriesToSend") ) { return ::hx::Val( queriesToSend ); }
@@ -6034,14 +7238,15 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"lazyQueryTimer") ) { return ::hx::Val( lazyQueryTimer ); }
 		break;
 	case 15:
+		if (HX_FIELD_EQ(inName,"fetchAttachment") ) { return ::hx::Val( fetchAttachment_dyn() ); }
 		if (HX_FIELD_EQ(inName,"moderateMessage") ) { return ::hx::Val( moderateMessage_dyn() ); }
 		if (HX_FIELD_EQ(inName,"enabledPushData") ) { return ::hx::Val( enabledPushData ); }
 		if (HX_FIELD_EQ(inName,"setInForeground") ) { return ::hx::Val( setInForeground_dyn() ); }
+		if (HX_FIELD_EQ(inName,"checkForResends") ) { return ::hx::Val( checkForResends_dyn() ); }
 		if (HX_FIELD_EQ(inName,"pingAllChannels") ) { return ::hx::Val( pingAllChannels_dyn() ); }
 		if (HX_FIELD_EQ(inName,"joinAllChannels") ) { return ::hx::Val( joinAllChannels_dyn() ); }
 		break;
 	case 16:
-		if (HX_FIELD_EQ(inName,"encryptionPolicy") ) { return ::hx::Val( encryptionPolicy ); }
 		if (HX_FIELD_EQ(inName,"fetchMediaByHash") ) { return ::hx::Val( fetchMediaByHash_dyn() ); }
 		if (HX_FIELD_EQ(inName,"discoverServices") ) { return ::hx::Val( discoverServices_dyn() ); }
 		if (HX_FIELD_EQ(inName,"checkForReceipts") ) { return ::hx::Val( checkForReceipts_dyn() ); }
@@ -6074,6 +7279,7 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"notifyMessageHandlers") ) { return ::hx::Val( notifyMessageHandlers_dyn() ); }
 		break;
 	case 22:
+		if (HX_FIELD_EQ(inName,"outgoingE2EEPreference") ) { return ::hx::Val( outgoingE2EEPreference ); }
 		if (HX_FIELD_EQ(inName,"addChatMessageListener") ) { return ::hx::Val( addChatMessageListener_dyn() ); }
 		if (HX_FIELD_EQ(inName,"addSyncMessageListener") ) { return ::hx::Val( addSyncMessageListener_dyn() ); }
 		if (HX_FIELD_EQ(inName,"addCallRetractListener") ) { return ::hx::Val( addCallRetractListener_dyn() ); }
@@ -6085,6 +7291,8 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 24:
 		if (HX_FIELD_EQ(inName,"set_sendAvailable__fromC") ) { return ::hx::Val( set_sendAvailable__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"blockIncomingWithoutE2EE") ) { return ::hx::Val( blockIncomingWithoutE2EE ); }
+		if (HX_FIELD_EQ(inName,"tryNextAttachmentService") ) { return ::hx::Val( tryNextAttachmentService_dyn() ); }
 		if (HX_FIELD_EQ(inName,"addStatusOfflineListener") ) { return ::hx::Val( addStatusOfflineListener_dyn() ); }
 		break;
 	case 25:
@@ -6095,8 +7303,17 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"addConnectionFailedListener") ) { return ::hx::Val( addConnectionFailedListener_dyn() ); }
 		if (HX_FIELD_EQ(inName,"addCallUpdateStatusListener") ) { return ::hx::Val( addCallUpdateStatusListener_dyn() ); }
 		break;
+	case 28:
+		if (HX_FIELD_EQ(inName,"maybeAutodownloadAttachments") ) { return ::hx::Val( maybeAutodownloadAttachments_dyn() ); }
+		break;
 	case 30:
 		if (HX_FIELD_EQ(inName,"fetchMediaByHashOneCounterpart") ) { return ::hx::Val( fetchMediaByHashOneCounterpart_dyn() ); }
+		break;
+	case 31:
+		if (HX_FIELD_EQ(inName,"blockIncomingWithoutE2EE__fromC") ) { return ::hx::Val( blockIncomingWithoutE2EE__fromC_dyn() ); }
+		break;
+	case 35:
+		if (HX_FIELD_EQ(inName,"set_blockIncomingWithoutE2EE__fromC") ) { return ::hx::Val( set_blockIncomingWithoutE2EE__fromC_dyn() ); }
 	}
 	return super::__Field(inName,inCallProp);
 }
@@ -6124,8 +7341,12 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 9:
 		if (HX_FIELD_EQ(inName,"fastCount") ) { fastCount=inValue.Cast<  ::Dynamic >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"rosterVer") ) { rosterVer=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"firstSync") ) { firstSync=inValue.Cast< bool >(); return inValue; }
 		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"chatsIndex") ) { chatsIndex=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
+		break;
 	case 11:
 		if (HX_FIELD_EQ(inName,"persistence") ) { persistence=inValue.Cast< ::Dynamic >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"pendingCaps") ) { pendingCaps=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
@@ -6137,6 +7358,7 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"sendAvailable") ) { sendAvailable=inValue.Cast< bool >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"fastMechanism") ) { fastMechanism=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"brokenAvatars") ) { brokenAvatars=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"channelPinger") ) { channelPinger=inValue.Cast<  ::borogove::ChannelPinger >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"queriesToSend") ) { queriesToSend=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
 		break;
 	case 14:
@@ -6145,8 +7367,11 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 	case 15:
 		if (HX_FIELD_EQ(inName,"enabledPushData") ) { enabledPushData=inValue.Cast<  ::Dynamic >(); return inValue; }
 		break;
-	case 16:
-		if (HX_FIELD_EQ(inName,"encryptionPolicy") ) { encryptionPolicy=inValue.Cast<  ::borogove::EncryptionPolicy >(); return inValue; }
+	case 22:
+		if (HX_FIELD_EQ(inName,"outgoingE2EEPreference") ) { outgoingE2EEPreference=inValue.Cast< ::Array< int > >(); return inValue; }
+		break;
+	case 24:
+		if (HX_FIELD_EQ(inName,"blockIncomingWithoutE2EE") ) { blockIncomingWithoutE2EE=inValue.Cast< bool >(); return inValue; }
 	}
 	return super::__SetField(inName,inValue,inCallProp);
 }
@@ -6154,9 +7379,12 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 void Client_obj::__GetFields(Array< ::String> &outFields)
 {
 	outFields->push(HX_("sendAvailable",61,c3,fd,db));
+	outFields->push(HX_("blockIncomingWithoutE2EE",a2,57,a3,f6));
+	outFields->push(HX_("outgoingE2EEPreference",14,6b,50,f5));
 	outFields->push(HX_("stream",80,14,2d,11));
 	outFields->push(HX_("jid",c5,ca,50,00));
 	outFields->push(HX_("chats",9b,9e,b3,45));
+	outFields->push(HX_("chatsIndex",77,9a,02,df));
 	outFields->push(HX_("persistence",5f,17,c4,f6));
 	outFields->push(HX_("capsRepo",33,c5,b1,15));
 	outFields->push(HX_("caps",21,1c,ba,41));
@@ -6165,11 +7393,12 @@ void Client_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("token",f9,82,2b,14));
 	outFields->push(HX_("fastCount",93,fc,67,a5));
 	outFields->push(HX_("sortId",d9,7a,37,30));
+	outFields->push(HX_("rosterVer",98,f5,fe,3e));
 	outFields->push(HX_("pendingCaps",18,58,88,be));
 	outFields->push(HX_("brokenAvatars",65,ac,4f,eb));
-	outFields->push(HX_("encryptionPolicy",d5,f0,3c,e7));
 	outFields->push(HX_("inSync",e0,98,c5,88));
 	outFields->push(HX_("firstSync",ab,36,2e,03));
+	outFields->push(HX_("channelPinger",82,34,cf,9d));
 	outFields->push(HX_("enabledPushData",c5,32,81,93));
 	outFields->push(HX_("lazyQueryTimer",31,55,56,27));
 	outFields->push(HX_("queriesToSend",69,0e,0c,ca));
@@ -6179,9 +7408,12 @@ void Client_obj::__GetFields(Array< ::String> &outFields)
 #ifdef HXCPP_SCRIPTABLE
 static ::hx::StorageInfo Client_obj_sMemberStorageInfo[] = {
 	{::hx::fsBool,(int)offsetof(Client_obj,sendAvailable),HX_("sendAvailable",61,c3,fd,db)},
+	{::hx::fsBool,(int)offsetof(Client_obj,blockIncomingWithoutE2EE),HX_("blockIncomingWithoutE2EE",a2,57,a3,f6)},
+	{::hx::fsObject /* ::Array< int > */ ,(int)offsetof(Client_obj,outgoingE2EEPreference),HX_("outgoingE2EEPreference",14,6b,50,f5)},
 	{::hx::fsObject /*  ::borogove::GenericStream */ ,(int)offsetof(Client_obj,stream),HX_("stream",80,14,2d,11)},
 	{::hx::fsObject /*  ::borogove::JID */ ,(int)offsetof(Client_obj,jid),HX_("jid",c5,ca,50,00)},
 	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(Client_obj,chats),HX_("chats",9b,9e,b3,45)},
+	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(Client_obj,chatsIndex),HX_("chatsIndex",77,9a,02,df)},
 	{::hx::fsObject /* ::Dynamic */ ,(int)offsetof(Client_obj,persistence),HX_("persistence",5f,17,c4,f6)},
 	{::hx::fsObject /*  ::borogove::CapsRepo */ ,(int)offsetof(Client_obj,capsRepo),HX_("capsRepo",33,c5,b1,15)},
 	{::hx::fsObject /*  ::borogove::Caps */ ,(int)offsetof(Client_obj,caps),HX_("caps",21,1c,ba,41)},
@@ -6190,11 +7422,12 @@ static ::hx::StorageInfo Client_obj_sMemberStorageInfo[] = {
 	{::hx::fsString,(int)offsetof(Client_obj,token),HX_("token",f9,82,2b,14)},
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(Client_obj,fastCount),HX_("fastCount",93,fc,67,a5)},
 	{::hx::fsString,(int)offsetof(Client_obj,sortId),HX_("sortId",d9,7a,37,30)},
+	{::hx::fsString,(int)offsetof(Client_obj,rosterVer),HX_("rosterVer",98,f5,fe,3e)},
 	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(Client_obj,pendingCaps),HX_("pendingCaps",18,58,88,be)},
 	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(Client_obj,brokenAvatars),HX_("brokenAvatars",65,ac,4f,eb)},
-	{::hx::fsObject /*  ::borogove::EncryptionPolicy */ ,(int)offsetof(Client_obj,encryptionPolicy),HX_("encryptionPolicy",d5,f0,3c,e7)},
 	{::hx::fsBool,(int)offsetof(Client_obj,inSync),HX_("inSync",e0,98,c5,88)},
 	{::hx::fsBool,(int)offsetof(Client_obj,firstSync),HX_("firstSync",ab,36,2e,03)},
+	{::hx::fsObject /*  ::borogove::ChannelPinger */ ,(int)offsetof(Client_obj,channelPinger),HX_("channelPinger",82,34,cf,9d)},
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(Client_obj,enabledPushData),HX_("enabledPushData",c5,32,81,93)},
 	{::hx::fsObject /*  ::haxe::Timer */ ,(int)offsetof(Client_obj,lazyQueryTimer),HX_("lazyQueryTimer",31,55,56,27)},
 	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(Client_obj,queriesToSend),HX_("queriesToSend",69,0e,0c,ca)},
@@ -6206,9 +7439,14 @@ static ::hx::StaticInfo *Client_obj_sStaticStorageInfo = 0;
 static ::String Client_obj_sMemberFields[] = {
 	HX_("sendAvailable",61,c3,fd,db),
 	HX_("set_sendAvailable__fromC",35,ea,10,2d),
+	HX_("blockIncomingWithoutE2EE",a2,57,a3,f6),
+	HX_("blockIncomingWithoutE2EE__fromC",17,31,5e,3b),
+	HX_("set_blockIncomingWithoutE2EE__fromC",3a,a9,7f,ad),
+	HX_("outgoingE2EEPreference",14,6b,50,f5),
 	HX_("stream",80,14,2d,11),
 	HX_("jid",c5,ca,50,00),
 	HX_("chats",9b,9e,b3,45),
+	HX_("chatsIndex",77,9a,02,df),
 	HX_("persistence",5f,17,c4,f6),
 	HX_("capsRepo",33,c5,b1,15),
 	HX_("caps",21,1c,ba,41),
@@ -6217,11 +7455,12 @@ static ::String Client_obj_sMemberFields[] = {
 	HX_("token",f9,82,2b,14),
 	HX_("fastCount",93,fc,67,a5),
 	HX_("sortId",d9,7a,37,30),
+	HX_("rosterVer",98,f5,fe,3e),
 	HX_("pendingCaps",18,58,88,be),
 	HX_("brokenAvatars",65,ac,4f,eb),
-	HX_("encryptionPolicy",d5,f0,3c,e7),
 	HX_("inSync",e0,98,c5,88),
 	HX_("firstSync",ab,36,2e,03),
+	HX_("channelPinger",82,34,cf,9d),
 	HX_("processLiveMessage",0c,f2,77,58),
 	HX_("start",62,74,0b,84),
 	HX_("startOffline",a1,72,73,44),
@@ -6229,13 +7468,21 @@ static ::String Client_obj_sMemberFields[] = {
 	HX_("usePassword",82,2a,db,a2),
 	HX_("accountId",e8,81,54,29),
 	HX_("displayName",ad,11,f2,30),
+	HX_("setPhoto",b0,31,28,d0),
 	HX_("setProfile",a7,6d,28,46),
 	HX_("setStatus",74,5c,a3,65),
 	HX_("updateDisplayName",24,be,5b,95),
+	HX_("preferE2ee",fd,1f,05,66),
+	HX_("banE2ee",3c,47,ab,37),
 	HX_("onConnected",aa,c5,39,c5),
+	HX_("fetchAttachment",bd,6c,63,61),
+	HX_("fetchUris",e1,b8,57,24),
 	HX_("prepareAttachment",4a,6c,4b,52),
 	HX_("prepareAttachmentFor",df,5c,bf,82),
+	HX_("putAttachment",92,a7,a0,c9),
+	HX_("tryNextAttachmentService",e4,12,57,37),
 	HX_("getChats",25,ae,8a,a5),
+	HX_("getChannels",06,6d,e2,90),
 	HX_("findAvailableChats",2b,92,7a,e4),
 	HX_("availableChatSources",f7,d3,2b,65),
 	HX_("startChat",5a,d8,b2,fa),
@@ -6263,12 +7510,14 @@ static ::String Client_obj_sMemberFields[] = {
 	HX_("setInForeground",ca,fb,6b,7d),
 	HX_("setNotInForeground",39,f1,bb,be),
 	HX_("fetchMediaByHash",2f,ff,07,87),
+	HX_("maybeAutodownloadAttachments",b1,53,2d,4e),
 	HX_("fetchMediaByHashOneCounterpart",b8,d3,9a,5e),
 	HX_("chatActivity",c7,e0,61,f8),
 	HX_("sortChats",5d,72,27,4e),
 	HX_("nextSortId",2c,2c,69,e5),
 	HX_("storeMessageBuilder",d5,73,e0,e5),
 	HX_("storeMessages",cd,f1,bd,e9),
+	HX_("checkForResends",77,10,3f,34),
 	HX_("sendQuery",a0,48,5a,1e),
 	HX_("lazyQueryTimer",31,55,56,27),
 	HX_("queriesToSend",69,0e,0c,ca),
@@ -6322,9 +7571,9 @@ void Client_obj::__register()
 void Client_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_62_boot)
-HXDLIN(  62)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(39)
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_61_boot)
+HXDLIN(  61)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(41)
             				->setFixed(0,HX_("addChatsUpdatedListener__fromC",e4,7a,96,80), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(1,HX_("addSyncMessageListener__fromC",ba,f6,2b,88), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -6345,63 +7594,67 @@ HXDLIN(  62)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
             				->setFixed(9,HX_("addTlsCheckListener__fromC",17,a0,1f,a9), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(10,HX_("addCallTrackListener__fromC",39,05,06,c4), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(10,HX_("set_blockIncomingWithoutE2EE__fromC",3a,a9,7f,ad), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(11,HX_("addCallTrackListener__fromC",39,05,06,c4), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(11,HX_("addCallMediaListener",99,4a,d3,ce), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(12,HX_("addCallMediaListener",99,4a,d3,ce), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(12,HX_("addChatsUpdatedListener",35,56,de,d1), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(13,HX_("addChatsUpdatedListener",35,56,de,d1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(13,HX_("addConnectionFailedListener__fromC",29,3d,00,dc), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(14,HX_("addConnectionFailedListener__fromC",29,3d,00,dc), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(14,HX_("addChatMessageListener__fromC",f7,a0,32,de), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(15,HX_("addChatMessageListener__fromC",f7,a0,32,de), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(15,HX_("addCallRingListener",43,06,12,df), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(16,HX_("addCallRingListener",43,06,12,df), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(16,HX_("addPasswordNeededListener",45,5f,7e,e2), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(17,HX_("addPasswordNeededListener",45,5f,7e,e2), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(17,HX_("addSyncMessageListener",9f,bb,b2,e2), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(18,HX_("addSyncMessageListener",9f,bb,b2,e2), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(18,HX_("addChatMessageListener",c2,ab,0f,ed), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(19,HX_("addChatMessageListener",c2,ab,0f,ed), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(19,HX_("addStatusOfflineListener",84,03,7d,f1), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(20,HX_("addStatusOfflineListener",84,03,7d,f1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(20,HX_("addStatusOnlineListener",ba,7f,0a,f9), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(21,HX_("addStatusOnlineListener",ba,7f,0a,f9), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(21,HX_("addCallUpdateStatusListener__fromC",8b,13,03,02), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(22,HX_("addCallUpdateStatusListener__fromC",8b,13,03,02), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(22,HX_("addCallUpdateStatusListener",ae,ae,44,09), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(23,HX_("addCallUpdateStatusListener",ae,ae,44,09), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(23,HX_("addCallRetractListener",f6,56,33,1b), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(24,HX_("addCallRetractListener",f6,56,33,1b), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(24,HX_("addPasswordNeededListener__fromC",d4,b3,20,1d), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(25,HX_("addPasswordNeededListener__fromC",d4,b3,20,1d), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(26,HX_("set_sendAvailable__fromC",35,ea,10,2d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(25,HX_("set_sendAvailable__fromC",35,ea,10,2d), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(27,HX_("enablePush__fromC",1c,70,b7,2f), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(26,HX_("enablePush__fromC",1c,70,b7,2f), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(28,HX_("addCallMediaListener__fromC",00,9b,9c,36), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(27,HX_("addCallMediaListener__fromC",00,9b,9c,36), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(29,HX_("blockIncomingWithoutE2EE__fromC",17,31,5e,3b), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(28,HX_("addCallRingingListener",27,29,10,44), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(30,HX_("addCallRingingListener",27,29,10,44), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(29,HX_("startOffline",a1,72,73,44), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(31,HX_("startOffline",a1,72,73,44), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(30,HX_("addCallTrackListener",40,53,e3,46), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(32,HX_("addCallTrackListener",40,53,e3,46), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(31,HX_("addConnectionFailedListener",50,7d,89,49), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(33,HX_("addConnectionFailedListener",50,7d,89,49), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(32,HX_("prepareAttachment",4a,6c,4b,52), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(34,HX_("prepareAttachment",4a,6c,4b,52), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(33,HX_("addTlsCheckListener",a2,08,8a,52), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(35,HX_("addTlsCheckListener",a2,08,8a,52), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(34,HX_("addCallRetractListener__fromC",43,84,e9,5a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(36,HX_("addCallRetractListener__fromC",43,84,e9,5a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(35,HX_("startOffline__fromC",f8,03,65,60), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(37,HX_("startOffline__fromC",f8,03,65,60), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(36,HX_("availableChatSources",f7,d3,2b,65), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(38,HX_("availableChatSources",f7,d3,2b,65), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(37,HX_("addStatusOfflineListener__fromC",75,a5,68,6e), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(39,HX_("addStatusOfflineListener__fromC",75,a5,68,6e), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(38,HX_("getChats__fromC",f4,00,7e,7e), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(40,HX_("getChats__fromC",f4,00,7e,7e), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
             	}
 }
diff --git a/Sources/c_borogove/src/borogove/CommandSession.cpp b/Sources/c_borogove/src/borogove/CommandSession.cpp
index 0bb01e2..2d52912 100644
--- a/Sources/c_borogove/src/borogove/CommandSession.cpp
+++ b/Sources/c_borogove/src/borogove/CommandSession.cpp
@@ -55,6 +55,9 @@
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 #ifndef INCLUDED_thenshim_Thenable
 #include <thenshim/Thenable.h>
 #endif
@@ -222,13 +225,13 @@ HXLINE( 114)		if (extendedAction) {
 HXLINE( 115)			if (::hx::IsNull( toSubmit->__get(0).StaticCast<  ::borogove::Stanza >() )) {
 HXLINE( 115)				toSubmit[0] =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
-            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))));
+            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null());
             			}
 HXLINE( 117)			 ::borogove::Stanza fld = ::borogove::_DataForm::DataForm_Impl__obj::field(toSubmit->__get(0).StaticCast<  ::borogove::Stanza >(),HX_("http://jabber.org/protocol/commands#actions",76,e9,80,16));
 HXLINE( 118)			if (::hx::IsNull( fld )) {
 HXLINE( 119)				 ::borogove::Stanza _hx_tmp3 = toSubmit->__get(0).StaticCast<  ::borogove::Stanza >()->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("var",e7,de,59,00),HX_("http://jabber.org/protocol/commands#actions",76,e9,80,16))));
-HXDLIN( 119)				_hx_tmp3->textTag(HX_("value",71,7f,b8,31),action1->__get(0),null())->up();
+            					->setFixed(0,HX_("var",e7,de,59,00),HX_("http://jabber.org/protocol/commands#actions",76,e9,80,16))),null());
+HXDLIN( 119)				_hx_tmp3->textTag(HX_("value",71,7f,b8,31),action1->__get(0),null(),null())->up();
             			}
             			else {
 HXLINE( 121)				::borogove::_DataForm::Field_Impl__obj::set_value(fld,::Array_obj< ::String >::__new(1)->init(0,action1->__get(0)));
diff --git a/Sources/c_borogove/src/borogove/DirectChat.cpp b/Sources/c_borogove/src/borogove/DirectChat.cpp
index 4444064..cabc248 100644
--- a/Sources/c_borogove/src/borogove/DirectChat.cpp
+++ b/Sources/c_borogove/src/borogove/DirectChat.cpp
@@ -122,57 +122,57 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_e6282dde58caedf0_1056_new,"borogove.DirectChat","new",0xe0794ae0,"borogove.DirectChat.new","borogove/Chat.hx",1056,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1082_setPresence,"borogove.DirectChat","setPresence",0x291c167d,"borogove.DirectChat.setPresence","borogove/Chat.hx",1082,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1083_setPresence,"borogove.DirectChat","setPresence",0x291c167d,"borogove.DirectChat.setPresence","borogove/Chat.hx",1083,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1069_setPresence,"borogove.DirectChat","setPresence",0x291c167d,"borogove.DirectChat.setPresence","borogove/Chat.hx",1069,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1095_getCaps,"borogove.DirectChat","getCaps",0x00f18657,"borogove.DirectChat.getCaps","borogove/Chat.hx",1095,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1091_getCaps,"borogove.DirectChat","getCaps",0x00f18657,"borogove.DirectChat.getCaps","borogove/Chat.hx",1091,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1103_getResourceCaps,"borogove.DirectChat","getResourceCaps",0x4bbab445,"borogove.DirectChat.getResourceCaps","borogove/Chat.hx",1103,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1108_getDisplayName,"borogove.DirectChat","getDisplayName",0xca7ffa37,"borogove.DirectChat.getDisplayName","borogove/Chat.hx",1108,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1121_members,"borogove.DirectChat","members",0x0724e759,"borogove.DirectChat.members","borogove/Chat.hx",1121,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1125_getMemberDetails,"borogove.DirectChat","getMemberDetails",0xd04f2092,"borogove.DirectChat.getMemberDetails","borogove/Chat.hx",1125,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1141_setLastMessage,"borogove.DirectChat","setLastMessage",0x086abb0f,"borogove.DirectChat.setLastMessage","borogove/Chat.hx",1141,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1151_counterparts,"borogove.DirectChat","counterparts",0x8dab4624,"borogove.DirectChat.counterparts","borogove/Chat.hx",1151,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1159_getMessagesBefore,"borogove.DirectChat","getMessagesBefore",0x701bcc21,"borogove.DirectChat.getMessagesBefore","borogove/Chat.hx",1159,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1155_getMessagesBefore,"borogove.DirectChat","getMessagesBefore",0x701bcc21,"borogove.DirectChat.getMessagesBefore","borogove/Chat.hx",1155,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1178_getMessagesAfter,"borogove.DirectChat","getMessagesAfter",0x74b138ba,"borogove.DirectChat.getMessagesAfter","borogove/Chat.hx",1178,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1171_getMessagesAfter,"borogove.DirectChat","getMessagesAfter",0x74b138ba,"borogove.DirectChat.getMessagesAfter","borogove/Chat.hx",1171,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1190_getMessagesAround,"borogove.DirectChat","getMessagesAround",0x8bed6fef,"borogove.DirectChat.getMessagesAround","borogove/Chat.hx",1190,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1198_prepareIncomingMessage,"borogove.DirectChat","prepareIncomingMessage",0xf788013a,"borogove.DirectChat.prepareIncomingMessage","borogove/Chat.hx",1198,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1204_prepareOutgoingMessage,"borogove.DirectChat","prepareOutgoingMessage",0x5db4c674,"borogove.DirectChat.prepareOutgoingMessage","borogove/Chat.hx",1204,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1223_correctMessage,"borogove.DirectChat","correctMessage",0x06b2cbfd,"borogove.DirectChat.correctMessage","borogove/Chat.hx",1223,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1229_correctMessage,"borogove.DirectChat","correctMessage",0x06b2cbfd,"borogove.DirectChat.correctMessage","borogove/Chat.hx",1229,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1217_correctMessage,"borogove.DirectChat","correctMessage",0x06b2cbfd,"borogove.DirectChat.correctMessage","borogove/Chat.hx",1217,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1237_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1237,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1255_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1255,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1247_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1247,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1261_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1261,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1301_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1301,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1275_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1275,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1293_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1293,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1333_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1333,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1332_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1332,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1307_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1307,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1346_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1346,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1364_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1364,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1341_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1341,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1383_bookmark,"borogove.DirectChat","bookmark",0x64600236,"borogove.DirectChat.bookmark","borogove/Chat.hx",1383,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1368_bookmark,"borogove.DirectChat","bookmark",0x64600236,"borogove.DirectChat.bookmark","borogove/Chat.hx",1368,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1391_sendChatState,"borogove.DirectChat","sendChatState",0x3d4cbc31,"borogove.DirectChat.sendChatState","borogove/Chat.hx",1391,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1411_close,"borogove.DirectChat","close",0x98bc3238,"borogove.DirectChat.close","borogove/Chat.hx",1411,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1056_boot,"borogove.DirectChat","boot",0x81c139b2,"borogove.DirectChat.boot","borogove/Chat.hx",1056,0x1763ae98)
+HX_DEFINE_STACK_FRAME(_hx_pos_e6282dde58caedf0_1115_new,"borogove.DirectChat","new",0xe0794ae0,"borogove.DirectChat.new","borogove/Chat.hx",1115,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1141_setPresence,"borogove.DirectChat","setPresence",0x291c167d,"borogove.DirectChat.setPresence","borogove/Chat.hx",1141,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1142_setPresence,"borogove.DirectChat","setPresence",0x291c167d,"borogove.DirectChat.setPresence","borogove/Chat.hx",1142,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1128_setPresence,"borogove.DirectChat","setPresence",0x291c167d,"borogove.DirectChat.setPresence","borogove/Chat.hx",1128,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1154_getCaps,"borogove.DirectChat","getCaps",0x00f18657,"borogove.DirectChat.getCaps","borogove/Chat.hx",1154,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1150_getCaps,"borogove.DirectChat","getCaps",0x00f18657,"borogove.DirectChat.getCaps","borogove/Chat.hx",1150,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1162_getResourceCaps,"borogove.DirectChat","getResourceCaps",0x4bbab445,"borogove.DirectChat.getResourceCaps","borogove/Chat.hx",1162,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1167_getDisplayName,"borogove.DirectChat","getDisplayName",0xca7ffa37,"borogove.DirectChat.getDisplayName","borogove/Chat.hx",1167,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1180_members,"borogove.DirectChat","members",0x0724e759,"borogove.DirectChat.members","borogove/Chat.hx",1180,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1184_getMemberDetails,"borogove.DirectChat","getMemberDetails",0xd04f2092,"borogove.DirectChat.getMemberDetails","borogove/Chat.hx",1184,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1200_setLastMessage,"borogove.DirectChat","setLastMessage",0x086abb0f,"borogove.DirectChat.setLastMessage","borogove/Chat.hx",1200,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1210_counterparts,"borogove.DirectChat","counterparts",0x8dab4624,"borogove.DirectChat.counterparts","borogove/Chat.hx",1210,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1218_getMessagesBefore,"borogove.DirectChat","getMessagesBefore",0x701bcc21,"borogove.DirectChat.getMessagesBefore","borogove/Chat.hx",1218,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1214_getMessagesBefore,"borogove.DirectChat","getMessagesBefore",0x701bcc21,"borogove.DirectChat.getMessagesBefore","borogove/Chat.hx",1214,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1244_getMessagesAfter,"borogove.DirectChat","getMessagesAfter",0x74b138ba,"borogove.DirectChat.getMessagesAfter","borogove/Chat.hx",1244,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1234_getMessagesAfter,"borogove.DirectChat","getMessagesAfter",0x74b138ba,"borogove.DirectChat.getMessagesAfter","borogove/Chat.hx",1234,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1260_getMessagesAround,"borogove.DirectChat","getMessagesAround",0x8bed6fef,"borogove.DirectChat.getMessagesAround","borogove/Chat.hx",1260,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1268_prepareIncomingMessage,"borogove.DirectChat","prepareIncomingMessage",0xf788013a,"borogove.DirectChat.prepareIncomingMessage","borogove/Chat.hx",1268,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1283_prepareOutgoingMessage,"borogove.DirectChat","prepareOutgoingMessage",0x5db4c674,"borogove.DirectChat.prepareOutgoingMessage","borogove/Chat.hx",1283,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1303_correctMessage,"borogove.DirectChat","correctMessage",0x06b2cbfd,"borogove.DirectChat.correctMessage","borogove/Chat.hx",1303,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1309_correctMessage,"borogove.DirectChat","correctMessage",0x06b2cbfd,"borogove.DirectChat.correctMessage","borogove/Chat.hx",1309,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1297_correctMessage,"borogove.DirectChat","correctMessage",0x06b2cbfd,"borogove.DirectChat.correctMessage","borogove/Chat.hx",1297,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1316_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1316,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1334_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1334,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1326_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1326,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1340_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1340,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1380_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1380,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1354_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1354,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1372_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1372,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1424_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1424,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1423_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1423,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1386_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1386,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1437_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1437,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1455_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1455,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1432_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1432,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1481_bookmark,"borogove.DirectChat","bookmark",0x64600236,"borogove.DirectChat.bookmark","borogove/Chat.hx",1481,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1459_bookmark,"borogove.DirectChat","bookmark",0x64600236,"borogove.DirectChat.bookmark","borogove/Chat.hx",1459,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1489_sendChatState,"borogove.DirectChat","sendChatState",0x3d4cbc31,"borogove.DirectChat.sendChatState","borogove/Chat.hx",1489,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1509_close,"borogove.DirectChat","close",0x98bc3238,"borogove.DirectChat.close","borogove/Chat.hx",1509,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1115_boot,"borogove.DirectChat","boot",0x81c139b2,"borogove.DirectChat.boot","borogove/Chat.hx",1115,0x1763ae98)
 namespace borogove{
 
 void DirectChat_obj::__construct( ::borogove::Client client, ::borogove::GenericStream stream,::Dynamic persistence,::String chatId,::hx::Null< int >  __o_uiState,::hx::Null< bool >  __o_isBookmarked,::hx::Null< bool >  __o_isBlocked, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy,::Array< int > omemoContactDeviceIDs){
             		int uiState = __o_uiState.Default(1);
             		bool isBookmarked = __o_isBookmarked.Default(false);
             		bool isBlocked = __o_isBlocked.Default(false);
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1056_new)
-HXLINE(1058)		this->presence =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1063)		super::__construct(client,stream,persistence,chatId,uiState,isBookmarked,isBlocked,extensions,readUpToId,readUpToBy,omemoContactDeviceIDs);
-HXLINE(1064)		this->_fullCounterparts = this->counterparts();
-HXLINE(1065)		this->outbox->start();
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1115_new)
+HXLINE(1117)		this->presence =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1122)		super::__construct(client,stream,persistence,chatId,uiState,isBookmarked,isBlocked,extensions,readUpToId,readUpToBy,omemoContactDeviceIDs);
+HXLINE(1123)		this->_fullCounterparts = this->counterparts();
+HXLINE(1124)		this->outbox->start();
             	}
 
 Dynamic DirectChat_obj::__CreateEmpty() { return new DirectChat_obj; }
@@ -203,217 +203,217 @@ void DirectChat_obj::setPresence(::String resource, ::borogove::Stanza presence,
             		::Dynamic _hx_run(::Array< ::Dynamic> members){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,members) HXARGC(1)
             			::Array< ::Dynamic> _hx_run(bool _){
-            				HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1082_setPresence)
-HXLINE(1082)				return members;
+            				HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1141_setPresence)
+HXLINE(1141)				return members;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1082_setPresence)
-HXLINE(1082)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1082)			::String _hx_tmp = _gthis->client->accountId();
-HXDLIN(1082)			return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMembers(_gthis1,_hx_tmp,_gthis->chatId,members), ::Dynamic(new _hx_Closure_0(members)),null());
+            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1141_setPresence)
+HXLINE(1141)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1141)			::String _hx_tmp = _gthis->client->accountId();
+HXDLIN(1141)			return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMembers(_gthis1,_hx_tmp,_gthis->chatId,members), ::Dynamic(new _hx_Closure_0(members)),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::DirectChat,_gthis) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> members){
-            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1083_setPresence)
-HXLINE(1084)			_gthis->trigger(HX_("members/update",bf,63,66,64),members);
-HXLINE(1085)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
-HXLINE(1086)			return null();
+            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1142_setPresence)
+HXLINE(1143)			_gthis->trigger(HX_("members/update",bf,63,66,64),members);
+HXLINE(1144)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXLINE(1145)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1069_setPresence)
-HXDLIN(1069)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1071)		if ((this->_fullCounterparts->length > 1)) {
-HXLINE(1071)			return;
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1128_setPresence)
+HXDLIN(1128)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1130)		if ((this->_fullCounterparts->length > 1)) {
+HXLINE(1130)			return;
             		}
-HXLINE(1073)		if ((( (::String)(::Reflect_obj::field(presence->attr,HX_("type",ba,f2,08,4d))) ) == HX_("unavailable",50,e0,29,fd))) {
-HXLINE(1074)			this->presence->remove(resource);
+HXLINE(1132)		if (::hx::IsEq( presence->attr->get(HX_("type",ba,f2,08,4d)),HX_("unavailable",50,e0,29,fd) )) {
+HXLINE(1133)			this->presence->remove(resource);
             		}
             		else {
-HXLINE(1076)			this->presence->set(resource,presence);
+HXLINE(1135)			this->presence->set(resource,presence);
             		}
-HXLINE(1079)		if (noStore) {
-HXLINE(1079)			return;
+HXLINE(1138)		if (noStore) {
+HXLINE(1138)			return;
             		}
-HXLINE(1081)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->getMemberDetails(this->_fullCounterparts), ::Dynamic(new _hx_Closure_1(_gthis)),null()), ::Dynamic(new _hx_Closure_2(_gthis)),null());
+HXLINE(1140)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->getMemberDetails(this->_fullCounterparts), ::Dynamic(new _hx_Closure_1(_gthis)),null()), ::Dynamic(new _hx_Closure_2(_gthis)),null());
             	}
 
 
  ::Dynamic DirectChat_obj::getCaps(){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis, ::Dynamic,iter) HXARGC(0)
             		 ::Dynamic _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1095_getCaps)
-HXLINE(1096)			 ::Dynamic n = iter->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE(1097)			::String n1 = ( (::String)(n->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) );
-HXDLIN(1097)			return  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1154_getCaps)
+HXLINE(1155)			 ::Dynamic n = iter->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE(1156)			::String n1 = ( (::String)(n->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) );
+HXDLIN(1156)			return  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("key",9f,89,51,00),n1)
             				->setFixed(1,HX_("value",71,7f,b8,31),_gthis->client->capsRepo->get(( ( ::borogove::Stanza)(n->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) ))));
             		}
             		HX_END_LOCAL_FUNC0(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1091_getCaps)
-HXDLIN(1091)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1092)		 ::Dynamic iter =  ::haxe::iterators::MapKeyValueIterator_obj::__alloc( HX_CTX ,this->presence);
-HXLINE(1093)		return  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1150_getCaps)
+HXDLIN(1150)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1151)		 ::Dynamic iter =  ::haxe::iterators::MapKeyValueIterator_obj::__alloc( HX_CTX ,this->presence);
+HXLINE(1152)		return  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("hasNext",6d,a5,46,18), ::Dynamic(iter->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)))
             			->setFixed(1,HX_("next",f3,84,02,49), ::Dynamic(new _hx_Closure_0(_gthis,iter))));
             	}
 
 
  ::borogove::Caps DirectChat_obj::getResourceCaps(::String resource){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1103_getResourceCaps)
-HXLINE(1104)		 ::borogove::Stanza p = ( ( ::borogove::Stanza)(this->presence->get(resource)) );
-HXLINE(1105)		if (::hx::IsNull( p )) {
-HXLINE(1105)			return ::borogove::CapsRepo_obj::empty;
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1162_getResourceCaps)
+HXLINE(1163)		 ::borogove::Stanza p = ( ( ::borogove::Stanza)(this->presence->get(resource)) );
+HXLINE(1164)		if (::hx::IsNull( p )) {
+HXLINE(1164)			return ::borogove::CapsRepo_obj::empty;
             		}
             		else {
-HXLINE(1105)			return this->client->capsRepo->get(p);
+HXLINE(1164)			return this->client->capsRepo->get(p);
             		}
-HXDLIN(1105)		return null();
+HXDLIN(1164)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(DirectChat_obj,getResourceCaps,return )
 
 ::String DirectChat_obj::getDisplayName(){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1108_getDisplayName)
-HXLINE(1109)		::String name = this->super::getDisplayName();
-HXLINE(1110)		bool _hx_tmp;
-HXDLIN(1110)		if ((name == this->chatId)) {
-HXLINE(1110)			_hx_tmp = (this->_fullCounterparts->length > 1);
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1167_getDisplayName)
+HXLINE(1168)		::String name = this->super::getDisplayName();
+HXLINE(1169)		bool _hx_tmp;
+HXDLIN(1169)		if ((name == this->chatId)) {
+HXLINE(1169)			_hx_tmp = (this->_fullCounterparts->length > 1);
             		}
             		else {
-HXLINE(1110)			_hx_tmp = false;
-            		}
-HXDLIN(1110)		if (_hx_tmp) {
-HXLINE(1111)			::Array< ::String > _this = this->_fullCounterparts;
-HXDLIN(1111)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN(1111)			{
-HXLINE(1111)				int _g = 0;
-HXDLIN(1111)				int _g1 = _this->length;
-HXDLIN(1111)				while((_g < _g1)){
-HXLINE(1111)					_g = (_g + 1);
-HXDLIN(1111)					int i = (_g - 1);
-HXDLIN(1111)					{
-HXLINE(1111)						::String id = ( (::String)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN(1111)						::String inValue = this->client->getDirectChat(id,null())->getDisplayName();
-HXDLIN(1111)						result->__unsafe_set(i,inValue);
+HXLINE(1169)			_hx_tmp = false;
+            		}
+HXDLIN(1169)		if (_hx_tmp) {
+HXLINE(1170)			::Array< ::String > _this = this->_fullCounterparts;
+HXDLIN(1170)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN(1170)			{
+HXLINE(1170)				int _g = 0;
+HXDLIN(1170)				int _g1 = _this->length;
+HXDLIN(1170)				while((_g < _g1)){
+HXLINE(1170)					_g = (_g + 1);
+HXDLIN(1170)					int i = (_g - 1);
+HXDLIN(1170)					{
+HXLINE(1170)						::String id = ( (::String)(_hx_array_unsafe_get(_this,i)) );
+HXDLIN(1170)						::String inValue = this->client->getDirectChat(id,null())->getDisplayName();
+HXDLIN(1170)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXLINE(1112)			result->sort(::Reflect_obj::compare_dyn());
-HXLINE(1113)			return result->join(HX_(", ",74,26,00,00));
+HXLINE(1171)			result->sort(::Reflect_obj::compare_dyn());
+HXLINE(1172)			return result->join(HX_(", ",74,26,00,00));
             		}
-HXLINE(1116)		return name;
+HXLINE(1175)		return name;
             	}
 
 
 ::Dynamic DirectChat_obj::members(){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1121_members)
-HXDLIN(1121)		::Array< ::String > _hx_tmp = this->_fullCounterparts;
-HXDLIN(1121)		return this->getMemberDetails(_hx_tmp->concat(::Array_obj< ::String >::__new(1)->init(0,this->client->accountId())));
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1180_members)
+HXDLIN(1180)		::Array< ::String > _hx_tmp = this->_fullCounterparts;
+HXDLIN(1180)		return this->getMemberDetails(_hx_tmp->concat(::Array_obj< ::String >::__new(1)->init(0,this->client->accountId())));
             	}
 
 
 ::Dynamic DirectChat_obj::getMemberDetails(::Array< ::String > memberIds){
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1125_getMemberDetails)
-HXLINE(1126)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(memberIds->length);
-HXDLIN(1126)		{
-HXLINE(1126)			int _g = 0;
-HXDLIN(1126)			int _g1 = memberIds->length;
-HXDLIN(1126)			while((_g < _g1)){
-HXLINE(1126)				_g = (_g + 1);
-HXDLIN(1126)				int i = (_g - 1);
-HXDLIN(1126)				{
-HXLINE(1126)					::String id = ( (::String)(_hx_array_unsafe_get(memberIds,i)) );
-HXLINE(1127)					 ::borogove::DirectChat chat = this->client->getDirectChat(id,null());
-HXLINE(1130)					::String inValue = chat->getDisplayName();
-HXLINE(1131)					::String inValue1 = chat->getPhoto();
-HXLINE(1132)					::String chat1 = chat->chatId;
-HXDLIN(1132)					bool inValue2 = (chat1 == this->client->accountId());
-HXLINE(1134)					 ::borogove::JID inValue3 = ::borogove::JID_obj::parse(id);
-HXLINE(1135)					 ::haxe::ds::StringMap chat2 = chat->presence;
-HXLINE(1136)					::String inValue4 = chat->getDisplayName();
-HXLINE(1126)					 ::borogove::Member inValue5 =  ::borogove::Member_obj::__alloc( HX_CTX ,id,inValue,inValue1,inValue2,::Array_obj< ::Dynamic>::__new(0),inValue3,chat2, ::borogove::AvailableChat_obj::__alloc( HX_CTX ,id,inValue4,((((HX_("",00,00,00,00) + id) + HX_(" (via ",9a,ee,c1,21)) + this->displayName) + HX_(")",29,00,00,00)),::borogove::CapsRepo_obj::empty));
-HXDLIN(1126)					result->__unsafe_set(i,inValue5);
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1184_getMemberDetails)
+HXLINE(1185)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(memberIds->length);
+HXDLIN(1185)		{
+HXLINE(1185)			int _g = 0;
+HXDLIN(1185)			int _g1 = memberIds->length;
+HXDLIN(1185)			while((_g < _g1)){
+HXLINE(1185)				_g = (_g + 1);
+HXDLIN(1185)				int i = (_g - 1);
+HXDLIN(1185)				{
+HXLINE(1185)					::String id = ( (::String)(_hx_array_unsafe_get(memberIds,i)) );
+HXLINE(1186)					 ::borogove::DirectChat chat = this->client->getDirectChat(id,null());
+HXLINE(1189)					::String inValue = chat->getDisplayName();
+HXLINE(1190)					::String inValue1 = chat->getPhoto();
+HXLINE(1191)					::String chat1 = chat->chatId;
+HXDLIN(1191)					bool inValue2 = (chat1 == this->client->accountId());
+HXLINE(1193)					 ::borogove::JID inValue3 = ::borogove::JID_obj::parse(id);
+HXLINE(1194)					 ::haxe::ds::StringMap chat2 = chat->presence;
+HXLINE(1195)					::String inValue4 = chat->getDisplayName();
+HXLINE(1185)					 ::borogove::Member inValue5 =  ::borogove::Member_obj::__alloc( HX_CTX ,id,inValue,inValue1,inValue2,::Array_obj< ::Dynamic>::__new(0),inValue3,chat2, ::borogove::AvailableChat_obj::__alloc( HX_CTX ,id,inValue4,((((HX_("",00,00,00,00) + id) + HX_(" (via ",9a,ee,c1,21)) + this->displayName) + HX_(")",29,00,00,00)),::borogove::CapsRepo_obj::empty,null()));
+HXDLIN(1185)					result->__unsafe_set(i,inValue5);
             				}
             			}
             		}
-HXDLIN(1126)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(result);
+HXDLIN(1185)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(result);
             	}
 
 
 ::Dynamic DirectChat_obj::setLastMessage( ::borogove::ChatMessage message){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1141_setLastMessage)
-HXLINE(1143)		bool _hx_tmp;
-HXDLIN(1143)		if ((this->_fullCounterparts->length < 2)) {
-HXLINE(1143)			::Array< ::Dynamic> tmp;
-HXDLIN(1143)			if (::hx::IsNotNull( message )) {
-HXLINE(1143)				tmp = message->recipients;
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1200_setLastMessage)
+HXLINE(1202)		bool _hx_tmp;
+HXDLIN(1202)		if ((this->_fullCounterparts->length < 2)) {
+HXLINE(1202)			::Array< ::Dynamic> tmp;
+HXDLIN(1202)			if (::hx::IsNotNull( message )) {
+HXLINE(1202)				tmp = message->recipients;
             			}
             			else {
-HXLINE(1143)				tmp = null();
+HXLINE(1202)				tmp = null();
             			}
-HXDLIN(1143)			 ::Dynamic tmp1;
-HXDLIN(1143)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1143)				tmp1 = tmp->length;
+HXDLIN(1202)			 ::Dynamic tmp1;
+HXDLIN(1202)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1202)				tmp1 = tmp->length;
             			}
             			else {
-HXLINE(1143)				tmp1 = null();
+HXLINE(1202)				tmp1 = null();
             			}
-HXDLIN(1143)			int _hx_tmp1;
-HXDLIN(1143)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1143)				_hx_tmp1 = ( (int)(tmp1) );
+HXDLIN(1202)			int _hx_tmp1;
+HXDLIN(1202)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1202)				_hx_tmp1 = ( (int)(tmp1) );
             			}
             			else {
-HXLINE(1143)				_hx_tmp1 = 0;
+HXLINE(1202)				_hx_tmp1 = 0;
             			}
-HXDLIN(1143)			_hx_tmp = (_hx_tmp1 > 1);
+HXDLIN(1202)			_hx_tmp = (_hx_tmp1 > 1);
             		}
             		else {
-HXLINE(1143)			_hx_tmp = false;
-            		}
-HXDLIN(1143)		if (_hx_tmp) {
-HXLINE(1144)			::Array< ::Dynamic> _this = message->recipients;
-HXDLIN(1144)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN(1144)			{
-HXLINE(1144)				int _g = 0;
-HXDLIN(1144)				int _g1 = _this->length;
-HXDLIN(1144)				while((_g < _g1)){
-HXLINE(1144)					_g = (_g + 1);
-HXDLIN(1144)					int i = (_g - 1);
-HXDLIN(1144)					{
-HXLINE(1144)						::String inValue = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) )->asBare()->asString();
-HXDLIN(1144)						result->__unsafe_set(i,inValue);
+HXLINE(1202)			_hx_tmp = false;
+            		}
+HXDLIN(1202)		if (_hx_tmp) {
+HXLINE(1203)			::Array< ::Dynamic> _this = message->recipients;
+HXDLIN(1203)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN(1203)			{
+HXLINE(1203)				int _g = 0;
+HXDLIN(1203)				int _g1 = _this->length;
+HXDLIN(1203)				while((_g < _g1)){
+HXLINE(1203)					_g = (_g + 1);
+HXDLIN(1203)					int i = (_g - 1);
+HXDLIN(1203)					{
+HXLINE(1203)						::String inValue = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) )->asBare()->asString();
+HXDLIN(1203)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN(1144)			::Array< ::String > _g2 = ::Array_obj< ::String >::__new(0);
-HXDLIN(1144)			{
-HXLINE(1144)				int _g3 = 0;
-HXDLIN(1144)				while((_g3 < result->length)){
-HXLINE(1144)					::String v = result->__get(_g3);
-HXDLIN(1144)					_g3 = (_g3 + 1);
-HXDLIN(1144)					if ((v != this->client->accountId())) {
-HXLINE(1144)						_g2->push(v);
+HXDLIN(1203)			::Array< ::String > _g2 = ::Array_obj< ::String >::__new(0);
+HXDLIN(1203)			{
+HXLINE(1203)				int _g3 = 0;
+HXDLIN(1203)				while((_g3 < result->length)){
+HXLINE(1203)					::String v = result->__get(_g3);
+HXDLIN(1203)					_g3 = (_g3 + 1);
+HXDLIN(1203)					if ((v != this->client->accountId())) {
+HXLINE(1203)						_g2->push(v);
             					}
             				}
             			}
-HXDLIN(1144)			this->_fullCounterparts = _g2;
-HXLINE(1145)			if (!(this->_fullCounterparts->contains(message->senderId))) {
-HXLINE(1145)				this->_fullCounterparts->push(message->senderId);
+HXDLIN(1203)			this->_fullCounterparts = _g2;
+HXLINE(1204)			if (!(this->_fullCounterparts->contains(message->senderId))) {
+HXLINE(1204)				this->_fullCounterparts->push(message->senderId);
             			}
             		}
-HXLINE(1147)		return this->super::setLastMessage(message);
+HXLINE(1206)		return this->super::setLastMessage(message);
             	}
 
 
 ::Array< ::String > DirectChat_obj::counterparts(){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1151_counterparts)
-HXDLIN(1151)		return this->chatId.split(HX_("\n",0a,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1210_counterparts)
+HXDLIN(1210)		return this->chatId.split(HX_("\n",0a,00,00,00));
             	}
 
 
@@ -422,220 +422,291 @@ HX_DEFINE_DYNAMIC_FUNC0(DirectChat_obj,counterparts,return )
 ::Dynamic DirectChat_obj::getMessagesBefore( ::borogove::ChatMessage before){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis, ::borogove::ChatMessage,before) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1159_getMessagesBefore)
-HXLINE(1159)			bool _hx_tmp;
-HXDLIN(1159)			if ((messages->length <= 0)) {
-HXLINE(1159)				if (::hx::IsNotNull( before )) {
-HXLINE(1159)					_hx_tmp = ::hx::IsNull( before->serverId );
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1218_getMessagesBefore)
+HXLINE(1218)			bool _hx_tmp;
+HXDLIN(1218)			if ((messages->length <= 0)) {
+HXLINE(1218)				if (::hx::IsNotNull( before )) {
+HXLINE(1218)					_hx_tmp = ::hx::IsNull( before->serverId );
             				}
             				else {
-HXLINE(1159)					_hx_tmp = false;
+HXLINE(1218)					_hx_tmp = false;
             				}
             			}
             			else {
-HXLINE(1159)				_hx_tmp = true;
+HXLINE(1218)				_hx_tmp = true;
             			}
-HXDLIN(1159)			if (_hx_tmp) {
-HXLINE(1160)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+HXDLIN(1218)			if (_hx_tmp) {
+HXLINE(1219)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
             			}
             			else {
-HXLINE(1162)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1221)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("with",06,76,f8,4e),_gthis->chatId));
-HXLINE(1163)				::String tmp;
-HXDLIN(1163)				if (::hx::IsNotNull( before )) {
-HXLINE(1163)					tmp = before->serverId;
+HXLINE(1222)				::String tmp;
+HXDLIN(1222)				if (::hx::IsNotNull( before )) {
+HXLINE(1222)					tmp = before->serverId;
             				}
             				else {
-HXLINE(1163)					tmp = null();
+HXLINE(1222)					tmp = null();
             				}
-HXDLIN(1163)				::String _hx_tmp1;
-HXDLIN(1163)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1163)					_hx_tmp1 = tmp;
+HXDLIN(1222)				::String _hx_tmp1;
+HXDLIN(1222)				if (::hx::IsNotNull( tmp )) {
+HXLINE(1222)					_hx_tmp1 = tmp;
             				}
             				else {
-HXLINE(1163)					_hx_tmp1 = HX_("",00,00,00,00);
+HXLINE(1222)					_hx_tmp1 = HX_("",00,00,00,00);
             				}
-HXDLIN(1163)				filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN(1222)				filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("before",7f,54,32,9a),_hx_tmp1)),::hx::paccDynamic);
-HXLINE(1164)				::String sync;
-HXDLIN(1164)				if (::hx::IsNotNull( before )) {
-HXLINE(1164)					sync = before->sortId;
+HXLINE(1225)				::String _hx_tmp2;
+HXDLIN(1225)				if (::hx::IsNotNull( before )) {
+HXLINE(1225)					_hx_tmp2 = before->serverId;
+            				}
+            				else {
+HXLINE(1225)					_hx_tmp2 = null();
+            				}
+HXDLIN(1225)				::String _hx_tmp3;
+HXDLIN(1225)				if (::hx::IsNotNull( before )) {
+HXLINE(1225)					_hx_tmp3 = before->sortId;
             				}
             				else {
-HXLINE(1164)					sync = null();
+HXLINE(1225)					_hx_tmp3 = null();
             				}
-HXDLIN(1164)				 ::borogove::MessageSync sync1 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null(),sync,null());
-HXLINE(1165)				return _gthis->fetchFromSync(sync1);
+HXLINE(1223)				::haxe::Log_obj::trace(HX_("SYNC: initialize MessageSync",53,9b,9a,5d), ::Dynamic(::hx::Anon_obj::Create(5)
+            					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.DirectChat",ee,9a,0a,36))
+            					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(4)
+            						->setFixed(0,HX_("beforeServerId",1d,29,cd,b4),_hx_tmp2)
+            						->setFixed(1,HX_("chatId",d3,04,77,b7),_gthis->chatId)
+            						->setFixed(2,HX_("reason",c4,0f,9d,fc),HX_("getMessagesBefore local result empty",fe,91,3a,0a))
+            						->setFixed(3,HX_("beforeSortId",b8,2c,9b,5c),_hx_tmp3))))
+            					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("getMessagesBefore",a1,f1,44,11))
+            					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1223)));
+HXLINE(1227)				::String sync;
+HXDLIN(1227)				if (::hx::IsNotNull( before )) {
+HXLINE(1227)					sync = before->sortId;
+            				}
+            				else {
+HXLINE(1227)					sync = null();
+            				}
+HXDLIN(1227)				 ::borogove::MessageSync sync1 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null(),sync,null());
+HXLINE(1228)				return _gthis->fetchFromSync(sync1);
             			}
-HXLINE(1159)			return null();
+HXLINE(1218)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1155_getMessagesBefore)
-HXDLIN(1155)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1156)		bool _hx_tmp;
-HXDLIN(1156)		if (::hx::IsNotNull( before )) {
-HXLINE(1156)			::String _hx_tmp1 = before->chatId();
-HXDLIN(1156)			_hx_tmp = (_hx_tmp1 != this->chatId);
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1214_getMessagesBefore)
+HXDLIN(1214)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1215)		bool _hx_tmp;
+HXDLIN(1215)		if (::hx::IsNotNull( before )) {
+HXLINE(1215)			::String _hx_tmp1 = before->chatId();
+HXDLIN(1215)			_hx_tmp = (_hx_tmp1 != this->chatId);
             		}
             		else {
-HXLINE(1156)			_hx_tmp = false;
+HXLINE(1215)			_hx_tmp = false;
             		}
-HXDLIN(1156)		if (_hx_tmp) {
-HXLINE(1156)			HX_STACK_DO_THROW(HX_("Cannot look before from a different chat",f7,e6,d9,fa));
+HXDLIN(1215)		if (_hx_tmp) {
+HXLINE(1215)			HX_STACK_DO_THROW(HX_("Cannot look before from a different chat",f7,e6,d9,fa));
             		}
-HXLINE(1158)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1158)		::String _hx_tmp3 = this->client->accountId();
-HXDLIN(1158)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp2,_hx_tmp3,this->chatId,before), ::Dynamic(new _hx_Closure_0(_gthis,before)),null());
+HXLINE(1217)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1217)		::String _hx_tmp3 = this->client->accountId();
+HXDLIN(1217)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp2,_hx_tmp3,this->chatId,before), ::Dynamic(new _hx_Closure_0(_gthis,before)),null());
             	}
 
 
 ::Dynamic DirectChat_obj::getMessagesAfter( ::borogove::ChatMessage after){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::ChatMessage,after, ::borogove::DirectChat,_gthis) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1178_getMessagesAfter)
-HXLINE(1178)			bool _hx_tmp;
-HXDLIN(1178)			if ((messages->length <= 0)) {
-HXLINE(1178)				if (::hx::IsNotNull( after )) {
-HXLINE(1178)					_hx_tmp = ::hx::IsNull( after->serverId );
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1244_getMessagesAfter)
+HXLINE(1244)			bool _hx_tmp;
+HXDLIN(1244)			if ((messages->length <= 0)) {
+HXLINE(1244)				if (::hx::IsNotNull( after )) {
+HXLINE(1244)					_hx_tmp = ::hx::IsNull( after->serverId );
             				}
             				else {
-HXLINE(1178)					_hx_tmp = false;
+HXLINE(1244)					_hx_tmp = false;
             				}
             			}
             			else {
-HXLINE(1178)				_hx_tmp = true;
+HXLINE(1244)				_hx_tmp = true;
             			}
-HXDLIN(1178)			if (_hx_tmp) {
-HXLINE(1179)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+HXDLIN(1244)			if (_hx_tmp) {
+HXLINE(1245)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
             			}
             			else {
-HXLINE(1181)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1247)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("with",06,76,f8,4e),_gthis->chatId));
-HXLINE(1182)				::String _hx_tmp1;
-HXDLIN(1182)				if (::hx::IsNotNull( after )) {
-HXLINE(1182)					_hx_tmp1 = after->serverId;
+HXLINE(1248)				::String _hx_tmp1;
+HXDLIN(1248)				if (::hx::IsNotNull( after )) {
+HXLINE(1248)					_hx_tmp1 = after->serverId;
             				}
             				else {
-HXLINE(1182)					_hx_tmp1 = null();
+HXLINE(1248)					_hx_tmp1 = null();
             				}
-HXDLIN(1182)				if (::hx::IsNotNull( _hx_tmp1 )) {
-HXLINE(1182)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN(1248)				if (::hx::IsNotNull( _hx_tmp1 )) {
+HXLINE(1248)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("after",1c,66,a2,1d),after->serverId)),::hx::paccDynamic);
             				}
-HXLINE(1183)				::String sync;
-HXDLIN(1183)				if (::hx::IsNotNull( after )) {
-HXLINE(1183)					sync = after->sortId;
+HXLINE(1251)				::String _hx_tmp2;
+HXDLIN(1251)				if (::hx::IsNotNull( after )) {
+HXLINE(1251)					_hx_tmp2 = after->serverId;
+            				}
+            				else {
+HXLINE(1251)					_hx_tmp2 = null();
+            				}
+HXDLIN(1251)				::String _hx_tmp3;
+HXDLIN(1251)				if (::hx::IsNotNull( after )) {
+HXLINE(1251)					_hx_tmp3 = after->sortId;
             				}
             				else {
-HXLINE(1183)					sync = null();
+HXLINE(1251)					_hx_tmp3 = null();
             				}
-HXDLIN(1183)				 ::borogove::MessageSync sync1 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,sync,null(),null());
-HXLINE(1184)				return _gthis->fetchFromSync(sync1);
+HXLINE(1249)				::haxe::Log_obj::trace(HX_("SYNC: initialize MessageSync",53,9b,9a,5d), ::Dynamic(::hx::Anon_obj::Create(5)
+            					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.DirectChat",ee,9a,0a,36))
+            					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(4)
+            						->setFixed(0,HX_("afterSortId",15,d2,97,81),_hx_tmp3)
+            						->setFixed(1,HX_("afterServerId",ba,9f,43,8e),_hx_tmp2)
+            						->setFixed(2,HX_("chatId",d3,04,77,b7),_gthis->chatId)
+            						->setFixed(3,HX_("reason",c4,0f,9d,fc),HX_("getMessagesAfter local result empty",05,44,ab,6d)))))
+            					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("getMessagesAfter",3a,43,91,57))
+            					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1249)));
+HXLINE(1253)				::String sync;
+HXDLIN(1253)				if (::hx::IsNotNull( after )) {
+HXLINE(1253)					sync = after->sortId;
+            				}
+            				else {
+HXLINE(1253)					sync = null();
+            				}
+HXDLIN(1253)				 ::borogove::MessageSync sync1 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,sync,null(),null());
+HXLINE(1254)				return _gthis->fetchFromSync(sync1);
             			}
-HXLINE(1178)			return null();
+HXLINE(1244)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1171_getMessagesAfter)
-HXDLIN(1171)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1172)		bool _hx_tmp;
-HXDLIN(1172)		if (::hx::IsNotNull( after )) {
-HXLINE(1172)			::String _hx_tmp1 = after->chatId();
-HXDLIN(1172)			_hx_tmp = (_hx_tmp1 != this->chatId);
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1234_getMessagesAfter)
+HXDLIN(1234)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1235)		bool _hx_tmp;
+HXDLIN(1235)		if (::hx::IsNotNull( after )) {
+HXLINE(1235)			::String _hx_tmp1 = after->chatId();
+HXDLIN(1235)			_hx_tmp = (_hx_tmp1 != this->chatId);
             		}
             		else {
-HXLINE(1172)			_hx_tmp = false;
+HXLINE(1235)			_hx_tmp = false;
             		}
-HXDLIN(1172)		if (_hx_tmp) {
-HXLINE(1172)			HX_STACK_DO_THROW(HX_("Cannot look after from a different chat",8c,1a,5f,f4));
+HXDLIN(1235)		if (_hx_tmp) {
+HXLINE(1235)			HX_STACK_DO_THROW(HX_("Cannot look after from a different chat",8c,1a,5f,f4));
             		}
-HXLINE(1173)		bool _hx_tmp2;
-HXDLIN(1173)		bool _hx_tmp3;
-HXDLIN(1173)		bool _hx_tmp4;
-HXDLIN(1173)		if (::hx::IsNotNull( after )) {
-HXLINE(1173)			_hx_tmp4 = ::hx::IsNotNull( this->lastMessage );
+HXLINE(1236)		bool _hx_tmp2;
+HXDLIN(1236)		bool _hx_tmp3;
+HXDLIN(1236)		bool _hx_tmp4;
+HXDLIN(1236)		if (::hx::IsNotNull( after )) {
+HXLINE(1236)			_hx_tmp4 = ::hx::IsNotNull( this->lastMessage );
             		}
             		else {
-HXLINE(1173)			_hx_tmp4 = false;
+HXLINE(1236)			_hx_tmp4 = false;
             		}
-HXDLIN(1173)		if (_hx_tmp4) {
-HXLINE(1173)			_hx_tmp3 = this->lastMessage->canReplace(after);
+HXDLIN(1236)		if (_hx_tmp4) {
+HXLINE(1236)			_hx_tmp3 = this->lastMessage->canReplace(after);
             		}
             		else {
-HXLINE(1173)			_hx_tmp3 = false;
+HXLINE(1236)			_hx_tmp3 = false;
             		}
-HXDLIN(1173)		if (_hx_tmp3) {
-HXLINE(1173)			_hx_tmp2 = !(this->syncing());
+HXDLIN(1236)		if (_hx_tmp3) {
+HXLINE(1236)			_hx_tmp2 = !(this->syncing());
             		}
             		else {
-HXLINE(1173)			_hx_tmp2 = false;
+HXLINE(1236)			_hx_tmp2 = false;
             		}
-HXDLIN(1173)		if (_hx_tmp2) {
-HXLINE(1174)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+HXDLIN(1236)		if (_hx_tmp2) {
+HXLINE(1237)			::haxe::Log_obj::trace(HX_("SYNC: getMessagesAfter returning empty",fa,ce,a8,a8), ::Dynamic(::hx::Anon_obj::Create(5)
+            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.DirectChat",ee,9a,0a,36))
+            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(6)
+            					->setFixed(0,HX_("afterSortId",15,d2,97,81),after->sortId)
+            					->setFixed(1,HX_("afterServerId",ba,9f,43,8e),after->serverId)
+            					->setFixed(2,HX_("chatId",d3,04,77,b7),this->chatId)
+            					->setFixed(3,HX_("lastMessageSortId",ca,3b,01,ca),this->lastMessage->sortId)
+            					->setFixed(4,HX_("lastMessageServerId",af,a0,22,d3),this->lastMessage->serverId)
+            					->setFixed(5,HX_("reason",c4,0f,9d,fc),HX_("direct chat is synced and cursor matches last message",aa,ca,b4,c5)))))
+            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("getMessagesAfter",3a,43,91,57))
+            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            				->setFixed(4,HX_("lineNumber",dd,81,22,76),1237)));
+HXLINE(1240)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
             		}
-HXLINE(1177)		::Dynamic _hx_tmp5 = this->persistence;
-HXDLIN(1177)		::String _hx_tmp6 = this->client->accountId();
-HXDLIN(1177)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesAfter(_hx_tmp5,_hx_tmp6,this->chatId,after), ::Dynamic(new _hx_Closure_0(after,_gthis)),null());
+HXLINE(1243)		::Dynamic _hx_tmp5 = this->persistence;
+HXDLIN(1243)		::String _hx_tmp6 = this->client->accountId();
+HXDLIN(1243)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesAfter(_hx_tmp5,_hx_tmp6,this->chatId,after), ::Dynamic(new _hx_Closure_0(after,_gthis)),null());
             	}
 
 
 ::Dynamic DirectChat_obj::getMessagesAround( ::borogove::ChatMessage around){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1190_getMessagesAround)
-HXLINE(1191)		::String _hx_tmp = around->chatId();
-HXDLIN(1191)		if ((_hx_tmp != this->chatId)) {
-HXLINE(1191)			HX_STACK_DO_THROW(HX_("Cannot look around from a different chat",45,55,1b,ba));
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1260_getMessagesAround)
+HXLINE(1261)		::String _hx_tmp = around->chatId();
+HXDLIN(1261)		if ((_hx_tmp != this->chatId)) {
+HXLINE(1261)			HX_STACK_DO_THROW(HX_("Cannot look around from a different chat",45,55,1b,ba));
             		}
-HXLINE(1194)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1194)		return ::borogove::Persistence_obj::getMessagesAround(_hx_tmp1,this->client->accountId(),around);
+HXLINE(1264)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1264)		return ::borogove::Persistence_obj::getMessagesAround(_hx_tmp1,this->client->accountId(),around);
             	}
 
 
  ::borogove::ChatMessageBuilder DirectChat_obj::prepareIncomingMessage( ::borogove::ChatMessageBuilder message, ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1198_prepareIncomingMessage)
-HXLINE(1199)		message->syncPoint = !(this->syncing());
-HXLINE(1200)		if (::hx::IsNull( message->sortId )) {
-HXLINE(1200)			message->sortId = this->client->nextSortId();
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1268_prepareIncomingMessage)
+HXLINE(1269)		message->syncPoint = !(this->syncing());
+HXLINE(1270)		if (::hx::IsNull( message->sortId )) {
+HXLINE(1271)			::String lower = this->client->sortId;
+HXLINE(1272)			message->sortId = this->client->nextSortId();
+HXLINE(1276)			::String _hx_tmp = ::borogove::Date_obj::format(::Date_obj::now());
+HXLINE(1273)			message->debug =  ::Dynamic(::hx::Anon_obj::Create(4)
+            				->setFixed(0,HX_("now",16,d9,53,00),_hx_tmp)
+            				->setFixed(1,HX_("sortId",d9,7a,37,30), ::Dynamic(::hx::Anon_obj::Create(3)
+            					->setFixed(0,HX_("upper",62,19,3f,a8),null())
+            					->setFixed(1,HX_("method",e1,f6,5a,09),HX_("between",c8,91,b3,66))
+            					->setFixed(2,HX_("lower",01,fa,ff,78),lower)))
+            				->setFixed(2,HX_("source",db,b0,31,32),HX_("live",ec,1e,b3,47))
+            				->setFixed(3,HX_("path",a5,e5,51,4a),HX_("DirectChat#prepareIncomingMessage",7c,73,1e,a9)));
             		}
-HXLINE(1201)		return message;
+HXLINE(1280)		return message;
             	}
 
 
  ::borogove::ChatMessageBuilder DirectChat_obj::prepareOutgoingMessage( ::borogove::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1204_prepareOutgoingMessage)
-HXLINE(1205)		::String tmp = message->timestamp;
-HXDLIN(1205)		::String _hx_tmp;
-HXDLIN(1205)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1205)			_hx_tmp = tmp;
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1283_prepareOutgoingMessage)
+HXLINE(1284)		::String tmp = message->timeSent;
+HXDLIN(1284)		::String _hx_tmp;
+HXDLIN(1284)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1284)			_hx_tmp = tmp;
             		}
             		else {
-HXLINE(1205)			_hx_tmp = ::borogove::Date_obj::format(::Date_obj::now());
-            		}
-HXDLIN(1205)		message->timestamp = _hx_tmp;
-HXLINE(1206)		message->direction = 1;
-HXLINE(1207)		message->from = this->client->jid;
-HXLINE(1208)		message->sender = message->from->asBare();
-HXLINE(1209)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->sender);
-HXLINE(1210)		::Array< ::String > _this = this->counterparts();
-HXDLIN(1210)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN(1210)		{
-HXLINE(1210)			int _g = 0;
-HXDLIN(1210)			int _g1 = _this->length;
-HXDLIN(1210)			while((_g < _g1)){
-HXLINE(1210)				_g = (_g + 1);
-HXDLIN(1210)				int i = (_g - 1);
-HXDLIN(1210)				{
-HXLINE(1210)					 ::borogove::JID inValue = ::borogove::JID_obj::parse(( (::String)(_hx_array_unsafe_get(_this,i)) ));
-HXDLIN(1210)					result->__unsafe_set(i,inValue);
+HXLINE(1284)			_hx_tmp = ::borogove::Date_obj::format(::Date_obj::now());
+            		}
+HXDLIN(1284)		message->timeSent = _hx_tmp;
+HXLINE(1285)		message->timeReceived = ::borogove::Date_obj::format(::Date_obj::now());
+HXLINE(1286)		message->direction = 1;
+HXLINE(1287)		message->from = this->client->jid;
+HXLINE(1288)		message->sender = message->from->asBare();
+HXLINE(1289)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->sender);
+HXLINE(1290)		::Array< ::String > _this = this->counterparts();
+HXDLIN(1290)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN(1290)		{
+HXLINE(1290)			int _g = 0;
+HXDLIN(1290)			int _g1 = _this->length;
+HXDLIN(1290)			while((_g < _g1)){
+HXLINE(1290)				_g = (_g + 1);
+HXDLIN(1290)				int i = (_g - 1);
+HXDLIN(1290)				{
+HXLINE(1290)					 ::borogove::JID inValue = ::borogove::JID_obj::parse(( (::String)(_hx_array_unsafe_get(_this,i)) ));
+HXDLIN(1290)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN(1210)		message->recipients = result;
-HXLINE(1211)		message->to = message->recipients->__get(0).StaticCast<  ::borogove::JID >();
-HXLINE(1212)		if (::hx::IsNull( message->localId )) {
-HXLINE(1212)			message->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXDLIN(1290)		message->recipients = result;
+HXLINE(1291)		message->to = message->recipients->__get(0).StaticCast<  ::borogove::JID >();
+HXLINE(1292)		if (::hx::IsNull( message->localId )) {
+HXLINE(1292)			message->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
             		}
-HXLINE(1213)		return message;
+HXLINE(1293)		return message;
             	}
 
 
@@ -644,145 +715,146 @@ HX_DEFINE_DYNAMIC_FUNC1(DirectChat_obj,prepareOutgoingMessage,return )
 void DirectChat_obj::correctMessage( ::borogove::ChatMessage correct, ::borogove::ChatMessageBuilder message){
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_1, ::borogove::DirectChat,_gthis,::Array< ::Dynamic>,message1,::String,toSendId, ::borogove::OutboxItem,outboxItem, ::borogove::ChatMessage,correct) HXARGC(1)
             		void _hx_run( ::borogove::ChatMessage corrected){
-            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1223_correctMessage)
-HXLINE(1224)			::Array< ::Dynamic> _hx_tmp;
-HXDLIN(1224)			 ::borogove::ChatMessage tmp = corrected->versions->__get((corrected->versions->length - 1)).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1224)			::String _hx_tmp1;
-HXDLIN(1224)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1224)				_hx_tmp1 = tmp->localId;
+            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1303_correctMessage)
+HXLINE(1304)			::Array< ::Dynamic> _hx_tmp;
+HXDLIN(1304)			 ::borogove::ChatMessage tmp = corrected->versions->__get((corrected->versions->length - 1)).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1304)			::String _hx_tmp1;
+HXDLIN(1304)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1304)				_hx_tmp1 = tmp->localId;
             			}
             			else {
-HXLINE(1224)				_hx_tmp1 = null();
+HXLINE(1304)				_hx_tmp1 = null();
             			}
-HXDLIN(1224)			if ((_hx_tmp1 == correct->localId)) {
-HXLINE(1224)				_hx_tmp = corrected->versions;
+HXDLIN(1304)			if ((_hx_tmp1 == correct->localId)) {
+HXLINE(1304)				_hx_tmp = corrected->versions;
             			}
             			else {
-HXLINE(1224)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build());
+HXLINE(1304)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build());
             			}
-HXDLIN(1224)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = _hx_tmp;
-HXLINE(1225)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = toSendId;
-HXLINE(1226)			 ::borogove::DirectChat _gthis1 = _gthis;
-HXDLIN(1226)			 ::borogove::Stanza _hx_tmp2 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
-HXDLIN(1226)			_gthis1->sendMessageStanza(_hx_tmp2,outboxItem);
-HXLINE(1227)			bool _hx_tmp3;
-HXDLIN(1227)			if (::hx::IsNotNull( _gthis->lastMessage )) {
-HXLINE(1227)				_hx_tmp3 = corrected->canReplace(_gthis->lastMessage);
+HXDLIN(1304)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = _hx_tmp;
+HXLINE(1305)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = toSendId;
+HXLINE(1306)			 ::borogove::DirectChat _gthis1 = _gthis;
+HXDLIN(1306)			 ::borogove::Stanza _hx_tmp2 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
+HXDLIN(1306)			_gthis1->sendMessageStanza(_hx_tmp2,outboxItem,null());
+HXLINE(1307)			bool _hx_tmp3;
+HXDLIN(1307)			if (::hx::IsNotNull( _gthis->lastMessage )) {
+HXLINE(1307)				_hx_tmp3 = corrected->canReplace(_gthis->lastMessage);
             			}
             			else {
-HXLINE(1227)				_hx_tmp3 = true;
+HXLINE(1307)				_hx_tmp3 = true;
             			}
-HXDLIN(1227)			if (_hx_tmp3) {
+HXDLIN(1307)			if (_hx_tmp3) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis) HXARGC(1)
             				 ::borogove::EventResult _hx_run( ::Dynamic _){
-            					HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1229_correctMessage)
-HXLINE(1229)					return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+            					HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1309_correctMessage)
+HXLINE(1309)					return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1228)				::thenshim::_Promise::Promise_Impl__obj::then(_gthis->setLastMessage(corrected), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+HXLINE(1308)				::thenshim::_Promise::Promise_Impl__obj::then(_gthis->setLastMessage(corrected), ::Dynamic(new _hx_Closure_0(_gthis)),null());
             			}
-HXLINE(1232)			_gthis->client->notifyMessageHandlers(corrected,1);
+HXLINE(1312)			_gthis->client->notifyMessageHandlers(corrected,1);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1217_correctMessage)
-HXDLIN(1217)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
-HXDLIN(1217)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1218)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
-HXLINE(1219)		::String toSendId = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId;
-HXLINE(1220)		 ::borogove::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build();
-HXDLIN(1220)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
-HXLINE(1221)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = correct->localId;
-HXLINE(1222)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(1223)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessageBuilder(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()), ::Dynamic(new _hx_Closure_1(_gthis,message1,toSendId,outboxItem,correct)),null());
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1297_correctMessage)
+HXDLIN(1297)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
+HXDLIN(1297)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1298)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
+HXLINE(1299)		::String toSendId = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId;
+HXLINE(1300)		 ::borogove::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build();
+HXDLIN(1300)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
+HXLINE(1301)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = correct->localId;
+HXLINE(1302)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(1303)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessageBuilder(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()), ::Dynamic(new _hx_Closure_1(_gthis,message1,toSendId,outboxItem,correct)),null());
             	}
 
 
-void DirectChat_obj::sendMessage( ::borogove::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1237_sendMessage)
-HXDLIN(1237)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
-HXDLIN(1237)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1238)		if ((this->uiState == 3)) {
-HXLINE(1238)			this->uiState = 1;
+void DirectChat_obj::sendMessage( ::borogove::ChatMessageBuilder message,::hx::Null< int >  __o_e2eePreference){
+            		int e2eePreference = __o_e2eePreference.Default(0);
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1316_sendMessage)
+HXDLIN(1316)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
+HXDLIN(1316)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1317)		if ((this->uiState == 3)) {
+HXLINE(1317)			this->uiState = 1;
             		}
-HXLINE(1239)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE(1239)			this->typingTimer->stop();
+HXLINE(1318)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE(1318)			this->typingTimer->stop();
             		}
-HXLINE(1240)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
-HXLINE(1241)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
-HXLINE(1242)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->to = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->recipients->__get(0).StaticCast<  ::borogove::JID >();
-HXLINE(1243)		 ::borogove::Stanza fromStanza = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
-HXDLIN(1243)		 ::borogove::MessageStanza fromStanza1 = ::borogove::Message_obj::fromStanza(fromStanza,this->client->jid,null(),null(),null())->parsed;
-HXLINE(1244)		switch((int)(fromStanza1->_hx_getIndex())){
+HXLINE(1319)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
+HXLINE(1320)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
+HXLINE(1321)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->to = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->recipients->__get(0).StaticCast<  ::borogove::JID >();
+HXLINE(1322)		 ::borogove::Stanza fromStanza = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
+HXDLIN(1322)		 ::borogove::MessageStanza fromStanza1 = ::borogove::Message_obj::fromStanza(fromStanza,this->client->jid,null(),null(),null())->parsed;
+HXLINE(1323)		switch((int)(fromStanza1->_hx_getIndex())){
             			case (int)1: {
-            				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::DirectChat,_gthis,::Array< ::Dynamic>,message1, ::borogove::OutboxItem,outboxItem) HXARGC(1)
+            				HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_1, ::borogove::DirectChat,_gthis,::Array< ::Dynamic>,message1, ::borogove::OutboxItem,outboxItem,int,e2eePreference) HXARGC(1)
             				::Dynamic _hx_run( ::borogove::ChatMessage stored){
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis, ::borogove::ChatMessage,stored) HXARGC(1)
             					 ::borogove::EventResult _hx_run( ::Dynamic _){
-            						HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1255_sendMessage)
-HXLINE(1256)						int _hx_tmp;
-HXDLIN(1256)						if ((stored->versions->length > 1)) {
-HXLINE(1256)							_hx_tmp = 1;
+            						HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1334_sendMessage)
+HXLINE(1335)						int _hx_tmp;
+HXDLIN(1335)						if ((stored->versions->length > 1)) {
+HXLINE(1335)							_hx_tmp = 1;
             						}
             						else {
-HXLINE(1256)							_hx_tmp = 0;
+HXLINE(1335)							_hx_tmp = 0;
             						}
-HXDLIN(1256)						_gthis->client->notifyMessageHandlers(stored,_hx_tmp);
-HXLINE(1257)						return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXDLIN(1335)						_gthis->client->notifyMessageHandlers(stored,_hx_tmp);
+HXLINE(1336)						return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-            					HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1247_sendMessage)
-HXLINE(1248)					 ::borogove::Stanza stanza = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
-HXLINE(1249)					if (::hx::IsNotNull( _gthis->isActive )) {
-HXLINE(1250)						_gthis->isActive = true;
-HXLINE(1251)						_gthis->activeThread = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->threadId;
-HXLINE(1252)						stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
-            							->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
+            					HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1326_sendMessage)
+HXLINE(1327)					 ::borogove::Stanza stanza = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
+HXLINE(1328)					if (::hx::IsNotNull( _gthis->isActive )) {
+HXLINE(1329)						_gthis->isActive = true;
+HXLINE(1330)						_gthis->activeThread = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->threadId;
+HXLINE(1331)						stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
+            							->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))),null())->up();
             					}
-HXLINE(1254)					_gthis->sendMessageStanza(stanza,outboxItem);
-HXLINE(1255)					return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->setLastMessage(stored), ::Dynamic(new _hx_Closure_0(_gthis,stored)),null());
+HXLINE(1333)					_gthis->sendMessageStanza(stanza,outboxItem,e2eePreference);
+HXLINE(1334)					return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->setLastMessage(stored), ::Dynamic(new _hx_Closure_0(_gthis,stored)),null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1246)				 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(1247)				::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessageBuilder(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()), ::Dynamic(new _hx_Closure_1(_gthis,message1,outboxItem)),null());
+HXLINE(1325)				 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(1326)				::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessageBuilder(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()), ::Dynamic(new _hx_Closure_1(_gthis,message1,outboxItem,e2eePreference)),null());
             			}
             			break;
             			case (int)4: {
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::borogove::DirectChat,_gthis,::Array< ::Dynamic>,message1) HXARGC(1)
             				void _hx_run( ::borogove::ChatMessage stored){
-            					HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1261_sendMessage)
-HXLINE(1262)					{
-HXLINE(1262)						int _g = 0;
-HXDLIN(1262)						::Array< ::Dynamic> _g1 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->recipients;
-HXDLIN(1262)						while((_g < _g1->length)){
-HXLINE(1262)							 ::borogove::JID recipient = _g1->__get(_g).StaticCast<  ::borogove::JID >();
-HXDLIN(1262)							_g = (_g + 1);
-HXLINE(1263)							message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->to = recipient;
-HXLINE(1264)							 ::borogove::Client _gthis1 = _gthis->client;
-HXDLIN(1264)							_gthis1->sendStanza(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza());
+            					HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1340_sendMessage)
+HXLINE(1341)					{
+HXLINE(1341)						int _g = 0;
+HXDLIN(1341)						::Array< ::Dynamic> _g1 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->recipients;
+HXDLIN(1341)						while((_g < _g1->length)){
+HXLINE(1341)							 ::borogove::JID recipient = _g1->__get(_g).StaticCast<  ::borogove::JID >();
+HXDLIN(1341)							_g = (_g + 1);
+HXLINE(1342)							message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->to = recipient;
+HXLINE(1343)							 ::borogove::Client _gthis1 = _gthis->client;
+HXDLIN(1343)							_gthis1->sendStanza(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza());
             						}
             					}
-HXLINE(1266)					if (::hx::IsNotNull( stored )) {
-HXLINE(1266)						_gthis->client->notifyMessageHandlers(stored,2);
+HXLINE(1345)					if (::hx::IsNotNull( stored )) {
+HXLINE(1345)						_gthis->client->notifyMessageHandlers(stored,2);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1261)				::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1261)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp,this->client->accountId(),fromStanza1->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_2(_gthis,message1)),null());
+HXLINE(1340)				::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1340)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp,this->client->accountId(),fromStanza1->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_2(_gthis,message1)),null());
             			}
             			break;
             			default:{
-HXLINE(1269)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(1348)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.DirectChat",ee,9a,0a,36))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,fromStanza1))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("sendMessage",5f,89,1d,24))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1269)));
-HXLINE(1270)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1348)));
+HXLINE(1349)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
             			}
             		}
             	}
@@ -791,308 +863,333 @@ HXLINE(1270)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0
 void DirectChat_obj::removeReaction( ::borogove::ChatMessage m, ::borogove::Reaction reaction){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::DirectChat,_gthis, ::borogove::OutboxItem,outboxItem, ::borogove::ReactionUpdate,update3) HXARGC(1)
             		void _hx_run( ::borogove::ChatMessage stored){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1301_removeReaction)
-HXLINE(1302)			 ::borogove::DirectChat _gthis1 = _gthis;
-HXDLIN(1302)			 ::borogove::Stanza _hx_tmp = update3->asStanza();
-HXDLIN(1302)			_gthis1->sendMessageStanza(_hx_tmp,outboxItem);
-HXLINE(1303)			if (::hx::IsNotNull( stored )) {
-HXLINE(1303)				_gthis->client->notifyMessageHandlers(stored,2);
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1380_removeReaction)
+HXLINE(1381)			 ::borogove::DirectChat _gthis1 = _gthis;
+HXDLIN(1381)			 ::borogove::Stanza _hx_tmp = update3->asStanza();
+HXDLIN(1381)			_gthis1->sendMessageStanza(_hx_tmp,outboxItem,null());
+HXLINE(1382)			if (::hx::IsNotNull( stored )) {
+HXLINE(1382)				_gthis->client->notifyMessageHandlers(stored,2);
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1275_removeReaction)
-HXDLIN(1275)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1276)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::borogove::CustomEmojiReaction >())) {
-HXLINE(1277)			if (::hx::IsNull( reaction->envelopeId )) {
-HXLINE(1277)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1354_removeReaction)
+HXDLIN(1354)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1355)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::borogove::CustomEmojiReaction >())) {
+HXLINE(1356)			if (::hx::IsNull( reaction->envelopeId )) {
+HXLINE(1356)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
             			}
-HXLINE(1278)			 ::borogove::ChatMessageBuilder correct = m->reply();
-HXLINE(1279)			correct->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXLINE(1280)			correct->setBody(null());
-HXLINE(1282)			 ::borogove::ChatMessageBuilder fakeEnvelope =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
-HXLINE(1283)			fakeEnvelope->localId = reaction->envelopeId;
-HXLINE(1284)			fakeEnvelope->senderId = reaction->senderId;
-HXLINE(1285)			this->correctMessage(fakeEnvelope->build(),correct);
-HXLINE(1286)			return;
-            		}
-HXLINE(1290)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1291)		{
-HXLINE(1291)			::Dynamic this1 = m->reactions;
-HXDLIN(1291)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN(1291)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1291)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1291)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(this1,key)) );
-HXLINE(1292)				if ((key != reaction->key)) {
+HXLINE(1357)			 ::borogove::ChatMessageBuilder correct = m->reply();
+HXLINE(1358)			correct->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE(1359)			correct->setBody(null());
+HXLINE(1361)			 ::borogove::ChatMessageBuilder fakeEnvelope =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
+HXLINE(1362)			fakeEnvelope->localId = reaction->envelopeId;
+HXLINE(1363)			fakeEnvelope->senderId = reaction->senderId;
+HXLINE(1364)			this->correctMessage(fakeEnvelope->build(),correct);
+HXLINE(1365)			return;
+            		}
+HXLINE(1369)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1370)		{
+HXLINE(1370)			::Dynamic this1 = m->reactions;
+HXDLIN(1370)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN(1370)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1370)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1370)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(this1,key)) );
+HXLINE(1371)				if ((key != reaction->key)) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis) HXARGC(1)
             					bool _hx_run( ::borogove::Reaction r){
-            						HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1293_removeReaction)
-HXLINE(1293)						::String r1 = r->senderId;
-HXDLIN(1293)						return (r1 == _gthis->client->accountId());
+            						HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1372_removeReaction)
+HXLINE(1372)						::String r1 = r->senderId;
+HXDLIN(1372)						return (r1 == _gthis->client->accountId());
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1293)					 ::borogove::Reaction react = ( ( ::borogove::Reaction)(::Lambda_obj::find(_g_value, ::Dynamic(new _hx_Closure_0(_gthis)))) );
-HXLINE(1294)					bool _hx_tmp;
-HXDLIN(1294)					if (::hx::IsNotNull( react )) {
-HXLINE(1294)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::borogove::CustomEmojiReaction >()));
+HXLINE(1372)					 ::borogove::Reaction react = ( ( ::borogove::Reaction)(::Lambda_obj::find(_g_value, ::Dynamic(new _hx_Closure_0(_gthis)))) );
+HXLINE(1373)					bool _hx_tmp;
+HXDLIN(1373)					if (::hx::IsNotNull( react )) {
+HXLINE(1373)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::borogove::CustomEmojiReaction >()));
             					}
             					else {
-HXLINE(1294)						_hx_tmp = false;
+HXLINE(1373)						_hx_tmp = false;
             					}
-HXDLIN(1294)					if (_hx_tmp) {
-HXLINE(1295)						reactions->push(react);
+HXDLIN(1373)					if (_hx_tmp) {
+HXLINE(1374)						reactions->push(react);
             					}
             				}
             			}
             		}
-HXLINE(1299)		::String update = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXDLIN(1299)		::String m1 = m->localId;
-HXDLIN(1299)		::String update1 = m->chatId();
-HXDLIN(1299)		::String update2 = this->client->accountId();
-HXDLIN(1299)		 ::borogove::ReactionUpdate update3 =  ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,update,null(),null(),m1,update1,update2,::borogove::Date_obj::format(::Date_obj::now()),reactions,0);
-HXLINE(1300)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(1301)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1301)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN(1301)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update3), ::Dynamic(new _hx_Closure_1(_gthis,outboxItem,update3)),null());
+HXLINE(1378)		::String update = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXDLIN(1378)		::String m1 = m->localId;
+HXDLIN(1378)		::String update1 = m->chatId();
+HXDLIN(1378)		::String update2 = this->client->accountId();
+HXDLIN(1378)		 ::borogove::ReactionUpdate update3 =  ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,update,null(),null(),m1,update1,update2,::borogove::Date_obj::format(::Date_obj::now()),reactions,0);
+HXLINE(1379)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(1380)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1380)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN(1380)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update3), ::Dynamic(new _hx_Closure_1(_gthis,outboxItem,update3)),null());
             	}
 
 
-void DirectChat_obj::sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem){
+void DirectChat_obj::sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem,::hx::Null< int >  __o_e2eePreference){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::DirectChat,_gthis,::Array< ::Dynamic>,outboxItem1) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> stanzas){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis,::Array< ::Dynamic>,stanzas) HXARGC(0)
             			void _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1333_sendMessageStanza)
-HXLINE(1333)				int _g = 0;
-HXDLIN(1333)				while((_g < stanzas->length)){
-HXLINE(1333)					 ::borogove::Stanza stanza = stanzas->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(1333)					_g = (_g + 1);
-HXLINE(1334)					_gthis->client->sendStanza(stanza);
+            				HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1424_sendMessageStanza)
+HXLINE(1424)				int _g = 0;
+HXDLIN(1424)				while((_g < stanzas->length)){
+HXLINE(1424)					 ::borogove::Stanza stanza = stanzas->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(1424)					_g = (_g + 1);
+HXLINE(1425)					_gthis->client->sendStanza(stanza);
             				}
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1332_sendMessageStanza)
-HXLINE(1332)			outboxItem1->__get(0).StaticCast<  ::borogove::OutboxItem >()->handle( ::Dynamic(new _hx_Closure_0(_gthis,stanzas)));
+            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1423_sendMessageStanza)
+HXLINE(1423)			outboxItem1->__get(0).StaticCast<  ::borogove::OutboxItem >()->handle( ::Dynamic(new _hx_Closure_0(_gthis,stanzas)));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1307_sendMessageStanza)
-HXDLIN(1307)		::Array< ::Dynamic> outboxItem1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,outboxItem);
-HXDLIN(1307)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1308)		if ((stanza->name != HX_("message",c7,35,11,9a))) {
-HXLINE(1308)			HX_STACK_DO_THROW(HX_("Can only send message stanza this way",cb,e1,b3,60));
-            		}
-HXLINE(1310)		if (::hx::IsNull( outboxItem1->__get(0).StaticCast<  ::borogove::OutboxItem >() )) {
-HXLINE(1310)			outboxItem1[0] = this->outbox->newItem();
-            		}
-HXLINE(1312)		::Array< ::String > counters = this->counterparts();
-HXLINE(1313)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(counters->length);
-HXDLIN(1313)		{
-HXLINE(1313)			int _g = 0;
-HXDLIN(1313)			int _g1 = counters->length;
-HXDLIN(1313)			while((_g < _g1)){
-HXLINE(1313)				_g = (_g + 1);
-HXDLIN(1313)				int i = (_g - 1);
-HXDLIN(1313)				{
-HXLINE(1313)					::String counterpart = ( (::String)(_hx_array_unsafe_get(counters,i)) );
-HXLINE(1314)					 ::borogove::Stanza clone = stanza->clone();
-HXLINE(1315)					::Reflect_obj::setField(clone->attr,HX_("to",7b,65,00,00),counterpart);
-HXLINE(1316)					bool _hx_tmp;
-HXDLIN(1316)					if ((counters->length > 1)) {
-HXLINE(1316)						_hx_tmp = ::hx::IsNull( stanza->getChild(HX_("addresses",22,9f,12,8c),HX_("http://jabber.org/protocol/address",c0,fd,09,ed)) );
+            		int e2eePreference = __o_e2eePreference.Default(0);
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1386_sendMessageStanza)
+HXDLIN(1386)		::Array< ::Dynamic> outboxItem1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,outboxItem);
+HXDLIN(1386)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1387)		if ((stanza->name != HX_("message",c7,35,11,9a))) {
+HXLINE(1387)			HX_STACK_DO_THROW(HX_("Can only send message stanza this way",cb,e1,b3,60));
+            		}
+HXLINE(1389)		if (::hx::IsNull( outboxItem1->__get(0).StaticCast<  ::borogove::OutboxItem >() )) {
+HXLINE(1389)			outboxItem1[0] = this->outbox->newItem();
+            		}
+HXLINE(1391)		::Array< ::String > counters = this->counterparts();
+HXLINE(1392)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(counters->length);
+HXDLIN(1392)		{
+HXLINE(1392)			int _g = 0;
+HXDLIN(1392)			int _g1 = counters->length;
+HXDLIN(1392)			while((_g < _g1)){
+HXLINE(1392)				_g = (_g + 1);
+HXDLIN(1392)				int i = (_g - 1);
+HXDLIN(1392)				{
+HXLINE(1392)					::String counterpart = ( (::String)(_hx_array_unsafe_get(counters,i)) );
+HXLINE(1393)					 ::borogove::Stanza clone = stanza->clone();
+HXLINE(1394)					clone->attr->set(HX_("to",7b,65,00,00),counterpart);
+HXLINE(1395)					bool _hx_tmp;
+HXDLIN(1395)					if ((counters->length > 1)) {
+HXLINE(1395)						_hx_tmp = ::hx::IsNull( stanza->getChild(HX_("addresses",22,9f,12,8c),HX_("http://jabber.org/protocol/address",c0,fd,09,ed)) );
             					}
             					else {
-HXLINE(1316)						_hx_tmp = false;
+HXLINE(1395)						_hx_tmp = false;
             					}
-HXDLIN(1316)					if (_hx_tmp) {
-HXLINE(1317)						 ::borogove::Stanza addresses = clone->tag(HX_("addresses",22,9f,12,8c), ::Dynamic(::hx::Anon_obj::Create(1)
-            							->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/address",c0,fd,09,ed))));
-HXLINE(1318)						{
-HXLINE(1318)							int _g2 = 0;
-HXDLIN(1318)							while((_g2 < counters->length)){
-HXLINE(1318)								::String counter = counters->__get(_g2);
-HXDLIN(1318)								_g2 = (_g2 + 1);
-HXLINE(1319)								addresses->tag(HX_("address",b4,71,0b,9d), ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN(1395)					if (_hx_tmp) {
+HXLINE(1396)						 ::borogove::Stanza addresses = clone->tag(HX_("addresses",22,9f,12,8c), ::Dynamic(::hx::Anon_obj::Create(1)
+            							->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/address",c0,fd,09,ed))),null());
+HXLINE(1397)						{
+HXLINE(1397)							int _g2 = 0;
+HXDLIN(1397)							while((_g2 < counters->length)){
+HXLINE(1397)								::String counter = counters->__get(_g2);
+HXDLIN(1397)								_g2 = (_g2 + 1);
+HXLINE(1398)								addresses->tag(HX_("address",b4,71,0b,9d), ::Dynamic(::hx::Anon_obj::Create(3)
             									->setFixed(0,HX_("delivered",84,e0,1c,b2),HX_("true",4e,a7,03,4d))
             									->setFixed(1,HX_("jid",c5,ca,50,00),counter)
-            									->setFixed(2,HX_("type",ba,f2,08,4d),HX_("to",7b,65,00,00))))->up();
+            									->setFixed(2,HX_("type",ba,f2,08,4d),HX_("to",7b,65,00,00))),null())->up();
             							}
             						}
-HXLINE(1321)						addresses->up();
+HXLINE(1400)						addresses->up();
+            					}
+HXLINE(1405)					if ((e2eePreference == 0)) {
+HXLINE(1405)						e2eePreference = _gthis->client->outgoingE2EEPreference->__get(0);
             					}
-HXLINE(1313)					::Dynamic inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(stanza);
-HXDLIN(1313)					result->__unsafe_set(i,inValue);
+HXLINE(1407)					if ((e2eePreference != 1)) {
+HXLINE(1407)						HX_STACK_DO_THROW(HX_("Selected E2EE preference unsupported",1e,73,4f,f3));
+            					}
+HXLINE(1392)					::Dynamic inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(stanza);
+HXDLIN(1392)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN(1313)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_1(_gthis,outboxItem1)),null());
+HXDLIN(1392)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_1(_gthis,outboxItem1)),null());
             	}
 
 
 void DirectChat_obj::markReadUpTo( ::borogove::ChatMessage message){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis, ::borogove::ChatMessage,message) HXARGC(1)
             		void _hx_run( ::Dynamic _){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1346_markReadUpTo)
-HXLINE(1349)			bool _hx_tmp;
-HXDLIN(1349)			if (message->isIncoming()) {
-HXLINE(1349)				_hx_tmp = ::hx::IsNotNull( message->localId );
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1437_markReadUpTo)
+HXLINE(1440)			bool _hx_tmp;
+HXDLIN(1440)			if (message->isIncoming()) {
+HXLINE(1440)				_hx_tmp = ::hx::IsNotNull( message->localId );
             			}
             			else {
-HXLINE(1349)				_hx_tmp = false;
+HXLINE(1440)				_hx_tmp = false;
             			}
-HXDLIN(1349)			if (_hx_tmp) {
-HXLINE(1350)				int _g = 0;
-HXDLIN(1350)				::Array< ::String > _g1 = _gthis->counterparts();
-HXDLIN(1350)				while((_g < _g1->length)){
-HXLINE(1350)					::String recipient = _g1->__get(_g);
-HXDLIN(1350)					_g = (_g + 1);
-HXLINE(1352)					::String stanza = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXDLIN(1352)					 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN(1440)			if (_hx_tmp) {
+HXLINE(1441)				int _g = 0;
+HXDLIN(1441)				::Array< ::String > _g1 = _gthis->counterparts();
+HXDLIN(1441)				while((_g < _g1->length)){
+HXLINE(1441)					::String recipient = _g1->__get(_g);
+HXDLIN(1441)					_g = (_g + 1);
+HXLINE(1443)					::String stanza = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXDLIN(1443)					 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("id",db,5b,00,00),stanza)
-            						->setFixed(1,HX_("to",7b,65,00,00),recipient)))->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(1,HX_("to",7b,65,00,00),recipient)),null())->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("id",db,5b,00,00),message->localId)
-            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:chat-markers:0",96,b8,66,e7))))->up();
-HXLINE(1354)					if (::hx::IsNotNull( message->threadId )) {
-HXLINE(1355)						stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null());
+            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:chat-markers:0",96,b8,66,e7))),null())->up();
+HXLINE(1445)					if (::hx::IsNotNull( message->threadId )) {
+HXLINE(1446)						stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null(),null());
             					}
-HXLINE(1357)					_gthis->client->sendStanza(stanza1);
+HXLINE(1448)					_gthis->client->sendStanza(stanza1);
             				}
             			}
-HXLINE(1361)			_gthis->publishMds();
-HXLINE(1362)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXLINE(1452)			_gthis->publishMds();
+HXLINE(1453)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic e){
-            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1364_markReadUpTo)
-HXLINE(1364)			if (::hx::IsNotNull( e )) {
-HXLINE(1364)				return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
+            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1455_markReadUpTo)
+HXLINE(1455)			if (::hx::IsNotNull( e )) {
+HXLINE(1455)				return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
             			}
             			else {
-HXLINE(1364)				return null();
+HXLINE(1455)				return null();
             			}
-HXDLIN(1364)			return null();
+HXDLIN(1455)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1341_markReadUpTo)
-HXDLIN(1341)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1344)		if ((message->type == 3)) {
-HXLINE(1344)			return;
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1432_markReadUpTo)
+HXDLIN(1432)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1435)		if ((message->type == 3)) {
+HXLINE(1435)			return;
             		}
-HXLINE(1346)		::thenshim::_Promise::Promise_Impl__obj::then(this->markReadUpToMessage(message), ::Dynamic(new _hx_Closure_0(_gthis,message)), ::Dynamic(new _hx_Closure_1()));
+HXLINE(1437)		::thenshim::_Promise::Promise_Impl__obj::then(this->markReadUpToMessage(message), ::Dynamic(new _hx_Closure_0(_gthis,message)), ::Dynamic(new _hx_Closure_1()));
             	}
 
 
 void DirectChat_obj::bookmark(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis) HXARGC(1)
             		void _hx_run( ::borogove::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1383_bookmark)
-HXLINE(1384)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE(1384)				return;
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1481_bookmark)
+HXLINE(1482)			if (::hx::IsEq( response->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) )) {
+HXLINE(1482)				return;
             			}
-HXLINE(1385)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXDLIN(1385)			::String _gthis2 = _gthis->chatId;
-HXDLIN(1385)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE(1483)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
+HXDLIN(1483)			::String _gthis2 = _gthis->chatId;
+HXDLIN(1483)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7())
             				->setFixed(1,HX_("to",7b,65,00,00),_gthis2)
-            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("subscribe",4a,0b,18,19)))));
-HXLINE(1386)			if (_gthis->isTrusted()) {
-HXLINE(1386)				 ::borogove::GenericStream _gthis3 = _gthis->stream;
-HXDLIN(1386)				::String _gthis4 = _gthis->chatId;
-HXDLIN(1386)				_gthis3->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
+            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("subscribe",4a,0b,18,19))),null()));
+HXLINE(1484)			if (_gthis->isTrusted()) {
+HXLINE(1484)				 ::borogove::GenericStream _gthis3 = _gthis->stream;
+HXDLIN(1484)				::String _gthis4 = _gthis->chatId;
+HXDLIN(1484)				_gthis3->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
             					->setFixed(0,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7())
             					->setFixed(1,HX_("to",7b,65,00,00),_gthis4)
-            					->setFixed(2,HX_("type",ba,f2,08,4d),HX_("subscribed",da,d5,f1,db)))));
+            					->setFixed(2,HX_("type",ba,f2,08,4d),HX_("subscribed",da,d5,f1,db))),null()));
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1368_bookmark)
-HXDLIN(1368)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1369)		this->isBookmarked = true;
-HXLINE(1370)		if ((this->uiState == 3)) {
-HXLINE(1371)			this->uiState = 1;
-HXLINE(1372)			this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1459_bookmark)
+HXDLIN(1459)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1460)		this->isBookmarked = true;
+HXLINE(1461)		if ((this->uiState == 3)) {
+HXLINE(1462)			this->uiState = 1;
+HXLINE(1463)			this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             		}
-HXLINE(1374)		 ::Dynamic attr =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1465)		 ::Dynamic attr =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("jid",c5,ca,50,00),this->chatId));
-HXLINE(1375)		bool _hx_tmp;
-HXDLIN(1375)		bool _hx_tmp1;
-HXDLIN(1375)		if (::hx::IsNotNull( this->displayName )) {
-HXLINE(1375)			_hx_tmp1 = (this->displayName != HX_("",00,00,00,00));
+HXLINE(1466)		bool _hx_tmp;
+HXDLIN(1466)		bool _hx_tmp1;
+HXDLIN(1466)		if (::hx::IsNotNull( this->displayName )) {
+HXLINE(1466)			_hx_tmp1 = (this->displayName != HX_("",00,00,00,00));
             		}
             		else {
-HXLINE(1375)			_hx_tmp1 = false;
+HXLINE(1466)			_hx_tmp1 = false;
             		}
-HXDLIN(1375)		if (_hx_tmp1) {
-HXLINE(1375)			_hx_tmp = (this->displayName != this->chatId);
+HXDLIN(1466)		if (_hx_tmp1) {
+HXLINE(1466)			_hx_tmp = (this->displayName != this->chatId);
             		}
             		else {
-HXLINE(1375)			_hx_tmp = false;
+HXLINE(1466)			_hx_tmp = false;
+            		}
+HXDLIN(1466)		if (_hx_tmp) {
+HXLINE(1467)			::Reflect_obj::setField(attr,HX_("name",4b,72,ff,48),this->displayName);
             		}
-HXDLIN(1375)		if (_hx_tmp) {
-HXLINE(1376)			::Reflect_obj::setField(attr,HX_("name",4b,72,ff,48),this->displayName);
+HXLINE(1469)		 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:iq:roster",47,76,6e,06))),null())->tag(HX_("item",13,c5,bf,45),attr,null());
+HXLINE(1473)		{
+HXLINE(1473)			int _g = 0;
+HXDLIN(1473)			::Array< ::Dynamic> _g1 = this->extensions->allTags(null(),null());
+HXDLIN(1473)			while((_g < _g1->length)){
+HXLINE(1473)				 ::borogove::Stanza extension = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(1473)				_g = (_g + 1);
+HXLINE(1474)				bool _hx_tmp2;
+HXDLIN(1474)				if ((extension->name == HX_("group",3f,b3,f4,99))) {
+HXLINE(1474)					_hx_tmp2 = ::hx::IsEq( extension->attr->get(HX_("xmlns",dc,31,74,60)),HX_("jabber:iq:roster",47,76,6e,06) );
+            				}
+            				else {
+HXLINE(1474)					_hx_tmp2 = false;
+            				}
+HXDLIN(1474)				if (_hx_tmp2) {
+HXLINE(1475)					stanza->addChild(extension);
+            				}
+            			}
             		}
-HXLINE(1378)		 ::borogove::GenericStream _hx_tmp2 = this->stream;
-HXDLIN(1378)		_hx_tmp2->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:iq:roster",47,76,6e,06))))->tag(HX_("item",13,c5,bf,45),attr)->up()->up(), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(1479)		this->stream->sendIq(stanza, ::Dynamic(new _hx_Closure_0(_gthis)));
             	}
 
 
 void DirectChat_obj::sendChatState(::String state,::String threadId){
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1391_sendChatState)
-HXLINE(1392)		if (!(this->isTrusted())) {
-HXLINE(1392)			return;
-            		}
-HXLINE(1394)		{
-HXLINE(1394)			int _g = 0;
-HXDLIN(1394)			::Array< ::String > _g1 = this->counterparts();
-HXDLIN(1394)			while((_g < _g1->length)){
-HXLINE(1394)				::String recipient = _g1->__get(_g);
-HXDLIN(1394)				_g = (_g + 1);
-HXLINE(1396)				::String stanza = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXLINE(1398)				::String stanza1 = this->client->jid->asString();
-HXLINE(1395)				 ::borogove::Stanza stanza2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1489_sendChatState)
+HXLINE(1490)		if (!(this->isTrusted())) {
+HXLINE(1490)			return;
+            		}
+HXLINE(1492)		{
+HXLINE(1492)			int _g = 0;
+HXDLIN(1492)			::Array< ::String > _g1 = this->counterparts();
+HXDLIN(1492)			while((_g < _g1->length)){
+HXLINE(1492)				::String recipient = _g1->__get(_g);
+HXDLIN(1492)				_g = (_g + 1);
+HXLINE(1494)				::String stanza = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE(1496)				::String stanza1 = this->client->jid->asString();
+HXLINE(1493)				 ::borogove::Stanza stanza2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
             					->setFixed(0,HX_("id",db,5b,00,00),stanza)
             					->setFixed(1,HX_("to",7b,65,00,00),recipient)
             					->setFixed(2,HX_("from",6a,a5,c2,43),stanza1)
-            					->setFixed(3,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->tag(state, ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
-HXLINE(1403)				if (::hx::IsNotNull( threadId )) {
-HXLINE(1404)					stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null());
+            					->setFixed(3,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))),null())->tag(state, ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))),null())->up();
+HXLINE(1501)				if (::hx::IsNotNull( threadId )) {
+HXLINE(1502)					stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null(),null());
             				}
-HXLINE(1406)				this->stream->sendStanza(stanza2);
+HXLINE(1504)				this->stream->sendStanza(stanza2);
             			}
             		}
             	}
 
 
 void DirectChat_obj::close(){
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1411_close)
-HXLINE(1412)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE(1412)			this->typingTimer->stop();
-            		}
-HXLINE(1413)		if ((this->uiState == 3)) {
-HXLINE(1414)			 ::borogove::Client _hx_tmp = this->client;
-HXDLIN(1414)			::String _hx_tmp1 = this->chatId;
-HXDLIN(1414)			_hx_tmp->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1509_close)
+HXLINE(1510)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE(1510)			this->typingTimer->stop();
+            		}
+HXLINE(1511)		if ((this->uiState == 3)) {
+HXLINE(1512)			 ::borogove::Client _hx_tmp = this->client;
+HXDLIN(1512)			::String _hx_tmp1 = this->chatId;
+HXDLIN(1512)			_hx_tmp->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7())
             				->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp1)
-            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("unsubscribed",73,05,01,48)))));
+            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("unsubscribed",73,05,01,48))),null()));
             		}
-HXLINE(1417)		this->uiState = 2;
-HXLINE(1418)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1418)		::borogove::Persistence_obj::storeChats(_hx_tmp2,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE(1419)		if (!(this->isBlocked)) {
-HXLINE(1419)			this->sendChatState(HX_("gone",5f,94,69,44),null());
+HXLINE(1515)		this->uiState = 2;
+HXLINE(1516)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1516)		::borogove::Persistence_obj::storeChats(_hx_tmp2,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(1517)		if (!(this->isBlocked)) {
+HXLINE(1517)			this->sendChatState(HX_("gone",5f,94,69,44),null());
             		}
-HXLINE(1420)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE(1421)		this->client->sortChats();
+HXLINE(1518)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(1519)		this->client->sortChats();
             	}
 
 
@@ -1263,9 +1360,9 @@ void DirectChat_obj::__register()
 void DirectChat_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1056_boot)
-HXDLIN(1056)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(13)
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1115_boot)
+HXDLIN(1115)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(14)
             				->setFixed(0,HX_("getMemberDetails",12,2b,2f,b3), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
             				->setFixed(1,HX_("getDisplayName",b7,64,90,b8), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -1288,9 +1385,11 @@ HXDLIN(1056)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
             				->setFixed(10,HX_("bookmark",b6,8c,f1,32), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(11,HX_("close",b8,17,63,48), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(11,HX_("sendMessageStanza",b4,2c,6d,3d), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(12,HX_("close",b8,17,63,48), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(12,HX_("getMessagesAfter",3a,43,91,57), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(13,HX_("getMessagesAfter",3a,43,91,57), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null()))))));
             	}
 }
diff --git a/Sources/c_borogove/src/borogove/EncryptionInfo.cpp b/Sources/c_borogove/src/borogove/EncryptionInfo.cpp
index f46ce30..25e6533 100644
--- a/Sources/c_borogove/src/borogove/EncryptionInfo.cpp
+++ b/Sources/c_borogove/src/borogove/EncryptionInfo.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_borogove_EncryptionInfo
 #include <borogove/EncryptionInfo.h>
 #endif
@@ -29,11 +26,18 @@ HX_LOCAL_STACK_FRAME(_hx_pos_495491200499f74a_20_boot,"borogove.EncryptionInfo",
 HX_LOCAL_STACK_FRAME(_hx_pos_495491200499f74a_28_boot,"borogove.EncryptionInfo","boot",0x705c9942,"borogove.EncryptionInfo.boot","borogove/EncryptionInfo.hx",28,0x95cafaff)
 namespace borogove{
 
-void EncryptionInfo_obj::__construct(int status,::String method,::String methodName,::String reason,::String reasonText){
+void EncryptionInfo_obj::__construct(int status,::String method,::String reason,::String reasonText,::String methodName){
             	HX_STACKFRAME(&_hx_pos_495491200499f74a_38_new)
 HXLINE(  39)		this->status = status;
 HXLINE(  40)		this->method = method;
-HXLINE(  41)		this->methodName = methodName;
+HXLINE(  41)		::String _hx_tmp;
+HXDLIN(  41)		if (::hx::IsNotNull( methodName )) {
+HXLINE(  41)			_hx_tmp = methodName;
+            		}
+            		else {
+HXLINE(  41)			_hx_tmp = ::borogove::EncryptionInfo_obj::knownEncryptionSchemes->get_string(method);
+            		}
+HXDLIN(  41)		this->methodName = _hx_tmp;
 HXLINE(  42)		this->reason = reason;
 HXLINE(  43)		this->reasonText = reasonText;
             	}
@@ -105,12 +109,12 @@ HXLINE(  51)			el = HX_("failure",4a,70,fa,16);
 HXLINE(  48)		 ::borogove::Stanza el1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("decryption-status",e4,8c,66,6a), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("result",dd,68,84,08),el)
             			->setFixed(1,HX_("encryption",83,dc,39,4f),this->method)
-            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("https://borogove.dev/protocol/sdk",3b,17,54,0d))));
+            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("https://borogove.dev/protocol/sdk",3b,17,54,0d))),null());
 HXLINE(  53)		if (::hx::IsNotNull( this->reason )) {
-HXLINE(  54)			el1->textTag(HX_("reason",c4,0f,9d,fc),this->reason,null());
+HXLINE(  54)			el1->textTag(HX_("reason",c4,0f,9d,fc),this->reason,null(),null());
             		}
 HXLINE(  56)		if (::hx::IsNotNull( this->reasonText )) {
-HXLINE(  57)			el1->textTag(HX_("text",ad,cc,f9,4c),this->reasonText,null());
+HXLINE(  57)			el1->textTag(HX_("text",ad,cc,f9,4c),this->reasonText,null(),null());
             		}
 HXLINE(  59)		return el1;
             	}
@@ -126,8 +130,8 @@ HXLINE(  66)		 ::borogove::Stanza emeElement = stanza->getChild(HX_("encryption"
 HXLINE(  69)		::String ns = null();
 HXDLIN(  69)		::String name = null();
 HXLINE(  70)		if (::hx::IsNotNull( emeElement )) {
-HXLINE(  71)			ns = ( (::String)(::Reflect_obj::field(emeElement->attr,HX_("namespace",9b,ea,ed,e7))) );
-HXLINE(  72)			name = ( (::String)(::Reflect_obj::field(emeElement->attr,HX_("name",4b,72,ff,48))) );
+HXLINE(  71)			ns = emeElement->attr->get_string(HX_("namespace",9b,ea,ed,e7));
+HXLINE(  72)			name = emeElement->attr->get_string(HX_("name",4b,72,ff,48));
             		}
             		else {
 HXLINE(  73)			if (::hx::IsNotNull( stanza->getChild(HX_("encrypted",04,fa,43,6c),HX_("eu.siacs.conversations.axolotl",44,2e,02,36)) )) {
@@ -135,56 +139,52 @@ HXLINE(  76)				ns = HX_("eu.siacs.conversations.axolotl",44,2e,02,36);
             			}
             		}
 HXLINE(  78)		if (::hx::IsNotNull( ns )) {
-HXLINE(  81)			::String tmp = ns;
-HXDLIN(  81)			::String _hx_tmp;
-HXDLIN(  81)			if (::hx::IsNotNull( tmp )) {
-HXLINE(  81)				_hx_tmp = tmp;
-            			}
-            			else {
-HXLINE(  81)				_hx_tmp = HX_("unknown",8a,23,7b,e1);
+HXLINE(  79)			if (::hx::IsNull( name )) {
+HXLINE(  79)				name = ::borogove::EncryptionInfo_obj::knownEncryptionSchemes->get_string(ns);
             			}
-HXLINE(  82)			::String _hx_tmp1;
-HXDLIN(  82)			::String tmp1 = ::borogove::EncryptionInfo_obj::knownEncryptionSchemes->get_string(ns);
-HXDLIN(  82)			::String tmp2;
-HXDLIN(  82)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(  82)				tmp2 = tmp1;
+HXLINE(  82)			::String tmp = ns;
+HXDLIN(  82)			::String _hx_tmp;
+HXDLIN(  82)			if (::hx::IsNotNull( tmp )) {
+HXLINE(  82)				_hx_tmp = tmp;
             			}
             			else {
-HXLINE(  82)				tmp2 = name;
+HXLINE(  82)				_hx_tmp = HX_("unknown",8a,23,7b,e1);
             			}
-HXDLIN(  82)			if (::hx::IsNotNull( tmp2 )) {
-HXLINE(  82)				_hx_tmp1 = tmp2;
+HXLINE(  84)			::String tmp1 = name;
+HXDLIN(  84)			::String _hx_tmp1;
+HXDLIN(  84)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(  84)				_hx_tmp1 = tmp1;
             			}
             			else {
-HXLINE(  82)				_hx_tmp1 = HX_("Unknown encryption",79,3d,1c,26);
+HXLINE(  84)				_hx_tmp1 = ns;
             			}
-HXLINE(  84)			::String tmp3 = name;
-HXDLIN(  84)			::String _hx_tmp2;
-HXDLIN(  84)			if (::hx::IsNotNull( tmp3 )) {
-HXLINE(  84)				_hx_tmp2 = tmp3;
+HXLINE(  85)			::String tmp2 = name;
+HXDLIN(  85)			::String _hx_tmp2;
+HXDLIN(  85)			if (::hx::IsNotNull( tmp2 )) {
+HXLINE(  85)				_hx_tmp2 = tmp2;
             			}
             			else {
-HXLINE(  84)				_hx_tmp2 = ns;
+HXLINE(  85)				_hx_tmp2 = HX_("Unknown encryption",79,3d,1c,26);
             			}
-HXLINE(  79)			return  ::borogove::EncryptionInfo_obj::__alloc( HX_CTX ,1,_hx_tmp,_hx_tmp1,HX_("unsupported-encryption",5b,6c,86,4a),(HX_("Unsupported encryption method: ",f9,9f,a6,ec) + _hx_tmp2));
+HXLINE(  80)			return  ::borogove::EncryptionInfo_obj::__alloc( HX_CTX ,1,_hx_tmp,HX_("unsupported-encryption",5b,6c,86,4a),(HX_("Unsupported encryption method: ",f9,9f,a6,ec) + _hx_tmp1),_hx_tmp2);
             		}
-HXLINE(  87)		return null();
+HXLINE(  88)		return null();
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(EncryptionInfo_obj,fromStanza,return )
 
 
-::hx::ObjectPtr< EncryptionInfo_obj > EncryptionInfo_obj::__new(int status,::String method,::String methodName,::String reason,::String reasonText) {
+::hx::ObjectPtr< EncryptionInfo_obj > EncryptionInfo_obj::__new(int status,::String method,::String reason,::String reasonText,::String methodName) {
 	::hx::ObjectPtr< EncryptionInfo_obj > __this = new EncryptionInfo_obj();
-	__this->__construct(status,method,methodName,reason,reasonText);
+	__this->__construct(status,method,reason,reasonText,methodName);
 	return __this;
 }
 
-::hx::ObjectPtr< EncryptionInfo_obj > EncryptionInfo_obj::__alloc(::hx::Ctx *_hx_ctx,int status,::String method,::String methodName,::String reason,::String reasonText) {
+::hx::ObjectPtr< EncryptionInfo_obj > EncryptionInfo_obj::__alloc(::hx::Ctx *_hx_ctx,int status,::String method,::String reason,::String reasonText,::String methodName) {
 	EncryptionInfo_obj *__this = (EncryptionInfo_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(EncryptionInfo_obj), true, "borogove.EncryptionInfo"));
 	*(void **)__this = EncryptionInfo_obj::_hx_vtable;
-	__this->__construct(status,method,methodName,reason,reasonText);
+	__this->__construct(status,method,reason,reasonText,methodName);
 	return __this;
 }
 
diff --git a/Sources/c_borogove/src/borogove/Form.cpp b/Sources/c_borogove/src/borogove/Form.cpp
index c0b6724..0f9a104 100644
--- a/Sources/c_borogove/src/borogove/Form.cpp
+++ b/Sources/c_borogove/src/borogove/Form.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED__HaxeCBridge_HaxeArray_Impl_
 #include <_HaxeCBridge/HaxeArray_Impl_.h>
 #endif
@@ -31,6 +28,12 @@
 #ifndef INCLUDED_borogove__DataForm_Field_Impl_
 #include <borogove/_DataForm/Field_Impl_.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_d5f5e869927de4ab_136_new,"borogove.Form","new",0x1fd8d343,"borogove.Form.new","borogove/Form.hx",136,0x25d2f7ac)
 HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_145_isResult,"borogove.Form","isResult",0x5904aaa4,"borogove.Form.isResult","borogove/Form.hx",145,0x25d2f7ac)
@@ -95,7 +98,7 @@ HXLINE( 146)		if (::hx::IsNull( this->form )) {
 HXLINE( 146)			return true;
             		}
 HXLINE( 148)		::String _hx_tmp;
-HXDLIN( 148)		::String tmp = ( (::String)(::Reflect_obj::field(this->form->attr,HX_("type",ba,f2,08,4d))) );
+HXDLIN( 148)		::String tmp = this->form->attr->get_string(HX_("type",ba,f2,08,4d));
 HXDLIN( 148)		if (::hx::IsNotNull( tmp )) {
 HXLINE( 148)			_hx_tmp = tmp;
             		}
@@ -153,8 +156,8 @@ HXLINE( 174)				 ::borogove::Stanza child = _g1->__get(_g).StaticCast<  ::borogo
 HXDLIN( 174)				_g = (_g + 1);
 HXLINE( 175)				bool _hx_tmp;
 HXDLIN( 175)				if ((child->name == HX_("instructions",a5,96,3f,6d))) {
-HXLINE( 175)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 175)						_hx_tmp = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:x:data",c2,e1,e9,7c));
+HXLINE( 175)					if (::hx::IsNotNull( child->attr->get(HX_("xmlns",dc,31,74,60)) )) {
+HXLINE( 175)						_hx_tmp = ::hx::IsEq( child->attr->get(HX_("xmlns",dc,31,74,60)),HX_("jabber:x:data",c2,e1,e9,7c) );
             					}
             					else {
 HXLINE( 175)						_hx_tmp = true;
@@ -165,7 +168,7 @@ HXLINE( 175)					_hx_tmp = false;
             				}
 HXDLIN( 175)				if (_hx_tmp) {
 HXLINE( 176)					::String _hx_tmp1 = child->getText();
-HXDLIN( 176)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,_hx_tmp1,null(),null(),null(),null(),( (::String)(::Reflect_obj::field(child->attr,HX_("type",ba,f2,08,4d))) )));
+HXDLIN( 176)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,_hx_tmp1,null(),null(),null(),null(),child->attr->get_string(HX_("type",ba,f2,08,4d))));
             				}
 HXLINE( 178)				bool _hx_tmp2;
 HXDLIN( 178)				bool _hx_tmp3;
@@ -176,8 +179,8 @@ HXLINE( 178)					_hx_tmp3 = (child->name == HX_("field",ba,94,93,00));
 HXLINE( 178)					_hx_tmp3 = false;
             				}
 HXDLIN( 178)				if (_hx_tmp3) {
-HXLINE( 178)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 178)						_hx_tmp2 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:x:data",c2,e1,e9,7c));
+HXLINE( 178)					if (::hx::IsNotNull( child->attr->get(HX_("xmlns",dc,31,74,60)) )) {
+HXLINE( 178)						_hx_tmp2 = ::hx::IsEq( child->attr->get(HX_("xmlns",dc,31,74,60)),HX_("jabber:x:data",c2,e1,e9,7c) );
             					}
             					else {
 HXLINE( 178)						_hx_tmp2 = true;
@@ -189,7 +192,7 @@ HXLINE( 178)					_hx_tmp2 = false;
 HXDLIN( 178)				if (_hx_tmp2) {
 HXLINE( 179)					 ::borogove::Stanza fld = child;
 HXLINE( 180)					bool _hx_tmp4;
-HXDLIN( 180)					::String attr = ( (::String)(::Reflect_obj::field(fld->attr,HX_("type",ba,f2,08,4d))) );
+HXDLIN( 180)					::String attr = fld->attr->get_string(HX_("type",ba,f2,08,4d));
 HXDLIN( 180)					::String _hx_tmp5;
 HXDLIN( 180)					if ((attr == HX_("jid-single",50,8e,f5,83))) {
 HXLINE( 180)						_hx_tmp5 = HX_("text-single",68,19,96,16);
@@ -203,7 +206,7 @@ HXLINE( 180)							_hx_tmp5 = attr;
             						}
             					}
 HXDLIN( 180)					if ((_hx_tmp5 == HX_("fixed",74,f9,a1,00))) {
-HXLINE( 180)						_hx_tmp4 = ::hx::IsNull( ( (::String)(::Reflect_obj::field(fld->attr,HX_("label",f4,0d,af,6f))) ) );
+HXLINE( 180)						_hx_tmp4 = ::hx::IsNull( fld->attr->get(HX_("label",f4,0d,af,6f)) );
             					}
             					else {
 HXLINE( 180)						_hx_tmp4 = false;
@@ -218,7 +221,7 @@ HXLINE( 182)							items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,v,nul
             						}
             					}
             					else {
-HXLINE( 184)						::String attr1 = ( (::String)(::Reflect_obj::field(fld->attr,HX_("type",ba,f2,08,4d))) );
+HXLINE( 184)						::String attr1 = fld->attr->get_string(HX_("type",ba,f2,08,4d));
 HXDLIN( 184)						::String _hx_tmp6;
 HXDLIN( 184)						if ((attr1 == HX_("jid-single",50,8e,f5,83))) {
 HXLINE( 184)							_hx_tmp6 = HX_("text-single",68,19,96,16);
@@ -252,8 +255,8 @@ HXLINE( 188)					_hx_tmp9 = (child->name == HX_("reported",13,2a,94,dd));
 HXLINE( 188)					_hx_tmp9 = false;
             				}
 HXDLIN( 188)				if (_hx_tmp9) {
-HXLINE( 188)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 188)						_hx_tmp8 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:x:data",c2,e1,e9,7c));
+HXLINE( 188)					if (::hx::IsNotNull( child->attr->get(HX_("xmlns",dc,31,74,60)) )) {
+HXLINE( 188)						_hx_tmp8 = ::hx::IsEq( child->attr->get(HX_("xmlns",dc,31,74,60)),HX_("jabber:x:data",c2,e1,e9,7c) );
             					}
             					else {
 HXLINE( 188)						_hx_tmp8 = true;
@@ -370,7 +373,7 @@ HXLINE( 189)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),
             				}
 HXLINE( 195)				bool _hx_tmp12;
 HXDLIN( 195)				if ((child->name == HX_("page",4f,da,51,4a))) {
-HXLINE( 195)					_hx_tmp12 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
+HXLINE( 195)					_hx_tmp12 = ::hx::IsEq( child->attr->get(HX_("xmlns",dc,31,74,60)),HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8) );
             				}
             				else {
 HXLINE( 195)					_hx_tmp12 = false;
diff --git a/Sources/c_borogove/src/borogove/FormField.cpp b/Sources/c_borogove/src/borogove/FormField.cpp
index 3fd645d..07e7bfc 100644
--- a/Sources/c_borogove/src/borogove/FormField.cpp
+++ b/Sources/c_borogove/src/borogove/FormField.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED__HaxeCBridge_HaxeArray_Impl_
 #include <_HaxeCBridge/HaxeArray_Impl_.h>
 #endif
@@ -22,8 +19,14 @@
 #ifndef INCLUDED_borogove__DataForm_Field_Impl_
 #include <borogove/_DataForm/Field_Impl_.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_088c849e9db23a84_195_new,"borogove.FormField","new",0x7db9c29b,"borogove.FormField.new","borogove/DataForm.hx",195,0x710703a2)
+HX_DEFINE_STACK_FRAME(_hx_pos_088c849e9db23a84_196_new,"borogove.FormField","new",0x7db9c29b,"borogove.FormField.new","borogove/DataForm.hx",196,0x710703a2)
 HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_478_name__fromC,"borogove.FormField","name__fromC",0xcbb1d2c9,"borogove.FormField.name__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_478_label__fromC,"borogove.FormField","label__fromC",0xdd73376a,"borogove.FormField.label__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_478_desc__fromC,"borogove.FormField","desc__fromC",0x436f1383,"borogove.FormField.desc__fromC","HaxeCBridge.hx",478,0xa18550d8)
@@ -36,125 +39,125 @@ HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_478_open__fromC,"borogove.FormFiel
 HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_478_rangeMin__fromC,"borogove.FormField","rangeMin__fromC",0x4b1e8bff,"borogove.FormField.rangeMin__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_478_rangeMax__fromC,"borogove.FormField","rangeMax__fromC",0xef8bb92d,"borogove.FormField.rangeMax__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_478_regex__fromC,"borogove.FormField","regex__fromC",0xdb3b26f7,"borogove.FormField.regex__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_088c849e9db23a84_180_boot,"borogove.FormField","boot",0x7ce98597,"borogove.FormField.boot","borogove/DataForm.hx",180,0x710703a2)
+HX_LOCAL_STACK_FRAME(_hx_pos_088c849e9db23a84_181_boot,"borogove.FormField","boot",0x7ce98597,"borogove.FormField.boot","borogove/DataForm.hx",181,0x710703a2)
 namespace borogove{
 
 void FormField_obj::__construct( ::borogove::Stanza field){
-            	HX_STACKFRAME(&_hx_pos_088c849e9db23a84_195_new)
-HXLINE( 196)		::String tmp = ( (::String)(::Reflect_obj::field(field->attr,HX_("var",e7,de,59,00))) );
-HXDLIN( 196)		::String _hx_tmp;
-HXDLIN( 196)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 196)			_hx_tmp = tmp;
+            	HX_STACKFRAME(&_hx_pos_088c849e9db23a84_196_new)
+HXLINE( 197)		::String tmp = field->attr->get_string(HX_("var",e7,de,59,00));
+HXDLIN( 197)		::String _hx_tmp;
+HXDLIN( 197)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 197)			_hx_tmp = tmp;
             		}
             		else {
-HXLINE( 196)			_hx_tmp = HX_("",00,00,00,00);
+HXLINE( 197)			_hx_tmp = HX_("",00,00,00,00);
             		}
-HXDLIN( 196)		this->name = _hx_tmp;
-HXLINE( 197)		this->label = ( (::String)(::Reflect_obj::field(field->attr,HX_("label",f4,0d,af,6f))) );
-HXLINE( 198)		this->desc = field->getChildText(HX_("desc",51,5e,66,42),null());
-HXLINE( 199)		this->value = ::borogove::_DataForm::Field_Impl__obj::get_value(field);
-HXLINE( 200)		this->required = ::hx::IsNotNull( field->getChild(HX_("required",5f,91,62,b2),null()) );
-HXLINE( 201)		::String attr = ( (::String)(::Reflect_obj::field(field->attr,HX_("type",ba,f2,08,4d))) );
-HXDLIN( 201)		::String _hx_tmp1;
-HXDLIN( 201)		if ((attr == HX_("jid-single",50,8e,f5,83))) {
-HXLINE( 201)			_hx_tmp1 = HX_("text-single",68,19,96,16);
+HXDLIN( 197)		this->name = _hx_tmp;
+HXLINE( 198)		this->label = field->attr->get_string(HX_("label",f4,0d,af,6f));
+HXLINE( 199)		this->desc = field->getChildText(HX_("desc",51,5e,66,42),null());
+HXLINE( 200)		this->value = ::borogove::_DataForm::Field_Impl__obj::get_value(field);
+HXLINE( 201)		this->required = ::hx::IsNotNull( field->getChild(HX_("required",5f,91,62,b2),null()) );
+HXLINE( 202)		::String attr = field->attr->get_string(HX_("type",ba,f2,08,4d));
+HXDLIN( 202)		::String _hx_tmp1;
+HXDLIN( 202)		if ((attr == HX_("jid-single",50,8e,f5,83))) {
+HXLINE( 202)			_hx_tmp1 = HX_("text-single",68,19,96,16);
             		}
             		else {
-HXLINE( 201)			if ((attr == HX_("jid-multi",b1,73,6d,1a))) {
-HXLINE( 201)				_hx_tmp1 = HX_("text-multi",99,d3,c0,10);
+HXLINE( 202)			if ((attr == HX_("jid-multi",b1,73,6d,1a))) {
+HXLINE( 202)				_hx_tmp1 = HX_("text-multi",99,d3,c0,10);
             			}
             			else {
-HXLINE( 201)				_hx_tmp1 = attr;
+HXLINE( 202)				_hx_tmp1 = attr;
             			}
             		}
-HXDLIN( 201)		this->type = _hx_tmp1;
-HXLINE( 202)		this->datatype = ::borogove::_DataForm::Field_Impl__obj::get_datatype(field);
-HXLINE( 203)		::Array< ::Dynamic> _this = ::borogove::_DataForm::Field_Impl__obj::get_options(field);
-HXDLIN( 203)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 203)		{
-HXLINE( 203)			int _g = 0;
-HXDLIN( 203)			int _g1 = _this->length;
-HXDLIN( 203)			while((_g < _g1)){
-HXLINE( 203)				_g = (_g + 1);
-HXDLIN( 203)				int i = (_g - 1);
-HXDLIN( 203)				{
-HXLINE( 203)					 ::borogove::Stanza o = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN( 203)					 ::borogove::FormOption inValue;
-HXDLIN( 203)					if (::hx::IsNull( o )) {
-HXLINE( 203)						inValue = null();
+HXDLIN( 202)		this->type = _hx_tmp1;
+HXLINE( 203)		this->datatype = ::borogove::_DataForm::Field_Impl__obj::get_datatype(field);
+HXLINE( 204)		::Array< ::Dynamic> _this = ::borogove::_DataForm::Field_Impl__obj::get_options(field);
+HXDLIN( 204)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 204)		{
+HXLINE( 204)			int _g = 0;
+HXDLIN( 204)			int _g1 = _this->length;
+HXDLIN( 204)			while((_g < _g1)){
+HXLINE( 204)				_g = (_g + 1);
+HXDLIN( 204)				int i = (_g - 1);
+HXDLIN( 204)				{
+HXLINE( 204)					 ::borogove::Stanza o = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) );
+HXDLIN( 204)					 ::borogove::FormOption inValue;
+HXDLIN( 204)					if (::hx::IsNull( o )) {
+HXLINE( 204)						inValue = null();
             					}
             					else {
-HXLINE( 203)						inValue = ::borogove::FormOption_obj::fromOption(o);
+HXLINE( 204)						inValue = ::borogove::FormOption_obj::fromOption(o);
             					}
-HXDLIN( 203)					result->__unsafe_set(i,inValue);
+HXDLIN( 204)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 203)		this->options = result;
-HXLINE( 204)		 ::borogove::Stanza validate = field->getChild(HX_("validate",96,d0,e3,04),HX_("http://jabber.org/protocol/xdata-validate",55,3c,d4,d4));
-HXDLIN( 204)		 ::borogove::Stanza _hx_tmp2;
-HXDLIN( 204)		if (::hx::IsNotNull( validate )) {
-HXLINE( 204)			_hx_tmp2 = validate->getChild(HX_("open",ca,03,b4,49),null());
+HXDLIN( 204)		this->options = result;
+HXLINE( 205)		 ::borogove::Stanza validate = field->getChild(HX_("validate",96,d0,e3,04),HX_("http://jabber.org/protocol/xdata-validate",55,3c,d4,d4));
+HXDLIN( 205)		 ::borogove::Stanza _hx_tmp2;
+HXDLIN( 205)		if (::hx::IsNotNull( validate )) {
+HXLINE( 205)			_hx_tmp2 = validate->getChild(HX_("open",ca,03,b4,49),null());
             		}
             		else {
-HXLINE( 204)			_hx_tmp2 = null();
+HXLINE( 205)			_hx_tmp2 = null();
             		}
-HXDLIN( 204)		this->open = ::hx::IsNotNull( _hx_tmp2 );
-HXLINE( 205)		 ::borogove::Stanza validate1 = field->getChild(HX_("validate",96,d0,e3,04),HX_("http://jabber.org/protocol/xdata-validate",55,3c,d4,d4));
-HXDLIN( 205)		 ::borogove::Stanza tmp1;
-HXDLIN( 205)		if (::hx::IsNotNull( validate1 )) {
-HXLINE( 205)			tmp1 = validate1->getChild(HX_("range",bd,a5,1f,e4),null());
+HXDLIN( 205)		this->open = ::hx::IsNotNull( _hx_tmp2 );
+HXLINE( 206)		 ::borogove::Stanza validate1 = field->getChild(HX_("validate",96,d0,e3,04),HX_("http://jabber.org/protocol/xdata-validate",55,3c,d4,d4));
+HXDLIN( 206)		 ::borogove::Stanza tmp1;
+HXDLIN( 206)		if (::hx::IsNotNull( validate1 )) {
+HXLINE( 206)			tmp1 = validate1->getChild(HX_("range",bd,a5,1f,e4),null());
             		}
             		else {
-HXLINE( 205)			tmp1 = null();
+HXLINE( 206)			tmp1 = null();
             		}
-HXDLIN( 205)		 ::Dynamic tmp2;
-HXDLIN( 205)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 205)			tmp2 = tmp1->attr;
+HXDLIN( 206)		 ::haxe::ds::StringMap tmp2;
+HXDLIN( 206)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 206)			tmp2 = tmp1->attr;
             		}
             		else {
-HXLINE( 205)			tmp2 = null();
+HXLINE( 206)			tmp2 = null();
             		}
-HXDLIN( 205)		::String _hx_tmp3;
-HXDLIN( 205)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 205)			_hx_tmp3 = ( (::String)(::Reflect_obj::field(tmp2,HX_("min",92,11,53,00))) );
+HXDLIN( 206)		::String _hx_tmp3;
+HXDLIN( 206)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 206)			_hx_tmp3 = tmp2->get_string(HX_("min",92,11,53,00));
             		}
             		else {
-HXLINE( 205)			_hx_tmp3 = null();
+HXLINE( 206)			_hx_tmp3 = null();
             		}
-HXDLIN( 205)		this->rangeMin = _hx_tmp3;
-HXLINE( 206)		 ::borogove::Stanza validate2 = field->getChild(HX_("validate",96,d0,e3,04),HX_("http://jabber.org/protocol/xdata-validate",55,3c,d4,d4));
-HXDLIN( 206)		 ::borogove::Stanza tmp3;
-HXDLIN( 206)		if (::hx::IsNotNull( validate2 )) {
-HXLINE( 206)			tmp3 = validate2->getChild(HX_("range",bd,a5,1f,e4),null());
+HXDLIN( 206)		this->rangeMin = _hx_tmp3;
+HXLINE( 207)		 ::borogove::Stanza validate2 = field->getChild(HX_("validate",96,d0,e3,04),HX_("http://jabber.org/protocol/xdata-validate",55,3c,d4,d4));
+HXDLIN( 207)		 ::borogove::Stanza tmp3;
+HXDLIN( 207)		if (::hx::IsNotNull( validate2 )) {
+HXLINE( 207)			tmp3 = validate2->getChild(HX_("range",bd,a5,1f,e4),null());
             		}
             		else {
-HXLINE( 206)			tmp3 = null();
+HXLINE( 207)			tmp3 = null();
             		}
-HXDLIN( 206)		 ::Dynamic tmp4;
-HXDLIN( 206)		if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 206)			tmp4 = tmp3->attr;
+HXDLIN( 207)		 ::haxe::ds::StringMap tmp4;
+HXDLIN( 207)		if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 207)			tmp4 = tmp3->attr;
             		}
             		else {
-HXLINE( 206)			tmp4 = null();
+HXLINE( 207)			tmp4 = null();
             		}
-HXDLIN( 206)		::String _hx_tmp4;
-HXDLIN( 206)		if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 206)			_hx_tmp4 = ( (::String)(::Reflect_obj::field(tmp4,HX_("max",a4,0a,53,00))) );
+HXDLIN( 207)		::String _hx_tmp4;
+HXDLIN( 207)		if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 207)			_hx_tmp4 = tmp4->get_string(HX_("max",a4,0a,53,00));
             		}
             		else {
-HXLINE( 206)			_hx_tmp4 = null();
+HXLINE( 207)			_hx_tmp4 = null();
             		}
-HXDLIN( 206)		this->rangeMax = _hx_tmp4;
-HXLINE( 207)		 ::borogove::Stanza validate3 = field->getChild(HX_("validate",96,d0,e3,04),HX_("http://jabber.org/protocol/xdata-validate",55,3c,d4,d4));
-HXDLIN( 207)		::String _hx_tmp5;
-HXDLIN( 207)		if (::hx::IsNotNull( validate3 )) {
-HXLINE( 207)			_hx_tmp5 = validate3->getChildText(HX_("regex",c7,2e,bf,e6),null());
+HXDLIN( 207)		this->rangeMax = _hx_tmp4;
+HXLINE( 208)		 ::borogove::Stanza validate3 = field->getChild(HX_("validate",96,d0,e3,04),HX_("http://jabber.org/protocol/xdata-validate",55,3c,d4,d4));
+HXDLIN( 208)		::String _hx_tmp5;
+HXDLIN( 208)		if (::hx::IsNotNull( validate3 )) {
+HXLINE( 208)			_hx_tmp5 = validate3->getChildText(HX_("regex",c7,2e,bf,e6),null());
             		}
             		else {
-HXLINE( 207)			_hx_tmp5 = null();
+HXLINE( 208)			_hx_tmp5 = null();
             		}
-HXDLIN( 207)		this->regex = _hx_tmp5;
+HXDLIN( 208)		this->regex = _hx_tmp5;
             	}
 
 Dynamic FormField_obj::__CreateEmpty() { return new FormField_obj; }
@@ -483,8 +486,8 @@ void FormField_obj::__register()
 void FormField_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_088c849e9db23a84_180_boot)
-HXDLIN( 180)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_088c849e9db23a84_181_boot)
+HXDLIN( 181)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(12)
             				->setFixed(0,HX_("desc__fromC",48,ee,23,86), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
diff --git a/Sources/c_borogove/src/borogove/FormLayoutSection.cpp b/Sources/c_borogove/src/borogove/FormLayoutSection.cpp
index b94b7a2..18e494c 100644
--- a/Sources/c_borogove/src/borogove/FormLayoutSection.cpp
+++ b/Sources/c_borogove/src/borogove/FormLayoutSection.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_borogove_FormField
 #include <borogove/FormField.h>
 #endif
@@ -22,6 +19,12 @@
 #ifndef INCLUDED_borogove__DataForm_DataForm_Impl_
 #include <borogove/_DataForm/DataForm_Impl_.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_45e75fb904d6662d_270_new,"borogove.FormLayoutSection","new",0x25c121bc,"borogove.FormLayoutSection.new","borogove/Form.hx",270,0x25d2f7ac)
 HX_LOCAL_STACK_FRAME(_hx_pos_45e75fb904d6662d_279_title,"borogove.FormLayoutSection","title",0x68a475f4,"borogove.FormLayoutSection.title","borogove/Form.hx",279,0x25d2f7ac)
@@ -67,7 +70,7 @@ void *FormLayoutSection_obj::_hx_getInterface(int inHash) {
 
 ::String FormLayoutSection_obj::title(){
             	HX_STACKFRAME(&_hx_pos_45e75fb904d6662d_279_title)
-HXDLIN( 279)		return ( (::String)(::Reflect_obj::field(this->section->attr,HX_("label",f4,0d,af,6f))) );
+HXDLIN( 279)		return this->section->attr->get_string(HX_("label",f4,0d,af,6f));
             	}
 
 
@@ -84,8 +87,8 @@ HXLINE( 287)				 ::borogove::Stanza child = _g1->__get(_g).StaticCast<  ::borogo
 HXDLIN( 287)				_g = (_g + 1);
 HXLINE( 288)				bool _hx_tmp;
 HXDLIN( 288)				if ((child->name == HX_("text",ad,cc,f9,4c))) {
-HXLINE( 288)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 288)						_hx_tmp = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
+HXLINE( 288)					if (::hx::IsNotNull( child->attr->get(HX_("xmlns",dc,31,74,60)) )) {
+HXLINE( 288)						_hx_tmp = ::hx::IsEq( child->attr->get(HX_("xmlns",dc,31,74,60)),HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8) );
             					}
             					else {
 HXLINE( 288)						_hx_tmp = true;
@@ -99,8 +102,8 @@ HXLINE( 289)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,child->
             				}
 HXLINE( 291)				bool _hx_tmp1;
 HXDLIN( 291)				if ((child->name == HX_("fieldref",d9,74,29,ac))) {
-HXLINE( 291)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 291)						_hx_tmp1 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
+HXLINE( 291)					if (::hx::IsNotNull( child->attr->get(HX_("xmlns",dc,31,74,60)) )) {
+HXLINE( 291)						_hx_tmp1 = ::hx::IsEq( child->attr->get(HX_("xmlns",dc,31,74,60)),HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8) );
             					}
             					else {
 HXLINE( 291)						_hx_tmp1 = true;
@@ -111,7 +114,7 @@ HXLINE( 291)					_hx_tmp1 = false;
             				}
 HXDLIN( 291)				if (_hx_tmp1) {
 HXLINE( 292)					 ::borogove::Stanza this1 = this->form;
-HXDLIN( 292)					 ::borogove::Stanza this2 = ::borogove::_DataForm::DataForm_Impl__obj::field(this1,( (::String)(::Reflect_obj::field(child->attr,HX_("var",e7,de,59,00))) ));
+HXDLIN( 292)					 ::borogove::Stanza this2 = ::borogove::_DataForm::DataForm_Impl__obj::field(this1,child->attr->get_string(HX_("var",e7,de,59,00)));
 HXDLIN( 292)					 ::borogove::FormField _hx_tmp2;
 HXDLIN( 292)					if (::hx::IsNull( this2 )) {
 HXLINE( 292)						_hx_tmp2 = null();
@@ -123,8 +126,8 @@ HXDLIN( 292)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),
             				}
 HXLINE( 294)				bool _hx_tmp3;
 HXDLIN( 294)				if ((child->name == HX_("reportedref",20,fd,c7,a6))) {
-HXLINE( 294)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 294)						_hx_tmp3 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
+HXLINE( 294)					if (::hx::IsNotNull( child->attr->get(HX_("xmlns",dc,31,74,60)) )) {
+HXLINE( 294)						_hx_tmp3 = ::hx::IsEq( child->attr->get(HX_("xmlns",dc,31,74,60)),HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8) );
             					}
             					else {
 HXLINE( 294)						_hx_tmp3 = true;
@@ -241,8 +244,8 @@ HXLINE( 295)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),
             				}
 HXLINE( 301)				bool _hx_tmp6;
 HXDLIN( 301)				if ((child->name == HX_("section",e5,05,d8,5d))) {
-HXLINE( 301)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 301)						_hx_tmp6 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
+HXLINE( 301)					if (::hx::IsNotNull( child->attr->get(HX_("xmlns",dc,31,74,60)) )) {
+HXLINE( 301)						_hx_tmp6 = ::hx::IsEq( child->attr->get(HX_("xmlns",dc,31,74,60)),HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8) );
             					}
             					else {
 HXLINE( 301)						_hx_tmp6 = true;
diff --git a/Sources/c_borogove/src/borogove/FormOption.cpp b/Sources/c_borogove/src/borogove/FormOption.cpp
index 2b8381a..54ccef2 100644
--- a/Sources/c_borogove/src/borogove/FormOption.cpp
+++ b/Sources/c_borogove/src/borogove/FormOption.cpp
@@ -1,41 +1,44 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_borogove_FormOption
 #include <borogove/FormOption.h>
 #endif
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_a7d595b8126d2317_221_new,"borogove.FormOption","new",0xfe881c18,"borogove.FormOption.new","borogove/DataForm.hx",221,0x710703a2)
+HX_DEFINE_STACK_FRAME(_hx_pos_a7d595b8126d2317_222_new,"borogove.FormOption","new",0xfe881c18,"borogove.FormOption.new","borogove/DataForm.hx",222,0x710703a2)
 HX_LOCAL_STACK_FRAME(_hx_pos_ecda2718ab159179_478_label__fromC,"borogove.FormOption","label__fromC",0x9aee464d,"borogove.FormOption.label__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_ecda2718ab159179_478_value__fromC,"borogove.FormOption","value__fromC",0x4e06ae70,"borogove.FormOption.value__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a7d595b8126d2317_228_fromOption,"borogove.FormOption","fromOption",0x42bbf3c7,"borogove.FormOption.fromOption","borogove/DataForm.hx",228,0x710703a2)
-HX_LOCAL_STACK_FRAME(_hx_pos_a7d595b8126d2317_216_boot,"borogove.FormOption","boot",0xb0a9797a,"borogove.FormOption.boot","borogove/DataForm.hx",216,0x710703a2)
+HX_LOCAL_STACK_FRAME(_hx_pos_a7d595b8126d2317_229_fromOption,"borogove.FormOption","fromOption",0x42bbf3c7,"borogove.FormOption.fromOption","borogove/DataForm.hx",229,0x710703a2)
+HX_LOCAL_STACK_FRAME(_hx_pos_a7d595b8126d2317_217_boot,"borogove.FormOption","boot",0xb0a9797a,"borogove.FormOption.boot","borogove/DataForm.hx",217,0x710703a2)
 namespace borogove{
 
 void FormOption_obj::__construct(::String label,::String value){
-            	HX_STACKFRAME(&_hx_pos_a7d595b8126d2317_221_new)
-HXLINE( 222)		::String _hx_tmp;
-HXDLIN( 222)		if (::hx::IsNotNull( label )) {
-HXLINE( 222)			_hx_tmp = label;
+            	HX_STACKFRAME(&_hx_pos_a7d595b8126d2317_222_new)
+HXLINE( 223)		::String _hx_tmp;
+HXDLIN( 223)		if (::hx::IsNotNull( label )) {
+HXLINE( 223)			_hx_tmp = label;
             		}
             		else {
-HXLINE( 222)			_hx_tmp = value;
+HXLINE( 223)			_hx_tmp = value;
             		}
-HXDLIN( 222)		this->label = _hx_tmp;
-HXLINE( 223)		::String _hx_tmp1;
-HXDLIN( 223)		if (::hx::IsNotNull( value )) {
-HXLINE( 223)			_hx_tmp1 = value;
+HXDLIN( 223)		this->label = _hx_tmp;
+HXLINE( 224)		::String _hx_tmp1;
+HXDLIN( 224)		if (::hx::IsNotNull( value )) {
+HXLINE( 224)			_hx_tmp1 = value;
             		}
             		else {
-HXLINE( 223)			_hx_tmp1 = HX_("",00,00,00,00);
+HXLINE( 224)			_hx_tmp1 = HX_("",00,00,00,00);
             		}
-HXDLIN( 223)		this->value = _hx_tmp1;
+HXDLIN( 224)		this->value = _hx_tmp1;
             	}
 
 Dynamic FormOption_obj::__CreateEmpty() { return new FormOption_obj; }
@@ -70,9 +73,9 @@ HXDLIN( 478)		return this->value;
 HX_DEFINE_DYNAMIC_FUNC0(FormOption_obj,value__fromC,return )
 
  ::borogove::FormOption FormOption_obj::fromOption( ::borogove::Stanza option){
-            	HX_GC_STACKFRAME(&_hx_pos_a7d595b8126d2317_228_fromOption)
-HXDLIN( 228)		::String _hx_tmp = ( (::String)(::Reflect_obj::field(option->attr,HX_("label",f4,0d,af,6f))) );
-HXDLIN( 228)		return  ::borogove::FormOption_obj::__alloc( HX_CTX ,_hx_tmp,option->getChildText(HX_("value",71,7f,b8,31),null()));
+            	HX_GC_STACKFRAME(&_hx_pos_a7d595b8126d2317_229_fromOption)
+HXDLIN( 229)		::String _hx_tmp = option->attr->get_string(HX_("label",f4,0d,af,6f));
+HXDLIN( 229)		return  ::borogove::FormOption_obj::__alloc( HX_CTX ,_hx_tmp,option->getChildText(HX_("value",71,7f,b8,31),null()));
             	}
 
 
@@ -186,8 +189,8 @@ void FormOption_obj::__register()
 void FormOption_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_a7d595b8126d2317_216_boot)
-HXDLIN( 216)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_a7d595b8126d2317_217_boot)
+HXDLIN( 217)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("value__fromC",28,31,16,ac), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
diff --git a/Sources/c_borogove/src/borogove/FormSubmitBuilder.cpp b/Sources/c_borogove/src/borogove/FormSubmitBuilder.cpp
index b7a006b..a995460 100644
--- a/Sources/c_borogove/src/borogove/FormSubmitBuilder.cpp
+++ b/Sources/c_borogove/src/borogove/FormSubmitBuilder.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_borogove_FormSubmitBuilder
 #include <borogove/FormSubmitBuilder.h>
 #endif
@@ -66,7 +63,7 @@ HX_DEFINE_DYNAMIC_FUNC2(FormSubmitBuilder_obj,add,(void))
             	HX_GC_STACKFRAME(&_hx_pos_4c0d9a76469df0f6_96_submit)
 HXLINE(  97)		 ::borogove::Stanza toSubmit =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))));
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null());
 HXLINE(  98)		if (::hx::IsNotNull( form )) {
 HXLINE(  99)			int _g = 0;
 HXDLIN(  99)			::Array< ::Dynamic> _g1 = form->allTags(HX_("field",ba,94,93,00),null());
@@ -76,7 +73,7 @@ HXDLIN(  99)				_g = (_g + 1);
 HXLINE( 100)				bool _hx_tmp;
 HXDLIN( 100)				::Dynamic this1 = this->data;
 HXDLIN( 100)				::String key;
-HXDLIN( 100)				::String tmp = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
+HXDLIN( 100)				::String tmp = f->attr->get_string(HX_("var",e7,de,59,00));
 HXDLIN( 100)				if (::hx::IsNotNull( tmp )) {
 HXLINE( 100)					key = tmp;
             				}
@@ -90,7 +87,7 @@ HXLINE( 100)					_hx_tmp = (::borogove::_DataForm::Field_Impl__obj::get_value(f)
 HXLINE( 100)					_hx_tmp = false;
             				}
 HXDLIN( 100)				if (_hx_tmp) {
-HXLINE( 101)					::String tmp1 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
+HXLINE( 101)					::String tmp1 = f->attr->get_string(HX_("var",e7,de,59,00));
 HXDLIN( 101)					::String tag;
 HXDLIN( 101)					if (::hx::IsNotNull( tmp1 )) {
 HXLINE( 101)						tag = tmp1;
@@ -99,14 +96,14 @@ HXLINE( 101)						tag = tmp1;
 HXLINE( 101)						tag = HX_("",00,00,00,00);
             					}
 HXDLIN( 101)					 ::borogove::Stanza tag1 = toSubmit->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("var",e7,de,59,00),tag)));
+            						->setFixed(0,HX_("var",e7,de,59,00),tag)),null());
 HXLINE( 102)					{
 HXLINE( 102)						int _g2 = 0;
 HXDLIN( 102)						::Array< ::String > _g3 = ::borogove::_DataForm::Field_Impl__obj::get_value(f);
 HXDLIN( 102)						while((_g2 < _g3->length)){
 HXLINE( 102)							::String v = _g3->__get(_g2);
 HXDLIN( 102)							_g2 = (_g2 + 1);
-HXLINE( 103)							tag1->textTag(HX_("value",71,7f,b8,31),v,null());
+HXLINE( 103)							tag1->textTag(HX_("value",71,7f,b8,31),v,null(),null());
             						}
             					}
 HXLINE( 105)					tag1->up();
@@ -116,7 +113,7 @@ HXLINE( 106)					bool _hx_tmp1;
 HXDLIN( 106)					if (::hx::IsNotNull( f->getChild(HX_("required",5f,91,62,b2),null()) )) {
 HXLINE( 106)						::Dynamic this2 = this->data;
 HXDLIN( 106)						::String key1;
-HXDLIN( 106)						::String tmp2 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
+HXDLIN( 106)						::String tmp2 = f->attr->get_string(HX_("var",e7,de,59,00));
 HXDLIN( 106)						if (::hx::IsNotNull( tmp2 )) {
 HXLINE( 106)							key1 = tmp2;
             						}
@@ -126,7 +123,7 @@ HXLINE( 106)							key1 = HX_("",00,00,00,00);
 HXDLIN( 106)						if (::hx::IsNotNull( ( ( ::haxe::ds::StringMap)(this2) )->get(key1) )) {
 HXLINE( 106)							::Dynamic this3 = this->data;
 HXDLIN( 106)							::String key2;
-HXDLIN( 106)							::String tmp3 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
+HXDLIN( 106)							::String tmp3 = f->attr->get_string(HX_("var",e7,de,59,00));
 HXDLIN( 106)							if (::hx::IsNotNull( tmp3 )) {
 HXLINE( 106)								key2 = tmp3;
             							}
@@ -144,7 +141,7 @@ HXLINE( 106)						_hx_tmp1 = false;
             					}
 HXDLIN( 106)					if (_hx_tmp1) {
 HXLINE( 107)						 ::Dynamic _hx_tmp2 = ::haxe::Log_obj::trace;
-HXDLIN( 107)						::String tmp4 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
+HXDLIN( 107)						::String tmp4 = f->attr->get_string(HX_("var",e7,de,59,00));
 HXDLIN( 107)						::String _hx_tmp3;
 HXDLIN( 107)						if (::hx::IsNotNull( tmp4 )) {
 HXLINE( 107)							_hx_tmp3 = tmp4;
@@ -171,13 +168,13 @@ HXLINE( 112)				::String key3 = ( (::String)(_g_keys->__Field(HX_("next",f3,84,0
 HXDLIN( 112)				::Array< ::String > _g_value = ( (::Array< ::String >)(::haxe::IMap_obj::get(this4,key3)) );
 HXDLIN( 112)				{
 HXLINE( 113)					 ::borogove::Stanza tag2 = toSubmit->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("var",e7,de,59,00),key3)));
+            						->setFixed(0,HX_("var",e7,de,59,00),key3)),null());
 HXLINE( 114)					{
 HXLINE( 114)						int _g4 = 0;
 HXDLIN( 114)						while((_g4 < _g_value->length)){
 HXLINE( 114)							::String v1 = _g_value->__get(_g4);
 HXDLIN( 114)							_g4 = (_g4 + 1);
-HXLINE( 115)							tag2->textTag(HX_("value",71,7f,b8,31),v1,null());
+HXLINE( 115)							tag2->textTag(HX_("value",71,7f,b8,31),v1,null(),null());
             						}
             					}
 HXLINE( 117)					tag2->up();
diff --git a/Sources/c_borogove/src/borogove/GenericStream.cpp b/Sources/c_borogove/src/borogove/GenericStream.cpp
index f46b49f..f5a5376 100644
--- a/Sources/c_borogove/src/borogove/GenericStream.cpp
+++ b/Sources/c_borogove/src/borogove/GenericStream.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED__UUIDv7_UUIDv7_Fields_
 #include <_UUIDv7/UUIDv7_Fields_.h>
 #endif
@@ -25,9 +22,15 @@
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
 #ifndef INCLUDED_haxe_Log
 #include <haxe/Log.h>
 #endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_b33ef4a473e70a2a_14_new,"borogove.GenericStream","new",0x7d32e5bc,"borogove.GenericStream.new","borogove/GenericStream.hx",14,0xe1a5f735)
 HX_LOCAL_STACK_FRAME(_hx_pos_b33ef4a473e70a2a_34_sendIq,"borogove.GenericStream","sendIq",0x22505b74,"borogove.GenericStream.sendIq","borogove/GenericStream.hx",34,0xe1a5f735)
@@ -70,7 +73,7 @@ HXLINE(  36)			return ::borogove::EventResult_obj::EventHandled_dyn();
 
             	HX_STACKFRAME(&_hx_pos_b33ef4a473e70a2a_31_sendIq)
 HXLINE(  32)		::String id = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXLINE(  33)		::Reflect_obj::setField(stanza->attr,HX_("id",db,5b,00,00),id);
+HXLINE(  33)		stanza->attr->set(HX_("id",db,5b,00,00),id);
 HXLINE(  34)		this->once((HX_("iq-response/",a9,62,d4,cf) + id), ::Dynamic(new _hx_Closure_0(callback)));
 HXLINE(  38)		this->sendStanza(stanza);
             	}
@@ -81,10 +84,10 @@ HX_DEFINE_DYNAMIC_FUNC2(GenericStream_obj,sendIq,(void))
 void GenericStream_obj::onStanza( ::borogove::Stanza stanza){
             	HX_STACKFRAME(&_hx_pos_b33ef4a473e70a2a_41_onStanza)
 HXLINE(  42)		::haxe::Log_obj::trace(HX_("stanza received!",f5,75,78,a6),::hx::SourceInfo(HX_("borogove/GenericStream.hx",35,f7,a5,e1),42,HX_("borogove.GenericStream",ca,97,ee,7e),HX_("onStanza",74,54,a4,e5)));
-HXLINE(  44)		if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:client",21,64,c5,e4))) {
+HXLINE(  44)		if (::hx::IsEq( stanza->attr->get(HX_("xmlns",dc,31,74,60)),HX_("jabber:client",21,64,c5,e4) )) {
 HXLINE(  45)			::String name = stanza->name;
 HXLINE(  46)			if ((name == HX_("iq",e8,5b,00,00))) {
-HXLINE(  47)				::String type = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) );
+HXLINE(  47)				::String type = stanza->attr->get_string(HX_("type",ba,f2,08,4d));
 HXLINE(  48)				::haxe::Log_obj::trace((HX_("type: ",e0,c7,36,57) + type),::hx::SourceInfo(HX_("borogove/GenericStream.hx",35,f7,a5,e1),48,HX_("borogove.GenericStream",ca,97,ee,7e),HX_("onStanza",74,54,a4,e5)));
 HXLINE(  49)				bool _hx_tmp;
 HXDLIN(  49)				if ((type != HX_("result",dd,68,84,08))) {
@@ -94,7 +97,7 @@ HXLINE(  49)					_hx_tmp = (type == HX_("error",c8,cb,29,73));
 HXLINE(  49)					_hx_tmp = true;
             				}
 HXDLIN(  49)				if (_hx_tmp) {
-HXLINE(  51)					::String _hx_tmp1 = (HX_("iq-response/",a9,62,d4,cf) + ( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) ));
+HXLINE(  51)					::String _hx_tmp1 = (HX_("iq-response/",a9,62,d4,cf) + stanza->attr->get(HX_("id",db,5b,00,00)));
 HXDLIN(  51)					this->trigger(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("stanza",f5,5d,f7,05),stanza)));
             				}
diff --git a/Sources/c_borogove/src/borogove/Hash.cpp b/Sources/c_borogove/src/borogove/Hash.cpp
index 6cb539e..4e586fb 100644
--- a/Sources/c_borogove/src/borogove/Hash.cpp
+++ b/Sources/c_borogove/src/borogove/Hash.cpp
@@ -10,12 +10,15 @@
 #ifndef INCLUDED_borogove_Hash
 #include <borogove/Hash.h>
 #endif
+#ifndef INCLUDED_borogove_IncrementalHash
+#include <borogove/IncrementalHash.h>
+#endif
+#ifndef INCLUDED_borogove_Sha1
+#include <borogove/Sha1.h>
+#endif
 #ifndef INCLUDED_haxe_crypto_Base64
 #include <haxe/crypto/Base64.h>
 #endif
-#ifndef INCLUDED_haxe_crypto_Sha1
-#include <haxe/crypto/Sha1.h>
-#endif
 #ifndef INCLUDED_haxe_crypto_Sha256
 #include <haxe/crypto/Sha256.h>
 #endif
@@ -23,25 +26,29 @@
 #include <haxe/io/Bytes.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_31_new,"borogove.Hash","new",0xd16baecd,"borogove.Hash.new","borogove/Hash.hx",31,0x70175b62)
+HX_DEFINE_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_30_new,"borogove.Hash","new",0xd16baecd,"borogove.Hash.new","borogove/Hash.hx",30,0x70175b62)
 HX_LOCAL_STACK_FRAME(_hx_pos_cf3f028669fb61f2_478_algorithm__fromC,"borogove.Hash","algorithm__fromC",0xe5eca15d,"borogove.Hash.algorithm__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_89_toUri,"borogove.Hash","toUri",0x41b8f05e,"borogove.Hash.toUri","borogove/Hash.hx",89,0x70175b62)
-HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_98_bobUri,"borogove.Hash","bobUri",0x162eb02a,"borogove.Hash.bobUri","borogove/Hash.hx",98,0x70175b62)
-HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_103_serializeUri,"borogove.Hash","serializeUri",0x8327dd5f,"borogove.Hash.serializeUri","borogove/Hash.hx",103,0x70175b62)
-HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_112_toHex,"borogove.Hash","toHex",0x41af07cd,"borogove.Hash.toHex","borogove/Hash.hx",112,0x70175b62)
-HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_121_toBase64,"borogove.Hash","toBase64",0x26f05bdd,"borogove.Hash.toBase64","borogove/Hash.hx",121,0x70175b62)
-HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_130_toBase64Url,"borogove.Hash","toBase64Url",0x87cf8f92,"borogove.Hash.toBase64Url","borogove/Hash.hx",130,0x70175b62)
-HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_44_fromHex,"borogove.Hash","fromHex",0xb8062c7e,"borogove.Hash.fromHex","borogove/Hash.hx",44,0x70175b62)
-HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_57_fromUri,"borogove.Hash","fromUri",0xb810150f,"borogove.Hash.fromUri","borogove/Hash.hx",57,0x70175b62)
-HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_75_sha1,"borogove.Hash","sha1",0x701d8978,"borogove.Hash.sha1","borogove/Hash.hx",75,0x70175b62)
-HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_80_sha256,"borogove.Hash","sha256",0xd9adc81a,"borogove.Hash.sha256","borogove/Hash.hx",80,0x70175b62)
-HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_22_boot,"borogove.Hash","boot",0x64e64525,"borogove.Hash.boot","borogove/Hash.hx",22,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_105_toUri,"borogove.Hash","toUri",0x41b8f05e,"borogove.Hash.toUri","borogove/Hash.hx",105,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_114_bobUri,"borogove.Hash","bobUri",0x162eb02a,"borogove.Hash.bobUri","borogove/Hash.hx",114,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_119_serializeUri,"borogove.Hash","serializeUri",0x8327dd5f,"borogove.Hash.serializeUri","borogove/Hash.hx",119,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_128_toHex,"borogove.Hash","toHex",0x41af07cd,"borogove.Hash.toHex","borogove/Hash.hx",128,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_137_toBase64,"borogove.Hash","toBase64",0x26f05bdd,"borogove.Hash.toBase64","borogove/Hash.hx",137,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_146_toBase64Url,"borogove.Hash","toBase64Url",0x87cf8f92,"borogove.Hash.toBase64Url","borogove/Hash.hx",146,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_150_equals,"borogove.Hash","equals",0x7ca611f2,"borogove.Hash.equals","borogove/Hash.hx",150,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_43_fromHex,"borogove.Hash","fromHex",0xb8062c7e,"borogove.Hash.fromHex","borogove/Hash.hx",43,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_56_fromUri,"borogove.Hash","fromUri",0xb810150f,"borogove.Hash.fromUri","borogove/Hash.hx",56,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_73_mk,"borogove.Hash","mk",0x36e4ed91,"borogove.Hash.mk","borogove/Hash.hx",73,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_81_sha1,"borogove.Hash","sha1",0x701d8978,"borogove.Hash.sha1","borogove/Hash.hx",81,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_86_sha1incr,"borogove.Hash","sha1incr",0x85e6db4c,"borogove.Hash.sha1incr","borogove/Hash.hx",86,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_91_sha256,"borogove.Hash","sha256",0xd9adc81a,"borogove.Hash.sha256","borogove/Hash.hx",91,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_96_sha256incr,"borogove.Hash","sha256incr",0x165812ee,"borogove.Hash.sha256incr","borogove/Hash.hx",96,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_21_boot,"borogove.Hash","boot",0x64e64525,"borogove.Hash.boot","borogove/Hash.hx",21,0x70175b62)
 namespace borogove{
 
 void Hash_obj::__construct(::String algorithm,::Array< unsigned char > hash){
-            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_31_new)
-HXLINE(  32)		this->algorithm = algorithm;
-HXLINE(  33)		this->hash = hash;
+            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_30_new)
+HXLINE(  31)		this->algorithm = algorithm;
+HXLINE(  32)		this->hash = hash;
             	}
 
 Dynamic Hash_obj::__CreateEmpty() { return new Hash_obj; }
@@ -68,157 +75,203 @@ HXDLIN( 478)		return this->algorithm;
 HX_DEFINE_DYNAMIC_FUNC0(Hash_obj,algorithm__fromC,return )
 
 ::String Hash_obj::toUri(){
-            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_89_toUri)
-HXDLIN(  89)		if (::borogove::Config_obj::relativeHashUri) {
-HXLINE(  90)			::String _hx_tmp = ((HX_("/.well-known/ni/",e8,1b,93,12) + ::StringTools_obj::urlEncode(this->algorithm)) + HX_("/",2f,00,00,00));
-HXDLIN(  90)			return (_hx_tmp + this->toBase64Url());
+            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_105_toUri)
+HXDLIN( 105)		if (::borogove::Config_obj::relativeHashUri) {
+HXLINE( 106)			::String _hx_tmp = ((HX_("/.well-known/ni/",e8,1b,93,12) + ::StringTools_obj::urlEncode(this->algorithm)) + HX_("/",2f,00,00,00));
+HXDLIN( 106)			return (_hx_tmp + this->toBase64Url());
             		}
             		else {
-HXLINE(  92)			return this->serializeUri();
+HXLINE( 108)			return this->serializeUri();
             		}
-HXLINE(  89)		return null();
+HXLINE( 105)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Hash_obj,toUri,return )
 
 ::String Hash_obj::bobUri(){
-            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_98_bobUri)
-HXDLIN(  98)		::String _hx_tmp;
-HXDLIN(  98)		if ((this->algorithm == HX_("sha-1",90,a8,1c,7c))) {
-HXDLIN(  98)			_hx_tmp = HX_("sha1",85,c8,52,4c);
+            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_114_bobUri)
+HXDLIN( 114)		::String _hx_tmp;
+HXDLIN( 114)		if ((this->algorithm == HX_("sha-1",90,a8,1c,7c))) {
+HXDLIN( 114)			_hx_tmp = HX_("sha1",85,c8,52,4c);
             		}
             		else {
-HXDLIN(  98)			_hx_tmp = ::StringTools_obj::urlEncode(this->algorithm);
+HXDLIN( 114)			_hx_tmp = ::StringTools_obj::urlEncode(this->algorithm);
             		}
-HXDLIN(  98)		return ((((HX_("cid:",7c,23,c0,41) + _hx_tmp) + HX_("+",2b,00,00,00)) + this->toHex()) + HX_("@bob.xmpp.org",04,79,99,e7));
+HXDLIN( 114)		return ((((HX_("cid:",7c,23,c0,41) + _hx_tmp) + HX_("+",2b,00,00,00)) + this->toHex()) + HX_("@bob.xmpp.org",04,79,99,e7));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Hash_obj,bobUri,return )
 
 ::String Hash_obj::serializeUri(){
-            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_103_serializeUri)
-HXDLIN( 103)		::String _hx_tmp = ((HX_("ni:///",d0,cc,ce,96) + ::StringTools_obj::urlEncode(this->algorithm)) + HX_(";",3b,00,00,00));
-HXDLIN( 103)		return (_hx_tmp + this->toBase64Url());
+            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_119_serializeUri)
+HXDLIN( 119)		::String _hx_tmp = ((HX_("ni:///",d0,cc,ce,96) + ::StringTools_obj::urlEncode(this->algorithm)) + HX_(";",3b,00,00,00));
+HXDLIN( 119)		return (_hx_tmp + this->toBase64Url());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Hash_obj,serializeUri,return )
 
 ::String Hash_obj::toHex(){
-            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_112_toHex)
-HXDLIN( 112)		return ::haxe::io::Bytes_obj::ofData(this->hash)->toHex();
+            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_128_toHex)
+HXDLIN( 128)		return ::haxe::io::Bytes_obj::ofData(this->hash)->toHex();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Hash_obj,toHex,return )
 
 ::String Hash_obj::toBase64(){
-            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_121_toBase64)
-HXDLIN( 121)		return ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofData(this->hash),true);
+            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_137_toBase64)
+HXDLIN( 137)		return ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofData(this->hash),true);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Hash_obj,toBase64,return )
 
 ::String Hash_obj::toBase64Url(){
-            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_130_toBase64Url)
-HXDLIN( 130)		return ::haxe::crypto::Base64_obj::urlEncode(::haxe::io::Bytes_obj::ofData(this->hash),null());
+            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_146_toBase64Url)
+HXDLIN( 146)		return ::haxe::crypto::Base64_obj::urlEncode(::haxe::io::Bytes_obj::ofData(this->hash),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Hash_obj,toBase64Url,return )
 
+bool Hash_obj::equals( ::borogove::Hash other){
+            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_150_equals)
+HXDLIN( 150)		::String _hx_tmp = this->serializeUri();
+HXDLIN( 150)		return (_hx_tmp == other->serializeUri());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Hash_obj,equals,return )
+
  ::borogove::Hash Hash_obj::fromHex(::String algorithm,::String hash){
-            	HX_GC_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_44_fromHex)
-HXDLIN(  44)		try {
+            	HX_GC_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_43_fromHex)
+HXDLIN(  43)		try {
             			HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE(  45)			return  ::borogove::Hash_obj::__alloc( HX_CTX ,algorithm,::haxe::io::Bytes_obj::ofHex(hash)->b);
+HXLINE(  44)			return  ::borogove::Hash_obj::__alloc( HX_CTX ,algorithm,::haxe::io::Bytes_obj::ofHex(hash)->b);
             		} catch( ::Dynamic _hx_e) {
             			if (_hx_e.IsClass<  ::Dynamic >() ){
             				HX_STACK_BEGIN_CATCH
             				 ::Dynamic _g = _hx_e;
-HXLINE(  47)				return null();
+HXLINE(  46)				return null();
             			}
             			else {
             				HX_STACK_DO_THROW(_hx_e);
             			}
             		}
-HXLINE(  44)		return null();
+HXLINE(  43)		return null();
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC2(Hash_obj,fromHex,return )
 
  ::borogove::Hash Hash_obj::fromUri(::String uri){
-            	HX_GC_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_57_fromUri)
-HXLINE(  58)		bool _hx_tmp;
-HXDLIN(  58)		bool _hx_tmp1;
-HXDLIN(  58)		if (::StringTools_obj::startsWith(uri,HX_("cid:",7c,23,c0,41))) {
-HXLINE(  58)			_hx_tmp1 = ::StringTools_obj::endsWith(uri,HX_("@bob.xmpp.org",04,79,99,e7));
+            	HX_GC_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_56_fromUri)
+HXLINE(  57)		bool _hx_tmp;
+HXDLIN(  57)		bool _hx_tmp1;
+HXDLIN(  57)		if (::StringTools_obj::startsWith(uri,HX_("cid:",7c,23,c0,41))) {
+HXLINE(  57)			_hx_tmp1 = ::StringTools_obj::endsWith(uri,HX_("@bob.xmpp.org",04,79,99,e7));
             		}
             		else {
-HXLINE(  58)			_hx_tmp1 = false;
+HXLINE(  57)			_hx_tmp1 = false;
             		}
-HXDLIN(  58)		if (_hx_tmp1) {
-HXLINE(  58)			_hx_tmp = (uri.indexOf(HX_("+",2b,00,00,00),null()) != -1);
+HXDLIN(  57)		if (_hx_tmp1) {
+HXLINE(  57)			_hx_tmp = (uri.indexOf(HX_("+",2b,00,00,00),null()) != -1);
             		}
             		else {
-HXLINE(  58)			_hx_tmp = false;
+HXLINE(  57)			_hx_tmp = false;
             		}
-HXDLIN(  58)		if (_hx_tmp) {
-HXLINE(  59)			::Array< ::String > parts = uri.substr(4,null()).split(HX_("@",40,00,00,00))->__get(0).split(HX_("+",2b,00,00,00));
-HXLINE(  60)			::String algo;
-HXDLIN(  60)			if ((parts->__get(0) == HX_("sha1",85,c8,52,4c))) {
-HXLINE(  60)				algo = HX_("sha-1",90,a8,1c,7c);
+HXDLIN(  57)		if (_hx_tmp) {
+HXLINE(  58)			::Array< ::String > parts = uri.substr(4,null()).split(HX_("@",40,00,00,00))->__get(0).split(HX_("+",2b,00,00,00));
+HXLINE(  59)			::String algo;
+HXDLIN(  59)			if ((parts->__get(0) == HX_("sha1",85,c8,52,4c))) {
+HXLINE(  59)				algo = HX_("sha-1",90,a8,1c,7c);
             			}
             			else {
-HXLINE(  60)				algo = parts->__get(0);
+HXLINE(  59)				algo = parts->__get(0);
             			}
-HXLINE(  61)			return ::borogove::Hash_obj::fromHex(algo,parts->__get(1));
+HXLINE(  60)			return ::borogove::Hash_obj::fromHex(algo,parts->__get(1));
             		}
-HXLINE(  62)		bool _hx_tmp2;
-HXDLIN(  62)		if (::StringTools_obj::startsWith(uri,HX_("ni:///",d0,cc,ce,96))) {
-HXLINE(  62)			_hx_tmp2 = (uri.indexOf(HX_(";",3b,00,00,00),null()) != -1);
+HXLINE(  61)		bool _hx_tmp2;
+HXDLIN(  61)		if (::StringTools_obj::startsWith(uri,HX_("ni:///",d0,cc,ce,96))) {
+HXLINE(  61)			_hx_tmp2 = (uri.indexOf(HX_(";",3b,00,00,00),null()) != -1);
             		}
             		else {
-HXLINE(  62)			_hx_tmp2 = false;
+HXLINE(  61)			_hx_tmp2 = false;
             		}
-HXDLIN(  62)		if (_hx_tmp2) {
-HXLINE(  63)			::Array< ::String > parts1 = uri.substring(6,null()).split(HX_(";",3b,00,00,00));
-HXLINE(  64)			::String parts2 = parts1->__get(0);
-HXDLIN(  64)			return  ::borogove::Hash_obj::__alloc( HX_CTX ,parts2,::haxe::crypto::Base64_obj::urlDecode(parts1->__get(1),null())->b);
+HXDLIN(  61)		if (_hx_tmp2) {
+HXLINE(  62)			::Array< ::String > parts1 = uri.substring(6,null()).split(HX_(";",3b,00,00,00));
+HXLINE(  63)			::String parts2 = parts1->__get(0);
+HXDLIN(  63)			return  ::borogove::Hash_obj::__alloc( HX_CTX ,parts2,::haxe::crypto::Base64_obj::urlDecode(parts1->__get(1),null())->b);
             		}
             		else {
-HXLINE(  65)			if (::StringTools_obj::startsWith(uri,HX_("/.well-known/ni/",e8,1b,93,12))) {
-HXLINE(  66)				::Array< ::String > parts3 = uri.substring(16,null()).split(HX_("/",2f,00,00,00));
-HXLINE(  67)				::String parts4 = parts3->__get(0);
-HXDLIN(  67)				return  ::borogove::Hash_obj::__alloc( HX_CTX ,parts4,::haxe::crypto::Base64_obj::urlDecode(parts3->__get(1),null())->b);
+HXLINE(  64)			if (::StringTools_obj::startsWith(uri,HX_("/.well-known/ni/",e8,1b,93,12))) {
+HXLINE(  65)				::Array< ::String > parts3 = uri.substring(16,null()).split(HX_("/",2f,00,00,00));
+HXLINE(  66)				::String parts4 = parts3->__get(0);
+HXDLIN(  66)				return  ::borogove::Hash_obj::__alloc( HX_CTX ,parts4,::haxe::crypto::Base64_obj::urlDecode(parts3->__get(1),null())->b);
             			}
             		}
-HXLINE(  70)		return null();
+HXLINE(  69)		return null();
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Hash_obj,fromUri,return )
 
+ ::borogove::Hash Hash_obj::mk(::String algorithm, ::haxe::io::Bytes bytes){
+            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_73_mk)
+HXLINE(  74)		bool _hx_tmp;
+HXDLIN(  74)		if ((algorithm != HX_("sha-1",90,a8,1c,7c))) {
+HXLINE(  74)			_hx_tmp = (algorithm == HX_("sha1",85,c8,52,4c));
+            		}
+            		else {
+HXLINE(  74)			_hx_tmp = true;
+            		}
+HXDLIN(  74)		if (_hx_tmp) {
+HXLINE(  74)			return ::borogove::Hash_obj::sha1(bytes);
+            		}
+HXLINE(  75)		if ((algorithm == HX_("sha-256",32,dd,04,3b))) {
+HXLINE(  75)			return ::borogove::Hash_obj::sha256(bytes);
+            		}
+HXLINE(  76)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(Hash_obj,mk,return )
+
  ::borogove::Hash Hash_obj::sha1( ::haxe::io::Bytes bytes){
-            	HX_GC_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_75_sha1)
-HXDLIN(  75)		return  ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-1",90,a8,1c,7c),::haxe::crypto::Sha1_obj::make(bytes)->b);
+            	HX_GC_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_81_sha1)
+HXDLIN(  81)		return  ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-1",90,a8,1c,7c),::borogove::Sha1_obj::make(bytes)->b);
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Hash_obj,sha1,return )
 
+ ::borogove::IncrementalHash Hash_obj::sha1incr(){
+            	HX_GC_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_86_sha1incr)
+HXDLIN(  86)		return  ::borogove::IncrementalHash_obj::__alloc( HX_CTX ,HX_("sha-1",90,a8,1c,7c), ::borogove::Sha1_obj::__alloc( HX_CTX ));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC0(Hash_obj,sha1incr,return )
+
  ::borogove::Hash Hash_obj::sha256( ::haxe::io::Bytes bytes){
-            	HX_GC_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_80_sha256)
-HXDLIN(  80)		return  ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-256",32,dd,04,3b),::haxe::crypto::Sha256_obj::make(bytes)->b);
+            	HX_GC_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_91_sha256)
+HXDLIN(  91)		return  ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-256",32,dd,04,3b),::haxe::crypto::Sha256_obj::make(bytes)->b);
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Hash_obj,sha256,return )
 
+ ::borogove::IncrementalHash Hash_obj::sha256incr(){
+            	HX_GC_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_96_sha256incr)
+HXDLIN(  96)		return  ::borogove::IncrementalHash_obj::__alloc( HX_CTX ,HX_("sha-256",32,dd,04,3b), ::haxe::crypto::Sha256_obj::__alloc( HX_CTX ));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC0(Hash_obj,sha256incr,return )
+
 
 ::hx::ObjectPtr< Hash_obj > Hash_obj::__new(::String algorithm,::Array< unsigned char > hash) {
 	::hx::ObjectPtr< Hash_obj > __this = new Hash_obj();
@@ -263,6 +316,7 @@ void Hash_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 6:
 		if (HX_FIELD_EQ(inName,"bobUri") ) { return ::hx::Val( bobUri_dyn() ); }
+		if (HX_FIELD_EQ(inName,"equals") ) { return ::hx::Val( equals_dyn() ); }
 		break;
 	case 8:
 		if (HX_FIELD_EQ(inName,"toBase64") ) { return ::hx::Val( toBase64_dyn() ); }
@@ -285,6 +339,9 @@ void Hash_obj::__Visit(HX_VISIT_PARAMS)
 bool Hash_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
 {
 	switch(inName.length) {
+	case 2:
+		if (HX_FIELD_EQ(inName,"mk") ) { outValue = mk_dyn(); return true; }
+		break;
 	case 4:
 		if (HX_FIELD_EQ(inName,"sha1") ) { outValue = sha1_dyn(); return true; }
 		break;
@@ -294,6 +351,12 @@ bool Hash_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::Prop
 	case 7:
 		if (HX_FIELD_EQ(inName,"fromHex") ) { outValue = fromHex_dyn(); return true; }
 		if (HX_FIELD_EQ(inName,"fromUri") ) { outValue = fromUri_dyn(); return true; }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"sha1incr") ) { outValue = sha1incr_dyn(); return true; }
+		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"sha256incr") ) { outValue = sha256incr_dyn(); return true; }
 	}
 	return false;
 }
@@ -336,6 +399,7 @@ static ::String Hash_obj_sMemberFields[] = {
 	HX_("toHex",20,f4,10,14),
 	HX_("toBase64",6a,a5,66,7c),
 	HX_("toBase64Url",25,fc,df,1d),
+	HX_("equals",3f,ee,f2,bf),
 	::String(null()) };
 
 ::hx::Class Hash_obj::__mClass;
@@ -343,8 +407,11 @@ static ::String Hash_obj_sMemberFields[] = {
 static ::String Hash_obj_sStaticFields[] = {
 	HX_("fromHex",91,13,fa,57),
 	HX_("fromUri",22,fc,03,58),
+	HX_("mk",5e,5f,00,00),
 	HX_("sha1",85,c8,52,4c),
+	HX_("sha1incr",d9,24,5d,db),
 	HX_("sha256",67,a4,fa,1c),
+	HX_("sha256incr",bb,99,1d,6d),
 	::String(null())
 };
 
@@ -374,8 +441,8 @@ void Hash_obj::__register()
 void Hash_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_22_boot)
-HXDLIN(  22)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_44da733a4b4dd6a7_21_boot)
+HXDLIN(  21)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("algorithm__fromC",ea,bf,4a,a7), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
diff --git a/Sources/c_borogove/src/borogove/Html.cpp b/Sources/c_borogove/src/borogove/Html.cpp
index 95f5e4f..e1acd4b 100644
--- a/Sources/c_borogove/src/borogove/Html.cpp
+++ b/Sources/c_borogove/src/borogove/Html.cpp
@@ -61,6 +61,9 @@
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 #ifndef INCLUDED_haxe_xml_Printer
 #include <haxe/xml/Printer.h>
 #endif
@@ -94,27 +97,28 @@ HX_LOCAL_STACK_FRAME(_hx_pos_7f2f37b33fdbbbfb_163_reduce,"borogove.Html","reduce
 static const bool _hx_array_data_de55a9f8_13[] = {
 	0,
 };
+HX_LOCAL_STACK_FRAME(_hx_pos_7f2f37b33fdbbbfb_183_reduce,"borogove.Html","reduce",0xf3f5895c,"borogove.Html.reduce","borogove/Html.hx",183,0x971c95e5)
 HX_LOCAL_STACK_FRAME(_hx_pos_7f2f37b33fdbbbfb_179_reduce,"borogove.Html","reduce",0xf3f5895c,"borogove.Html.reduce","borogove/Html.hx",179,0x971c95e5)
 HX_LOCAL_STACK_FRAME(_hx_pos_7f2f37b33fdbbbfb_199_reduce,"borogove.Html","reduce",0xf3f5895c,"borogove.Html.reduce","borogove/Html.hx",199,0x971c95e5)
-static const ::String _hx_array_data_de55a9f8_16[] = {
+static const ::String _hx_array_data_de55a9f8_17[] = {
 	HX_("class",38,78,58,48),
 };
-static const ::String _hx_array_data_de55a9f8_17[] = {
+static const ::String _hx_array_data_de55a9f8_18[] = {
 	HX_("action",b6,3b,46,16),
 };
 HX_LOCAL_STACK_FRAME(_hx_pos_f22bfd6896666266_282_reduce__fromC,"borogove.Html","reduce__fromC",0xa2cb0a9d,"borogove.Html.reduce__fromC","HaxeCBridge.hx",282,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_f22bfd6896666266_363_reduce__fromC,"borogove.Html","reduce__fromC",0xa2cb0a9d,"borogove.Html.reduce__fromC","HaxeCBridge.hx",363,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_7f2f37b33fdbbbfb_211_toString,"borogove.Html","toString",0xc02105e2,"borogove.Html.toString","borogove/Html.hx",211,0x971c95e5)
-static const ::String _hx_array_data_de55a9f8_23[] = {
+static const ::String _hx_array_data_de55a9f8_24[] = {
 	HX_(" />",4f,71,18,00),
 };
-static const ::String _hx_array_data_de55a9f8_24[] = {
+static const ::String _hx_array_data_de55a9f8_25[] = {
 	HX_(">",3e,00,00,00),
 };
-static const ::String _hx_array_data_de55a9f8_25[] = {
+static const ::String _hx_array_data_de55a9f8_26[] = {
 	HX_("</",73,34,00,00),
 };
-static const ::String _hx_array_data_de55a9f8_26[] = {
+static const ::String _hx_array_data_de55a9f8_27[] = {
 	HX_(">",3e,00,00,00),
 };
 HX_LOCAL_STACK_FRAME(_hx_pos_7f2f37b33fdbbbfb_249_toPlainText,"borogove.Html","toPlainText",0x1c5ba366,"borogove.Html.toPlainText","borogove/Html.hx",249,0x971c95e5)
@@ -127,7 +131,7 @@ HX_LOCAL_STACK_FRAME(_hx_pos_7f2f37b33fdbbbfb_105_fromString,"borogove.Html","fr
 HX_LOCAL_STACK_FRAME(_hx_pos_7f2f37b33fdbbbfb_120_htmlToNode,"borogove.Html","htmlToNode",0xcd174f9e,"borogove.Html.htmlToNode","borogove/Html.hx",120,0x971c95e5)
 HX_LOCAL_STACK_FRAME(_hx_pos_7f2f37b33fdbbbfb_25_boot,"borogove.Html","boot",0x43916668,"borogove.Html.boot","borogove/Html.hx",25,0x971c95e5)
 HX_LOCAL_STACK_FRAME(_hx_pos_7f2f37b33fdbbbfb_26_boot,"borogove.Html","boot",0x43916668,"borogove.Html.boot","borogove/Html.hx",26,0x971c95e5)
-static const ::String _hx_array_data_de55a9f8_50[] = {
+static const ::String _hx_array_data_de55a9f8_51[] = {
 	HX_("area",8d,8b,74,40),HX_("base",11,e8,10,41),HX_("br",d0,55,00,00),HX_("col",40,80,4b,00),HX_("embed",d9,8d,cf,6f),HX_("hr",0a,5b,00,00),HX_("img",03,0c,50,00),HX_("input",0a,c4,1d,be),HX_("link",fa,17,b3,47),HX_("meta",c5,4a,59,48),HX_("param",8d,80,55,bd),HX_("source",db,b0,31,32),HX_("track",8b,8e,1f,16),HX_("wbr",07,a2,5a,00),
 };
 namespace borogove{
@@ -178,9 +182,9 @@ HXDLIN( 142)					switch((int)(item->_hx_getIndex())){
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(2)
             							bool _hx_run( ::borogove::Stanza st,::Array< bool > kids){
             								HX_STACKFRAME(&_hx_pos_7f2f37b33fdbbbfb_145_isPlainText)
-HXLINE( 146)								::Array< ::String > attrs = ::Reflect_obj::fields(st->attr);
+HXLINE( 146)								 ::Dynamic attrs = st->attr->keys();
 HXLINE( 148)								if (::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_5,4)->contains(st->name)) {
-HXLINE( 149)									if ((attrs->length < 1)) {
+HXLINE( 149)									if (!(( (bool)(attrs->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) ))) {
             										HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             										bool _hx_run(bool plain){
             											HX_STACKFRAME(&_hx_pos_7f2f37b33fdbbbfb_149_isPlainText)
@@ -272,8 +276,15 @@ HXLINE( 176)					 ::borogove::Node item = _hx_array_unsafe_get(_this,i);
 HXDLIN( 176)					 ::Dynamic inValue;
 HXDLIN( 176)					switch((int)(item->_hx_getIndex())){
             						case (int)0: {
-            							HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,f, ::Dynamic,mkTxt) HXARGC(2)
+            							HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::Dynamic,f, ::Dynamic,mkTxt) HXARGC(2)
             							 ::Dynamic _hx_run( ::borogove::Stanza st,::cpp::VirtualArray kids){
+            								HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Stanza,st) HXARGC(0)
+            								 ::Dynamic _hx_run(){
+            									HX_STACKFRAME(&_hx_pos_7f2f37b33fdbbbfb_183_reduce)
+HXLINE( 183)									return st->attr->keys();
+            								}
+            								HX_END_LOCAL_FUNC0(return)
+
             								HX_STACKFRAME(&_hx_pos_7f2f37b33fdbbbfb_179_reduce)
 HXLINE( 181)								bool inValue;
 HXDLIN( 181)								if ((st->name != HX_("style",31,a5,1d,84))) {
@@ -285,7 +296,8 @@ HXLINE( 181)									inValue = true;
 HXDLIN( 181)								if (inValue) {
 HXLINE( 181)									return mkTxt(HX_("",00,00,00,00));
             								}
-HXLINE( 183)								::Array< ::String > _this = ::Reflect_obj::fields(st->attr);
+HXLINE( 183)								::Array< ::String > _this = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+            									->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_1(st)))));
 HXDLIN( 183)								::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
 HXDLIN( 183)								{
 HXLINE( 183)									int _g1 = 0;
@@ -309,7 +321,7 @@ HXDLIN( 187)										int i = (_g2 - 1);
 HXDLIN( 187)										{
 HXLINE( 187)											::String k = ( (::String)(_hx_array_unsafe_get(_g,i)) );
 HXLINE( 188)											::String v1;
-HXDLIN( 188)											::String tmp = ( (::String)(::Reflect_obj::field(st->attr,k)) );
+HXDLIN( 188)											::String tmp = st->attr->get_string(k);
 HXDLIN( 188)											if (::hx::IsNotNull( tmp )) {
 HXLINE( 188)												v1 = tmp;
             											}
@@ -351,14 +363,14 @@ HXLINE( 184)								return f1(st1,_g,result,kids);
             							}
             							HX_END_LOCAL_FUNC2(return)
 
-            							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::Dynamic,mkTxt) HXARGC(1)
+            							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,mkTxt) HXARGC(1)
             							 ::Dynamic _hx_run(::String txt){
             								HX_STACKFRAME(&_hx_pos_7f2f37b33fdbbbfb_199_reduce)
 HXLINE( 199)								return mkTxt(txt);
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 176)							inValue = item->_hx_getObject(0).StaticCast<  ::borogove::Stanza >()->reduce( ::Dynamic(new _hx_Closure_1(f,mkTxt)), ::Dynamic(new _hx_Closure_2(mkTxt)));
+HXLINE( 176)							inValue = item->_hx_getObject(0).StaticCast<  ::borogove::Stanza >()->reduce( ::Dynamic(new _hx_Closure_2(f,mkTxt)), ::Dynamic(new _hx_Closure_3(mkTxt)));
             						}
             						break;
             						case (int)1: {
@@ -371,7 +383,7 @@ HXDLIN( 176)					result->__unsafe_set(i,inValue);
             			}
             		}
 HXLINE( 204)		if (isAction->__get(0)) {
-HXLINE( 204)			return ::cpp::VirtualArray_obj::__new(1)->init(0,f(HX_("div",51,3d,4c,00),::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_16,1),::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_17,1),result));
+HXLINE( 204)			return ::cpp::VirtualArray_obj::__new(1)->init(0,f(HX_("div",51,3d,4c,00),::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_17,1),::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_18,1),result));
             		}
             		else {
 HXLINE( 204)			return result;
@@ -512,7 +524,7 @@ HXLINE( 225)							if (::hx::IsNotNull( buffer->charBuf )) {
 HXLINE( 225)								buffer->flush();
             							}
 HXDLIN( 225)							if (::hx::IsNull( buffer->b )) {
-HXLINE( 225)								buffer->b = ::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_23,1);
+HXLINE( 225)								buffer->b = ::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_24,1);
             							}
             							else {
 HXLINE( 225)								buffer->b->push(HX_(" />",4f,71,18,00));
@@ -525,7 +537,7 @@ HXLINE( 229)						if (::hx::IsNotNull( buffer->charBuf )) {
 HXLINE( 229)							buffer->flush();
             						}
 HXDLIN( 229)						if (::hx::IsNull( buffer->b )) {
-HXLINE( 229)							buffer->b = ::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_24,1);
+HXLINE( 229)							buffer->b = ::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_25,1);
             						}
             						else {
 HXLINE( 229)							buffer->b->push(HX_(">",3e,00,00,00));
@@ -555,7 +567,7 @@ HXLINE( 236)						if (::hx::IsNotNull( buffer->charBuf )) {
 HXLINE( 236)							buffer->flush();
             						}
 HXDLIN( 236)						if (::hx::IsNull( buffer->b )) {
-HXLINE( 236)							buffer->b = ::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_25,1);
+HXLINE( 236)							buffer->b = ::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_26,1);
             						}
             						else {
 HXLINE( 236)							buffer->b->push(HX_("</",73,34,00,00));
@@ -578,7 +590,7 @@ HXLINE( 238)						if (::hx::IsNotNull( buffer->charBuf )) {
 HXLINE( 238)							buffer->flush();
             						}
 HXDLIN( 238)						if (::hx::IsNull( buffer->b )) {
-HXLINE( 238)							buffer->b = ::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_26,1);
+HXLINE( 238)							buffer->b = ::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_27,1);
             						}
             						else {
 HXLINE( 238)							buffer->b->push(HX_(">",3e,00,00,00));
@@ -601,7 +613,7 @@ HX_DEFINE_DYNAMIC_FUNC0(Html_obj,toString,return )
 
 ::String Html_obj::toPlainText(){
             	HX_GC_STACKFRAME(&_hx_pos_7f2f37b33fdbbbfb_249_toPlainText)
-HXLINE( 251)		 ::borogove::Stanza body =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("body",a2,7a,1b,41),null());
+HXLINE( 251)		 ::borogove::Stanza body =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("body",a2,7a,1b,41),null(),null());
 HXLINE( 252)		body->addChildNodes(this->xml);
 HXLINE( 253)		 ::EReg _hx_tmp =  ::EReg_obj::__alloc( HX_CTX ,HX_("\n(\n)?$",82,45,54,0e),HX_("",00,00,00,00));
 HXDLIN( 253)		return _hx_tmp->replace(::borogove::XEP0393_obj::render(body,null(),null(),null()),HX_("",00,00,00,00));
@@ -623,7 +635,7 @@ HXDLIN(  73)				_g_current = (_g_current + 1);
 HXLINE(  74)				::Reflect_obj::setField(attrs,_g_value,attrValues->__get((_g_current - 1)));
             			}
             		}
-HXLINE(  77)		 ::borogove::Stanza s =  ::borogove::Stanza_obj::__alloc( HX_CTX ,tag,attrs);
+HXLINE(  77)		 ::borogove::Stanza s =  ::borogove::Stanza_obj::__alloc( HX_CTX ,tag,attrs,null());
 HXLINE(  78)		{
 HXLINE(  78)			int _g = 0;
 HXDLIN(  78)			while((_g < children->length)){
@@ -825,14 +837,14 @@ HXLINE( 123)			return ::borogove::Node_obj::CData(txt->toText());
             		}
 HXLINE( 125)		 ::htmlparser::HtmlNodeElement el = ( ( ::htmlparser::HtmlNodeElement)(::borogove::_Util::Util_Fields__obj::downcast(node,::hx::ClassOf< ::htmlparser::HtmlNodeElement >())) );
 HXLINE( 126)		if (::hx::IsNotNull( el )) {
-HXLINE( 127)			 ::borogove::Stanza s =  ::borogove::Stanza_obj::__alloc( HX_CTX ,el->name, ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 127)			 ::borogove::Stanza s =  ::borogove::Stanza_obj::__alloc( HX_CTX ,el->name, ::Dynamic(::hx::Anon_obj::Create(0)),null());
 HXLINE( 128)			{
 HXLINE( 128)				int _g = 0;
 HXDLIN( 128)				::Array< ::Dynamic> _g1 = el->attributes;
 HXDLIN( 128)				while((_g < _g1->length)){
 HXLINE( 128)					 ::htmlparser::HtmlAttribute attr = _g1->__get(_g).StaticCast<  ::htmlparser::HtmlAttribute >();
 HXDLIN( 128)					_g = (_g + 1);
-HXLINE( 129)					::Reflect_obj::setField(s->attr,attr->name,attr->value);
+HXLINE( 129)					s->attr->set(attr->name,attr->value);
             				}
             			}
 HXLINE( 131)			{
@@ -1054,7 +1066,7 @@ HXDLIN(  25)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(2)
             	}
 {
             	HX_STACKFRAME(&_hx_pos_7f2f37b33fdbbbfb_26_boot)
-HXDLIN(  26)		HTML_EMPTY = ::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_50,14);
+HXDLIN(  26)		HTML_EMPTY = ::Array_obj< ::String >::fromData( _hx_array_data_de55a9f8_51,14);
             	}
 }
 
diff --git a/Sources/c_borogove/src/borogove/Identity.cpp b/Sources/c_borogove/src/borogove/Identity.cpp
index 4a2836f..7ef694b 100644
--- a/Sources/c_borogove/src/borogove/Identity.cpp
+++ b/Sources/c_borogove/src/borogove/Identity.cpp
@@ -10,6 +10,12 @@
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 #ifndef INCLUDED_haxe_io_Bytes
 #include <haxe/io/Bytes.h>
 #endif
@@ -20,25 +26,25 @@
 #include <haxe/io/Output.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_d5f7fc7fc3ee8081_228_new,"borogove.Identity","new",0x6fb346bd,"borogove.Identity.new","borogove/Caps.hx",228,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_d5f7fc7fc3ee8081_238_addToDisco,"borogove.Identity","addToDisco",0xe04e3b21,"borogove.Identity.addToDisco","borogove/Caps.hx",238,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_d5f7fc7fc3ee8081_248_ver,"borogove.Identity","ver",0x6fb958c0,"borogove.Identity.ver","borogove/Caps.hx",248,0xed3da4ef)
-HX_LOCAL_STACK_FRAME(_hx_pos_d5f7fc7fc3ee8081_254_writeTo,"borogove.Identity","writeTo",0x8acc5517,"borogove.Identity.writeTo","borogove/Caps.hx",254,0xed3da4ef)
+HX_DEFINE_STACK_FRAME(_hx_pos_d5f7fc7fc3ee8081_238_new,"borogove.Identity","new",0x6fb346bd,"borogove.Identity.new","borogove/Caps.hx",238,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_d5f7fc7fc3ee8081_248_addToDisco,"borogove.Identity","addToDisco",0xe04e3b21,"borogove.Identity.addToDisco","borogove/Caps.hx",248,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_d5f7fc7fc3ee8081_258_ver,"borogove.Identity","ver",0x6fb958c0,"borogove.Identity.ver","borogove/Caps.hx",258,0xed3da4ef)
+HX_LOCAL_STACK_FRAME(_hx_pos_d5f7fc7fc3ee8081_264_writeTo,"borogove.Identity","writeTo",0x8acc5517,"borogove.Identity.writeTo","borogove/Caps.hx",264,0xed3da4ef)
 namespace borogove{
 
 void Identity_obj::__construct(::String category,::String type,::String name,::String lang){
-            	HX_STACKFRAME(&_hx_pos_d5f7fc7fc3ee8081_228_new)
-HXLINE( 229)		this->category = category;
-HXLINE( 230)		this->type = type;
-HXLINE( 231)		this->name = name;
-HXLINE( 232)		::String _hx_tmp;
-HXDLIN( 232)		if (::hx::IsNotNull( lang )) {
-HXLINE( 232)			_hx_tmp = lang;
+            	HX_STACKFRAME(&_hx_pos_d5f7fc7fc3ee8081_238_new)
+HXLINE( 239)		this->category = category;
+HXLINE( 240)		this->type = type;
+HXLINE( 241)		this->name = name;
+HXLINE( 242)		::String _hx_tmp;
+HXDLIN( 242)		if (::hx::IsNotNull( lang )) {
+HXLINE( 242)			_hx_tmp = lang;
             		}
             		else {
-HXLINE( 232)			_hx_tmp = HX_("",00,00,00,00);
+HXLINE( 242)			_hx_tmp = HX_("",00,00,00,00);
             		}
-HXDLIN( 232)		this->lang = _hx_tmp;
+HXDLIN( 242)		this->lang = _hx_tmp;
             	}
 
 Dynamic Identity_obj::__CreateEmpty() { return new Identity_obj; }
@@ -57,74 +63,74 @@ bool Identity_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 void Identity_obj::addToDisco( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_d5f7fc7fc3ee8081_238_addToDisco)
-HXLINE( 239)		 ::Dynamic attrs =  ::Dynamic(::hx::Anon_obj::Create(3)
+            	HX_STACKFRAME(&_hx_pos_d5f7fc7fc3ee8081_248_addToDisco)
+HXLINE( 249)		 ::Dynamic attrs =  ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("category",fe,2a,6c,ad),this->category)
             			->setFixed(1,HX_("name",4b,72,ff,48),this->name)
             			->setFixed(2,HX_("type",ba,f2,08,4d),this->type));
-HXLINE( 240)		bool _hx_tmp;
-HXDLIN( 240)		if (::hx::IsNotNull( this->lang )) {
-HXLINE( 240)			_hx_tmp = (this->lang != HX_("",00,00,00,00));
+HXLINE( 250)		bool _hx_tmp;
+HXDLIN( 250)		if (::hx::IsNotNull( this->lang )) {
+HXLINE( 250)			_hx_tmp = (this->lang != HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 240)			_hx_tmp = false;
+HXLINE( 250)			_hx_tmp = false;
             		}
-HXDLIN( 240)		if (_hx_tmp) {
-HXLINE( 240)			::Reflect_obj::setField(attrs,HX_("xml:lang",f1,b1,be,5f),this->lang);
+HXDLIN( 250)		if (_hx_tmp) {
+HXLINE( 250)			::Reflect_obj::setField(attrs,HX_("xml:lang",f1,b1,be,5f),this->lang);
             		}
-HXLINE( 241)		stanza->tag(HX_("identity",3e,45,2f,b9),attrs)->up();
+HXLINE( 251)		stanza->tag(HX_("identity",3e,45,2f,b9),attrs,null())->up();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Identity_obj,addToDisco,(void))
 
 ::String Identity_obj::ver(){
-            	HX_STACKFRAME(&_hx_pos_d5f7fc7fc3ee8081_248_ver)
-HXDLIN( 248)		::String tmp = this->lang;
-HXDLIN( 248)		::String _hx_tmp;
-HXDLIN( 248)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 248)			_hx_tmp = tmp;
+            	HX_STACKFRAME(&_hx_pos_d5f7fc7fc3ee8081_258_ver)
+HXDLIN( 258)		::String tmp = this->lang;
+HXDLIN( 258)		::String _hx_tmp;
+HXDLIN( 258)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 258)			_hx_tmp = tmp;
             		}
             		else {
-HXDLIN( 248)			_hx_tmp = HX_("",00,00,00,00);
+HXDLIN( 258)			_hx_tmp = HX_("",00,00,00,00);
             		}
-HXDLIN( 248)		return ((((((this->category + HX_("/",2f,00,00,00)) + this->type) + HX_("/",2f,00,00,00)) + _hx_tmp) + HX_("/",2f,00,00,00)) + this->name);
+HXDLIN( 258)		return ((((((this->category + HX_("/",2f,00,00,00)) + this->type) + HX_("/",2f,00,00,00)) + _hx_tmp) + HX_("/",2f,00,00,00)) + this->name);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Identity_obj,ver,return )
 
 void Identity_obj::writeTo( ::haxe::io::Output out){
-            	HX_STACKFRAME(&_hx_pos_d5f7fc7fc3ee8081_254_writeTo)
-HXLINE( 255)		{
-HXLINE( 255)			 ::haxe::io::Bytes b = ::haxe::io::Bytes_obj::ofString(this->category,null());
-HXDLIN( 255)			out->writeBytes(b,0,b->length);
+            	HX_STACKFRAME(&_hx_pos_d5f7fc7fc3ee8081_264_writeTo)
+HXLINE( 265)		{
+HXLINE( 265)			 ::haxe::io::Bytes b = ::haxe::io::Bytes_obj::ofString(this->category,null());
+HXDLIN( 265)			out->writeBytes(b,0,b->length);
             		}
-HXLINE( 256)		out->writeByte(31);
-HXLINE( 257)		{
-HXLINE( 257)			 ::haxe::io::Bytes b1 = ::haxe::io::Bytes_obj::ofString(this->type,null());
-HXDLIN( 257)			out->writeBytes(b1,0,b1->length);
+HXLINE( 266)		out->writeByte(31);
+HXLINE( 267)		{
+HXLINE( 267)			 ::haxe::io::Bytes b1 = ::haxe::io::Bytes_obj::ofString(this->type,null());
+HXDLIN( 267)			out->writeBytes(b1,0,b1->length);
             		}
-HXLINE( 258)		out->writeByte(31);
-HXLINE( 259)		{
-HXLINE( 259)			::String s;
-HXDLIN( 259)			::String tmp = this->lang;
-HXDLIN( 259)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 259)				s = tmp;
+HXLINE( 268)		out->writeByte(31);
+HXLINE( 269)		{
+HXLINE( 269)			::String s;
+HXDLIN( 269)			::String tmp = this->lang;
+HXDLIN( 269)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 269)				s = tmp;
             			}
             			else {
-HXLINE( 259)				s = HX_("",00,00,00,00);
+HXLINE( 269)				s = HX_("",00,00,00,00);
             			}
-HXDLIN( 259)			 ::haxe::io::Bytes b2 = ::haxe::io::Bytes_obj::ofString(s,null());
-HXDLIN( 259)			out->writeBytes(b2,0,b2->length);
+HXDLIN( 269)			 ::haxe::io::Bytes b2 = ::haxe::io::Bytes_obj::ofString(s,null());
+HXDLIN( 269)			out->writeBytes(b2,0,b2->length);
             		}
-HXLINE( 260)		out->writeByte(31);
-HXLINE( 261)		{
-HXLINE( 261)			 ::haxe::io::Bytes b3 = ::haxe::io::Bytes_obj::ofString(this->name,null());
-HXDLIN( 261)			out->writeBytes(b3,0,b3->length);
+HXLINE( 270)		out->writeByte(31);
+HXLINE( 271)		{
+HXLINE( 271)			 ::haxe::io::Bytes b3 = ::haxe::io::Bytes_obj::ofString(this->name,null());
+HXDLIN( 271)			out->writeBytes(b3,0,b3->length);
             		}
-HXLINE( 262)		out->writeByte(31);
-HXLINE( 263)		out->writeByte(30);
+HXLINE( 272)		out->writeByte(31);
+HXLINE( 273)		out->writeByte(30);
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/IncrementalHash.cpp b/Sources/c_borogove/src/borogove/IncrementalHash.cpp
new file mode 100644
index 0000000..dcc3274
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/IncrementalHash.cpp
@@ -0,0 +1,165 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_borogove_Hash
+#include <borogove/Hash.h>
+#endif
+#ifndef INCLUDED_borogove_IncrementalHash
+#include <borogove/IncrementalHash.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_10b8c9f5bea17042_163_new,"borogove.IncrementalHash","new",0xf1ca8ccd,"borogove.IncrementalHash.new","borogove/Hash.hx",163,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_10b8c9f5bea17042_169_update,"borogove.IncrementalHash","update",0xef788bbc,"borogove.IncrementalHash.update","borogove/Hash.hx",169,0x70175b62)
+HX_LOCAL_STACK_FRAME(_hx_pos_10b8c9f5bea17042_173_digest,"borogove.IncrementalHash","digest",0x1d9805f7,"borogove.IncrementalHash.digest","borogove/Hash.hx",173,0x70175b62)
+namespace borogove{
+
+void IncrementalHash_obj::__construct(::String algorithm, ::Dynamic hash){
+            	HX_STACKFRAME(&_hx_pos_10b8c9f5bea17042_163_new)
+HXLINE( 164)		this->algorithm = algorithm;
+HXLINE( 165)		this->hash = hash;
+            	}
+
+Dynamic IncrementalHash_obj::__CreateEmpty() { return new IncrementalHash_obj; }
+
+void *IncrementalHash_obj::_hx_vtable = 0;
+
+Dynamic IncrementalHash_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< IncrementalHash_obj > _hx_result = new IncrementalHash_obj();
+	_hx_result->__construct(inArgs[0],inArgs[1]);
+	return _hx_result;
+}
+
+bool IncrementalHash_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x66ead3e7;
+}
+
+void IncrementalHash_obj::update(::Array< unsigned char > bytes){
+            	HX_STACKFRAME(&_hx_pos_10b8c9f5bea17042_169_update)
+HXDLIN( 169)		this->hash->__Field(HX_("update",09,86,05,87),::hx::paccDynamic)(::haxe::io::Bytes_obj::ofData(bytes));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(IncrementalHash_obj,update,(void))
+
+ ::borogove::Hash IncrementalHash_obj::digest(){
+            	HX_GC_STACKFRAME(&_hx_pos_10b8c9f5bea17042_173_digest)
+HXDLIN( 173)		::String _hx_tmp = this->algorithm;
+HXDLIN( 173)		return  ::borogove::Hash_obj::__alloc( HX_CTX ,_hx_tmp,( ( ::haxe::io::Bytes)(this->hash->__Field(HX_("digest",44,00,25,b5),::hx::paccDynamic)()) )->b);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(IncrementalHash_obj,digest,return )
+
+
+::hx::ObjectPtr< IncrementalHash_obj > IncrementalHash_obj::__new(::String algorithm, ::Dynamic hash) {
+	::hx::ObjectPtr< IncrementalHash_obj > __this = new IncrementalHash_obj();
+	__this->__construct(algorithm,hash);
+	return __this;
+}
+
+::hx::ObjectPtr< IncrementalHash_obj > IncrementalHash_obj::__alloc(::hx::Ctx *_hx_ctx,::String algorithm, ::Dynamic hash) {
+	IncrementalHash_obj *__this = (IncrementalHash_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(IncrementalHash_obj), true, "borogove.IncrementalHash"));
+	*(void **)__this = IncrementalHash_obj::_hx_vtable;
+	__this->__construct(algorithm,hash);
+	return __this;
+}
+
+IncrementalHash_obj::IncrementalHash_obj()
+{
+}
+
+void IncrementalHash_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(IncrementalHash);
+	HX_MARK_MEMBER_NAME(algorithm,"algorithm");
+	HX_MARK_MEMBER_NAME(hash,"hash");
+	HX_MARK_END_CLASS();
+}
+
+void IncrementalHash_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(algorithm,"algorithm");
+	HX_VISIT_MEMBER_NAME(hash,"hash");
+}
+
+::hx::Val IncrementalHash_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 4:
+		if (HX_FIELD_EQ(inName,"hash") ) { return ::hx::Val( hash ); }
+		break;
+	case 6:
+		if (HX_FIELD_EQ(inName,"update") ) { return ::hx::Val( update_dyn() ); }
+		if (HX_FIELD_EQ(inName,"digest") ) { return ::hx::Val( digest_dyn() ); }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"algorithm") ) { return ::hx::Val( algorithm ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+::hx::Val IncrementalHash_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 4:
+		if (HX_FIELD_EQ(inName,"hash") ) { hash=inValue.Cast<  ::Dynamic >(); return inValue; }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"algorithm") ) { algorithm=inValue.Cast< ::String >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+void IncrementalHash_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("algorithm",6f,ac,ee,14));
+	outFields->push(HX_("hash",ce,2f,08,45));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo IncrementalHash_obj_sMemberStorageInfo[] = {
+	{::hx::fsString,(int)offsetof(IncrementalHash_obj,algorithm),HX_("algorithm",6f,ac,ee,14)},
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(IncrementalHash_obj,hash),HX_("hash",ce,2f,08,45)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo *IncrementalHash_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String IncrementalHash_obj_sMemberFields[] = {
+	HX_("algorithm",6f,ac,ee,14),
+	HX_("hash",ce,2f,08,45),
+	HX_("update",09,86,05,87),
+	HX_("digest",44,00,25,b5),
+	::String(null()) };
+
+::hx::Class IncrementalHash_obj::__mClass;
+
+void IncrementalHash_obj::__register()
+{
+	IncrementalHash_obj _hx_dummy;
+	IncrementalHash_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.IncrementalHash",5b,22,5f,b2);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(IncrementalHash_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< IncrementalHash_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = IncrementalHash_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = IncrementalHash_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/LinkMetadata.cpp b/Sources/c_borogove/src/borogove/LinkMetadata.cpp
index 89071ad..e361687 100644
--- a/Sources/c_borogove/src/borogove/LinkMetadata.cpp
+++ b/Sources/c_borogove/src/borogove/LinkMetadata.cpp
@@ -14,31 +14,31 @@
 #include <haxe/IMap.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_8120eb91422b3a9e_41_new,"borogove.LinkMetadata","new",0x82e81308,"borogove.LinkMetadata.new","borogove/ChatMessage.hx",41,0xe4a3cadd)
+HX_DEFINE_STACK_FRAME(_hx_pos_8120eb91422b3a9e_42_new,"borogove.LinkMetadata","new",0x82e81308,"borogove.LinkMetadata.new","borogove/ChatMessage.hx",42,0xe4a3cadd)
 HX_LOCAL_STACK_FRAME(_hx_pos_e518ab4ca11f3b63_478_about__fromC,"borogove.LinkMetadata","about__fromC",0x51c6de24,"borogove.LinkMetadata.about__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e518ab4ca11f3b63_478_url__fromC,"borogove.LinkMetadata","url__fromC",0xa6310342,"borogove.LinkMetadata.url__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e518ab4ca11f3b63_478_title__fromC,"borogove.LinkMetadata","title__fromC",0xb613e639,"borogove.LinkMetadata.title__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e518ab4ca11f3b63_478_description__fromC,"borogove.LinkMetadata","description__fromC",0x66c9b955,"borogove.LinkMetadata.description__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e518ab4ca11f3b63_452_image__fromC,"borogove.LinkMetadata","image__fromC",0x8215ead6,"borogove.LinkMetadata.image__fromC","HaxeCBridge.hx",452,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_e518ab4ca11f3b63_452_video__fromC,"borogove.LinkMetadata","video__fromC",0xac49d9b6,"borogove.LinkMetadata.video__fromC","HaxeCBridge.hx",452,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8120eb91422b3a9e_32_boot,"borogove.LinkMetadata","boot",0x0041948a,"borogove.LinkMetadata.boot","borogove/ChatMessage.hx",32,0xe4a3cadd)
+HX_LOCAL_STACK_FRAME(_hx_pos_8120eb91422b3a9e_33_boot,"borogove.LinkMetadata","boot",0x0041948a,"borogove.LinkMetadata.boot","borogove/ChatMessage.hx",33,0xe4a3cadd)
 namespace borogove{
 
 void LinkMetadata_obj::__construct(::String about,::String url,::String title,::String description,::Array< ::String > image,::Array< ::String > video){
-            	HX_STACKFRAME(&_hx_pos_8120eb91422b3a9e_41_new)
-HXLINE(  42)		this->about = about;
-HXLINE(  43)		::String _hx_tmp;
-HXDLIN(  43)		if (::hx::IsNotNull( url )) {
-HXLINE(  43)			_hx_tmp = url;
+            	HX_STACKFRAME(&_hx_pos_8120eb91422b3a9e_42_new)
+HXLINE(  43)		this->about = about;
+HXLINE(  44)		::String _hx_tmp;
+HXDLIN(  44)		if (::hx::IsNotNull( url )) {
+HXLINE(  44)			_hx_tmp = url;
             		}
             		else {
-HXLINE(  43)			_hx_tmp = about;
+HXLINE(  44)			_hx_tmp = about;
             		}
-HXDLIN(  43)		this->url = _hx_tmp;
-HXLINE(  44)		this->title = title;
-HXLINE(  45)		this->description = description;
-HXLINE(  46)		this->image = image;
-HXLINE(  47)		this->video = video;
+HXDLIN(  44)		this->url = _hx_tmp;
+HXLINE(  45)		this->title = title;
+HXLINE(  46)		this->description = description;
+HXLINE(  47)		this->image = image;
+HXLINE(  48)		this->video = video;
             	}
 
 Dynamic LinkMetadata_obj::__CreateEmpty() { return new LinkMetadata_obj; }
@@ -108,7 +108,7 @@ HXDLIN( 452)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
 HXDLIN( 452)						{
 HXDLIN( 452)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
 HXDLIN( 452)							if (::hx::IsNull( store )) {
-HXLINE(2390)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2391)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
 HXLINE( 452)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
@@ -127,7 +127,7 @@ HXDLIN( 452)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
 HXDLIN( 452)			{
 HXDLIN( 452)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
 HXDLIN( 452)				if (::hx::IsNull( store1 )) {
-HXLINE(2390)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2391)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
 HXLINE( 452)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
@@ -162,7 +162,7 @@ HXDLIN( 452)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
 HXDLIN( 452)						{
 HXDLIN( 452)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
 HXDLIN( 452)							if (::hx::IsNull( store )) {
-HXLINE(2390)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2391)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
 HXLINE( 452)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
@@ -181,7 +181,7 @@ HXDLIN( 452)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
 HXDLIN( 452)			{
 HXDLIN( 452)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
 HXDLIN( 452)				if (::hx::IsNull( store1 )) {
-HXLINE(2390)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(2391)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
 HXLINE( 452)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
@@ -347,8 +347,8 @@ void LinkMetadata_obj::__register()
 void LinkMetadata_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_8120eb91422b3a9e_32_boot)
-HXDLIN(  32)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_8120eb91422b3a9e_33_boot)
+HXDLIN(  33)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(6)
             				->setFixed(0,HX_("image__fromC",7e,c2,63,93), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
diff --git a/Sources/c_borogove/src/borogove/Member.cpp b/Sources/c_borogove/src/borogove/Member.cpp
index 03d4dd9..cf9d579 100644
--- a/Sources/c_borogove/src/borogove/Member.cpp
+++ b/Sources/c_borogove/src/borogove/Member.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
@@ -65,7 +62,7 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_403768415749ca4b_65_new,"borogove.Member","new",0xaa333499,"borogove.Member.new","borogove/Member.hx",65,0x7e7898d6)
+HX_DEFINE_STACK_FRAME(_hx_pos_403768415749ca4b_70_new,"borogove.Member","new",0xaa333499,"borogove.Member.new","borogove/Member.hx",70,0x7e7898d6)
 HX_LOCAL_STACK_FRAME(_hx_pos_de8dc97d744cad10_478_id__fromC,"borogove.Member","id__fromC",0xcd6eeaf7,"borogove.Member.id__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_de8dc97d744cad10_478_displayName__fromC,"borogove.Member","displayName__fromC",0x95afe253,"borogove.Member.displayName__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_de8dc97d744cad10_478_photoUri__fromC,"borogove.Member","photoUri__fromC",0x123d7f98,"borogove.Member.photoUri__fromC","HaxeCBridge.hx",478,0xa18550d8)
@@ -74,121 +71,123 @@ HX_LOCAL_STACK_FRAME(_hx_pos_de8dc97d744cad10_478_isSelf__fromC,"borogove.Member
 HX_LOCAL_STACK_FRAME(_hx_pos_de8dc97d744cad10_478_chat__fromC,"borogove.Member","chat__fromC",0xa328e1da,"borogove.Member.chat__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_de8dc97d744cad10_452_roles__fromC,"borogove.Member","roles__fromC",0x2c96d283,"borogove.Member.roles__fromC","HaxeCBridge.hx",452,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_de8dc97d744cad10_478_showPresence__fromC,"borogove.Member","showPresence__fromC",0x7575295a,"borogove.Member.showPresence__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_95_profile,"borogove.Member","profile",0x5c81bde2,"borogove.Member.profile","borogove/Member.hx",95,0x7e7898d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_93_profile,"borogove.Member","profile",0x5c81bde2,"borogove.Member.profile","borogove/Member.hx",93,0x7e7898d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_92_profile,"borogove.Member","profile",0x5c81bde2,"borogove.Member.profile","borogove/Member.hx",92,0x7e7898d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_100_profile,"borogove.Member","profile",0x5c81bde2,"borogove.Member.profile","borogove/Member.hx",100,0x7e7898d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_98_profile,"borogove.Member","profile",0x5c81bde2,"borogove.Member.profile","borogove/Member.hx",98,0x7e7898d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_97_profile,"borogove.Member","profile",0x5c81bde2,"borogove.Member.profile","borogove/Member.hx",97,0x7e7898d6)
 HX_LOCAL_STACK_FRAME(_hx_pos_de8dc97d744cad10_365_profile__fromC,"borogove.Member","profile__fromC",0xd35512d7,"borogove.Member.profile__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_117_status,"borogove.Member","status",0xd0802c99,"borogove.Member.status","borogove/Member.hx",117,0x7e7898d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_115_status,"borogove.Member","status",0xd0802c99,"borogove.Member.status","borogove/Member.hx",115,0x7e7898d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_114_status,"borogove.Member","status",0xd0802c99,"borogove.Member.status","borogove/Member.hx",114,0x7e7898d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_122_status,"borogove.Member","status",0xd0802c99,"borogove.Member.status","borogove/Member.hx",122,0x7e7898d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_120_status,"borogove.Member","status",0xd0802c99,"borogove.Member.status","borogove/Member.hx",120,0x7e7898d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_119_status,"borogove.Member","status",0xd0802c99,"borogove.Member.status","borogove/Member.hx",119,0x7e7898d6)
 HX_LOCAL_STACK_FRAME(_hx_pos_de8dc97d744cad10_365_status__fromC,"borogove.Member","status__fromC",0x8b2ff900,"borogove.Member.status__fromC","HaxeCBridge.hx",365,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_de8dc97d744cad10_426_MODERATED__fromC,"borogove.Member","MODERATED__fromC",0x27960b9f,"borogove.Member.MODERATED__fromC","HaxeCBridge.hx",426,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_20_boot,"borogove.Member","boot",0x3ab3d1d9,"borogove.Member.boot","borogove/Member.hx",20,0x7e7898d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_403768415749ca4b_24_boot,"borogove.Member","boot",0x3ab3d1d9,"borogove.Member.boot","borogove/Member.hx",24,0x7e7898d6)
 namespace borogove{
 
 void Member_obj::__construct(::String id,::String displayName,::String photoUri,bool isSelf,::Array< ::Dynamic> roles, ::borogove::JID jid, ::haxe::ds::StringMap presence, ::borogove::AvailableChat chat){
-            	HX_STACKFRAME(&_hx_pos_403768415749ca4b_65_new)
-HXLINE(  66)		this->id = id;
-HXLINE(  67)		this->displayName = displayName;
-HXLINE(  68)		this->photoUri = photoUri;
-HXLINE(  69)		this->placeholderUri = ::borogove::Color_obj::defaultPhoto(id,displayName.charAt(0).toUpperCase());
-HXLINE(  70)		this->isSelf = isSelf;
-HXLINE(  71)		this->roles = roles;
-HXLINE(  72)		this->jid = jid;
-HXLINE(  73)		this->presence = presence;
-HXLINE(  74)		this->chat = chat;
-HXLINE(  75)		int lowestShow = 4;
-HXLINE(  76)		int highestPrio = -100000;
-HXLINE(  77)		{
-HXLINE(  77)			::Dynamic map = presence;
-HXDLIN(  77)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN(  77)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(  77)				 ::borogove::Stanza _g_value = ( ( ::borogove::Stanza)(::haxe::IMap_obj::get(map,_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)())) );
-HXLINE(  78)				::String tmp = _g_value->getChildText(HX_("priority",64,7b,3e,bb),null());
-HXDLIN(  78)				::String tmp1;
-HXDLIN(  78)				if (::hx::IsNotNull( tmp )) {
-HXLINE(  78)					tmp1 = tmp;
+            	HX_STACKFRAME(&_hx_pos_403768415749ca4b_70_new)
+HXLINE(  71)		this->id = id;
+HXLINE(  72)		this->displayName = displayName;
+HXLINE(  73)		this->photoUri = photoUri;
+HXLINE(  74)		this->placeholderUri = ::borogove::Color_obj::defaultPhoto(id,displayName.charAt(0).toUpperCase());
+HXLINE(  75)		this->isSelf = isSelf;
+HXLINE(  76)		this->roles = roles;
+HXLINE(  77)		this->jid = jid;
+HXLINE(  78)		this->presence = presence;
+HXLINE(  79)		this->chat = chat;
+HXLINE(  80)		int lowestShow = 4;
+HXLINE(  81)		int highestPrio = -100000;
+HXLINE(  82)		{
+HXLINE(  82)			::Dynamic map = presence;
+HXDLIN(  82)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN(  82)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(  82)				 ::borogove::Stanza _g_value = ( ( ::borogove::Stanza)(::haxe::IMap_obj::get(map,_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)())) );
+HXLINE(  83)				::String tmp = _g_value->getChildText(HX_("priority",64,7b,3e,bb),null());
+HXDLIN(  83)				::String tmp1;
+HXDLIN(  83)				if (::hx::IsNotNull( tmp )) {
+HXLINE(  83)					tmp1 = tmp;
             				}
             				else {
-HXLINE(  78)					tmp1 = HX_("0",30,00,00,00);
+HXLINE(  83)					tmp1 = HX_("0",30,00,00,00);
             				}
-HXDLIN(  78)				 ::Dynamic tmp2 = ::Std_obj::parseInt(tmp1);
-HXDLIN(  78)				int _hx_tmp;
-HXDLIN(  78)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE(  78)					_hx_tmp = ( (int)(tmp2) );
+HXDLIN(  83)				 ::Dynamic tmp2 = ::Std_obj::parseInt(tmp1);
+HXDLIN(  83)				int _hx_tmp;
+HXDLIN(  83)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE(  83)					_hx_tmp = ( (int)(tmp2) );
             				}
             				else {
-HXLINE(  78)					_hx_tmp = 0;
+HXLINE(  83)					_hx_tmp = 0;
             				}
-HXDLIN(  78)				if ((_hx_tmp >= highestPrio)) {
-HXLINE(  79)					::String tmp3 = _g_value->getChildText(HX_("priority",64,7b,3e,bb),null());
-HXDLIN(  79)					::String tmp4;
-HXDLIN(  79)					if (::hx::IsNotNull( tmp3 )) {
-HXLINE(  79)						tmp4 = tmp3;
+HXDLIN(  83)				if ((_hx_tmp >= highestPrio)) {
+HXLINE(  84)					::String tmp3 = _g_value->getChildText(HX_("priority",64,7b,3e,bb),null());
+HXDLIN(  84)					::String tmp4;
+HXDLIN(  84)					if (::hx::IsNotNull( tmp3 )) {
+HXLINE(  84)						tmp4 = tmp3;
             					}
             					else {
-HXLINE(  79)						tmp4 = HX_("0",30,00,00,00);
+HXLINE(  84)						tmp4 = HX_("0",30,00,00,00);
             					}
-HXDLIN(  79)					 ::Dynamic tmp5 = ::Std_obj::parseInt(tmp4);
-HXDLIN(  79)					if (::hx::IsNotNull( tmp5 )) {
-HXLINE(  79)						highestPrio = ( (int)(tmp5) );
+HXDLIN(  84)					 ::Dynamic tmp5 = ::Std_obj::parseInt(tmp4);
+HXDLIN(  84)					if (::hx::IsNotNull( tmp5 )) {
+HXLINE(  84)						highestPrio = ( (int)(tmp5) );
             					}
             					else {
-HXLINE(  79)						highestPrio = 0;
+HXLINE(  84)						highestPrio = 0;
             					}
-HXLINE(  80)					int _hx_tmp1;
-HXDLIN(  80)					if ((( (::String)(::Reflect_obj::field(_g_value->attr,HX_("type",ba,f2,08,4d))) ) == HX_("unavailable",50,e0,29,fd))) {
-HXLINE(  80)						_hx_tmp1 = 4;
+HXLINE(  85)					int _hx_tmp1;
+HXDLIN(  85)					if (::hx::IsEq( _g_value->attr->get(HX_("type",ba,f2,08,4d)),HX_("unavailable",50,e0,29,fd) )) {
+HXLINE(  85)						_hx_tmp1 = 4;
             					}
             					else {
-HXLINE(  80)						::String _g = _g_value->getChildText(HX_("show",fd,d4,52,4c),null());
-HXDLIN(  80)						if (::hx::IsNull( _g )) {
-HXLINE(  80)							_hx_tmp1 = 0;
+HXLINE(  85)						::String _g = _g_value->getChildText(HX_("show",fd,d4,52,4c),null());
+HXDLIN(  85)						if (::hx::IsNull( _g )) {
+HXLINE(  85)							_hx_tmp1 = 0;
             						}
             						else {
-HXLINE(  80)							::String _hx_switch_0 = _g;
+HXLINE(  85)							::String _hx_switch_0 = _g;
             							if (  (_hx_switch_0==HX_("away",6e,53,78,40)) ){
-HXLINE(  80)								_hx_tmp1 = 1;
-HXDLIN(  80)								goto _hx_goto_1;
+HXLINE(  85)								_hx_tmp1 = 1;
+HXDLIN(  85)								goto _hx_goto_1;
             							}
             							if (  (_hx_switch_0==HX_("dnd",9a,41,4c,00)) ){
-HXLINE(  80)								_hx_tmp1 = 2;
-HXDLIN(  80)								goto _hx_goto_1;
+HXLINE(  85)								_hx_tmp1 = 2;
+HXDLIN(  85)								goto _hx_goto_1;
             							}
             							if (  (_hx_switch_0==HX_("xa",e9,68,00,00)) ){
-HXLINE(  80)								_hx_tmp1 = 3;
-HXDLIN(  80)								goto _hx_goto_1;
+HXLINE(  85)								_hx_tmp1 = 3;
+HXDLIN(  85)								goto _hx_goto_1;
             							}
             							/* default */{
-HXLINE(  80)								_hx_tmp1 = 0;
+HXLINE(  85)								_hx_tmp1 = 0;
             							}
             							_hx_goto_1:;
             						}
             					}
-HXDLIN(  80)					if ((lowestShow > _hx_tmp1)) {
-HXLINE(  80)						if ((( (::String)(::Reflect_obj::field(_g_value->attr,HX_("type",ba,f2,08,4d))) ) == HX_("unavailable",50,e0,29,fd))) {
-HXLINE(  80)							lowestShow = 4;
+HXDLIN(  85)					if ((lowestShow > _hx_tmp1)) {
+HXLINE(  85)						if (::hx::IsEq( _g_value->attr->get(HX_("type",ba,f2,08,4d)),HX_("unavailable",50,e0,29,fd) )) {
+HXLINE(  85)							lowestShow = 4;
             						}
             						else {
-HXLINE(  80)							::String _g1 = _g_value->getChildText(HX_("show",fd,d4,52,4c),null());
-HXDLIN(  80)							if (::hx::IsNull( _g1 )) {
-HXLINE(  80)								lowestShow = 0;
+HXLINE(  85)							::String _g1 = _g_value->getChildText(HX_("show",fd,d4,52,4c),null());
+HXDLIN(  85)							if (::hx::IsNull( _g1 )) {
+HXLINE(  85)								lowestShow = 0;
             							}
             							else {
-HXLINE(  80)								::String _hx_switch_1 = _g1;
+HXLINE(  85)								::String _hx_switch_1 = _g1;
             								if (  (_hx_switch_1==HX_("away",6e,53,78,40)) ){
-HXLINE(  80)									lowestShow = 1;
-HXDLIN(  80)									goto _hx_goto_2;
+HXLINE(  85)									lowestShow = 1;
+HXDLIN(  85)									goto _hx_goto_2;
             								}
             								if (  (_hx_switch_1==HX_("dnd",9a,41,4c,00)) ){
-HXLINE(  80)									lowestShow = 2;
-HXDLIN(  80)									goto _hx_goto_2;
+HXLINE(  85)									lowestShow = 2;
+HXDLIN(  85)									goto _hx_goto_2;
             								}
             								if (  (_hx_switch_1==HX_("xa",e9,68,00,00)) ){
-HXLINE(  80)									lowestShow = 3;
-HXDLIN(  80)									goto _hx_goto_2;
+HXLINE(  85)									lowestShow = 3;
+HXDLIN(  85)									goto _hx_goto_2;
             								}
             								/* default */{
-HXLINE(  80)									lowestShow = 0;
+HXLINE(  85)									lowestShow = 0;
             								}
             								_hx_goto_2:;
             							}
@@ -197,7 +196,7 @@ HXLINE(  80)									lowestShow = 0;
             				}
             			}
             		}
-HXLINE(  83)		this->showPresence = lowestShow;
+HXLINE(  88)		this->showPresence = lowestShow;
             	}
 
 Dynamic Member_obj::__CreateEmpty() { return new Member_obj; }
@@ -326,41 +325,41 @@ HX_DEFINE_DYNAMIC_FUNC0(Member_obj,showPresence__fromC,return )
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::Member,_gthis, ::Dynamic,resolve, ::borogove::queries::PubsubGet,get) HXARGC(0)
             			void _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_403768415749ca4b_95_profile)
-HXLINE(  96)				 ::borogove::Stanza item = get->getResult()->__get(0).StaticCast<  ::borogove::Stanza >();
-HXLINE(  97)				 ::borogove::Stanza fromItem;
-HXDLIN(  97)				if (::hx::IsNotNull( item )) {
-HXLINE(  97)					fromItem = item->getChild(HX_("vcard",46,91,02,33),HX_("urn:ietf:params:xml:ns:vcard-4.0",6e,ca,81,21));
+            				HX_GC_STACKFRAME(&_hx_pos_403768415749ca4b_100_profile)
+HXLINE( 101)				 ::borogove::Stanza item = get->getResult()->__get(0).StaticCast<  ::borogove::Stanza >();
+HXLINE( 102)				 ::borogove::Stanza fromItem;
+HXDLIN( 102)				if (::hx::IsNotNull( item )) {
+HXLINE( 102)					fromItem = item->getChild(HX_("vcard",46,91,02,33),HX_("urn:ietf:params:xml:ns:vcard-4.0",6e,ca,81,21));
             				}
             				else {
-HXLINE(  97)					fromItem = null();
+HXLINE( 102)					fromItem = null();
             				}
-HXLINE(  98)				 ::borogove::Stanza vcard;
-HXDLIN(  98)				if (::hx::IsNull( fromItem )) {
-HXLINE(  98)					vcard =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("vcard",46,91,02,33), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:vcard-4.0",6e,ca,81,21))));
+HXLINE( 103)				 ::borogove::Stanza vcard;
+HXDLIN( 103)				if (::hx::IsNull( fromItem )) {
+HXLINE( 103)					vcard =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("vcard",46,91,02,33), ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:vcard-4.0",6e,ca,81,21))),null());
             				}
             				else {
-HXLINE(  98)					vcard = fromItem;
+HXLINE( 103)					vcard = fromItem;
             				}
-HXLINE(  99)				if (!(vcard->hasChild(HX_("fn",48,59,00,00),null()))) {
-HXLINE( 100)					vcard->insertChild(0, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("fn",48,59,00,00),null())->textTag(HX_("text",ad,cc,f9,4c),_gthis->displayName,null()));
+HXLINE( 104)				if (!(vcard->hasChild(HX_("fn",48,59,00,00),null()))) {
+HXLINE( 105)					vcard->insertChild(0, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("fn",48,59,00,00),null(),null())->textTag(HX_("text",ad,cc,f9,4c),_gthis->displayName,null(),null()));
             				}
-HXLINE( 102)				 ::Dynamic resolve1 = resolve;
-HXDLIN( 102)				resolve1( ::borogove::Profile_obj::__alloc( HX_CTX ,vcard,null()));
+HXLINE( 107)				 ::Dynamic resolve1 = resolve;
+HXDLIN( 107)				resolve1( ::borogove::Profile_obj::__alloc( HX_CTX ,vcard,null()));
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_403768415749ca4b_93_profile)
-HXLINE(  94)			 ::borogove::queries::PubsubGet get =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,_gthis->jid->asString(),HX_("urn:xmpp:vcard4",4a,89,04,19),null());
-HXLINE(  95)			get->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,resolve,get)));
-HXLINE( 104)			client->sendQuery(get);
+            			HX_GC_STACKFRAME(&_hx_pos_403768415749ca4b_98_profile)
+HXLINE(  99)			 ::borogove::queries::PubsubGet get =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,_gthis->jid->asString(),HX_("urn:xmpp:vcard4",4a,89,04,19),null());
+HXLINE( 100)			get->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,resolve,get)));
+HXLINE( 109)			client->sendQuery(get);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_403768415749ca4b_92_profile)
-HXDLIN(  92)		 ::borogove::Member _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  93)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,client)));
+            	HX_STACKFRAME(&_hx_pos_403768415749ca4b_97_profile)
+HXDLIN(  97)		 ::borogove::Member _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  98)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,client)));
             	}
 
 
@@ -412,65 +411,65 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->profile(clien
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,resolve, ::borogove::queries::PubsubGet,get) HXARGC(0)
             			void _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_403768415749ca4b_117_status)
-HXLINE( 118)				 ::borogove::Stanza item = get->getResult()->__get(0).StaticCast<  ::borogove::Stanza >();
-HXLINE( 120)				 ::borogove::Stanza activity;
-HXDLIN( 120)				if (::hx::IsNotNull( item )) {
-HXLINE( 120)					activity = item->getChild(HX_("activity",cf,2d,b2,e5),HX_("http://jabber.org/protocol/activity",43,2c,6e,94));
+            				HX_GC_STACKFRAME(&_hx_pos_403768415749ca4b_122_status)
+HXLINE( 123)				 ::borogove::Stanza item = get->getResult()->__get(0).StaticCast<  ::borogove::Stanza >();
+HXLINE( 125)				 ::borogove::Stanza activity;
+HXDLIN( 125)				if (::hx::IsNotNull( item )) {
+HXLINE( 125)					activity = item->getChild(HX_("activity",cf,2d,b2,e5),HX_("http://jabber.org/protocol/activity",43,2c,6e,94));
             				}
             				else {
-HXLINE( 120)					activity = null();
+HXLINE( 125)					activity = null();
             				}
-HXLINE( 121)				 ::Dynamic resolve1 = resolve;
-HXDLIN( 121)				::String _hx_tmp;
-HXDLIN( 121)				 ::borogove::Stanza tmp;
-HXDLIN( 121)				if (::hx::IsNotNull( activity )) {
-HXLINE( 121)					tmp = activity->getChild(HX_("undefined",90,3e,0a,9d),null());
+HXLINE( 126)				 ::Dynamic resolve1 = resolve;
+HXDLIN( 126)				::String _hx_tmp;
+HXDLIN( 126)				 ::borogove::Stanza tmp;
+HXDLIN( 126)				if (::hx::IsNotNull( activity )) {
+HXLINE( 126)					tmp = activity->getChild(HX_("undefined",90,3e,0a,9d),null());
             				}
             				else {
-HXLINE( 121)					tmp = null();
+HXLINE( 126)					tmp = null();
             				}
-HXDLIN( 121)				::String tmp1;
-HXDLIN( 121)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 121)					tmp1 = tmp->getChildText(HX_("emoji",86,6f,d9,6f),HX_("https://ns.borogove.dev/",0d,36,29,bd));
+HXDLIN( 126)				::String tmp1;
+HXDLIN( 126)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 126)					tmp1 = tmp->getChildText(HX_("emoji",86,6f,d9,6f),HX_("https://ns.borogove.dev/",0d,36,29,bd));
             				}
             				else {
-HXLINE( 121)					tmp1 = null();
+HXLINE( 126)					tmp1 = null();
             				}
-HXDLIN( 121)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 121)					_hx_tmp = tmp1;
+HXDLIN( 126)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 126)					_hx_tmp = tmp1;
             				}
             				else {
-HXLINE( 121)					_hx_tmp = HX_("",00,00,00,00);
+HXLINE( 126)					_hx_tmp = HX_("",00,00,00,00);
             				}
-HXDLIN( 121)				::String tmp2;
-HXDLIN( 121)				if (::hx::IsNotNull( activity )) {
-HXLINE( 121)					tmp2 = activity->getChildText(HX_("text",ad,cc,f9,4c),null());
+HXDLIN( 126)				::String tmp2;
+HXDLIN( 126)				if (::hx::IsNotNull( activity )) {
+HXLINE( 126)					tmp2 = activity->getChildText(HX_("text",ad,cc,f9,4c),null());
             				}
             				else {
-HXLINE( 121)					tmp2 = null();
+HXLINE( 126)					tmp2 = null();
             				}
-HXDLIN( 121)				::String _hx_tmp1;
-HXDLIN( 121)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 121)					_hx_tmp1 = tmp2;
+HXDLIN( 126)				::String _hx_tmp1;
+HXDLIN( 126)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 126)					_hx_tmp1 = tmp2;
             				}
             				else {
-HXLINE( 121)					_hx_tmp1 = HX_("",00,00,00,00);
+HXLINE( 126)					_hx_tmp1 = HX_("",00,00,00,00);
             				}
-HXDLIN( 121)				resolve1( ::borogove::Status_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1));
+HXDLIN( 126)				resolve1( ::borogove::Status_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1));
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_403768415749ca4b_115_status)
-HXLINE( 116)			 ::borogove::queries::PubsubGet get =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,_gthis->jid->asString(),HX_("http://jabber.org/protocol/activity",43,2c,6e,94),null());
-HXLINE( 117)			get->onFinished( ::Dynamic(new _hx_Closure_0(resolve,get)));
-HXLINE( 123)			client->sendQuery(get);
+            			HX_GC_STACKFRAME(&_hx_pos_403768415749ca4b_120_status)
+HXLINE( 121)			 ::borogove::queries::PubsubGet get =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,_gthis->jid->asString(),HX_("http://jabber.org/protocol/activity",43,2c,6e,94),null());
+HXLINE( 122)			get->onFinished( ::Dynamic(new _hx_Closure_0(resolve,get)));
+HXLINE( 128)			client->sendQuery(get);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_403768415749ca4b_114_status)
-HXDLIN( 114)		 ::borogove::Member _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 115)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,client)));
+            	HX_STACKFRAME(&_hx_pos_403768415749ca4b_119_status)
+HXDLIN( 119)		 ::borogove::Member _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 120)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,client)));
             	}
 
 
@@ -517,6 +516,16 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->status(client
             	}
 
 
+ ::borogove::Member Member_obj::MODERATED;
+
+ ::borogove::Member Member_obj::MODERATED__fromC(){
+            	HX_STACKFRAME(&_hx_pos_de8dc97d744cad10_426_MODERATED__fromC)
+HXDLIN( 426)		return ::borogove::Member_obj::MODERATED;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC0(Member_obj,MODERATED__fromC,return )
+
 
 ::hx::ObjectPtr< Member_obj > Member_obj::__new(::String id,::String displayName,::String photoUri,bool isSelf,::Array< ::Dynamic> roles, ::borogove::JID jid, ::haxe::ds::StringMap presence, ::borogove::AvailableChat chat) {
 	::hx::ObjectPtr< Member_obj > __this = new Member_obj();
@@ -622,6 +631,18 @@ void Member_obj::__Visit(HX_VISIT_PARAMS)
 	return super::__Field(inName,inCallProp);
 }
 
+bool Member_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 9:
+		if (HX_FIELD_EQ(inName,"MODERATED") ) { outValue = ( MODERATED ); return true; }
+		break;
+	case 16:
+		if (HX_FIELD_EQ(inName,"MODERATED__fromC") ) { outValue = MODERATED__fromC_dyn(); return true; }
+	}
+	return false;
+}
+
 ::hx::Val Member_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
 {
 	switch(inName.length) {
@@ -656,6 +677,15 @@ void Member_obj::__Visit(HX_VISIT_PARAMS)
 	return super::__SetField(inName,inValue,inCallProp);
 }
 
+bool Member_obj::__SetStatic(const ::String &inName,Dynamic &ioValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 9:
+		if (HX_FIELD_EQ(inName,"MODERATED") ) { MODERATED=ioValue.Cast<  ::borogove::Member >(); return true; }
+	}
+	return false;
+}
+
 void Member_obj::__GetFields(Array< ::String> &outFields)
 {
 	outFields->push(HX_("id",db,5b,00,00));
@@ -685,7 +715,10 @@ static ::hx::StorageInfo Member_obj_sMemberStorageInfo[] = {
 	{::hx::fsObject /*  ::borogove::JID */ ,(int)offsetof(Member_obj,jid),HX_("jid",c5,ca,50,00)},
 	{ ::hx::fsUnknown, 0, null()}
 };
-static ::hx::StaticInfo *Member_obj_sStaticStorageInfo = 0;
+static ::hx::StaticInfo Member_obj_sStaticStorageInfo[] = {
+	{::hx::fsObject /*  ::borogove::Member */ ,(void *) &Member_obj::MODERATED,HX_("MODERATED",21,a7,93,1d)},
+	{ ::hx::fsUnknown, 0, null()}
+};
 #endif
 
 static ::String Member_obj_sMemberFields[] = {
@@ -710,8 +743,25 @@ static ::String Member_obj_sMemberFields[] = {
 	HX_("status",32,e7,fb,05),
 	::String(null()) };
 
+static void Member_obj_sMarkStatics(HX_MARK_PARAMS) {
+	HX_MARK_MEMBER_NAME(Member_obj::MODERATED,"MODERATED");
+};
+
+#ifdef HXCPP_VISIT_ALLOCS
+static void Member_obj_sVisitStatics(HX_VISIT_PARAMS) {
+	HX_VISIT_MEMBER_NAME(Member_obj::MODERATED,"MODERATED");
+};
+
+#endif
+
 ::hx::Class Member_obj::__mClass;
 
+static ::String Member_obj_sStaticFields[] = {
+	HX_("MODERATED",21,a7,93,1d),
+	HX_("MODERATED__fromC",78,5f,ac,c3),
+	::String(null())
+};
+
 void Member_obj::__register()
 {
 	Member_obj _hx_dummy;
@@ -721,11 +771,15 @@ void Member_obj::__register()
 	__mClass->mSuper = &super::__SGetClass();
 	__mClass->mConstructEmpty = &__CreateEmpty;
 	__mClass->mConstructArgs = &__Create;
-	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
-	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
-	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mGetStaticField = &Member_obj::__GetStatic;
+	__mClass->mSetStaticField = &Member_obj::__SetStatic;
+	__mClass->mMarkFunc = Member_obj_sMarkStatics;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(Member_obj_sStaticFields);
 	__mClass->mMembers = ::hx::Class_obj::dupFunctions(Member_obj_sMemberFields);
 	__mClass->mCanCast = ::hx::TCanCast< Member_obj >;
+#ifdef HXCPP_VISIT_ALLOCS
+	__mClass->mVisitFunc = Member_obj_sVisitStatics;
+#endif
 #ifdef HXCPP_SCRIPTABLE
 	__mClass->mMemberStorageInfo = Member_obj_sMemberStorageInfo;
 #endif
@@ -739,7 +793,7 @@ void Member_obj::__boot()
 {
 {
             	HX_STACKFRAME(&_hx_pos_403768415749ca4b_20_boot)
-HXDLIN(  20)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN(  20)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(12)
             				->setFixed(0,HX_("placeholderUri__fromC",e0,2f,a3,85), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
@@ -764,8 +818,15 @@ HXDLIN(  20)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(10,HX_("id__fromC",fe,15,a5,4d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(11,HX_("showPresence__fromC",21,03,44,77), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))))
+            			->setFixed(1,HX_("statics",05,3c,65,36), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("MODERATED__fromC",78,5f,ac,c3), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
             	}
+{
+            	HX_GC_STACKFRAME(&_hx_pos_403768415749ca4b_24_boot)
+HXDLIN(  24)		MODERATED =  ::borogove::Member_obj::__alloc( HX_CTX ,HX_("\x00""moderated",41,37,3b,22),HX_("Moderated",21,17,0e,c4),null(),false,::Array_obj< ::Dynamic>::__new(0), ::borogove::JID_obj::__alloc( HX_CTX ,null(),HX_("moderated.invalid",ca,3c,6e,44),null(),null()), ::haxe::ds::StringMap_obj::__alloc( HX_CTX ),null());
+            	}
 }
 
 } // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/MemberUpdate.cpp b/Sources/c_borogove/src/borogove/MemberUpdate.cpp
index cfeadb6..afca27e 100644
--- a/Sources/c_borogove/src/borogove/MemberUpdate.cpp
+++ b/Sources/c_borogove/src/borogove/MemberUpdate.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_borogove_AvailableChat
 #include <borogove/AvailableChat.h>
 #endif
@@ -316,7 +313,7 @@ HXLINE(  58)			_hx_tmp15 = null();
             		}
             		else {
 HXLINE(  58)			::String _hx_tmp16 = this->jid->asBare()->asString();
-HXDLIN(  58)			_hx_tmp15 =  ::borogove::AvailableChat_obj::__alloc( HX_CTX ,_hx_tmp16,this->displayName,HX_("",00,00,00,00),::borogove::CapsRepo_obj::empty);
+HXDLIN(  58)			_hx_tmp15 =  ::borogove::AvailableChat_obj::__alloc( HX_CTX ,_hx_tmp16,this->displayName,HX_("",00,00,00,00),::borogove::CapsRepo_obj::empty,null());
             		}
 HXLINE(  50)		return  ::Dynamic(::hx::Anon_obj::Create(8)
             			->setFixed(0,HX_("roles",3d,1c,5f,ed),_hx_tmp13)
@@ -338,7 +335,7 @@ HXLINE(  63)		::Array< ::Dynamic> updates = ::Array_obj< ::Dynamic>::__new(0);
 HXLINE(  64)		 ::borogove::Stanza mucUser = stanza->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
 HXLINE(  65)		if (::hx::IsNotNull( mucUser )) {
 HXLINE(  66)			 ::borogove::Stanza tmp = stanza->getChild(HX_("occupant-id",2b,a5,8b,91),HX_("urn:xmpp:occupant-id:0",05,d7,05,11));
-HXDLIN(  66)			 ::Dynamic tmp1;
+HXDLIN(  66)			 ::haxe::ds::StringMap tmp1;
 HXDLIN(  66)			if (::hx::IsNotNull( tmp )) {
 HXLINE(  66)				tmp1 = tmp->attr;
             			}
@@ -347,12 +344,12 @@ HXLINE(  66)				tmp1 = null();
             			}
 HXDLIN(  66)			::String sOccupantId;
 HXDLIN(  66)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(  66)				sOccupantId = ( (::String)(::Reflect_obj::field(tmp1,HX_("id",db,5b,00,00))) );
+HXLINE(  66)				sOccupantId = tmp1->get_string(HX_("id",db,5b,00,00));
             			}
             			else {
 HXLINE(  66)				sOccupantId = null();
             			}
-HXLINE(  67)			::String from = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXLINE(  67)			::String from = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
 HXLINE(  68)			::String resource;
 HXDLIN(  68)			bool resource1;
 HXDLIN(  68)			if ((stanza->name == HX_("presence",3b,52,d7,66))) {
@@ -374,7 +371,7 @@ HXDLIN(  70)				::Array< ::Dynamic> _g1 = mucUser->allTags(HX_("item",13,c5,bf,4
 HXDLIN(  70)				while((_g < _g1->length)){
 HXLINE(  70)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
 HXDLIN(  70)					_g = (_g + 1);
-HXLINE(  71)					::String jidS = ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) );
+HXLINE(  71)					::String jidS = item->attr->get_string(HX_("jid",c5,ca,50,00));
 HXLINE(  72)					 ::borogove::JID jid;
 HXDLIN(  72)					if (::hx::IsNull( jidS )) {
 HXLINE(  72)						jid = null();
@@ -384,7 +381,7 @@ HXLINE(  72)						jid = ::borogove::JID_obj::parse(jidS)->asBare();
             					}
 HXLINE(  73)					::String occupantId;
 HXDLIN(  73)					 ::borogove::Stanza tmp2 = item->getChild(HX_("occupant-id",2b,a5,8b,91),HX_("urn:xmpp:occupant-id:0",05,d7,05,11));
-HXDLIN(  73)					 ::Dynamic tmp3;
+HXDLIN(  73)					 ::haxe::ds::StringMap tmp3;
 HXDLIN(  73)					if (::hx::IsNotNull( tmp2 )) {
 HXLINE(  73)						tmp3 = tmp2->attr;
             					}
@@ -393,7 +390,7 @@ HXLINE(  73)						tmp3 = null();
             					}
 HXDLIN(  73)					::String tmp4;
 HXDLIN(  73)					if (::hx::IsNotNull( tmp3 )) {
-HXLINE(  73)						tmp4 = ( (::String)(::Reflect_obj::field(tmp3,HX_("id",db,5b,00,00))) );
+HXLINE(  73)						tmp4 = tmp3->get_string(HX_("id",db,5b,00,00));
             					}
             					else {
 HXLINE(  73)						tmp4 = null();
@@ -411,7 +408,7 @@ HXLINE(  74)						id = null();
             					else {
 HXLINE(  74)						id = ((chat->chatId + HX_("/",2f,00,00,00)) + occupantId);
             					}
-HXLINE(  75)					::String aff = ( (::String)(::Reflect_obj::field(item->attr,HX_("affiliation",b0,1a,35,a1))) );
+HXLINE(  75)					::String aff = item->attr->get_string(HX_("affiliation",b0,1a,35,a1));
 HXLINE(  76)					if (::hx::IsNull( aff )) {
 HXLINE(  77)						::haxe::Log_obj::trace(HX_("No affiliation on affiliation update",eb,38,ac,49), ::Dynamic(::hx::Anon_obj::Create(5)
             							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.MemberUpdate",90,05,db,c2))
@@ -422,7 +419,7 @@ HXLINE(  77)						::haxe::Log_obj::trace(HX_("No affiliation on affiliation upda
             					}
             					else {
 HXLINE(  82)						::String _hx_tmp;
-HXDLIN(  82)						::String tmp5 = ( (::String)(::Reflect_obj::field(item->attr,HX_("nick",a3,7b,05,49))) );
+HXDLIN(  82)						::String tmp5 = item->attr->get_string(HX_("nick",a3,7b,05,49));
 HXDLIN(  82)						if (::hx::IsNotNull( tmp5 )) {
 HXLINE(  82)							_hx_tmp = tmp5;
             						}
diff --git a/Sources/c_borogove/src/borogove/Message.cpp b/Sources/c_borogove/src/borogove/Message.cpp
index 91037e2..e2e1f88 100644
--- a/Sources/c_borogove/src/borogove/Message.cpp
+++ b/Sources/c_borogove/src/borogove/Message.cpp
@@ -61,6 +61,15 @@
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
+#ifndef INCLUDED_borogove__DataForm_DataForm_Impl_
+#include <borogove/_DataForm/DataForm_Impl_.h>
+#endif
+#ifndef INCLUDED_borogove__DataForm_Field_Impl_
+#include <borogove/_DataForm/Field_Impl_.h>
+#endif
+#ifndef INCLUDED_borogove__XEP0454_XEP0454_Fields_
+#include <borogove/_XEP0454/XEP0454_Fields_.h>
+#endif
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
@@ -71,25 +80,25 @@
 #include <haxe/ds/StringMap.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_5c42425238de6f01_54_new,"borogove.Message","new",0x751d0d4c,"borogove.Message.new","borogove/Message.hx",54,0x7a818ae5)
-HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_62_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",62,0x7a818ae5)
-HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_191_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",191,0x7a818ae5)
-HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_192_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",192,0x7a818ae5)
-HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_193_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",193,0x7a818ae5)
-HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_194_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",194,0x7a818ae5)
-HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_203_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",203,0x7a818ae5)
+HX_DEFINE_STACK_FRAME(_hx_pos_5c42425238de6f01_55_new,"borogove.Message","new",0x751d0d4c,"borogove.Message.new","borogove/Message.hx",55,0x7a818ae5)
+HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_63_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",63,0x7a818ae5)
+HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_206_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",206,0x7a818ae5)
+HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_207_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",207,0x7a818ae5)
+HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_208_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",208,0x7a818ae5)
+HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_209_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",209,0x7a818ae5)
+HX_LOCAL_STACK_FRAME(_hx_pos_5c42425238de6f01_218_fromStanza,"borogove.Message","fromStanza",0x7cd2db93,"borogove.Message.fromStanza","borogove/Message.hx",218,0x7a818ae5)
 namespace borogove{
 
 void Message_obj::__construct(::String chatId,::String senderId,::String threadId, ::borogove::MessageStanza parsed, ::borogove::EncryptionInfo encryption){
-            	HX_STACKFRAME(&_hx_pos_5c42425238de6f01_54_new)
-HXLINE(  55)		this->chatId = chatId;
-HXLINE(  56)		if (::hx::IsNull( senderId )) {
-HXLINE(  56)			HX_STACK_DO_THROW(HX_("no sender id",c7,72,2e,ca));
+            	HX_STACKFRAME(&_hx_pos_5c42425238de6f01_55_new)
+HXLINE(  56)		this->chatId = chatId;
+HXLINE(  57)		if (::hx::IsNull( senderId )) {
+HXLINE(  57)			HX_STACK_DO_THROW(HX_("no sender id",c7,72,2e,ca));
             		}
-HXDLIN(  56)		this->senderId = senderId;
-HXLINE(  57)		this->threadId = threadId;
-HXLINE(  58)		this->parsed = parsed;
-HXLINE(  59)		this->encryption = encryption;
+HXDLIN(  57)		this->senderId = senderId;
+HXLINE(  58)		this->threadId = threadId;
+HXLINE(  59)		this->parsed = parsed;
+HXLINE(  60)		this->encryption = encryption;
             	}
 
 Dynamic Message_obj::__CreateEmpty() { return new Message_obj; }
@@ -109,395 +118,475 @@ bool Message_obj::_hx_isInstanceOf(int inClassId) {
 
  ::borogove::Message Message_obj::fromStanza( ::borogove::Stanza stanza, ::borogove::JID localJid, ::Dynamic addContext, ::borogove::EncryptionInfo encryptionInfo,::hx::Null< bool >  __o_preferChatMessage){
             		bool preferChatMessage = __o_preferChatMessage.Default(false);
-            	HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_62_fromStanza)
-HXDLIN(  62)		while(true){
+            	HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_63_fromStanza)
+HXDLIN(  63)		while(true){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::ds::StringMap,recipients) HXARGC(0)
             			 ::Dynamic _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_191_fromStanza)
-HXLINE( 191)				return recipients->keys();
+            				HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_206_fromStanza)
+HXLINE( 206)				return recipients->keys();
             			}
             			HX_END_LOCAL_FUNC0(return)
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(2)
             			int _hx_run( ::borogove::JID x, ::borogove::JID y){
-            				HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_192_fromStanza)
-HXLINE( 192)				::String _hx_tmp = x->asString();
-HXDLIN( 192)				return ::Reflect_obj::compare(_hx_tmp,y->asString());
+            				HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_207_fromStanza)
+HXLINE( 207)				::String _hx_tmp = x->asString();
+HXDLIN( 207)				return ::Reflect_obj::compare(_hx_tmp,y->asString());
             			}
             			HX_END_LOCAL_FUNC2(return)
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::haxe::ds::StringMap,replyTo) HXARGC(0)
             			 ::Dynamic _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_193_fromStanza)
-HXLINE( 193)				return replyTo->keys();
+            				HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_208_fromStanza)
+HXLINE( 208)				return replyTo->keys();
             			}
             			HX_END_LOCAL_FUNC0(return)
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(2)
             			int _hx_run( ::borogove::JID x, ::borogove::JID y){
-            				HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_194_fromStanza)
-HXLINE( 194)				::String _hx_tmp = x->asString();
-HXDLIN( 194)				return ::Reflect_obj::compare(_hx_tmp,y->asString());
+            				HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_209_fromStanza)
+HXLINE( 209)				::String _hx_tmp = x->asString();
+HXDLIN( 209)				return ::Reflect_obj::compare(_hx_tmp,y->asString());
             			}
             			HX_END_LOCAL_FUNC2(return)
 
-HXLINE(  63)			::String fromAttr = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE(  64)			::String from;
-HXDLIN(  64)			if (::hx::IsNull( fromAttr )) {
-HXLINE(  64)				from = localJid->domain;
+HXLINE(  64)			::String fromAttr = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
+HXLINE(  65)			::String from;
+HXDLIN(  65)			if (::hx::IsNull( fromAttr )) {
+HXLINE(  65)				from = localJid->domain;
             			}
             			else {
-HXLINE(  64)				from = fromAttr;
-            			}
-HXLINE(  65)			::String localId = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) );
-HXLINE(  66)			if (::hx::IsNull( encryptionInfo )) {
-HXLINE(  67)				encryptionInfo = ::borogove::EncryptionInfo_obj::fromStanza(stanza);
-            			}
-HXLINE(  70)			if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE(  71)				return  ::borogove::Message_obj::__alloc( HX_CTX ,from,from,null(),::borogove::MessageStanza_obj::ErrorMessageStanza(localId,stanza),encryptionInfo);
-            			}
-HXLINE(  74)			 ::borogove::ChatMessageBuilder msg =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
-HXLINE(  75)			msg->stanza = stanza;
-HXLINE(  76)			msg->timestamp = stanza->findText(HX_("{urn:xmpp:delay}delay@stamp",cb,88,c4,86));
-HXLINE(  77)			msg->threadId = stanza->getChildText(HX_("thread",ca,7a,b9,8e),null());
-HXLINE(  78)			msg->lang = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("xml:lang",f1,b1,be,5f))) );
-HXLINE(  79)			msg->text = stanza->getChildText(HX_("body",a2,7a,1b,41),null());
-HXLINE(  80)			bool _hx_tmp;
-HXDLIN(  80)			if (::hx::IsNotNull( msg->text )) {
-HXLINE(  80)				if (::hx::IsNotNull( msg->lang )) {
-HXLINE(  80)					_hx_tmp = (msg->lang == HX_("",00,00,00,00));
+HXLINE(  65)				from = fromAttr;
+            			}
+HXLINE(  66)			::String localId = stanza->attr->get_string(HX_("id",db,5b,00,00));
+HXLINE(  67)			if (::hx::IsNull( encryptionInfo )) {
+HXLINE(  68)				encryptionInfo = ::borogove::EncryptionInfo_obj::fromStanza(stanza);
+            			}
+HXLINE(  71)			if (::hx::IsEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) )) {
+HXLINE(  72)				return  ::borogove::Message_obj::__alloc( HX_CTX ,from,from,null(),::borogove::MessageStanza_obj::ErrorMessageStanza(localId,stanza),encryptionInfo);
+            			}
+HXLINE(  75)			 ::borogove::ChatMessageBuilder msg =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
+HXLINE(  76)			msg->stanza = stanza;
+HXLINE(  77)			msg->timeSent = stanza->findText(HX_("{urn:xmpp:delay}delay@stamp",cb,88,c4,86));
+HXLINE(  78)			msg->threadId = stanza->getChildText(HX_("thread",ca,7a,b9,8e),null());
+HXLINE(  79)			msg->lang = stanza->attr->get_string(HX_("xml:lang",f1,b1,be,5f));
+HXLINE(  80)			msg->text = stanza->getChildText(HX_("body",a2,7a,1b,41),null());
+HXLINE(  81)			bool _hx_tmp;
+HXDLIN(  81)			if (::hx::IsNotNull( msg->text )) {
+HXLINE(  81)				if (::hx::IsNotNull( msg->lang )) {
+HXLINE(  81)					_hx_tmp = (msg->lang == HX_("",00,00,00,00));
             				}
             				else {
-HXLINE(  80)					_hx_tmp = true;
+HXLINE(  81)					_hx_tmp = true;
             				}
             			}
             			else {
-HXLINE(  80)				_hx_tmp = false;
+HXLINE(  81)				_hx_tmp = false;
             			}
-HXDLIN(  80)			if (_hx_tmp) {
-HXLINE(  81)				 ::borogove::Stanza tmp = stanza->getChild(HX_("body",a2,7a,1b,41),null());
-HXDLIN(  81)				::String _hx_tmp1;
-HXDLIN(  81)				if (::hx::IsNotNull( tmp )) {
-HXLINE(  81)					_hx_tmp1 = ( (::String)(::Reflect_obj::field(tmp->attr,HX_("xml:lang",f1,b1,be,5f))) );
+HXDLIN(  81)			if (_hx_tmp) {
+HXLINE(  82)				 ::borogove::Stanza tmp = stanza->getChild(HX_("body",a2,7a,1b,41),null());
+HXDLIN(  82)				::String _hx_tmp1;
+HXDLIN(  82)				if (::hx::IsNotNull( tmp )) {
+HXLINE(  82)					_hx_tmp1 = tmp->attr->get_string(HX_("xml:lang",f1,b1,be,5f));
             				}
             				else {
-HXLINE(  81)					_hx_tmp1 = null();
+HXLINE(  82)					_hx_tmp1 = null();
             				}
-HXDLIN(  81)				msg->lang = _hx_tmp1;
+HXDLIN(  82)				msg->lang = _hx_tmp1;
             			}
-HXLINE(  83)			 ::borogove::Stanza subject = stanza->getChild(HX_("subject",ac,01,88,29),null());
-HXLINE(  84)			if (::hx::IsNotNull( subject )) {
-HXLINE(  84)				msg->payloads->push(subject);
+HXLINE(  84)			 ::borogove::Stanza subject = stanza->getChild(HX_("subject",ac,01,88,29),null());
+HXLINE(  85)			if (::hx::IsNotNull( subject )) {
+HXLINE(  85)				msg->payloads->push(subject);
             			}
-HXLINE(  85)			msg->from = ::borogove::JID_obj::parse(from);
-HXLINE(  86)			bool isGroupchat = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("groupchat",97,1d,c8,e5));
-HXLINE(  87)			int _hx_tmp2;
-HXDLIN(  87)			if (isGroupchat) {
-HXLINE(  87)				_hx_tmp2 = 2;
+HXLINE(  86)			msg->from = ::borogove::JID_obj::parse(from);
+HXLINE(  87)			bool isGroupchat = ::hx::IsEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("groupchat",97,1d,c8,e5) );
+HXLINE(  88)			int _hx_tmp2;
+HXDLIN(  88)			if (isGroupchat) {
+HXLINE(  88)				_hx_tmp2 = 2;
             			}
             			else {
-HXLINE(  87)				_hx_tmp2 = 0;
+HXLINE(  88)				_hx_tmp2 = 0;
             			}
-HXDLIN(  87)			msg->type = _hx_tmp2;
-HXLINE(  88)			bool _hx_tmp3;
-HXDLIN(  88)			if ((msg->type == 0)) {
-HXLINE(  88)				_hx_tmp3 = ::hx::IsNotNull( stanza->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14)) );
+HXDLIN(  88)			msg->type = _hx_tmp2;
+HXLINE(  89)			bool _hx_tmp3;
+HXDLIN(  89)			if ((msg->type == 0)) {
+HXLINE(  89)				_hx_tmp3 = ::hx::IsNotNull( stanza->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14)) );
             			}
             			else {
-HXLINE(  88)				_hx_tmp3 = false;
+HXLINE(  89)				_hx_tmp3 = false;
+            			}
+HXDLIN(  89)			if (_hx_tmp3) {
+HXLINE(  90)				msg->type = 3;
             			}
-HXDLIN(  88)			if (_hx_tmp3) {
-HXLINE(  89)				msg->type = 3;
+HXLINE(  92)			 ::borogove::JID localJidBare = localJid->asBare();
+HXLINE(  93)			::String domain = localJid->domain;
+HXLINE(  94)			::String to = stanza->attr->get_string(HX_("to",7b,65,00,00));
+HXLINE(  95)			 ::borogove::JID _hx_tmp4;
+HXDLIN(  95)			if (::hx::IsNull( to )) {
+HXLINE(  95)				_hx_tmp4 = localJid;
             			}
-HXLINE(  91)			 ::borogove::JID localJidBare = localJid->asBare();
-HXLINE(  92)			::String domain = localJid->domain;
-HXLINE(  93)			::String to = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) );
-HXLINE(  94)			 ::borogove::JID _hx_tmp4;
-HXDLIN(  94)			if (::hx::IsNull( to )) {
-HXLINE(  94)				_hx_tmp4 = localJid;
+            			else {
+HXLINE(  95)				_hx_tmp4 = ::borogove::JID_obj::parse(to);
+            			}
+HXDLIN(  95)			msg->to = _hx_tmp4;
+HXLINE(  96)			msg->encryption = encryptionInfo;
+HXLINE(  99)			 ::borogove::Stanza form = stanza->getChild(HX_("x",78,00,00,00),HX_("jabber:x:data",c2,e1,e9,7c));
+HXLINE( 101)			bool _hx_tmp5;
+HXDLIN( 101)			bool _hx_tmp6;
+HXDLIN( 101)			bool _hx_tmp7;
+HXDLIN( 101)			if (::hx::IsNotNull( form )) {
+HXLINE( 102)				::String tmp1 = form->attr->get_string(HX_("type",ba,f2,08,4d));
+HXDLIN( 102)				::String _hx_tmp8;
+HXDLIN( 102)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 102)					_hx_tmp8 = tmp1;
+            				}
+            				else {
+HXLINE( 102)					_hx_tmp8 = HX_("form",44,61,c0,43);
+            				}
+HXLINE( 101)				_hx_tmp7 = (_hx_tmp8 == HX_("form",44,61,c0,43));
+            			}
+            			else {
+HXLINE( 101)				_hx_tmp7 = false;
+            			}
+HXDLIN( 101)			if (_hx_tmp7) {
+HXLINE( 103)				 ::borogove::Stanza tmp2 = ::borogove::_DataForm::DataForm_Impl__obj::field(form,HX_("FORM_TYPE",d5,96,c9,5a));
+HXDLIN( 103)				::Array< ::String > tmp3;
+HXDLIN( 103)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 103)					tmp3 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp2);
+            				}
+            				else {
+HXLINE( 103)					tmp3 = null();
+            				}
+HXDLIN( 103)				::String _hx_tmp9;
+HXDLIN( 103)				if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 103)					_hx_tmp9 = tmp3->join(HX_(" ",20,00,00,00));
+            				}
+            				else {
+HXLINE( 103)					_hx_tmp9 = null();
+            				}
+HXLINE( 101)				_hx_tmp6 = (HX_("http://jabber.org/protocol/muc#request",93,0a,86,93) == _hx_tmp9);
             			}
             			else {
-HXLINE(  94)				_hx_tmp4 = ::borogove::JID_obj::parse(to);
+HXLINE( 101)				_hx_tmp6 = false;
             			}
-HXDLIN(  94)			msg->to = _hx_tmp4;
-HXLINE(  95)			msg->encryption = encryptionInfo;
-HXLINE(  97)			bool _hx_tmp5;
-HXDLIN(  97)			if (::hx::IsNotNull( msg->from )) {
-HXLINE(  97)				_hx_tmp5 = msg->from->equals(localJidBare);
+HXDLIN( 101)			if (_hx_tmp6) {
+HXLINE( 104)				 ::borogove::Stanza tmp4 = ::borogove::_DataForm::DataForm_Impl__obj::field(form,HX_("muc#role",3e,cf,d3,63));
+HXDLIN( 104)				::Array< ::String > tmp5;
+HXDLIN( 104)				if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 104)					tmp5 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp4);
+            				}
+            				else {
+HXLINE( 104)					tmp5 = null();
+            				}
+HXDLIN( 104)				::String _hx_tmp10;
+HXDLIN( 104)				if (::hx::IsNotNull( tmp5 )) {
+HXLINE( 104)					_hx_tmp10 = tmp5->join(HX_(" ",20,00,00,00));
+            				}
+            				else {
+HXLINE( 104)					_hx_tmp10 = null();
+            				}
+HXLINE( 101)				_hx_tmp5 = (HX_("participant",b3,07,ea,7a) == _hx_tmp10);
             			}
             			else {
-HXLINE(  97)				_hx_tmp5 = false;
-            			}
-HXDLIN(  97)			if (_hx_tmp5) {
-HXLINE(  98)				 ::borogove::Stanza carbon = stanza->getChild(HX_("received",21,45,fd,e2),HX_("urn:xmpp:carbons:2",02,86,9e,df));
-HXLINE(  99)				if (::hx::IsNull( carbon )) {
-HXLINE(  99)					carbon = stanza->getChild(HX_("sent",58,8d,50,4c),HX_("urn:xmpp:carbons:2",02,86,9e,df));
-            				}
-HXLINE( 100)				if (::hx::IsNotNull( carbon )) {
-HXLINE( 101)					 ::borogove::Stanza fwd = carbon->getChild(HX_("forwarded",64,f5,9a,17),HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
-HXLINE( 102)					if (::hx::IsNotNull( fwd )) {
-HXLINE( 102)						 ::Dynamic _gtmp = null();
-HXDLIN( 102)						stanza = fwd->getFirstChild();
-HXDLIN( 102)						preferChatMessage = ( (bool)(_gtmp) );
+HXLINE( 101)				_hx_tmp5 = false;
+            			}
+HXLINE( 100)			if (_hx_tmp5) {
+HXLINE( 106)				 ::borogove::Stanza tmp6 = ::borogove::_DataForm::DataForm_Impl__obj::field(form,HX_("muc#jid",fd,77,83,94));
+HXDLIN( 106)				::Array< ::String > jid;
+HXDLIN( 106)				if (::hx::IsNotNull( tmp6 )) {
+HXLINE( 106)					jid = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp6);
+            				}
+            				else {
+HXLINE( 106)					jid = null();
+            				}
+HXLINE( 107)				bool _hx_tmp11;
+HXDLIN( 107)				if (::hx::IsNotNull( jid )) {
+HXLINE( 107)					_hx_tmp11 = (jid->length == 1);
+            				}
+            				else {
+HXLINE( 107)					_hx_tmp11 = false;
+            				}
+HXDLIN( 107)				if (_hx_tmp11) {
+HXLINE( 108)					return  ::borogove::Message_obj::__alloc( HX_CTX ,from,from,null(),::borogove::MessageStanza_obj::MucVoiceRequest(::borogove::JID_obj::parse(jid->__get(0))),encryptionInfo);
+            				}
+            			}
+HXLINE( 112)			bool _hx_tmp12;
+HXDLIN( 112)			if (::hx::IsNotNull( msg->from )) {
+HXLINE( 112)				_hx_tmp12 = msg->from->equals(localJidBare);
+            			}
+            			else {
+HXLINE( 112)				_hx_tmp12 = false;
+            			}
+HXDLIN( 112)			if (_hx_tmp12) {
+HXLINE( 113)				 ::borogove::Stanza carbon = stanza->getChild(HX_("received",21,45,fd,e2),HX_("urn:xmpp:carbons:2",02,86,9e,df));
+HXLINE( 114)				if (::hx::IsNull( carbon )) {
+HXLINE( 114)					carbon = stanza->getChild(HX_("sent",58,8d,50,4c),HX_("urn:xmpp:carbons:2",02,86,9e,df));
+            				}
+HXLINE( 115)				if (::hx::IsNotNull( carbon )) {
+HXLINE( 116)					 ::borogove::Stanza fwd = carbon->getChild(HX_("forwarded",64,f5,9a,17),HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
+HXLINE( 117)					if (::hx::IsNotNull( fwd )) {
+HXLINE( 117)						 ::Dynamic _gtmp = null();
+HXDLIN( 117)						stanza = fwd->getFirstChild();
+HXDLIN( 117)						preferChatMessage = ( (bool)(_gtmp) );
 HXLINE(   1)						continue;
             					}
             				}
             			}
-HXLINE( 106)			if (::hx::IsNotNull( localId )) {
-HXLINE( 106)				msg->localId = localId;
-            			}
-HXLINE( 107)			 ::borogove::Stanza altServerId = null();
-HXLINE( 108)			{
-HXLINE( 108)				int _g = 0;
-HXDLIN( 108)				::Array< ::Dynamic> _g1 = stanza->allTags(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
-HXDLIN( 108)				while((_g < _g1->length)){
-HXLINE( 108)					 ::borogove::Stanza stanzaId = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 108)					_g = (_g + 1);
-HXLINE( 109)					::String id = ( (::String)(::Reflect_obj::field(stanzaId->attr,HX_("id",db,5b,00,00))) );
-HXLINE( 110)					bool _hx_tmp6;
-HXDLIN( 110)					bool _hx_tmp7;
-HXDLIN( 110)					if ((( (::String)(::Reflect_obj::field(stanzaId->attr,HX_("by",d7,55,00,00))) ) != domain)) {
-HXLINE( 110)						::String _hx_tmp8 = ( (::String)(::Reflect_obj::field(stanzaId->attr,HX_("by",d7,55,00,00))) );
-HXDLIN( 110)						_hx_tmp7 = (_hx_tmp8 == localJidBare->asString());
+HXLINE( 121)			if (::hx::IsNotNull( localId )) {
+HXLINE( 121)				msg->localId = localId;
+            			}
+HXLINE( 122)			 ::borogove::Stanza altServerId = null();
+HXLINE( 123)			{
+HXLINE( 123)				int _g = 0;
+HXDLIN( 123)				::Array< ::Dynamic> _g1 = stanza->allTags(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+HXDLIN( 123)				while((_g < _g1->length)){
+HXLINE( 123)					 ::borogove::Stanza stanzaId = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 123)					_g = (_g + 1);
+HXLINE( 124)					::String id = stanzaId->attr->get_string(HX_("id",db,5b,00,00));
+HXLINE( 125)					bool _hx_tmp13;
+HXDLIN( 125)					bool _hx_tmp14;
+HXDLIN( 125)					if (::hx::IsNotEq( stanzaId->attr->get(HX_("by",d7,55,00,00)),domain )) {
+HXLINE( 125)						::String _hx_tmp15 = stanzaId->attr->get_string(HX_("by",d7,55,00,00));
+HXDLIN( 125)						_hx_tmp14 = (_hx_tmp15 == localJidBare->asString());
             					}
             					else {
-HXLINE( 110)						_hx_tmp7 = true;
+HXLINE( 125)						_hx_tmp14 = true;
             					}
-HXDLIN( 110)					if (_hx_tmp7) {
-HXLINE( 110)						_hx_tmp6 = ::hx::IsNotNull( id );
+HXDLIN( 125)					if (_hx_tmp14) {
+HXLINE( 125)						_hx_tmp13 = ::hx::IsNotNull( id );
             					}
             					else {
-HXLINE( 110)						_hx_tmp6 = false;
+HXLINE( 125)						_hx_tmp13 = false;
             					}
-HXDLIN( 110)					if (_hx_tmp6) {
-HXLINE( 111)						msg->serverIdBy = localJidBare->asString();
-HXLINE( 112)						msg->serverId = id;
-HXLINE( 113)						goto _hx_goto_2;
+HXDLIN( 125)					if (_hx_tmp13) {
+HXLINE( 126)						msg->serverIdBy = localJidBare->asString();
+HXLINE( 127)						msg->serverId = id;
+HXLINE( 128)						goto _hx_goto_2;
             					}
-HXLINE( 115)					altServerId = stanzaId;
+HXLINE( 130)					altServerId = stanzaId;
             				}
             				_hx_goto_2:;
             			}
-HXLINE( 117)			bool _hx_tmp9;
-HXDLIN( 117)			bool _hx_tmp10;
-HXDLIN( 117)			if (::hx::IsNull( msg->serverId )) {
-HXLINE( 117)				_hx_tmp10 = ::hx::IsNotNull( altServerId );
+HXLINE( 132)			bool _hx_tmp16;
+HXDLIN( 132)			bool _hx_tmp17;
+HXDLIN( 132)			if (::hx::IsNull( msg->serverId )) {
+HXLINE( 132)				_hx_tmp17 = ::hx::IsNotNull( altServerId );
             			}
             			else {
-HXLINE( 117)				_hx_tmp10 = false;
+HXLINE( 132)				_hx_tmp17 = false;
             			}
-HXDLIN( 117)			if (_hx_tmp10) {
-HXLINE( 117)				_hx_tmp9 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) != HX_("error",c8,cb,29,73));
+HXDLIN( 132)			if (_hx_tmp17) {
+HXLINE( 132)				_hx_tmp16 = ::hx::IsNotEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) );
             			}
             			else {
-HXLINE( 117)				_hx_tmp9 = false;
+HXLINE( 132)				_hx_tmp16 = false;
             			}
-HXDLIN( 117)			if (_hx_tmp9) {
-HXLINE( 118)				::String id1 = ( (::String)(::Reflect_obj::field(altServerId->attr,HX_("id",db,5b,00,00))) );
-HXLINE( 119)				if (::hx::IsNotNull( id1 )) {
-HXLINE( 120)					msg->serverId = id1;
-HXLINE( 121)					msg->serverIdBy = ( (::String)(::Reflect_obj::field(altServerId->attr,HX_("by",d7,55,00,00))) );
+HXDLIN( 132)			if (_hx_tmp16) {
+HXLINE( 133)				::String id1 = altServerId->attr->get_string(HX_("id",db,5b,00,00));
+HXLINE( 134)				if (::hx::IsNotNull( id1 )) {
+HXLINE( 135)					msg->serverId = id1;
+HXLINE( 136)					msg->serverIdBy = altServerId->attr->get_string(HX_("by",d7,55,00,00));
             				}
             			}
-HXLINE( 124)			bool _hx_tmp11;
-HXDLIN( 124)			if (::hx::IsNotNull( msg->serverIdBy )) {
-HXLINE( 124)				::String msg1 = msg->serverIdBy;
-HXDLIN( 124)				_hx_tmp11 = (msg1 != localJid->asBare()->asString());
+HXLINE( 139)			bool _hx_tmp18;
+HXDLIN( 139)			if (::hx::IsNotNull( msg->serverIdBy )) {
+HXLINE( 139)				::String msg1 = msg->serverIdBy;
+HXDLIN( 139)				_hx_tmp18 = (msg1 != localJid->asBare()->asString());
             			}
             			else {
-HXLINE( 124)				_hx_tmp11 = false;
+HXLINE( 139)				_hx_tmp18 = false;
             			}
-HXDLIN( 124)			if (_hx_tmp11) {
-HXLINE( 125)				msg->replyId = msg->serverId;
+HXDLIN( 139)			if (_hx_tmp18) {
+HXLINE( 140)				msg->replyId = msg->serverId;
             			}
             			else {
-HXLINE( 126)				::String msg2 = msg->serverIdBy;
-HXDLIN( 126)				if ((msg2 == localJid->asBare()->asString())) {
-HXLINE( 127)					msg->replyId = msg->localId;
+HXLINE( 141)				::String msg2 = msg->serverIdBy;
+HXDLIN( 141)				if ((msg2 == localJid->asBare()->asString())) {
+HXLINE( 142)					msg->replyId = msg->localId;
             				}
             			}
-HXLINE( 129)			int _hx_tmp12;
-HXDLIN( 129)			bool _hx_tmp13;
-HXDLIN( 129)			if (::hx::IsNotNull( msg->to )) {
-HXLINE( 129)				_hx_tmp13 = msg->to->asBare()->equals(localJidBare);
+HXLINE( 144)			int _hx_tmp19;
+HXDLIN( 144)			bool _hx_tmp20;
+HXDLIN( 144)			if (::hx::IsNotNull( msg->to )) {
+HXLINE( 144)				_hx_tmp20 = msg->to->asBare()->equals(localJidBare);
             			}
             			else {
-HXLINE( 129)				_hx_tmp13 = true;
+HXLINE( 144)				_hx_tmp20 = true;
             			}
-HXDLIN( 129)			if (_hx_tmp13) {
-HXLINE( 129)				_hx_tmp12 = 0;
+HXDLIN( 144)			if (_hx_tmp20) {
+HXLINE( 144)				_hx_tmp19 = 0;
             			}
             			else {
-HXLINE( 129)				_hx_tmp12 = 1;
+HXLINE( 144)				_hx_tmp19 = 1;
             			}
-HXDLIN( 129)			msg->direction = _hx_tmp12;
-HXLINE( 130)			bool _hx_tmp14;
-HXDLIN( 130)			if (::hx::IsNotNull( msg->from )) {
-HXLINE( 130)				_hx_tmp14 = msg->from->asBare()->equals(localJidBare);
+HXDLIN( 144)			msg->direction = _hx_tmp19;
+HXLINE( 145)			bool _hx_tmp21;
+HXDLIN( 145)			if (::hx::IsNotNull( msg->from )) {
+HXLINE( 145)				_hx_tmp21 = msg->from->asBare()->equals(localJidBare);
             			}
             			else {
-HXLINE( 130)				_hx_tmp14 = false;
+HXLINE( 145)				_hx_tmp21 = false;
             			}
-HXDLIN( 130)			if (_hx_tmp14) {
-HXLINE( 130)				msg->direction = 1;
+HXDLIN( 145)			if (_hx_tmp21) {
+HXLINE( 145)				msg->direction = 1;
             			}
-HXLINE( 131)			int _hx_tmp15;
-HXDLIN( 131)			if ((msg->direction == 0)) {
-HXLINE( 131)				_hx_tmp15 = 2;
+HXLINE( 146)			int _hx_tmp22;
+HXDLIN( 146)			if ((msg->direction == 0)) {
+HXLINE( 146)				_hx_tmp22 = 2;
             			}
             			else {
-HXLINE( 131)				_hx_tmp15 = 1;
-            			}
-HXDLIN( 131)			msg->status = _hx_tmp15;
-HXLINE( 133)			 ::borogove::Stanza mucDirectInvite = stanza->getChild(HX_("x",78,00,00,00),HX_("jabber:x:conference",b4,78,c2,fc));
-HXLINE( 134)			if (::hx::IsNotNull( mucDirectInvite )) {
-HXLINE( 135)				::String mucJid = ( (::String)(::Reflect_obj::field(mucDirectInvite->attr,HX_("jid",c5,ca,50,00))) );
-HXLINE( 136)				if (::hx::IsNotNull( mucJid )) {
-HXLINE( 137)					::String _hx_tmp16 = ( (::String)(::Reflect_obj::field(mucDirectInvite->attr,HX_("thread",ca,7a,b9,8e))) );
-HXDLIN( 137)					::String msg3 = msg->serverId;
-HXDLIN( 137)					::String msg4 = msg->serverIdBy;
-HXDLIN( 137)					::String _hx_tmp17 = ( (::String)(::Reflect_obj::field(mucDirectInvite->attr,HX_("reason",c4,0f,9d,fc))) );
-HXDLIN( 137)					return  ::borogove::Message_obj::__alloc( HX_CTX ,mucJid,from,_hx_tmp16,::borogove::MessageStanza_obj::MucInviteStanza(msg3,msg4,_hx_tmp17,( (::String)(::Reflect_obj::field(mucDirectInvite->attr,HX_("password",1b,23,d0,48))) )),encryptionInfo);
+HXLINE( 146)				_hx_tmp22 = 1;
+            			}
+HXDLIN( 146)			msg->status = _hx_tmp22;
+HXLINE( 148)			 ::borogove::Stanza mucDirectInvite = stanza->getChild(HX_("x",78,00,00,00),HX_("jabber:x:conference",b4,78,c2,fc));
+HXLINE( 149)			if (::hx::IsNotNull( mucDirectInvite )) {
+HXLINE( 150)				::String mucJid = mucDirectInvite->attr->get_string(HX_("jid",c5,ca,50,00));
+HXLINE( 151)				if (::hx::IsNotNull( mucJid )) {
+HXLINE( 152)					::String _hx_tmp23 = mucDirectInvite->attr->get_string(HX_("thread",ca,7a,b9,8e));
+HXDLIN( 152)					::String msg3 = msg->serverId;
+HXDLIN( 152)					::String msg4 = msg->serverIdBy;
+HXDLIN( 152)					::String _hx_tmp24 = mucDirectInvite->attr->get_string(HX_("reason",c4,0f,9d,fc));
+HXDLIN( 152)					return  ::borogove::Message_obj::__alloc( HX_CTX ,mucJid,from,_hx_tmp23,::borogove::MessageStanza_obj::MucInviteStanza(msg3,msg4,_hx_tmp24,mucDirectInvite->attr->get(HX_("password",1b,23,d0,48))),encryptionInfo);
             				}
             			}
-HXLINE( 141)			 ::borogove::Stanza mucUser = stanza->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
-HXLINE( 142)			 ::borogove::Stanza mucInvite;
-HXDLIN( 142)			if (::hx::IsNotNull( mucUser )) {
-HXLINE( 142)				mucInvite = mucUser->getChild(HX_("invite",c9,f1,db,9f),null());
+HXLINE( 156)			 ::borogove::Stanza mucUser = stanza->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+HXLINE( 157)			 ::borogove::Stanza mucInvite;
+HXDLIN( 157)			if (::hx::IsNotNull( mucUser )) {
+HXLINE( 157)				mucInvite = mucUser->getChild(HX_("invite",c9,f1,db,9f),null());
             			}
             			else {
-HXLINE( 142)				mucInvite = null();
+HXLINE( 157)				mucInvite = null();
             			}
-HXLINE( 143)			if (::hx::IsNotNull( mucInvite )) {
-HXLINE( 144)				 ::borogove::Stanza tmp1 = mucInvite->getChild(HX_("continue",67,e0,c8,31),null());
-HXDLIN( 144)				 ::Dynamic tmp2;
-HXDLIN( 144)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 144)					tmp2 = tmp1->attr;
+HXLINE( 158)			if (::hx::IsNotNull( mucInvite )) {
+HXLINE( 159)				 ::borogove::Stanza tmp7 = mucInvite->getChild(HX_("continue",67,e0,c8,31),null());
+HXDLIN( 159)				 ::haxe::ds::StringMap tmp8;
+HXDLIN( 159)				if (::hx::IsNotNull( tmp7 )) {
+HXLINE( 159)					tmp8 = tmp7->attr;
             				}
             				else {
-HXLINE( 144)					tmp2 = null();
+HXLINE( 159)					tmp8 = null();
             				}
-HXDLIN( 144)				::String threadId;
-HXDLIN( 144)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 144)					threadId = ( (::String)(::Reflect_obj::field(tmp2,HX_("thread",ca,7a,b9,8e))) );
+HXDLIN( 159)				::String threadId;
+HXDLIN( 159)				if (::hx::IsNotNull( tmp8 )) {
+HXLINE( 159)					threadId = tmp8->get_string(HX_("thread",ca,7a,b9,8e));
             				}
             				else {
-HXLINE( 144)					threadId = null();
+HXLINE( 159)					threadId = null();
             				}
-HXLINE( 145)				::String reason = mucInvite->getChildText(HX_("reason",c4,0f,9d,fc),null());
-HXLINE( 146)				::String password = mucInvite->getChildText(HX_("password",1b,23,d0,48),null());
-HXLINE( 148)				::String _hx_tmp18;
-HXDLIN( 148)				::String tmp3 = ( (::String)(::Reflect_obj::field(mucInvite->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN( 148)				if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 148)					_hx_tmp18 = tmp3;
+HXLINE( 160)				::String reason = mucInvite->getChildText(HX_("reason",c4,0f,9d,fc),null());
+HXLINE( 161)				::String password = mucInvite->getChildText(HX_("password",1b,23,d0,48),null());
+HXLINE( 163)				::String _hx_tmp25;
+HXDLIN( 163)				::String tmp9 = mucInvite->attr->get_string(HX_("from",6a,a5,c2,43));
+HXDLIN( 163)				if (::hx::IsNotNull( tmp9 )) {
+HXLINE( 163)					_hx_tmp25 = tmp9;
             				}
             				else {
-HXLINE( 148)					_hx_tmp18 = from;
+HXLINE( 163)					_hx_tmp25 = from;
             				}
-HXDLIN( 148)				return  ::borogove::Message_obj::__alloc( HX_CTX ,from,_hx_tmp18,threadId,::borogove::MessageStanza_obj::MucInviteStanza(msg->serverId,msg->serverIdBy,reason,password),encryptionInfo);
+HXDLIN( 163)				return  ::borogove::Message_obj::__alloc( HX_CTX ,from,_hx_tmp25,threadId,::borogove::MessageStanza_obj::MucInviteStanza(msg->serverId,msg->serverIdBy,reason,password),encryptionInfo);
             			}
-HXLINE( 151)			 ::haxe::ds::StringMap recipients =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 152)			 ::haxe::ds::StringMap replyTo =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 153)			if (::hx::IsNotNull( msg->to )) {
-HXLINE( 154)				::String k = msg->to->asBare()->asString();
-HXDLIN( 154)				recipients->set(k,true);
+HXLINE( 166)			 ::haxe::ds::StringMap recipients =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 167)			 ::haxe::ds::StringMap replyTo =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 168)			if (::hx::IsNotNull( msg->to )) {
+HXLINE( 169)				::String k = msg->to->asBare()->asString();
+HXDLIN( 169)				recipients->set(k,true);
             			}
-HXLINE( 156)			 ::borogove::JID from1 = msg->from;
-HXLINE( 157)			bool _hx_tmp19;
-HXDLIN( 157)			if ((msg->direction == 0)) {
-HXLINE( 157)				_hx_tmp19 = ::hx::IsNotNull( from1 );
+HXLINE( 171)			 ::borogove::JID from1 = msg->from;
+HXLINE( 172)			bool _hx_tmp26;
+HXDLIN( 172)			if ((msg->direction == 0)) {
+HXLINE( 172)				_hx_tmp26 = ::hx::IsNotNull( from1 );
             			}
             			else {
-HXLINE( 157)				_hx_tmp19 = false;
+HXLINE( 172)				_hx_tmp26 = false;
             			}
-HXDLIN( 157)			if (_hx_tmp19) {
-HXLINE( 158)				::String k1;
-HXDLIN( 158)				if (isGroupchat) {
-HXLINE( 158)					k1 = from1->asBare()->asString();
+HXDLIN( 172)			if (_hx_tmp26) {
+HXLINE( 173)				::String k1;
+HXDLIN( 173)				if (isGroupchat) {
+HXLINE( 173)					k1 = from1->asBare()->asString();
             				}
             				else {
-HXLINE( 158)					k1 = from1->asString();
+HXLINE( 173)					k1 = from1->asString();
             				}
-HXDLIN( 158)				replyTo->set(k1,true);
+HXDLIN( 173)				replyTo->set(k1,true);
             			}
             			else {
-HXLINE( 159)				if (::hx::IsNotNull( msg->to )) {
-HXLINE( 160)					::String k2 = msg->to->asString();
-HXDLIN( 160)					replyTo->set(k2,true);
-            				}
-            			}
-HXLINE( 163)			 ::borogove::Stanza addresses = stanza->getChild(HX_("addresses",22,9f,12,8c),HX_("http://jabber.org/protocol/address",c0,fd,09,ed));
-HXLINE( 164)			bool anyExtendedReplyTo = false;
-HXLINE( 165)			if (::hx::IsNotNull( addresses )) {
-HXLINE( 166)				int _g2 = 0;
-HXDLIN( 166)				::Array< ::Dynamic> _g3 = addresses->allTags(HX_("address",b4,71,0b,9d),null());
-HXDLIN( 166)				while((_g2 < _g3->length)){
-HXLINE( 166)					 ::borogove::Stanza address = _g3->__get(_g2).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 166)					_g2 = (_g2 + 1);
-HXLINE( 167)					::String jid = ( (::String)(::Reflect_obj::field(address->attr,HX_("jid",c5,ca,50,00))) );
-HXLINE( 168)					if ((( (::String)(::Reflect_obj::field(address->attr,HX_("type",ba,f2,08,4d))) ) == HX_("noreply",49,1d,9c,26))) {
-HXLINE( 169)						replyTo->clear();
+HXLINE( 174)				if (::hx::IsNotNull( msg->to )) {
+HXLINE( 175)					::String k2 = msg->to->asString();
+HXDLIN( 175)					replyTo->set(k2,true);
+            				}
+            			}
+HXLINE( 178)			 ::borogove::Stanza addresses = stanza->getChild(HX_("addresses",22,9f,12,8c),HX_("http://jabber.org/protocol/address",c0,fd,09,ed));
+HXLINE( 179)			bool anyExtendedReplyTo = false;
+HXLINE( 180)			if (::hx::IsNotNull( addresses )) {
+HXLINE( 181)				int _g2 = 0;
+HXDLIN( 181)				::Array< ::Dynamic> _g3 = addresses->allTags(HX_("address",b4,71,0b,9d),null());
+HXDLIN( 181)				while((_g2 < _g3->length)){
+HXLINE( 181)					 ::borogove::Stanza address = _g3->__get(_g2).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 181)					_g2 = (_g2 + 1);
+HXLINE( 182)					::String jid1 = address->attr->get_string(HX_("jid",c5,ca,50,00));
+HXLINE( 183)					if (::hx::IsEq( address->attr->get(HX_("type",ba,f2,08,4d)),HX_("noreply",49,1d,9c,26) )) {
+HXLINE( 184)						replyTo->clear();
             					}
             					else {
-HXLINE( 170)						if (::hx::IsNull( jid )) {
-HXLINE( 171)							::haxe::Log_obj::trace(HX_("No support for addressing to non-jid",ab,6a,51,09), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 185)						if (::hx::IsNull( jid1 )) {
+HXLINE( 186)							::haxe::Log_obj::trace(HX_("No support for addressing to non-jid",ab,6a,51,09), ::Dynamic(::hx::Anon_obj::Create(5)
             								->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Message",5a,b7,a9,a7))
             								->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,address))
             								->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("fromStanza",ff,62,3b,49))
             								->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Message.hx",e5,8a,81,7a))
-            								->setFixed(4,HX_("lineNumber",dd,81,22,76),171)));
-HXLINE( 172)							::String _hx_tmp20 = msg->chatId();
-HXDLIN( 172)							::String _hx_tmp21 = msg->get_senderId();
-HXDLIN( 172)							return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp20,_hx_tmp21,msg->threadId,::borogove::MessageStanza_obj::UnknownMessageStanza(stanza),encryptionInfo);
+            								->setFixed(4,HX_("lineNumber",dd,81,22,76),186)));
+HXLINE( 187)							::String _hx_tmp27 = msg->chatId();
+HXDLIN( 187)							::String _hx_tmp28 = msg->get_senderId();
+HXDLIN( 187)							return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp27,_hx_tmp28,msg->threadId,::borogove::MessageStanza_obj::UnknownMessageStanza(stanza),encryptionInfo);
             						}
             						else {
-HXLINE( 173)							bool _hx_tmp22;
-HXDLIN( 173)							if ((( (::String)(::Reflect_obj::field(address->attr,HX_("type",ba,f2,08,4d))) ) != HX_("to",7b,65,00,00))) {
-HXLINE( 173)								_hx_tmp22 = (( (::String)(::Reflect_obj::field(address->attr,HX_("type",ba,f2,08,4d))) ) == HX_("cc",a0,56,00,00));
+HXLINE( 188)							bool _hx_tmp29;
+HXDLIN( 188)							if (::hx::IsNotEq( address->attr->get(HX_("type",ba,f2,08,4d)),HX_("to",7b,65,00,00) )) {
+HXLINE( 188)								_hx_tmp29 = ::hx::IsEq( address->attr->get(HX_("type",ba,f2,08,4d)),HX_("cc",a0,56,00,00) );
             							}
             							else {
-HXLINE( 173)								_hx_tmp22 = true;
+HXLINE( 188)								_hx_tmp29 = true;
             							}
-HXDLIN( 173)							if (_hx_tmp22) {
-HXLINE( 174)								{
-HXLINE( 174)									::String k3 = ::borogove::JID_obj::parse(jid)->asBare()->asString();
-HXDLIN( 174)									recipients->set(k3,true);
+HXDLIN( 188)							if (_hx_tmp29) {
+HXLINE( 189)								{
+HXLINE( 189)									::String k3 = ::borogove::JID_obj::parse(jid1)->asBare()->asString();
+HXDLIN( 189)									recipients->set(k3,true);
             								}
-HXLINE( 175)								if (!(anyExtendedReplyTo)) {
-HXLINE( 175)									::String k4 = ::borogove::JID_obj::parse(jid)->asString();
-HXDLIN( 175)									replyTo->set(k4,true);
+HXLINE( 190)								if (!(anyExtendedReplyTo)) {
+HXLINE( 190)									::String k4 = ::borogove::JID_obj::parse(jid1)->asString();
+HXDLIN( 190)									replyTo->set(k4,true);
             								}
             							}
             							else {
-HXLINE( 176)								bool _hx_tmp23;
-HXDLIN( 176)								if ((( (::String)(::Reflect_obj::field(address->attr,HX_("type",ba,f2,08,4d))) ) != HX_("replyto",25,8d,3a,ab))) {
-HXLINE( 176)									_hx_tmp23 = (( (::String)(::Reflect_obj::field(address->attr,HX_("type",ba,f2,08,4d))) ) == HX_("replyroom",45,d4,81,d7));
+HXLINE( 191)								bool _hx_tmp30;
+HXDLIN( 191)								if (::hx::IsNotEq( address->attr->get(HX_("type",ba,f2,08,4d)),HX_("replyto",25,8d,3a,ab) )) {
+HXLINE( 191)									_hx_tmp30 = ::hx::IsEq( address->attr->get(HX_("type",ba,f2,08,4d)),HX_("replyroom",45,d4,81,d7) );
             								}
             								else {
-HXLINE( 176)									_hx_tmp23 = true;
+HXLINE( 191)									_hx_tmp30 = true;
             								}
-HXDLIN( 176)								if (_hx_tmp23) {
-HXLINE( 177)									if (!(anyExtendedReplyTo)) {
-HXLINE( 178)										replyTo->clear();
-HXLINE( 179)										anyExtendedReplyTo = true;
+HXDLIN( 191)								if (_hx_tmp30) {
+HXLINE( 192)									if (!(anyExtendedReplyTo)) {
+HXLINE( 193)										replyTo->clear();
+HXLINE( 194)										anyExtendedReplyTo = true;
             									}
-HXLINE( 181)									{
-HXLINE( 181)										::String k5 = ::borogove::JID_obj::parse(jid)->asString();
-HXDLIN( 181)										replyTo->set(k5,true);
+HXLINE( 196)									{
+HXLINE( 196)										::String k5 = ::borogove::JID_obj::parse(jid1)->asString();
+HXDLIN( 196)										replyTo->set(k5,true);
             									}
             								}
             								else {
-HXLINE( 182)									if ((( (::String)(::Reflect_obj::field(address->attr,HX_("type",ba,f2,08,4d))) ) == HX_("ofrom",59,09,3d,2d))) {
-HXLINE( 183)										 ::borogove::JID tmp4 = msg->from;
-HXDLIN( 183)										::String _hx_tmp24;
-HXDLIN( 183)										if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 183)											_hx_tmp24 = tmp4->domain;
+HXLINE( 197)									if (::hx::IsEq( address->attr->get(HX_("type",ba,f2,08,4d)),HX_("ofrom",59,09,3d,2d) )) {
+HXLINE( 198)										 ::borogove::JID tmp10 = msg->from;
+HXDLIN( 198)										::String _hx_tmp31;
+HXDLIN( 198)										if (::hx::IsNotNull( tmp10 )) {
+HXLINE( 198)											_hx_tmp31 = tmp10->domain;
             										}
             										else {
-HXLINE( 183)											_hx_tmp24 = null();
+HXLINE( 198)											_hx_tmp31 = null();
             										}
-HXDLIN( 183)										if ((::borogove::JID_obj::parse(jid)->domain == _hx_tmp24)) {
-HXLINE( 185)											msg->senderId = ::borogove::JID_obj::parse(jid)->asBare()->asString();
+HXDLIN( 198)										if ((::borogove::JID_obj::parse(jid1)->domain == _hx_tmp31)) {
+HXLINE( 200)											msg->senderId = ::borogove::JID_obj::parse(jid1)->asBare()->asString();
             										}
             									}
             								}
@@ -506,715 +595,778 @@ HXLINE( 185)											msg->senderId = ::borogove::JID_obj::parse(jid)->asBare()
             					}
             				}
             			}
-HXLINE( 191)			::Array< ::Dynamic> _g4 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 191)			 ::Dynamic x =  ::Dynamic(new _hx_Closure_0(recipients))();
-HXDLIN( 191)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 191)				_g4->push(::borogove::JID_obj::parse(( (::String)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )));
-            			}
-HXDLIN( 191)			msg->recipients = _g4;
-HXLINE( 192)			msg->recipients->sort( ::Dynamic(new _hx_Closure_1()));
-HXLINE( 193)			::Array< ::Dynamic> _g5 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 193)			 ::Dynamic x1 =  ::Dynamic(new _hx_Closure_2(replyTo))();
-HXDLIN( 193)			while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 193)				_g5->push(::borogove::JID_obj::parse(( (::String)(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )));
-            			}
-HXDLIN( 193)			msg->replyTo = _g5;
-HXLINE( 194)			msg->replyTo->sort( ::Dynamic(new _hx_Closure_3()));
-HXLINE( 196)			if (::hx::IsNull( msg->get_senderId() )) {
-HXLINE( 197)				 ::borogove::Stanza tmp5 = stanza->getChild(HX_("occupant-id",2b,a5,8b,91),HX_("urn:xmpp:occupant-id:0",05,d7,05,11));
-HXDLIN( 197)				 ::Dynamic tmp6;
-HXDLIN( 197)				if (::hx::IsNotNull( tmp5 )) {
-HXLINE( 197)					tmp6 = tmp5->attr;
+HXLINE( 206)			::Array< ::Dynamic> _g4 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 206)			 ::Dynamic x =  ::Dynamic(new _hx_Closure_0(recipients))();
+HXDLIN( 206)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 206)				_g4->push(::borogove::JID_obj::parse(( (::String)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )));
+            			}
+HXDLIN( 206)			msg->recipients = _g4;
+HXLINE( 207)			msg->recipients->sort( ::Dynamic(new _hx_Closure_1()));
+HXLINE( 208)			::Array< ::Dynamic> _g5 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 208)			 ::Dynamic x1 =  ::Dynamic(new _hx_Closure_2(replyTo))();
+HXDLIN( 208)			while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 208)				_g5->push(::borogove::JID_obj::parse(( (::String)(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) )));
+            			}
+HXDLIN( 208)			msg->replyTo = _g5;
+HXLINE( 209)			msg->replyTo->sort( ::Dynamic(new _hx_Closure_3()));
+HXLINE( 211)			if (::hx::IsNull( msg->get_senderId() )) {
+HXLINE( 212)				 ::borogove::Stanza tmp11 = stanza->getChild(HX_("occupant-id",2b,a5,8b,91),HX_("urn:xmpp:occupant-id:0",05,d7,05,11));
+HXDLIN( 212)				 ::haxe::ds::StringMap tmp12;
+HXDLIN( 212)				if (::hx::IsNotNull( tmp11 )) {
+HXLINE( 212)					tmp12 = tmp11->attr;
             				}
             				else {
-HXLINE( 197)					tmp6 = null();
+HXLINE( 212)					tmp12 = null();
             				}
-HXDLIN( 197)				::String occupantId;
-HXDLIN( 197)				if (::hx::IsNotNull( tmp6 )) {
-HXLINE( 197)					occupantId = ( (::String)(::Reflect_obj::field(tmp6,HX_("id",db,5b,00,00))) );
+HXDLIN( 212)				::String occupantId;
+HXDLIN( 212)				if (::hx::IsNotNull( tmp12 )) {
+HXLINE( 212)					occupantId = tmp12->get_string(HX_("id",db,5b,00,00));
             				}
             				else {
-HXLINE( 197)					occupantId = null();
+HXLINE( 212)					occupantId = null();
             				}
-HXLINE( 198)				::String _hx_tmp25;
-HXDLIN( 198)				if (::hx::IsNotNull( occupantId )) {
-HXLINE( 198)					_hx_tmp25 = ((msg->chatId() + HX_("/",2f,00,00,00)) + occupantId);
+HXLINE( 213)				::String _hx_tmp32;
+HXDLIN( 213)				if (::hx::IsNotNull( occupantId )) {
+HXLINE( 213)					_hx_tmp32 = ((msg->chatId() + HX_("/",2f,00,00,00)) + occupantId);
             				}
             				else {
-HXLINE( 198)					 ::borogove::JID tmp7;
-HXDLIN( 198)					bool tmp8;
-HXDLIN( 198)					if ((msg->type != 2)) {
-HXLINE( 198)						tmp8 = (msg->type == 3);
+HXLINE( 213)					 ::borogove::JID tmp13;
+HXDLIN( 213)					bool tmp14;
+HXDLIN( 213)					if ((msg->type != 2)) {
+HXLINE( 213)						tmp14 = (msg->type == 3);
             					}
             					else {
-HXLINE( 198)						tmp8 = true;
+HXLINE( 213)						tmp14 = true;
             					}
-HXDLIN( 198)					if (tmp8) {
-HXLINE( 198)						tmp7 = msg->from;
+HXDLIN( 213)					if (tmp14) {
+HXLINE( 213)						tmp13 = msg->from;
             					}
             					else {
-HXLINE( 198)						 ::borogove::JID tmp9 = msg->from;
-HXDLIN( 198)						if (::hx::IsNotNull( tmp9 )) {
-HXLINE( 198)							tmp7 = tmp9->asBare();
+HXLINE( 213)						 ::borogove::JID tmp15 = msg->from;
+HXDLIN( 213)						if (::hx::IsNotNull( tmp15 )) {
+HXLINE( 213)							tmp13 = tmp15->asBare();
             						}
             						else {
-HXLINE( 198)							tmp7 = null();
+HXLINE( 213)							tmp13 = null();
             						}
             					}
-HXDLIN( 198)					if (::hx::IsNotNull( tmp7 )) {
-HXLINE( 198)						_hx_tmp25 = tmp7->asString();
+HXDLIN( 213)					if (::hx::IsNotNull( tmp13 )) {
+HXLINE( 213)						_hx_tmp32 = tmp13->asString();
             					}
             					else {
-HXLINE( 198)						_hx_tmp25 = null();
+HXLINE( 213)						_hx_tmp32 = null();
             					}
             				}
-HXDLIN( 198)				msg->senderId = _hx_tmp25;
+HXDLIN( 213)				msg->senderId = _hx_tmp32;
             			}
-HXLINE( 201)			 ::borogove::JID msgFrom = msg->from;
-HXLINE( 203)			bool _hx_tmp26;
-HXDLIN( 203)			bool _hx_tmp27;
-HXDLIN( 203)			if ((msg->direction == 0)) {
-HXLINE( 203)				_hx_tmp27 = ::hx::IsNotNull( msgFrom );
+HXLINE( 216)			 ::borogove::JID msgFrom = msg->from;
+HXLINE( 218)			bool _hx_tmp33;
+HXDLIN( 218)			bool _hx_tmp34;
+HXDLIN( 218)			if ((msg->direction == 0)) {
+HXLINE( 218)				_hx_tmp34 = ::hx::IsNotNull( msgFrom );
             			}
             			else {
-HXLINE( 203)				_hx_tmp27 = false;
+HXLINE( 218)				_hx_tmp34 = false;
             			}
-HXDLIN( 203)			if (_hx_tmp27) {
+HXDLIN( 218)			if (_hx_tmp34) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4, ::borogove::JID,msgFrom) HXARGC(1)
             				bool _hx_run( ::borogove::JID r){
-            					HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_203_fromStanza)
-HXLINE( 203)					 ::borogove::JID f = r->asBare();
-HXDLIN( 203)					return f->equals(msgFrom->asBare());
+            					HX_GC_STACKFRAME(&_hx_pos_5c42425238de6f01_218_fromStanza)
+HXLINE( 218)					 ::borogove::JID f = r->asBare();
+HXDLIN( 218)					return f->equals(msgFrom->asBare());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 203)				::Array< ::Dynamic> it = msg->replyTo;
-HXDLIN( 203)				 ::Dynamic f =  ::Dynamic(new _hx_Closure_4(msgFrom));
-HXDLIN( 203)				 ::borogove::JID result = null();
-HXDLIN( 203)				{
-HXLINE( 203)					int _g6 = 0;
-HXDLIN( 203)					while((_g6 < it->length)){
-HXLINE( 203)						 ::borogove::JID v = it->__get(_g6).StaticCast<  ::borogove::JID >();
-HXDLIN( 203)						_g6 = (_g6 + 1);
-HXDLIN( 203)						if (( (bool)(f(v)) )) {
+HXLINE( 218)				::Array< ::Dynamic> it = msg->replyTo;
+HXDLIN( 218)				 ::Dynamic f =  ::Dynamic(new _hx_Closure_4(msgFrom));
+HXDLIN( 218)				 ::borogove::JID result = null();
+HXDLIN( 218)				{
+HXLINE( 218)					int _g6 = 0;
+HXDLIN( 218)					while((_g6 < it->length)){
+HXLINE( 218)						 ::borogove::JID v = it->__get(_g6).StaticCast<  ::borogove::JID >();
+HXDLIN( 218)						_g6 = (_g6 + 1);
+HXDLIN( 218)						if (( (bool)(f(v)) )) {
 HXLINE(  96)							result = v;
-HXLINE( 203)							goto _hx_goto_6;
+HXLINE( 218)							goto _hx_goto_6;
             						}
             					}
             					_hx_goto_6:;
             				}
-HXDLIN( 203)				_hx_tmp26 = ::hx::IsNull( result );
+HXDLIN( 218)				_hx_tmp33 = ::hx::IsNull( result );
             			}
             			else {
-HXLINE( 203)				_hx_tmp26 = false;
+HXLINE( 218)				_hx_tmp33 = false;
             			}
-HXDLIN( 203)			if (_hx_tmp26) {
-HXLINE( 204)				::haxe::Log_obj::trace(HX_("Don't know what chat message without from in replyTo belongs in",f3,47,ba,0d), ::Dynamic(::hx::Anon_obj::Create(5)
+HXDLIN( 218)			if (_hx_tmp33) {
+HXLINE( 219)				::haxe::Log_obj::trace(HX_("Don't know what chat message without from in replyTo belongs in",f3,47,ba,0d), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Message",5a,b7,a9,a7))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,stanza))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("fromStanza",ff,62,3b,49))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Message.hx",e5,8a,81,7a))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),204)));
-HXLINE( 205)				::String _hx_tmp28 = msg->chatId();
-HXDLIN( 205)				::String _hx_tmp29 = msg->get_senderId();
-HXDLIN( 205)				return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp28,_hx_tmp29,msg->threadId,::borogove::MessageStanza_obj::UnknownMessageStanza(stanza),encryptionInfo);
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),219)));
+HXLINE( 220)				::String _hx_tmp35 = msg->chatId();
+HXDLIN( 220)				::String _hx_tmp36 = msg->get_senderId();
+HXDLIN( 220)				return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp35,_hx_tmp36,msg->threadId,::borogove::MessageStanza_obj::UnknownMessageStanza(stanza),encryptionInfo);
+            			}
+HXLINE( 223)			{
+HXLINE( 223)				int _g7 = 0;
+HXDLIN( 223)				::Array< ::Dynamic> _g8 = stanza->allTags(HX_("reference",cb,07,c5,5a),HX_("urn:xmpp:reference:0",a5,00,10,5d));
+HXDLIN( 223)				while((_g7 < _g8->length)){
+HXLINE( 223)					 ::borogove::Stanza ref = _g8->__get(_g7).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 223)					_g7 = (_g7 + 1);
+HXLINE( 224)					bool _hx_tmp37;
+HXDLIN( 224)					if (::hx::IsNull( ref->attr->get(HX_("begin",29,ea,55,b0)) )) {
+HXLINE( 224)						_hx_tmp37 = ::hx::IsNull( ref->attr->get(HX_("end",db,03,4d,00)) );
+            					}
+            					else {
+HXLINE( 224)						_hx_tmp37 = false;
+            					}
+HXDLIN( 224)					if (_hx_tmp37) {
+HXLINE( 225)						 ::borogove::Stanza sims = ref->getChild(HX_("media-sharing",33,1c,0a,3d),HX_("urn:xmpp:sims:1",4f,1c,49,62));
+HXLINE( 226)						if (::hx::IsNotNull( sims )) {
+HXLINE( 226)							msg->attachSims(sims);
+            						}
+            					}
+            				}
+            			}
+HXLINE( 230)			{
+HXLINE( 230)				int _g9 = 0;
+HXDLIN( 230)				::Array< ::Dynamic> _g10 = stanza->allTags(HX_("media-sharing",33,1c,0a,3d),HX_("urn:xmpp:sims:1",4f,1c,49,62));
+HXDLIN( 230)				while((_g9 < _g10->length)){
+HXLINE( 230)					 ::borogove::Stanza sims1 = _g10->__get(_g9).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 230)					_g9 = (_g9 + 1);
+HXLINE( 231)					msg->attachSims(sims1);
+            				}
+            			}
+HXLINE( 234)			::String tmp16 = msg->text;
+HXDLIN( 234)			::String aesgcmBody;
+HXDLIN( 234)			if (::hx::IsNotNull( tmp16 )) {
+HXLINE( 234)				aesgcmBody = tmp16;
             			}
-HXLINE( 208)			if (::hx::IsNotNull( addContext )) {
-HXLINE( 208)				msg = ( ( ::borogove::ChatMessageBuilder)(addContext(msg,stanza)) );
+            			else {
+HXLINE( 234)				aesgcmBody = HX_("",00,00,00,00);
             			}
-HXLINE( 209)			::String timestamp;
-HXDLIN( 209)			::String tmp10 = msg->timestamp;
-HXDLIN( 209)			if (::hx::IsNotNull( tmp10 )) {
-HXLINE( 209)				timestamp = tmp10;
+HXDLIN( 234)			 ::Dynamic aesgcmBody1 = ::borogove::_XEP0454::XEP0454_Fields__obj::parse(aesgcmBody);
+HXLINE( 235)			bool _hx_tmp38;
+HXDLIN( 235)			bool _hx_tmp39;
+HXDLIN( 235)			if (::hx::IsNotNull( aesgcmBody1 )) {
+HXLINE( 235)				_hx_tmp39 = ::hx::IsNotNull( msg->text );
             			}
             			else {
-HXLINE( 209)				timestamp = ::borogove::Date_obj::format(::Date_obj::now());
-            			}
-HXLINE( 210)			msg->timestamp = timestamp;
-HXLINE( 212)			 ::borogove::Stanza reactionsEl = stanza->getChild(HX_("reactions",aa,cc,95,e7),HX_("urn:xmpp:reactions:0",44,fb,42,53));
-HXLINE( 213)			if (::hx::IsNotNull( reactionsEl )) {
-HXLINE( 215)				::Array< ::Dynamic> _this = reactionsEl->allTags(HX_("reaction",a9,e7,b4,f6),null());
-HXDLIN( 215)				::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 215)				{
-HXLINE( 215)					int _g7 = 0;
-HXDLIN( 215)					int _g8 = _this->length;
-HXDLIN( 215)					while((_g7 < _g8)){
-HXLINE( 215)						_g7 = (_g7 + 1);
-HXDLIN( 215)						int i = (_g7 - 1);
-HXDLIN( 215)						{
-HXLINE( 215)							::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->getText();
-HXDLIN( 215)							result1->__unsafe_set(i,inValue);
+HXLINE( 235)				_hx_tmp39 = false;
+            			}
+HXDLIN( 235)			if (_hx_tmp39) {
+HXLINE( 235)				_hx_tmp38 = (msg->attachments->length < 1);
+            			}
+            			else {
+HXLINE( 235)				_hx_tmp38 = false;
+            			}
+HXDLIN( 235)			if (_hx_tmp38) {
+HXLINE( 236)				msg->addAttachment( ::borogove::ChatAttachment_obj::__alloc( HX_CTX ,null(),( (::String)(aesgcmBody1->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)) ),null(),::Array_obj< ::String >::__new(1)->init(0,msg->text),::Array_obj< ::Dynamic>::__new(0)));
+HXLINE( 237)				msg->text = null();
+            			}
+HXLINE( 240)			 ::borogove::Stanza jmi = stanza->getChild(null(),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 241)			bool _hx_tmp40;
+HXDLIN( 241)			if (::hx::IsNotNull( jmi )) {
+HXLINE( 241)				_hx_tmp40 = (jmi->name != HX_("accept",08,93,06,0b));
+            			}
+            			else {
+HXLINE( 241)				_hx_tmp40 = false;
+            			}
+HXDLIN( 241)			if (_hx_tmp40) {
+HXLINE( 242)				msg->type = 1;
+HXLINE( 243)				msg->payloads->push(jmi);
+HXLINE( 244)				if (::hx::IsNull( msg->text )) {
+HXLINE( 244)					msg->text = (HX_("call ",c2,71,1b,41) + jmi->name);
+            				}
+HXLINE( 246)				msg->localId = jmi->attr->get_string(HX_("id",db,5b,00,00));
+            			}
+HXLINE( 249)			if (::hx::IsNotNull( addContext )) {
+HXLINE( 249)				msg = ( ( ::borogove::ChatMessageBuilder)(addContext(msg,stanza)) );
+            			}
+HXLINE( 250)			::String timeSent;
+HXDLIN( 250)			::String tmp17 = msg->timeSent;
+HXDLIN( 250)			::String tmp18;
+HXDLIN( 250)			if (::hx::IsNotNull( tmp17 )) {
+HXLINE( 250)				tmp18 = tmp17;
+            			}
+            			else {
+HXLINE( 250)				tmp18 = msg->timeReceived;
+            			}
+HXDLIN( 250)			if (::hx::IsNotNull( tmp18 )) {
+HXLINE( 250)				timeSent = tmp18;
+            			}
+            			else {
+HXLINE( 250)				timeSent = ::borogove::Date_obj::format(::Date_obj::now());
+            			}
+HXLINE( 252)			bool _hx_tmp41;
+HXDLIN( 252)			bool _hx_tmp42;
+HXDLIN( 252)			if (::hx::IsNotNull( jmi )) {
+HXLINE( 252)				_hx_tmp42 = (jmi->name != HX_("accept",08,93,06,0b));
+            			}
+            			else {
+HXLINE( 252)				_hx_tmp42 = false;
+            			}
+HXDLIN( 252)			if (_hx_tmp42) {
+HXLINE( 252)				_hx_tmp41 = (jmi->name != HX_("propose",fe,fe,e9,f9));
+            			}
+            			else {
+HXLINE( 252)				_hx_tmp41 = false;
+            			}
+HXDLIN( 252)			if (_hx_tmp41) {
+HXLINE( 253)				msg->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,msg->build());
+            			}
+HXLINE( 256)			 ::borogove::Stanza reactionsEl = stanza->getChild(HX_("reactions",aa,cc,95,e7),HX_("urn:xmpp:reactions:0",44,fb,42,53));
+HXLINE( 257)			if (::hx::IsNotNull( reactionsEl )) {
+HXLINE( 259)				::Array< ::Dynamic> _this = reactionsEl->allTags(HX_("reaction",a9,e7,b4,f6),null());
+HXDLIN( 259)				::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 259)				{
+HXLINE( 259)					int _g11 = 0;
+HXDLIN( 259)					int _g12 = _this->length;
+HXDLIN( 259)					while((_g11 < _g12)){
+HXLINE( 259)						_g11 = (_g11 + 1);
+HXDLIN( 259)						int i = (_g11 - 1);
+HXDLIN( 259)						{
+HXLINE( 259)							::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->getText();
+HXDLIN( 259)							result1->__unsafe_set(i,inValue);
             						}
             					}
             				}
-HXLINE( 216)				::String reactionId = ( (::String)(::Reflect_obj::field(reactionsEl->attr,HX_("id",db,5b,00,00))) );
-HXLINE( 217)				if (::hx::IsNotNull( reactionId )) {
-HXLINE( 218)					::String _hx_tmp30 = msg->chatId();
-HXDLIN( 218)					::String _hx_tmp31 = msg->get_senderId();
-HXDLIN( 218)					::String msg5 = msg->threadId;
-HXLINE( 219)					::String _hx_tmp32;
-HXDLIN( 219)					::String tmp11 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) );
-HXDLIN( 219)					if (::hx::IsNotNull( tmp11 )) {
-HXLINE( 219)						_hx_tmp32 = tmp11;
+HXLINE( 260)				::String reactionId = reactionsEl->attr->get_string(HX_("id",db,5b,00,00));
+HXLINE( 261)				if (::hx::IsNotNull( reactionId )) {
+HXLINE( 262)					::String _hx_tmp43 = msg->chatId();
+HXDLIN( 262)					::String _hx_tmp44 = msg->get_senderId();
+HXDLIN( 262)					::String msg5 = msg->threadId;
+HXLINE( 263)					::String _hx_tmp45;
+HXDLIN( 263)					::String tmp19 = stanza->attr->get_string(HX_("id",db,5b,00,00));
+HXDLIN( 263)					if (::hx::IsNotNull( tmp19 )) {
+HXLINE( 263)						_hx_tmp45 = tmp19;
             					}
             					else {
-HXLINE( 219)						_hx_tmp32 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE( 263)						_hx_tmp45 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
             					}
-HXLINE( 220)					::String _hx_tmp33;
-HXDLIN( 220)					if (isGroupchat) {
-HXLINE( 220)						_hx_tmp33 = reactionId;
+HXLINE( 264)					::String _hx_tmp46;
+HXDLIN( 264)					if (isGroupchat) {
+HXLINE( 264)						_hx_tmp46 = reactionId;
             					}
             					else {
-HXLINE( 220)						_hx_tmp33 = null();
+HXLINE( 264)						_hx_tmp46 = null();
             					}
-HXLINE( 221)					::String _hx_tmp34;
-HXDLIN( 221)					if (isGroupchat) {
-HXLINE( 221)						_hx_tmp34 = msg->chatId();
+HXLINE( 265)					::String _hx_tmp47;
+HXDLIN( 265)					if (isGroupchat) {
+HXLINE( 265)						_hx_tmp47 = msg->chatId();
             					}
             					else {
-HXLINE( 221)						_hx_tmp34 = null();
+HXLINE( 265)						_hx_tmp47 = null();
             					}
-HXLINE( 222)					::String _hx_tmp35;
-HXDLIN( 222)					if (isGroupchat) {
-HXLINE( 222)						_hx_tmp35 = null();
+HXLINE( 266)					::String _hx_tmp48;
+HXDLIN( 266)					if (isGroupchat) {
+HXLINE( 266)						_hx_tmp48 = null();
             					}
             					else {
-HXLINE( 222)						_hx_tmp35 = reactionId;
+HXLINE( 266)						_hx_tmp48 = reactionId;
             					}
-HXLINE( 223)					::String _hx_tmp36 = msg->chatId();
-HXLINE( 224)					::String tmp12 = msg->get_senderId();
-HXDLIN( 224)					if (::hx::IsNull( tmp12 )) {
-HXLINE( 224)						HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
+HXLINE( 267)					::String _hx_tmp49 = msg->chatId();
+HXLINE( 268)					::String tmp20 = msg->get_senderId();
+HXDLIN( 268)					if (::hx::IsNull( tmp20 )) {
+HXLINE( 268)						HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
             					}
-HXLINE( 226)					::Array< ::Dynamic> result2 = ::Array_obj< ::Dynamic>::__new(result1->length);
-HXDLIN( 226)					{
-HXLINE( 226)						int _g9 = 0;
-HXDLIN( 226)						int _g10 = result1->length;
-HXDLIN( 226)						while((_g9 < _g10)){
-HXLINE( 226)							_g9 = (_g9 + 1);
-HXDLIN( 226)							int i1 = (_g9 - 1);
-HXDLIN( 226)							{
-HXLINE( 226)								::String text = ( (::String)(_hx_array_unsafe_get(result1,i1)) );
-HXDLIN( 226)								::String tmp13 = msg->get_senderId();
-HXDLIN( 226)								if (::hx::IsNull( tmp13 )) {
-HXLINE( 226)									HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
+HXLINE( 270)					::Array< ::Dynamic> result2 = ::Array_obj< ::Dynamic>::__new(result1->length);
+HXDLIN( 270)					{
+HXLINE( 270)						int _g13 = 0;
+HXDLIN( 270)						int _g14 = result1->length;
+HXDLIN( 270)						while((_g13 < _g14)){
+HXLINE( 270)							_g13 = (_g13 + 1);
+HXDLIN( 270)							int i1 = (_g13 - 1);
+HXDLIN( 270)							{
+HXLINE( 270)								::String text = ( (::String)(_hx_array_unsafe_get(result1,i1)) );
+HXDLIN( 270)								::String tmp21 = msg->get_senderId();
+HXDLIN( 270)								if (::hx::IsNull( tmp21 )) {
+HXLINE( 270)									HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
             								}
-HXDLIN( 226)								 ::borogove::Reaction inValue1 =  ::borogove::Reaction_obj::__alloc( HX_CTX ,tmp13,timestamp,text,msg->localId,null());
-HXDLIN( 226)								result2->__unsafe_set(i1,inValue1);
+HXDLIN( 270)								 ::borogove::Reaction inValue1 =  ::borogove::Reaction_obj::__alloc( HX_CTX ,tmp21,timeSent,text,msg->localId,null());
+HXDLIN( 270)								result2->__unsafe_set(i1,inValue1);
             							}
             						}
             					}
-HXLINE( 218)					return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp30,_hx_tmp31,msg5,::borogove::MessageStanza_obj::ReactionUpdateStanza( ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,_hx_tmp32,_hx_tmp33,_hx_tmp34,_hx_tmp35,_hx_tmp36,tmp12,timestamp,result2,0)),encryptionInfo);
-            				}
-            			}
-HXLINE( 232)			{
-HXLINE( 232)				int _g11 = 0;
-HXDLIN( 232)				::Array< ::Dynamic> _g12 = stanza->allTags(HX_("reference",cb,07,c5,5a),HX_("urn:xmpp:reference:0",a5,00,10,5d));
-HXDLIN( 232)				while((_g11 < _g12->length)){
-HXLINE( 232)					 ::borogove::Stanza ref = _g12->__get(_g11).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 232)					_g11 = (_g11 + 1);
-HXLINE( 233)					bool _hx_tmp37;
-HXDLIN( 233)					if (::hx::IsNull( ( (::String)(::Reflect_obj::field(ref->attr,HX_("begin",29,ea,55,b0))) ) )) {
-HXLINE( 233)						_hx_tmp37 = ::hx::IsNull( ( (::String)(::Reflect_obj::field(ref->attr,HX_("end",db,03,4d,00))) ) );
-            					}
-            					else {
-HXLINE( 233)						_hx_tmp37 = false;
-            					}
-HXDLIN( 233)					if (_hx_tmp37) {
-HXLINE( 234)						 ::borogove::Stanza sims = ref->getChild(HX_("media-sharing",33,1c,0a,3d),HX_("urn:xmpp:sims:1",4f,1c,49,62));
-HXLINE( 235)						if (::hx::IsNotNull( sims )) {
-HXLINE( 235)							msg->attachSims(sims);
-            						}
-            					}
-            				}
-            			}
-HXLINE( 239)			{
-HXLINE( 239)				int _g13 = 0;
-HXDLIN( 239)				::Array< ::Dynamic> _g14 = stanza->allTags(HX_("media-sharing",33,1c,0a,3d),HX_("urn:xmpp:sims:1",4f,1c,49,62));
-HXDLIN( 239)				while((_g13 < _g14->length)){
-HXLINE( 239)					 ::borogove::Stanza sims1 = _g14->__get(_g13).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 239)					_g13 = (_g13 + 1);
-HXLINE( 240)					msg->attachSims(sims1);
+HXLINE( 262)					return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp43,_hx_tmp44,msg5,::borogove::MessageStanza_obj::ReactionUpdateStanza( ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,_hx_tmp45,_hx_tmp46,_hx_tmp47,_hx_tmp48,_hx_tmp49,tmp20,timeSent,result2,0)),encryptionInfo);
             				}
             			}
-HXLINE( 243)			 ::borogove::Stanza jmi = stanza->getChild(null(),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 244)			bool _hx_tmp38;
-HXDLIN( 244)			if (::hx::IsNotNull( jmi )) {
-HXLINE( 244)				_hx_tmp38 = (jmi->name != HX_("accept",08,93,06,0b));
+HXLINE( 276)			 ::borogove::Stanza retract = stanza->getChild(HX_("retract",01,e2,b9,fc),HX_("urn:xmpp:message-retract:1",16,5e,d8,d5));
+HXLINE( 277)			 ::borogove::Stanza fasten = stanza->getChild(HX_("apply-to",3a,9e,dd,24),HX_("urn:xmpp:fasten:0",17,f4,ed,3d));
+HXLINE( 278)			 ::borogove::Stanza moderated;
+HXDLIN( 278)			 ::borogove::Stanza tmp22;
+HXDLIN( 278)			if (::hx::IsNotNull( retract )) {
+HXLINE( 278)				tmp22 = retract->getChild(HX_("moderated",41,37,3b,22),HX_("urn:xmpp:message-retract:1",16,5e,d8,d5));
             			}
             			else {
-HXLINE( 244)				_hx_tmp38 = false;
-            			}
-HXDLIN( 244)			if (_hx_tmp38) {
-HXLINE( 245)				msg->type = 1;
-HXLINE( 246)				msg->payloads->push(jmi);
-HXLINE( 247)				if (::hx::IsNull( msg->text )) {
-HXLINE( 247)					msg->text = (HX_("call ",c2,71,1b,41) + jmi->name);
-            				}
-HXLINE( 248)				if ((jmi->name != HX_("propose",fe,fe,e9,f9))) {
-HXLINE( 249)					msg->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,msg->build());
-            				}
-HXLINE( 252)				msg->localId = ( (::String)(::Reflect_obj::field(jmi->attr,HX_("id",db,5b,00,00))) );
+HXLINE( 278)				tmp22 = null();
             			}
-HXLINE( 255)			 ::borogove::Stanza retract = stanza->getChild(HX_("retract",01,e2,b9,fc),HX_("urn:xmpp:message-retract:1",16,5e,d8,d5));
-HXLINE( 256)			 ::borogove::Stanza fasten = stanza->getChild(HX_("apply-to",3a,9e,dd,24),HX_("urn:xmpp:fasten:0",17,f4,ed,3d));
-HXLINE( 257)			 ::borogove::Stanza moderated;
-HXDLIN( 257)			 ::borogove::Stanza tmp14;
-HXDLIN( 257)			if (::hx::IsNotNull( retract )) {
-HXLINE( 257)				tmp14 = retract->getChild(HX_("moderated",41,37,3b,22),HX_("urn:xmpp:message-retract:1",16,5e,d8,d5));
+HXDLIN( 278)			if (::hx::IsNotNull( tmp22 )) {
+HXLINE( 278)				moderated = tmp22;
             			}
             			else {
-HXLINE( 257)				tmp14 = null();
-            			}
-HXDLIN( 257)			if (::hx::IsNotNull( tmp14 )) {
-HXLINE( 257)				moderated = tmp14;
-            			}
-            			else {
-HXLINE( 257)				if (::hx::IsNotNull( fasten )) {
-HXLINE( 257)					moderated = fasten->getChild(HX_("moderated",41,37,3b,22),HX_("urn:xmpp:message-moderate:0",5b,30,1a,b9));
+HXLINE( 278)				if (::hx::IsNotNull( fasten )) {
+HXLINE( 278)					moderated = fasten->getChild(HX_("moderated",41,37,3b,22),HX_("urn:xmpp:message-moderate:0",5b,30,1a,b9));
             				}
             				else {
-HXLINE( 257)					moderated = null();
+HXLINE( 278)					moderated = null();
             				}
             			}
-HXLINE( 258)			::String moderateServerId;
-HXDLIN( 258)			 ::Dynamic tmp15;
-HXDLIN( 258)			if (::hx::IsNotNull( retract )) {
-HXLINE( 258)				tmp15 = retract->attr;
+HXLINE( 279)			::String moderateServerId;
+HXDLIN( 279)			 ::haxe::ds::StringMap tmp23;
+HXDLIN( 279)			if (::hx::IsNotNull( retract )) {
+HXLINE( 279)				tmp23 = retract->attr;
             			}
             			else {
-HXLINE( 258)				tmp15 = null();
+HXLINE( 279)				tmp23 = null();
             			}
-HXDLIN( 258)			::String tmp16;
-HXDLIN( 258)			if (::hx::IsNotNull( tmp15 )) {
-HXLINE( 258)				tmp16 = ( (::String)(::Reflect_obj::field(tmp15,HX_("id",db,5b,00,00))) );
+HXDLIN( 279)			::String tmp24;
+HXDLIN( 279)			if (::hx::IsNotNull( tmp23 )) {
+HXLINE( 279)				tmp24 = tmp23->get_string(HX_("id",db,5b,00,00));
             			}
             			else {
-HXLINE( 258)				tmp16 = null();
+HXLINE( 279)				tmp24 = null();
             			}
-HXDLIN( 258)			if (::hx::IsNotNull( tmp16 )) {
-HXLINE( 258)				moderateServerId = tmp16;
+HXDLIN( 279)			if (::hx::IsNotNull( tmp24 )) {
+HXLINE( 279)				moderateServerId = tmp24;
             			}
             			else {
-HXLINE( 258)				 ::Dynamic tmp17;
-HXDLIN( 258)				if (::hx::IsNotNull( fasten )) {
-HXLINE( 258)					tmp17 = fasten->attr;
+HXLINE( 279)				 ::haxe::ds::StringMap tmp25;
+HXDLIN( 279)				if (::hx::IsNotNull( fasten )) {
+HXLINE( 279)					tmp25 = fasten->attr;
             				}
             				else {
-HXLINE( 258)					tmp17 = null();
+HXLINE( 279)					tmp25 = null();
             				}
-HXDLIN( 258)				if (::hx::IsNotNull( tmp17 )) {
-HXLINE( 258)					moderateServerId = ( (::String)(::Reflect_obj::field(tmp17,HX_("id",db,5b,00,00))) );
+HXDLIN( 279)				if (::hx::IsNotNull( tmp25 )) {
+HXLINE( 279)					moderateServerId = tmp25->get_string(HX_("id",db,5b,00,00));
             				}
             				else {
-HXLINE( 258)					moderateServerId = null();
+HXLINE( 279)					moderateServerId = null();
             				}
             			}
-HXLINE( 259)			bool _hx_tmp39;
-HXDLIN( 259)			bool _hx_tmp40;
-HXDLIN( 259)			bool _hx_tmp41;
-HXDLIN( 259)			bool _hx_tmp42;
-HXDLIN( 259)			bool _hx_tmp43;
-HXDLIN( 259)			if (::hx::IsNotNull( moderated )) {
-HXLINE( 259)				_hx_tmp43 = ::hx::IsNotNull( moderateServerId );
+HXLINE( 280)			bool _hx_tmp50;
+HXDLIN( 280)			bool _hx_tmp51;
+HXDLIN( 280)			bool _hx_tmp52;
+HXDLIN( 280)			bool _hx_tmp53;
+HXDLIN( 280)			bool _hx_tmp54;
+HXDLIN( 280)			if (::hx::IsNotNull( moderated )) {
+HXLINE( 280)				_hx_tmp54 = ::hx::IsNotNull( moderateServerId );
             			}
             			else {
-HXLINE( 259)				_hx_tmp43 = false;
+HXLINE( 280)				_hx_tmp54 = false;
             			}
-HXDLIN( 259)			if (_hx_tmp43) {
-HXLINE( 259)				_hx_tmp42 = isGroupchat;
+HXDLIN( 280)			if (_hx_tmp54) {
+HXLINE( 280)				_hx_tmp53 = isGroupchat;
             			}
             			else {
-HXLINE( 259)				_hx_tmp42 = false;
+HXLINE( 280)				_hx_tmp53 = false;
             			}
-HXDLIN( 259)			if (_hx_tmp42) {
-HXLINE( 259)				_hx_tmp41 = ::hx::IsNotNull( msg->from );
+HXDLIN( 280)			if (_hx_tmp53) {
+HXLINE( 280)				_hx_tmp52 = ::hx::IsNotNull( msg->from );
             			}
             			else {
-HXLINE( 259)				_hx_tmp41 = false;
+HXLINE( 280)				_hx_tmp52 = false;
             			}
-HXDLIN( 259)			if (_hx_tmp41) {
-HXLINE( 259)				_hx_tmp40 = msg->from->isBare();
+HXDLIN( 280)			if (_hx_tmp52) {
+HXLINE( 280)				_hx_tmp51 = msg->from->isBare();
             			}
             			else {
-HXLINE( 259)				_hx_tmp40 = false;
+HXLINE( 280)				_hx_tmp51 = false;
             			}
-HXDLIN( 259)			if (_hx_tmp40) {
-HXLINE( 259)				::String _hx_tmp44 = msg->from->asString();
-HXDLIN( 259)				_hx_tmp39 = (_hx_tmp44 == msg->chatId());
+HXDLIN( 280)			if (_hx_tmp51) {
+HXLINE( 280)				::String _hx_tmp55 = msg->from->asString();
+HXDLIN( 280)				_hx_tmp50 = (_hx_tmp55 == msg->chatId());
             			}
             			else {
-HXLINE( 259)				_hx_tmp39 = false;
+HXLINE( 280)				_hx_tmp50 = false;
             			}
-HXDLIN( 259)			if (_hx_tmp39) {
-HXLINE( 260)				::String reason1;
-HXDLIN( 260)				::String tmp18;
-HXDLIN( 260)				if (::hx::IsNotNull( retract )) {
-HXLINE( 260)					tmp18 = retract->getChildText(HX_("reason",c4,0f,9d,fc),null());
+HXDLIN( 280)			if (_hx_tmp50) {
+HXLINE( 281)				::String reason1;
+HXDLIN( 281)				::String tmp26;
+HXDLIN( 281)				if (::hx::IsNotNull( retract )) {
+HXLINE( 281)					tmp26 = retract->getChildText(HX_("reason",c4,0f,9d,fc),null());
             				}
             				else {
-HXLINE( 260)					tmp18 = null();
+HXLINE( 281)					tmp26 = null();
             				}
-HXDLIN( 260)				if (::hx::IsNotNull( tmp18 )) {
-HXLINE( 260)					reason1 = tmp18;
+HXDLIN( 281)				if (::hx::IsNotNull( tmp26 )) {
+HXLINE( 281)					reason1 = tmp26;
             				}
             				else {
-HXLINE( 260)					if (::hx::IsNotNull( moderated )) {
-HXLINE( 260)						reason1 = moderated->getChildText(HX_("reason",c4,0f,9d,fc),null());
+HXLINE( 281)					if (::hx::IsNotNull( moderated )) {
+HXLINE( 281)						reason1 = moderated->getChildText(HX_("reason",c4,0f,9d,fc),null());
             					}
             					else {
-HXLINE( 260)						reason1 = null();
+HXLINE( 281)						reason1 = null();
             					}
             				}
-HXLINE( 261)				::String by = ( (::String)(::Reflect_obj::field(moderated->attr,HX_("by",d7,55,00,00))) );
-HXLINE( 264)				::String _hx_tmp45 = msg->chatId();
-HXLINE( 265)				::String _hx_tmp46 = msg->get_senderId();
-HXLINE( 266)				::String msg6 = msg->threadId;
-HXLINE( 263)				return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp45,_hx_tmp46,msg6,::borogove::MessageStanza_obj::ModerateMessageStanza( ::borogove::ModerationAction_obj::__alloc( HX_CTX ,msg->chatId(),moderateServerId,timestamp,by,reason1)),encryptionInfo);
+HXLINE( 282)				::String by = moderated->attr->get_string(HX_("by",d7,55,00,00));
+HXLINE( 285)				::String _hx_tmp56 = msg->chatId();
+HXLINE( 286)				::String _hx_tmp57 = msg->get_senderId();
+HXLINE( 287)				::String msg6 = msg->threadId;
+HXLINE( 288)				::String _hx_tmp58 = msg->chatId();
+HXDLIN( 288)				::String tmp27 = msg->timeReceived;
+HXDLIN( 288)				::String _hx_tmp59;
+HXDLIN( 288)				if (::hx::IsNotNull( tmp27 )) {
+HXLINE( 288)					_hx_tmp59 = tmp27;
+            				}
+            				else {
+HXLINE( 288)					_hx_tmp59 = ::borogove::Date_obj::format(::Date_obj::now());
+            				}
+HXLINE( 284)				return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp56,_hx_tmp57,msg6,::borogove::MessageStanza_obj::ModerateMessageStanza( ::borogove::ModerationAction_obj::__alloc( HX_CTX ,_hx_tmp58,moderateServerId,timeSent,_hx_tmp59,by,reason1)),encryptionInfo);
             			}
-HXLINE( 272)			 ::borogove::Stanza retracted = stanza->getChild(HX_("retracted",a0,7c,77,08),HX_("urn:xmpp:message-retract:1",16,5e,d8,d5));
-HXLINE( 273)			if (::hx::IsNotNull( retracted )) {
-HXLINE( 275)				msg->payloads->push(retracted);
+HXLINE( 293)			 ::borogove::Stanza retracted = stanza->getChild(HX_("retracted",a0,7c,77,08),HX_("urn:xmpp:message-retract:1",16,5e,d8,d5));
+HXLINE( 294)			if (::hx::IsNotNull( retracted )) {
+HXLINE( 296)				msg->payloads->push(retracted);
             			}
-HXLINE( 278)			 ::borogove::Stanza replace = stanza->getChild(HX_("replace",34,48,28,ab),HX_("urn:xmpp:message-correct:0",be,10,1b,b0));
-HXLINE( 279)			 ::Dynamic tmp19;
-HXDLIN( 279)			if (::hx::IsNotNull( replace )) {
-HXLINE( 279)				tmp19 = replace->attr;
+HXLINE( 299)			 ::borogove::Stanza replace = stanza->getChild(HX_("replace",34,48,28,ab),HX_("urn:xmpp:message-correct:0",be,10,1b,b0));
+HXLINE( 300)			 ::haxe::ds::StringMap tmp28;
+HXDLIN( 300)			if (::hx::IsNotNull( replace )) {
+HXLINE( 300)				tmp28 = replace->attr;
             			}
             			else {
-HXLINE( 279)				tmp19 = null();
+HXLINE( 300)				tmp28 = null();
             			}
-HXDLIN( 279)			::String replaceId;
-HXDLIN( 279)			if (::hx::IsNotNull( tmp19 )) {
-HXLINE( 279)				replaceId = ( (::String)(::Reflect_obj::field(tmp19,HX_("id",db,5b,00,00))) );
+HXDLIN( 300)			::String replaceId;
+HXDLIN( 300)			if (::hx::IsNotNull( tmp28 )) {
+HXLINE( 300)				replaceId = tmp28->get_string(HX_("id",db,5b,00,00));
             			}
             			else {
-HXLINE( 279)				replaceId = null();
+HXLINE( 300)				replaceId = null();
             			}
-HXLINE( 281)			bool _hx_tmp47;
-HXDLIN( 281)			bool _hx_tmp48;
-HXDLIN( 281)			bool _hx_tmp49;
-HXDLIN( 281)			bool _hx_tmp50;
-HXDLIN( 281)			if (!(preferChatMessage)) {
-HXLINE( 281)				_hx_tmp50 = ::hx::IsNull( msg->text );
+HXLINE( 302)			bool _hx_tmp60;
+HXDLIN( 302)			bool _hx_tmp61;
+HXDLIN( 302)			bool _hx_tmp62;
+HXDLIN( 302)			bool _hx_tmp63;
+HXDLIN( 302)			if (!(preferChatMessage)) {
+HXLINE( 302)				_hx_tmp63 = ::hx::IsNull( msg->text );
             			}
             			else {
-HXLINE( 281)				_hx_tmp50 = false;
+HXLINE( 302)				_hx_tmp63 = false;
             			}
-HXDLIN( 281)			if (_hx_tmp50) {
-HXLINE( 281)				_hx_tmp49 = (msg->attachments->length < 1);
+HXDLIN( 302)			if (_hx_tmp63) {
+HXLINE( 302)				_hx_tmp62 = (msg->attachments->length < 1);
             			}
             			else {
-HXLINE( 281)				_hx_tmp49 = false;
+HXLINE( 302)				_hx_tmp62 = false;
             			}
-HXDLIN( 281)			if (_hx_tmp49) {
-HXLINE( 281)				_hx_tmp48 = ::hx::IsNull( replaceId );
+HXDLIN( 302)			if (_hx_tmp62) {
+HXLINE( 302)				_hx_tmp61 = ::hx::IsNull( replaceId );
             			}
             			else {
-HXLINE( 281)				_hx_tmp48 = false;
+HXLINE( 302)				_hx_tmp61 = false;
             			}
-HXDLIN( 281)			if (_hx_tmp48) {
-HXLINE( 281)				_hx_tmp47 = ::hx::IsNull( retracted );
+HXDLIN( 302)			if (_hx_tmp61) {
+HXLINE( 302)				_hx_tmp60 = ::hx::IsNull( retracted );
             			}
             			else {
-HXLINE( 281)				_hx_tmp47 = false;
+HXLINE( 302)				_hx_tmp60 = false;
             			}
-HXDLIN( 281)			if (_hx_tmp47) {
-HXLINE( 282)				bool _hx_tmp51;
-HXDLIN( 282)				if ((msg->payloads->length == 1)) {
-HXLINE( 282)					_hx_tmp51 = (msg->payloads->__get(0).StaticCast<  ::borogove::Stanza >()->name == HX_("subject",ac,01,88,29));
+HXDLIN( 302)			if (_hx_tmp60) {
+HXLINE( 303)				bool _hx_tmp64;
+HXDLIN( 303)				if ((msg->payloads->length == 1)) {
+HXLINE( 303)					_hx_tmp64 = (msg->payloads->__get(0).StaticCast<  ::borogove::Stanza >()->name == HX_("subject",ac,01,88,29));
             				}
             				else {
-HXLINE( 282)					_hx_tmp51 = false;
-            				}
-HXDLIN( 282)				if (_hx_tmp51) {
-HXLINE( 283)					::String _hx_tmp52 = msg->chatId();
-HXDLIN( 283)					::String _hx_tmp53 = msg->get_senderId();
-HXDLIN( 283)					::String msg7 = msg->threadId;
-HXDLIN( 283)					return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp52,_hx_tmp53,msg7,::borogove::MessageStanza_obj::SubjectStanza(msg->payloads->__get(0).StaticCast<  ::borogove::Stanza >()->getText()),encryptionInfo);
-            				}
-HXLINE( 286)				::String _hx_tmp54 = msg->chatId();
-HXDLIN( 286)				::String _hx_tmp55 = msg->get_senderId();
-HXDLIN( 286)				return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp54,_hx_tmp55,msg->threadId,::borogove::MessageStanza_obj::UnknownMessageStanza(stanza),encryptionInfo);
-            			}
-HXLINE( 289)			{
-HXLINE( 289)				int _g15 = 0;
-HXDLIN( 289)				::Array< ::Dynamic> _g16 = stanza->allTags(HX_("fallback",22,f0,9d,2a),HX_("urn:xmpp:fallback:0",74,aa,56,9b));
-HXDLIN( 289)				while((_g15 < _g16->length)){
-HXLINE( 289)					 ::borogove::Stanza fallback = _g16->__get(_g15).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 289)					_g15 = (_g15 + 1);
-HXLINE( 290)					msg->payloads->push(fallback);
-            				}
-            			}
-HXLINE( 293)			 ::borogove::Stanza unstyled = stanza->getChild(HX_("unstyled",2c,15,1a,18),HX_("urn:xmpp:styling:0",48,d3,aa,fb));
-HXLINE( 294)			if (::hx::IsNotNull( unstyled )) {
-HXLINE( 295)				msg->payloads->push(unstyled);
-            			}
-HXLINE( 298)			 ::borogove::Stanza html = stanza->getChild(HX_("html",6b,95,16,45),HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce));
-HXLINE( 299)			if (::hx::IsNotNull( html )) {
-HXLINE( 300)				msg->payloads->push(html);
-            			}
-HXLINE( 303)			 ::borogove::Stanza reply = stanza->getChild(HX_("reply",2a,09,c6,e6),HX_("urn:xmpp:reply:0",c4,d5,6f,90));
-HXLINE( 304)			if (::hx::IsNotNull( reply )) {
-HXLINE( 305)				::String replyToJid = ( (::String)(::Reflect_obj::field(reply->attr,HX_("to",7b,65,00,00))) );
-HXLINE( 306)				::String replyToID = ( (::String)(::Reflect_obj::field(reply->attr,HX_("id",db,5b,00,00))) );
-HXLINE( 308)				::String text1 = msg->text;
-HXLINE( 309)				bool _hx_tmp56;
-HXDLIN( 309)				if (::hx::IsNotNull( text1 )) {
-HXLINE( 309)					_hx_tmp56 = ::borogove::EmojiUtil_obj::isOnlyEmoji(::StringTools_obj::trim(text1));
+HXLINE( 303)					_hx_tmp64 = false;
+            				}
+HXDLIN( 303)				if (_hx_tmp64) {
+HXLINE( 304)					::String _hx_tmp65 = msg->chatId();
+HXDLIN( 304)					::String _hx_tmp66 = msg->get_senderId();
+HXDLIN( 304)					::String msg7 = msg->threadId;
+HXDLIN( 304)					return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp65,_hx_tmp66,msg7,::borogove::MessageStanza_obj::SubjectStanza(msg->payloads->__get(0).StaticCast<  ::borogove::Stanza >()->getText()),encryptionInfo);
+            				}
+HXLINE( 307)				::String _hx_tmp67 = msg->chatId();
+HXDLIN( 307)				::String _hx_tmp68 = msg->get_senderId();
+HXDLIN( 307)				return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp67,_hx_tmp68,msg->threadId,::borogove::MessageStanza_obj::UnknownMessageStanza(stanza),encryptionInfo);
+            			}
+HXLINE( 310)			{
+HXLINE( 310)				int _g15 = 0;
+HXDLIN( 310)				::Array< ::Dynamic> _g16 = stanza->allTags(HX_("fallback",22,f0,9d,2a),HX_("urn:xmpp:fallback:0",74,aa,56,9b));
+HXDLIN( 310)				while((_g15 < _g16->length)){
+HXLINE( 310)					 ::borogove::Stanza fallback = _g16->__get(_g15).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 310)					_g15 = (_g15 + 1);
+HXLINE( 311)					msg->payloads->push(fallback);
+            				}
+            			}
+HXLINE( 314)			 ::borogove::Stanza unstyled = stanza->getChild(HX_("unstyled",2c,15,1a,18),HX_("urn:xmpp:styling:0",48,d3,aa,fb));
+HXLINE( 315)			if (::hx::IsNotNull( unstyled )) {
+HXLINE( 316)				msg->payloads->push(unstyled);
+            			}
+HXLINE( 319)			 ::borogove::Stanza html = stanza->getChild(HX_("html",6b,95,16,45),HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce));
+HXLINE( 320)			if (::hx::IsNotNull( html )) {
+HXLINE( 321)				msg->payloads->push(html);
+            			}
+HXLINE( 324)			 ::borogove::Stanza reply = stanza->getChild(HX_("reply",2a,09,c6,e6),HX_("urn:xmpp:reply:0",c4,d5,6f,90));
+HXLINE( 325)			if (::hx::IsNotNull( reply )) {
+HXLINE( 326)				::String replyToJid = reply->attr->get_string(HX_("to",7b,65,00,00));
+HXLINE( 327)				::String replyToID = reply->attr->get_string(HX_("id",db,5b,00,00));
+HXLINE( 329)				::String text1 = msg->text;
+HXLINE( 330)				bool _hx_tmp69;
+HXDLIN( 330)				if (::hx::IsNotNull( text1 )) {
+HXLINE( 330)					_hx_tmp69 = ::borogove::EmojiUtil_obj::isOnlyEmoji(::StringTools_obj::trim(text1));
             				}
             				else {
-HXLINE( 309)					_hx_tmp56 = false;
-            				}
-HXDLIN( 309)				if (_hx_tmp56) {
-HXLINE( 310)					::String _hx_tmp57 = msg->chatId();
-HXDLIN( 310)					::String _hx_tmp58 = msg->get_senderId();
-HXDLIN( 310)					::String msg8 = msg->threadId;
-HXLINE( 311)					::String _hx_tmp59;
-HXDLIN( 311)					::String tmp20 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) );
-HXDLIN( 311)					if (::hx::IsNotNull( tmp20 )) {
-HXLINE( 311)						_hx_tmp59 = tmp20;
+HXLINE( 330)					_hx_tmp69 = false;
+            				}
+HXDLIN( 330)				if (_hx_tmp69) {
+HXLINE( 331)					::String _hx_tmp70 = msg->chatId();
+HXDLIN( 331)					::String _hx_tmp71 = msg->get_senderId();
+HXDLIN( 331)					::String msg8 = msg->threadId;
+HXLINE( 332)					::String _hx_tmp72;
+HXDLIN( 332)					::String tmp29 = stanza->attr->get_string(HX_("id",db,5b,00,00));
+HXDLIN( 332)					if (::hx::IsNotNull( tmp29 )) {
+HXLINE( 332)						_hx_tmp72 = tmp29;
             					}
             					else {
-HXLINE( 311)						_hx_tmp59 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE( 332)						_hx_tmp72 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
             					}
-HXLINE( 312)					::String _hx_tmp60;
-HXDLIN( 312)					if (isGroupchat) {
-HXLINE( 312)						_hx_tmp60 = replyToID;
+HXLINE( 333)					::String _hx_tmp73;
+HXDLIN( 333)					if (isGroupchat) {
+HXLINE( 333)						_hx_tmp73 = replyToID;
             					}
             					else {
-HXLINE( 312)						_hx_tmp60 = null();
+HXLINE( 333)						_hx_tmp73 = null();
             					}
-HXLINE( 313)					::String _hx_tmp61;
-HXDLIN( 313)					if (isGroupchat) {
-HXLINE( 313)						_hx_tmp61 = msg->chatId();
+HXLINE( 334)					::String _hx_tmp74;
+HXDLIN( 334)					if (isGroupchat) {
+HXLINE( 334)						_hx_tmp74 = msg->chatId();
             					}
             					else {
-HXLINE( 313)						_hx_tmp61 = null();
+HXLINE( 334)						_hx_tmp74 = null();
             					}
-HXLINE( 314)					::String _hx_tmp62;
-HXDLIN( 314)					if (isGroupchat) {
-HXLINE( 314)						_hx_tmp62 = null();
+HXLINE( 335)					::String _hx_tmp75;
+HXDLIN( 335)					if (isGroupchat) {
+HXLINE( 335)						_hx_tmp75 = null();
             					}
             					else {
-HXLINE( 314)						_hx_tmp62 = replyToID;
+HXLINE( 335)						_hx_tmp75 = replyToID;
             					}
-HXLINE( 315)					::String _hx_tmp63 = msg->chatId();
-HXLINE( 316)					::String tmp21 = msg->get_senderId();
-HXDLIN( 316)					if (::hx::IsNull( tmp21 )) {
-HXLINE( 316)						HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
+HXLINE( 336)					::String _hx_tmp76 = msg->chatId();
+HXLINE( 337)					::String tmp30 = msg->get_senderId();
+HXDLIN( 337)					if (::hx::IsNull( tmp30 )) {
+HXLINE( 337)						HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
             					}
-HXLINE( 318)					::String tmp22 = msg->get_senderId();
-HXDLIN( 318)					if (::hx::IsNull( tmp22 )) {
-HXLINE( 318)						HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
+HXLINE( 339)					::String tmp31 = msg->get_senderId();
+HXDLIN( 339)					if (::hx::IsNull( tmp31 )) {
+HXLINE( 339)						HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
             					}
-HXDLIN( 318)					::String _hx_tmp64 = ::StringTools_obj::trim(text1);
-HXLINE( 310)					return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp57,_hx_tmp58,msg8,::borogove::MessageStanza_obj::ReactionUpdateStanza( ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,_hx_tmp59,_hx_tmp60,_hx_tmp61,_hx_tmp62,_hx_tmp63,tmp21,timestamp,::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::Reaction_obj::__alloc( HX_CTX ,tmp22,timestamp,_hx_tmp64,msg->localId,null())),1)),encryptionInfo);
-            				}
-HXLINE( 323)				if (::hx::IsNotNull( html )) {
-HXLINE( 324)					 ::borogove::Stanza body = html->getChild(HX_("body",a2,7a,1b,41),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8));
-HXLINE( 325)					if (::hx::IsNotNull( body )) {
-HXLINE( 326)						::Array< ::Dynamic> els = body->allTags(null(),null());
-HXLINE( 327)						bool _hx_tmp65;
-HXDLIN( 327)						if ((els->length == 1)) {
-HXLINE( 327)							_hx_tmp65 = (els->__get(0).StaticCast<  ::borogove::Stanza >()->name == HX_("img",03,0c,50,00));
+HXDLIN( 339)					::String _hx_tmp77 = ::StringTools_obj::trim(text1);
+HXLINE( 331)					return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp70,_hx_tmp71,msg8,::borogove::MessageStanza_obj::ReactionUpdateStanza( ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,_hx_tmp72,_hx_tmp73,_hx_tmp74,_hx_tmp75,_hx_tmp76,tmp30,timeSent,::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::Reaction_obj::__alloc( HX_CTX ,tmp31,timeSent,_hx_tmp77,msg->localId,null())),1)),encryptionInfo);
+            				}
+HXLINE( 344)				if (::hx::IsNotNull( html )) {
+HXLINE( 345)					 ::borogove::Stanza body = html->getChild(HX_("body",a2,7a,1b,41),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8));
+HXLINE( 346)					if (::hx::IsNotNull( body )) {
+HXLINE( 347)						::Array< ::Dynamic> els = body->allTags(null(),null());
+HXLINE( 348)						bool _hx_tmp78;
+HXDLIN( 348)						if ((els->length == 1)) {
+HXLINE( 348)							_hx_tmp78 = (els->__get(0).StaticCast<  ::borogove::Stanza >()->name == HX_("img",03,0c,50,00));
             						}
             						else {
-HXLINE( 327)							_hx_tmp65 = false;
+HXLINE( 348)							_hx_tmp78 = false;
             						}
-HXDLIN( 327)						if (_hx_tmp65) {
-HXLINE( 328)							::String tmp23 = ( (::String)(::Reflect_obj::field(els->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("src",e4,a6,57,00))) );
-HXDLIN( 328)							::String hash;
-HXDLIN( 328)							if (::hx::IsNotNull( tmp23 )) {
-HXLINE( 328)								hash = tmp23;
+HXDLIN( 348)						if (_hx_tmp78) {
+HXLINE( 349)							::String tmp32 = els->__get(0).StaticCast<  ::borogove::Stanza >()->attr->get_string(HX_("src",e4,a6,57,00));
+HXDLIN( 349)							::String hash;
+HXDLIN( 349)							if (::hx::IsNotNull( tmp32 )) {
+HXLINE( 349)								hash = tmp32;
             							}
             							else {
-HXLINE( 328)								hash = HX_("",00,00,00,00);
+HXLINE( 349)								hash = HX_("",00,00,00,00);
             							}
-HXDLIN( 328)							 ::borogove::Hash hash1 = ::borogove::Hash_obj::fromUri(hash);
-HXLINE( 329)							if (::hx::IsNotNull( hash1 )) {
-HXLINE( 330)								::String _hx_tmp66 = msg->chatId();
-HXDLIN( 330)								::String _hx_tmp67 = msg->get_senderId();
-HXDLIN( 330)								::String msg9 = msg->threadId;
-HXLINE( 331)								::String _hx_tmp68;
-HXDLIN( 331)								::String tmp24 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) );
-HXDLIN( 331)								if (::hx::IsNotNull( tmp24 )) {
-HXLINE( 331)									_hx_tmp68 = tmp24;
+HXDLIN( 349)							 ::borogove::Hash hash1 = ::borogove::Hash_obj::fromUri(hash);
+HXLINE( 350)							if (::hx::IsNotNull( hash1 )) {
+HXLINE( 351)								::String _hx_tmp79 = msg->chatId();
+HXDLIN( 351)								::String _hx_tmp80 = msg->get_senderId();
+HXDLIN( 351)								::String msg9 = msg->threadId;
+HXLINE( 352)								::String _hx_tmp81;
+HXDLIN( 352)								::String tmp33 = stanza->attr->get_string(HX_("id",db,5b,00,00));
+HXDLIN( 352)								if (::hx::IsNotNull( tmp33 )) {
+HXLINE( 352)									_hx_tmp81 = tmp33;
             								}
             								else {
-HXLINE( 331)									_hx_tmp68 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE( 352)									_hx_tmp81 = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
             								}
-HXLINE( 332)								::String _hx_tmp69;
-HXDLIN( 332)								if (isGroupchat) {
-HXLINE( 332)									_hx_tmp69 = replyToID;
+HXLINE( 353)								::String _hx_tmp82;
+HXDLIN( 353)								if (isGroupchat) {
+HXLINE( 353)									_hx_tmp82 = replyToID;
             								}
             								else {
-HXLINE( 332)									_hx_tmp69 = null();
+HXLINE( 353)									_hx_tmp82 = null();
             								}
-HXLINE( 333)								::String _hx_tmp70;
-HXDLIN( 333)								if (isGroupchat) {
-HXLINE( 333)									_hx_tmp70 = msg->chatId();
+HXLINE( 354)								::String _hx_tmp83;
+HXDLIN( 354)								if (isGroupchat) {
+HXLINE( 354)									_hx_tmp83 = msg->chatId();
             								}
             								else {
-HXLINE( 333)									_hx_tmp70 = null();
+HXLINE( 354)									_hx_tmp83 = null();
             								}
-HXLINE( 334)								::String _hx_tmp71;
-HXDLIN( 334)								if (isGroupchat) {
-HXLINE( 334)									_hx_tmp71 = null();
+HXLINE( 355)								::String _hx_tmp84;
+HXDLIN( 355)								if (isGroupchat) {
+HXLINE( 355)									_hx_tmp84 = null();
             								}
             								else {
-HXLINE( 334)									_hx_tmp71 = replyToID;
+HXLINE( 355)									_hx_tmp84 = replyToID;
             								}
-HXLINE( 335)								::String _hx_tmp72 = msg->chatId();
-HXLINE( 336)								::String tmp25 = msg->get_senderId();
-HXDLIN( 336)								if (::hx::IsNull( tmp25 )) {
-HXLINE( 336)									HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
+HXLINE( 356)								::String _hx_tmp85 = msg->chatId();
+HXLINE( 357)								::String tmp34 = msg->get_senderId();
+HXDLIN( 357)								if (::hx::IsNull( tmp34 )) {
+HXLINE( 357)									HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
             								}
-HXLINE( 338)								::String tmp26 = msg->get_senderId();
-HXDLIN( 338)								if (::hx::IsNull( tmp26 )) {
-HXLINE( 338)									HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
+HXLINE( 359)								::String tmp35 = msg->get_senderId();
+HXDLIN( 359)								if (::hx::IsNull( tmp35 )) {
+HXLINE( 359)									HX_STACK_DO_THROW(HX_("no sender",b4,39,ce,0e));
             								}
-HXDLIN( 338)								::String _hx_tmp73;
-HXDLIN( 338)								::String tmp27 = ( (::String)(::Reflect_obj::field(els->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("alt",29,f9,49,00))) );
-HXDLIN( 338)								if (::hx::IsNotNull( tmp27 )) {
-HXLINE( 338)									_hx_tmp73 = tmp27;
+HXDLIN( 359)								::String _hx_tmp86;
+HXDLIN( 359)								::String tmp36 = els->__get(0).StaticCast<  ::borogove::Stanza >()->attr->get_string(HX_("alt",29,f9,49,00));
+HXDLIN( 359)								if (::hx::IsNotNull( tmp36 )) {
+HXLINE( 359)									_hx_tmp86 = tmp36;
             								}
             								else {
-HXLINE( 338)									_hx_tmp73 = HX_("",00,00,00,00);
+HXLINE( 359)									_hx_tmp86 = HX_("",00,00,00,00);
             								}
-HXDLIN( 338)								::String _hx_tmp74 = hash1->serializeUri();
-HXLINE( 330)								return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp66,_hx_tmp67,msg9,::borogove::MessageStanza_obj::ReactionUpdateStanza( ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,_hx_tmp68,_hx_tmp69,_hx_tmp70,_hx_tmp71,_hx_tmp72,tmp25,timestamp,::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::CustomEmojiReaction_obj::__alloc( HX_CTX ,tmp26,timestamp,_hx_tmp73,_hx_tmp74,msg->localId)),1)),encryptionInfo);
+HXDLIN( 359)								::String _hx_tmp87 = hash1->serializeUri();
+HXLINE( 351)								return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp79,_hx_tmp80,msg9,::borogove::MessageStanza_obj::ReactionUpdateStanza( ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,_hx_tmp81,_hx_tmp82,_hx_tmp83,_hx_tmp84,_hx_tmp85,tmp34,timeSent,::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::CustomEmojiReaction_obj::__alloc( HX_CTX ,tmp35,timeSent,_hx_tmp86,_hx_tmp87,msg->localId)),1)),encryptionInfo);
             							}
             						}
             					}
             				}
-HXLINE( 346)				if (::hx::IsNotNull( replyToID )) {
-HXLINE( 348)					 ::borogove::ChatMessageBuilder replyToMessage =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
-HXLINE( 349)					 ::borogove::JID _hx_tmp75;
-HXDLIN( 349)					if ((replyToJid == msg->get_senderId())) {
-HXLINE( 349)						_hx_tmp75 = msg->to;
+HXLINE( 367)				if (::hx::IsNotNull( replyToID )) {
+HXLINE( 369)					 ::borogove::ChatMessageBuilder replyToMessage =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
+HXLINE( 370)					 ::borogove::JID _hx_tmp88;
+HXDLIN( 370)					if ((replyToJid == msg->get_senderId())) {
+HXLINE( 370)						_hx_tmp88 = msg->to;
             					}
             					else {
-HXLINE( 349)						_hx_tmp75 = msg->from;
+HXLINE( 370)						_hx_tmp88 = msg->from;
             					}
-HXDLIN( 349)					replyToMessage->to = _hx_tmp75;
-HXLINE( 350)					 ::borogove::JID _hx_tmp76;
-HXDLIN( 350)					if (::hx::IsNull( replyToJid )) {
-HXLINE( 350)						_hx_tmp76 = null();
+HXDLIN( 370)					replyToMessage->to = _hx_tmp88;
+HXLINE( 371)					 ::borogove::JID _hx_tmp89;
+HXDLIN( 371)					if (::hx::IsNull( replyToJid )) {
+HXLINE( 371)						_hx_tmp89 = null();
             					}
             					else {
-HXLINE( 350)						_hx_tmp76 = ::borogove::JID_obj::parse(replyToJid);
+HXLINE( 371)						_hx_tmp89 = ::borogove::JID_obj::parse(replyToJid);
             					}
-HXDLIN( 350)					replyToMessage->from = _hx_tmp76;
-HXLINE( 352)					::String _hx_tmp77;
-HXDLIN( 352)					if (isGroupchat) {
-HXLINE( 352)						 ::borogove::JID tmp28 = replyToMessage->from;
-HXDLIN( 352)						if (::hx::IsNotNull( tmp28 )) {
-HXLINE( 352)							_hx_tmp77 = tmp28->asString();
+HXDLIN( 371)					replyToMessage->from = _hx_tmp89;
+HXLINE( 373)					::String tmp37;
+HXDLIN( 373)					if (isGroupchat) {
+HXLINE( 373)						 ::borogove::JID tmp38 = replyToMessage->from;
+HXDLIN( 373)						if (::hx::IsNotNull( tmp38 )) {
+HXLINE( 373)							tmp37 = tmp38->asString();
             						}
             						else {
-HXLINE( 352)							_hx_tmp77 = null();
+HXLINE( 373)							tmp37 = null();
             						}
             					}
             					else {
-HXLINE( 352)						 ::borogove::JID tmp29 = replyToMessage->from;
-HXDLIN( 352)						 ::borogove::JID tmp30;
-HXDLIN( 352)						if (::hx::IsNotNull( tmp29 )) {
-HXLINE( 352)							tmp30 = tmp29->asBare();
+HXLINE( 373)						 ::borogove::JID tmp39 = replyToMessage->from;
+HXDLIN( 373)						 ::borogove::JID tmp40;
+HXDLIN( 373)						if (::hx::IsNotNull( tmp39 )) {
+HXLINE( 373)							tmp40 = tmp39->asBare();
             						}
             						else {
-HXLINE( 352)							tmp30 = null();
+HXLINE( 373)							tmp40 = null();
             						}
-HXDLIN( 352)						if (::hx::IsNotNull( tmp30 )) {
-HXLINE( 352)							_hx_tmp77 = tmp30->asString();
+HXDLIN( 373)						if (::hx::IsNotNull( tmp40 )) {
+HXLINE( 373)							tmp37 = tmp40->asString();
             						}
             						else {
-HXLINE( 352)							_hx_tmp77 = null();
+HXLINE( 373)							tmp37 = null();
             						}
             					}
-HXDLIN( 352)					replyToMessage->senderId = _hx_tmp77;
-HXLINE( 353)					replyToMessage->replyId = replyToID;
-HXLINE( 354)					bool _hx_tmp78;
-HXDLIN( 354)					bool _hx_tmp79;
-HXDLIN( 354)					if (::hx::IsNotNull( msg->serverIdBy )) {
-HXLINE( 354)						::String msg10 = msg->serverIdBy;
-HXDLIN( 354)						_hx_tmp79 = (msg10 != localJid->asBare()->asString());
+HXDLIN( 373)					::String _hx_tmp90;
+HXDLIN( 373)					if (::hx::IsNotNull( tmp37 )) {
+HXLINE( 373)						_hx_tmp90 = tmp37;
             					}
             					else {
-HXLINE( 354)						_hx_tmp79 = false;
+HXLINE( 373)						_hx_tmp90 = msg->chatId();
             					}
-HXDLIN( 354)					if (!(_hx_tmp79)) {
-HXLINE( 354)						_hx_tmp78 = isGroupchat;
+HXDLIN( 373)					replyToMessage->senderId = _hx_tmp90;
+HXLINE( 374)					replyToMessage->replyId = replyToID;
+HXLINE( 375)					bool _hx_tmp91;
+HXDLIN( 375)					bool _hx_tmp92;
+HXDLIN( 375)					if (::hx::IsNotNull( msg->serverIdBy )) {
+HXLINE( 375)						::String msg10 = msg->serverIdBy;
+HXDLIN( 375)						_hx_tmp92 = (msg10 != localJid->asBare()->asString());
             					}
             					else {
-HXLINE( 354)						_hx_tmp78 = true;
+HXLINE( 375)						_hx_tmp92 = false;
             					}
-HXDLIN( 354)					if (_hx_tmp78) {
-HXLINE( 355)						replyToMessage->serverId = replyToID;
-HXLINE( 356)						replyToMessage->serverIdBy = msg->serverIdBy;
+HXDLIN( 375)					if (!(_hx_tmp92)) {
+HXLINE( 375)						_hx_tmp91 = isGroupchat;
             					}
             					else {
-HXLINE( 358)						replyToMessage->localId = replyToID;
+HXLINE( 375)						_hx_tmp91 = true;
             					}
-HXLINE( 360)					msg->replyToMessage = replyToMessage->build();
-            				}
-            			}
-HXLINE( 364)			if (::hx::IsNotNull( replaceId )) {
-HXLINE( 365)				if ((msg->versions->length < 1)) {
-HXLINE( 365)					msg->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,msg->build());
-            				}
-HXLINE( 366)				msg->localId = replaceId;
-            			}
-HXLINE( 369)			{
-HXLINE( 369)				int _g17 = 0;
-HXDLIN( 369)				::Array< ::Dynamic> _g18 = stanza->allTags(HX_("Description",dc,a0,4f,43),HX_("http://www.w3.org/1999/02/22-rdf-syntax-ns#",20,d2,3b,f3));
-HXDLIN( 369)				while((_g17 < _g18->length)){
-HXLINE( 369)					 ::borogove::Stanza desc = _g18->__get(_g17).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 369)					_g17 = (_g17 + 1);
-HXLINE( 370)					::String about = ( (::String)(::Reflect_obj::field(desc->attr,HX_("{http://www.w3.org/1999/02/22-rdf-syntax-ns#}about",f5,8b,b0,68))) );
-HXLINE( 371)					if (::hx::IsNotNull( about )) {
-HXLINE( 372)						::Array< ::Dynamic> msg11 = msg->linkMetadata;
-HXLINE( 374)						::String _hx_tmp80 = desc->getChildText(HX_("url",6f,2b,59,00),HX_("https://ogp.me/ns#",ac,b9,8c,d5));
-HXLINE( 375)						::String _hx_tmp81 = desc->getChildText(HX_("title",98,15,3b,10),HX_("https://ogp.me/ns#",ac,b9,8c,d5));
-HXLINE( 376)						::String _hx_tmp82 = desc->getChildText(HX_("description",fc,08,1d,5f),HX_("https://ogp.me/ns#",ac,b9,8c,d5));
-HXLINE( 377)						::Array< ::Dynamic> _this1 = desc->allTags(HX_("image",5b,1f,69,bd),HX_("https://ogp.me/ns#",ac,b9,8c,d5));
-HXDLIN( 377)						::Array< ::String > result3 = ::Array_obj< ::String >::__new(_this1->length);
-HXDLIN( 377)						{
-HXLINE( 377)							int _g19 = 0;
-HXDLIN( 377)							int _g20 = _this1->length;
-HXDLIN( 377)							while((_g19 < _g20)){
-HXLINE( 377)								_g19 = (_g19 + 1);
-HXDLIN( 377)								int i2 = (_g19 - 1);
-HXDLIN( 377)								{
-HXLINE( 377)									::String inValue2 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this1,i2)) )->getText();
-HXDLIN( 377)									result3->__unsafe_set(i2,inValue2);
+HXDLIN( 375)					if (_hx_tmp91) {
+HXLINE( 376)						replyToMessage->serverId = replyToID;
+HXLINE( 377)						replyToMessage->serverIdBy = msg->serverIdBy;
+            					}
+            					else {
+HXLINE( 379)						replyToMessage->localId = replyToID;
+            					}
+HXLINE( 381)					msg->replyToMessage = replyToMessage->build();
+            				}
+            			}
+HXLINE( 385)			if (::hx::IsNotNull( replaceId )) {
+HXLINE( 386)				if ((msg->versions->length < 1)) {
+HXLINE( 386)					msg->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,msg->build());
+            				}
+HXLINE( 387)				msg->localId = replaceId;
+            			}
+HXLINE( 390)			{
+HXLINE( 390)				int _g17 = 0;
+HXDLIN( 390)				::Array< ::Dynamic> _g18 = stanza->allTags(HX_("Description",dc,a0,4f,43),HX_("http://www.w3.org/1999/02/22-rdf-syntax-ns#",20,d2,3b,f3));
+HXDLIN( 390)				while((_g17 < _g18->length)){
+HXLINE( 390)					 ::borogove::Stanza desc = _g18->__get(_g17).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 390)					_g17 = (_g17 + 1);
+HXLINE( 391)					::String about = desc->attr->get_string(HX_("{http://www.w3.org/1999/02/22-rdf-syntax-ns#}about",f5,8b,b0,68));
+HXLINE( 392)					if (::hx::IsNotNull( about )) {
+HXLINE( 393)						::Array< ::Dynamic> msg11 = msg->linkMetadata;
+HXLINE( 395)						::String _hx_tmp93 = desc->getChildText(HX_("url",6f,2b,59,00),HX_("https://ogp.me/ns#",ac,b9,8c,d5));
+HXLINE( 396)						::String _hx_tmp94 = desc->getChildText(HX_("title",98,15,3b,10),HX_("https://ogp.me/ns#",ac,b9,8c,d5));
+HXLINE( 397)						::String _hx_tmp95 = desc->getChildText(HX_("description",fc,08,1d,5f),HX_("https://ogp.me/ns#",ac,b9,8c,d5));
+HXLINE( 398)						::Array< ::Dynamic> _this1 = desc->allTags(HX_("image",5b,1f,69,bd),HX_("https://ogp.me/ns#",ac,b9,8c,d5));
+HXDLIN( 398)						::Array< ::String > result3 = ::Array_obj< ::String >::__new(_this1->length);
+HXDLIN( 398)						{
+HXLINE( 398)							int _g19 = 0;
+HXDLIN( 398)							int _g20 = _this1->length;
+HXDLIN( 398)							while((_g19 < _g20)){
+HXLINE( 398)								_g19 = (_g19 + 1);
+HXDLIN( 398)								int i2 = (_g19 - 1);
+HXDLIN( 398)								{
+HXLINE( 398)									::String inValue2 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this1,i2)) )->getText();
+HXDLIN( 398)									result3->__unsafe_set(i2,inValue2);
             								}
             							}
             						}
-HXLINE( 378)						::Array< ::Dynamic> _this2 = desc->allTags(HX_("video",7b,14,fc,36),HX_("https://ogp.me/ns#",ac,b9,8c,d5));
-HXDLIN( 378)						::Array< ::String > result4 = ::Array_obj< ::String >::__new(_this2->length);
-HXDLIN( 378)						{
-HXLINE( 378)							int _g21 = 0;
-HXDLIN( 378)							int _g22 = _this2->length;
-HXDLIN( 378)							while((_g21 < _g22)){
-HXLINE( 378)								_g21 = (_g21 + 1);
-HXDLIN( 378)								int i3 = (_g21 - 1);
-HXDLIN( 378)								{
-HXLINE( 378)									::String inValue3 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this2,i3)) )->getText();
-HXDLIN( 378)									result4->__unsafe_set(i3,inValue3);
+HXLINE( 399)						::Array< ::Dynamic> _this2 = desc->allTags(HX_("video",7b,14,fc,36),HX_("https://ogp.me/ns#",ac,b9,8c,d5));
+HXDLIN( 399)						::Array< ::String > result4 = ::Array_obj< ::String >::__new(_this2->length);
+HXDLIN( 399)						{
+HXLINE( 399)							int _g21 = 0;
+HXDLIN( 399)							int _g22 = _this2->length;
+HXDLIN( 399)							while((_g21 < _g22)){
+HXLINE( 399)								_g21 = (_g21 + 1);
+HXDLIN( 399)								int i3 = (_g21 - 1);
+HXDLIN( 399)								{
+HXLINE( 399)									::String inValue3 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this2,i3)) )->getText();
+HXDLIN( 399)									result4->__unsafe_set(i3,inValue3);
             								}
             							}
             						}
-HXLINE( 372)						msg11->push( ::borogove::LinkMetadata_obj::__alloc( HX_CTX ,about,_hx_tmp80,_hx_tmp81,_hx_tmp82,result3,result4));
+HXLINE( 393)						msg11->push( ::borogove::LinkMetadata_obj::__alloc( HX_CTX ,about,_hx_tmp93,_hx_tmp94,_hx_tmp95,result3,result4));
             					}
             				}
             			}
-HXLINE( 383)			::String _hx_tmp83 = msg->chatId();
-HXDLIN( 383)			::String _hx_tmp84 = msg->get_senderId();
-HXDLIN( 383)			::String msg12 = msg->threadId;
-HXDLIN( 383)			return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp83,_hx_tmp84,msg12,::borogove::MessageStanza_obj::ChatMessageStanza(msg->build()),encryptionInfo);
+HXLINE( 404)			::String _hx_tmp96 = msg->chatId();
+HXDLIN( 404)			::String _hx_tmp97 = msg->get_senderId();
+HXDLIN( 404)			::String msg12 = msg->threadId;
+HXDLIN( 404)			return  ::borogove::Message_obj::__alloc( HX_CTX ,_hx_tmp96,_hx_tmp97,msg12,::borogove::MessageStanza_obj::ChatMessageStanza(msg->build()),encryptionInfo);
             		}
-HXLINE(  62)		return null();
+HXLINE(  63)		return null();
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/MessageStanza.cpp b/Sources/c_borogove/src/borogove/MessageStanza.cpp
index d7821a6..eb5b552 100644
--- a/Sources/c_borogove/src/borogove/MessageStanza.cpp
+++ b/Sources/c_borogove/src/borogove/MessageStanza.cpp
@@ -4,6 +4,9 @@
 #ifndef INCLUDED_borogove_ChatMessage
 #include <borogove/ChatMessage.h>
 #endif
+#ifndef INCLUDED_borogove_JID
+#include <borogove/JID.h>
+#endif
 #ifndef INCLUDED_borogove_MessageStanza
 #include <borogove/MessageStanza.h>
 #endif
@@ -38,6 +41,11 @@ namespace borogove{
 	return ::hx::CreateEnum< MessageStanza_obj >(HX_("MucInviteStanza",19,bd,35,96),5,4)->_hx_init(0,serverId)->_hx_init(1,serverIdBy)->_hx_init(2,reason)->_hx_init(3,password);
 }
 
+::borogove::MessageStanza MessageStanza_obj::MucVoiceRequest( ::borogove::JID jid)
+{
+	return ::hx::CreateEnum< MessageStanza_obj >(HX_("MucVoiceRequest",38,d8,b9,cd),6,1)->_hx_init(0,jid);
+}
+
 ::borogove::MessageStanza MessageStanza_obj::ReactionUpdateStanza( ::borogove::ReactionUpdate update)
 {
 	return ::hx::CreateEnum< MessageStanza_obj >(HX_("ReactionUpdateStanza",47,fe,3e,f3),4,1)->_hx_init(0,update);
@@ -50,7 +58,7 @@ namespace borogove{
 
 ::borogove::MessageStanza MessageStanza_obj::UnknownMessageStanza( ::borogove::Stanza stanza)
 {
-	return ::hx::CreateEnum< MessageStanza_obj >(HX_("UnknownMessageStanza",52,c1,f7,28),6,1)->_hx_init(0,stanza);
+	return ::hx::CreateEnum< MessageStanza_obj >(HX_("UnknownMessageStanza",52,c1,f7,28),7,1)->_hx_init(0,stanza);
 }
 
 bool MessageStanza_obj::__GetStatic(const ::String &inName, ::Dynamic &outValue, ::hx::PropertyAccess inCallProp)
@@ -59,6 +67,7 @@ bool MessageStanza_obj::__GetStatic(const ::String &inName, ::Dynamic &outValue,
 	if (inName==HX_("ErrorMessageStanza",54,02,51,07)) { outValue = MessageStanza_obj::ErrorMessageStanza_dyn(); return true; }
 	if (inName==HX_("ModerateMessageStanza",39,25,06,6f)) { outValue = MessageStanza_obj::ModerateMessageStanza_dyn(); return true; }
 	if (inName==HX_("MucInviteStanza",19,bd,35,96)) { outValue = MessageStanza_obj::MucInviteStanza_dyn(); return true; }
+	if (inName==HX_("MucVoiceRequest",38,d8,b9,cd)) { outValue = MessageStanza_obj::MucVoiceRequest_dyn(); return true; }
 	if (inName==HX_("ReactionUpdateStanza",47,fe,3e,f3)) { outValue = MessageStanza_obj::ReactionUpdateStanza_dyn(); return true; }
 	if (inName==HX_("SubjectStanza",a1,ac,e6,07)) { outValue = MessageStanza_obj::SubjectStanza_dyn(); return true; }
 	if (inName==HX_("UnknownMessageStanza",52,c1,f7,28)) { outValue = MessageStanza_obj::UnknownMessageStanza_dyn(); return true; }
@@ -73,9 +82,10 @@ int MessageStanza_obj::__FindIndex(::String inName)
 	if (inName==HX_("ErrorMessageStanza",54,02,51,07)) return 0;
 	if (inName==HX_("ModerateMessageStanza",39,25,06,6f)) return 3;
 	if (inName==HX_("MucInviteStanza",19,bd,35,96)) return 5;
+	if (inName==HX_("MucVoiceRequest",38,d8,b9,cd)) return 6;
 	if (inName==HX_("ReactionUpdateStanza",47,fe,3e,f3)) return 4;
 	if (inName==HX_("SubjectStanza",a1,ac,e6,07)) return 2;
-	if (inName==HX_("UnknownMessageStanza",52,c1,f7,28)) return 6;
+	if (inName==HX_("UnknownMessageStanza",52,c1,f7,28)) return 7;
 	return super::__FindIndex(inName);
 }
 
@@ -87,6 +97,8 @@ STATIC_HX_DEFINE_DYNAMIC_FUNC1(MessageStanza_obj,ModerateMessageStanza,return)
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC4(MessageStanza_obj,MucInviteStanza,return)
 
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(MessageStanza_obj,MucVoiceRequest,return)
+
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(MessageStanza_obj,ReactionUpdateStanza,return)
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(MessageStanza_obj,SubjectStanza,return)
@@ -99,6 +111,7 @@ int MessageStanza_obj::__FindArgCount(::String inName)
 	if (inName==HX_("ErrorMessageStanza",54,02,51,07)) return 2;
 	if (inName==HX_("ModerateMessageStanza",39,25,06,6f)) return 1;
 	if (inName==HX_("MucInviteStanza",19,bd,35,96)) return 4;
+	if (inName==HX_("MucVoiceRequest",38,d8,b9,cd)) return 1;
 	if (inName==HX_("ReactionUpdateStanza",47,fe,3e,f3)) return 1;
 	if (inName==HX_("SubjectStanza",a1,ac,e6,07)) return 1;
 	if (inName==HX_("UnknownMessageStanza",52,c1,f7,28)) return 1;
@@ -111,6 +124,7 @@ int MessageStanza_obj::__FindArgCount(::String inName)
 	if (inName==HX_("ErrorMessageStanza",54,02,51,07)) return ErrorMessageStanza_dyn();
 	if (inName==HX_("ModerateMessageStanza",39,25,06,6f)) return ModerateMessageStanza_dyn();
 	if (inName==HX_("MucInviteStanza",19,bd,35,96)) return MucInviteStanza_dyn();
+	if (inName==HX_("MucVoiceRequest",38,d8,b9,cd)) return MucVoiceRequest_dyn();
 	if (inName==HX_("ReactionUpdateStanza",47,fe,3e,f3)) return ReactionUpdateStanza_dyn();
 	if (inName==HX_("SubjectStanza",a1,ac,e6,07)) return SubjectStanza_dyn();
 	if (inName==HX_("UnknownMessageStanza",52,c1,f7,28)) return UnknownMessageStanza_dyn();
@@ -124,6 +138,7 @@ static ::String MessageStanza_obj_sStaticFields[] = {
 	HX_("ModerateMessageStanza",39,25,06,6f),
 	HX_("ReactionUpdateStanza",47,fe,3e,f3),
 	HX_("MucInviteStanza",19,bd,35,96),
+	HX_("MucVoiceRequest",38,d8,b9,cd),
 	HX_("UnknownMessageStanza",52,c1,f7,28),
 	::String(null())
 };
diff --git a/Sources/c_borogove/src/borogove/MessageSync.cpp b/Sources/c_borogove/src/borogove/MessageSync.cpp
index 312232d..f540bb7 100644
--- a/Sources/c_borogove/src/borogove/MessageSync.cpp
+++ b/Sources/c_borogove/src/borogove/MessageSync.cpp
@@ -1,6 +1,9 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
+#ifndef INCLUDED_Date
+#include <Date.h>
+#endif
 #ifndef INCLUDED_EReg
 #include <EReg.h>
 #endif
@@ -22,6 +25,9 @@
 #ifndef INCLUDED_borogove_Client
 #include <borogove/Client.h>
 #endif
+#ifndef INCLUDED_borogove_Date
+#include <borogove/Date.h>
+#endif
 #ifndef INCLUDED_borogove_EncryptionInfo
 #include <borogove/EncryptionInfo.h>
 #endif
@@ -76,22 +82,22 @@
 
 HX_DEFINE_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_32_new,"borogove.MessageSync","new",0x01408247,"borogove.MessageSync.new","borogove/MessageSync.hx",32,0xc40e42ca)
 HX_DEFINE_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_26_new,"borogove.MessageSync","new",0x01408247,"borogove.MessageSync.new","borogove/MessageSync.hx",26,0xc40e42ca)
-HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_144_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",144,0xc40e42ca)
-HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_69_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",69,0xc40e42ca)
-HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_90_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",90,0xc40e42ca)
-HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_156_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",156,0xc40e42ca)
-HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_170_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",170,0xc40e42ca)
-HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_50_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",50,0xc40e42ca)
+HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_172_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",172,0xc40e42ca)
+HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_74_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",74,0xc40e42ca)
+HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_97_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",97,0xc40e42ca)
+HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_194_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",194,0xc40e42ca)
+HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_208_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",208,0xc40e42ca)
+HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_55_fetchNext,"borogove.MessageSync","fetchNext",0x76930374,"borogove.MessageSync.fetchNext","borogove/MessageSync.hx",55,0xc40e42ca)
 static const ::String _hx_array_data_8d9a52d5_8[] = {
 	HX_("",00,00,00,00),
 };
 static const int _hx_array_data_8d9a52d5_9[] = {
 	(int)0,
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_181_hasMore,"borogove.MessageSync","hasMore",0xecce3176,"borogove.MessageSync.hasMore","borogove/MessageSync.hx",181,0xc40e42ca)
-HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_185_addContext,"borogove.MessageSync","addContext",0x33022ac7,"borogove.MessageSync.addContext","borogove/MessageSync.hx",185,0xc40e42ca)
-HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_189_onMessages,"borogove.MessageSync","onMessages",0xc4b51604,"borogove.MessageSync.onMessages","borogove/MessageSync.hx",189,0xc40e42ca)
-HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_193_onError,"borogove.MessageSync","onError",0xde909b90,"borogove.MessageSync.onError","borogove/MessageSync.hx",193,0xc40e42ca)
+HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_219_hasMore,"borogove.MessageSync","hasMore",0xecce3176,"borogove.MessageSync.hasMore","borogove/MessageSync.hx",219,0xc40e42ca)
+HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_223_addContext,"borogove.MessageSync","addContext",0x33022ac7,"borogove.MessageSync.addContext","borogove/MessageSync.hx",223,0xc40e42ca)
+HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_227_onMessages,"borogove.MessageSync","onMessages",0xc4b51604,"borogove.MessageSync.onMessages","borogove/MessageSync.hx",227,0xc40e42ca)
+HX_LOCAL_STACK_FRAME(_hx_pos_b6f42aa0d664cfb6_231_onError,"borogove.MessageSync","onError",0xde909b90,"borogove.MessageSync.onError","borogove/MessageSync.hx",231,0xc40e42ca)
 namespace borogove{
 
 void MessageSync_obj::__construct( ::borogove::Client client, ::borogove::GenericStream stream, ::Dynamic filter,::String sortA,::String sortB,::String serviceJID){
@@ -103,23 +109,25 @@ HXLINE(  32)			return b;
             		HX_END_LOCAL_FUNC2(return)
 
             	HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_26_new)
-HXLINE(  39)		this->jmi =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(  38)		this->complete = false;
-HXLINE(  37)		this->progress = 0;
+HXLINE(  42)		this->jmi =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(  41)		this->complete = false;
+HXLINE(  40)		this->progress = 0;
 HXLINE(  32)		this->contextHandler =  ::Dynamic(new _hx_Closure_0());
-HXLINE(  42)		this->client = client;
-HXLINE(  43)		this->stream = stream;
-HXLINE(  44)		this->filter = ::Reflect_obj::copy(filter);
-HXLINE(  45)		this->sortA = sortA;
-HXLINE(  46)		this->sortB = sortB;
-HXLINE(  47)		::String _hx_tmp;
-HXDLIN(  47)		if (::hx::IsNotNull( serviceJID )) {
-HXLINE(  47)			_hx_tmp = serviceJID;
+HXLINE(  45)		this->startedAt = ::Date_obj::now()->getTime();
+HXLINE(  46)		this->client = client;
+HXLINE(  47)		this->stream = stream;
+HXLINE(  48)		this->startFilter = (this->filter = ::Reflect_obj::copy(filter));
+HXLINE(  49)		this->sortA = sortA;
+HXLINE(  50)		this->startSortA = sortA;
+HXLINE(  51)		this->sortB = sortB;
+HXLINE(  52)		::String _hx_tmp;
+HXDLIN(  52)		if (::hx::IsNotNull( serviceJID )) {
+HXLINE(  52)			_hx_tmp = serviceJID;
             		}
             		else {
-HXLINE(  47)			_hx_tmp = client->accountId();
+HXLINE(  52)			_hx_tmp = client->accountId();
             		}
-HXDLIN(  47)		this->serviceJID = _hx_tmp;
+HXDLIN(  52)		this->serviceJID = _hx_tmp;
             	}
 
 Dynamic MessageSync_obj::__CreateEmpty() { return new MessageSync_obj; }
@@ -140,207 +148,233 @@ bool MessageSync_obj::_hx_isInstanceOf(int inClassId) {
 void MessageSync_obj::fetchNext(){
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_2,::Array< int >,counterSameTime, ::borogove::MessageSync,_gthis, ::borogove::queries::MAMQuery,query,::Array< ::String >,previousMessageTime,::Array< ::Dynamic>,promisedMessages) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic event){
-            			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::MessageSync,_gthis,::Array< ::String >,timestamp, ::borogove::Stanza,result) HXARGC(2)
+            			HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_1, ::borogove::MessageSync,_gthis,::String,serverReceivedAt,::String,sortId,::Array< ::String >,timeReceived, ::borogove::Stanza,result,::String,sortLower) HXARGC(2)
             			 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            				HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_144_fetchNext)
-HXLINE( 145)				builder->sortId = _gthis->sortA;
-HXLINE( 146)				builder->serverId = ( (::String)(::Reflect_obj::field(result->attr,HX_("id",db,5b,00,00))) );
-HXLINE( 147)				builder->serverIdBy = _gthis->serviceJID;
-HXLINE( 148)				bool msg;
-HXDLIN( 148)				if (::hx::IsNotNull( timestamp->__get(0) )) {
-HXLINE( 148)					msg = ::hx::IsNull( builder->timestamp );
+            				HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_172_fetchNext)
+HXLINE( 173)				builder->sortId = sortId;
+HXLINE( 176)				::String serverReceivedAt1 = serverReceivedAt;
+HXLINE( 177)				::String _gthis1 = _gthis->serviceJID;
+HXLINE( 178)				 ::Dynamic _gthis2 = _gthis->filter;
+HXLINE( 179)				 ::Dynamic _gthis3 = _gthis->startFilter;
+HXLINE( 180)				::String msg = ::borogove::Date_obj::format(::Date_obj::now());
+HXLINE( 174)				builder->debug =  ::Dynamic(::hx::Anon_obj::Create(8)
+            					->setFixed(0,HX_("filter",b8,1f,35,85),_gthis2)
+            					->setFixed(1,HX_("serverReceivedAt",17,49,c6,f4),serverReceivedAt1)
+            					->setFixed(2,HX_("now",16,d9,53,00),msg)
+            					->setFixed(3,HX_("startFiler",b4,b6,af,1c),_gthis3)
+            					->setFixed(4,HX_("sortId",d9,7a,37,30), ::Dynamic(::hx::Anon_obj::Create(4)
+            						->setFixed(0,HX_("startSortA",61,23,e1,9c),_gthis->startSortA)
+            						->setFixed(1,HX_("upper",62,19,3f,a8),_gthis->sortB)
+            						->setFixed(2,HX_("method",e1,f6,5a,09),HX_("between",c8,91,b3,66))
+            						->setFixed(3,HX_("lower",01,fa,ff,78),sortLower)))
+            					->setFixed(5,HX_("source",db,b0,31,32),HX_("mam",99,0a,53,00))
+            					->setFixed(6,HX_("path",a5,e5,51,4a),HX_("unencrypted",8b,80,ea,f1))
+            					->setFixed(7,HX_("serviceJID",90,19,2d,7d),_gthis1));
+HXLINE( 184)				builder->serverId = result->attr->get_string(HX_("id",db,5b,00,00));
+HXLINE( 185)				builder->serverIdBy = _gthis->serviceJID;
+HXLINE( 186)				bool msg1;
+HXDLIN( 186)				if (::hx::IsNotNull( timeReceived->__get(0) )) {
+HXLINE( 186)					msg1 = ::hx::IsNull( builder->timeReceived );
             				}
             				else {
-HXLINE( 148)					msg = false;
+HXLINE( 186)					msg1 = false;
             				}
-HXDLIN( 148)				if (msg) {
-HXLINE( 148)					builder->timestamp = timestamp->__get(0);
+HXDLIN( 186)				if (msg1) {
+HXLINE( 186)					builder->timeReceived = timeReceived->__get(0);
             				}
-HXLINE( 149)				return ( ( ::borogove::ChatMessageBuilder)(_gthis->contextHandler(builder,stanza)) );
+HXLINE( 187)				return ( ( ::borogove::ChatMessageBuilder)(_gthis->contextHandler(builder,stanza)) );
             			}
             			HX_END_LOCAL_FUNC2(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_69_fetchNext)
-HXLINE(  70)			 ::borogove::Stanza message = ( ( ::borogove::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
-HXLINE(  71)			::String from;
-HXDLIN(  71)			if (::Reflect_obj::hasField(message->attr,HX_("from",6a,a5,c2,43))) {
-HXLINE(  71)				from = ( (::String)(::Reflect_obj::field(message->attr,HX_("from",6a,a5,c2,43))) );
+            			HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_74_fetchNext)
+HXLINE(  75)			 ::borogove::Stanza message = ( ( ::borogove::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
+HXLINE(  76)			::String from;
+HXDLIN(  76)			if (message->attr->exists(HX_("from",6a,a5,c2,43))) {
+HXLINE(  76)				from = message->attr->get_string(HX_("from",6a,a5,c2,43));
             			}
             			else {
-HXLINE(  71)				from = _gthis->client->accountId();
+HXLINE(  76)				from = _gthis->client->accountId();
             			}
-HXLINE(  72)			if ((from != _gthis->serviceJID)) {
-HXLINE(  73)				return ::borogove::EventResult_obj::EventUnhandled_dyn();
+HXLINE(  77)			if ((from != _gthis->serviceJID)) {
+HXLINE(  78)				return ::borogove::EventResult_obj::EventUnhandled_dyn();
             			}
-HXLINE(  75)			 ::borogove::Stanza result = message->getChild(HX_("result",dd,68,84,08),query->xmlns);
-HXLINE(  76)			bool eventToken;
-HXDLIN(  76)			if (::hx::IsNotNull( result )) {
-HXLINE(  76)				::String eventToken1 = ( (::String)(::Reflect_obj::field(result->attr,HX_("queryid",e3,b8,e9,95))) );
-HXDLIN(  76)				eventToken = (eventToken1 != query->queryId);
+HXLINE(  80)			 ::borogove::Stanza result = message->getChild(HX_("result",dd,68,84,08),query->xmlns);
+HXLINE(  81)			bool eventToken;
+HXDLIN(  81)			if (::hx::IsNotNull( result )) {
+HXLINE(  81)				::String eventToken1 = result->attr->get_string(HX_("queryid",e3,b8,e9,95));
+HXDLIN(  81)				eventToken = (eventToken1 != query->queryId);
             			}
             			else {
-HXLINE(  76)				eventToken = true;
+HXLINE(  81)				eventToken = true;
             			}
-HXDLIN(  76)			if (eventToken) {
-HXLINE(  77)				return ::borogove::EventResult_obj::EventUnhandled_dyn();
+HXDLIN(  81)			if (eventToken) {
+HXLINE(  82)				return ::borogove::EventResult_obj::EventUnhandled_dyn();
             			}
-HXLINE(  79)			_gthis->progress++;
-HXLINE(  80)			 ::borogove::Stanza originalMessage = result->findChild(HX_("{urn:xmpp:forward:0}forwarded/{jabber:client}message",1e,de,1d,61));
-HXLINE(  81)			if (::hx::IsNull( originalMessage )) {
-HXLINE(  82)				return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE(  84)			_gthis->progress++;
+HXLINE(  85)			 ::borogove::Stanza originalMessage = result->findChild(HX_("{urn:xmpp:forward:0}forwarded/{jabber:client}message",1e,de,1d,61));
+HXLINE(  86)			if (::hx::IsNull( originalMessage )) {
+HXLINE(  87)				return ::borogove::EventResult_obj::EventHandled_dyn();
             			}
-HXLINE(  84)			_gthis->sortA = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(_gthis->sortA,_gthis->sortB,HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
-HXLINE(  85)			::Array< ::String > timestamp = ::Array_obj< ::String >::__new(1)->init(0,result->findText(HX_("{urn:xmpp:forward:0}forwarded/{urn:xmpp:delay}delay@stamp",9d,33,43,e7)));
-HXLINE(  86)			if (::hx::IsNull( timestamp->__get(0) )) {
-HXLINE(  87)				::haxe::Log_obj::trace(HX_("MAM result with no timestamp",15,bb,83,7d), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(  89)			::String sortLower = _gthis->sortA;
+HXLINE(  90)			_gthis->sortA = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(sortLower,_gthis->sortB,HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
+HXLINE(  91)			::String serverReceivedAt = result->findText(HX_("{urn:xmpp:forward:0}forwarded/{urn:xmpp:delay}delay@stamp",9d,33,43,e7));
+HXLINE(  92)			::Array< ::String > timeReceived = ::Array_obj< ::String >::__new(1)->init(0,serverReceivedAt);
+HXLINE(  93)			if (::hx::IsNull( timeReceived->__get(0) )) {
+HXLINE(  94)				::haxe::Log_obj::trace(HX_("MAM result with no timestamp",15,bb,83,7d), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.MessageSync",d5,52,9a,8d))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,result))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("fetchNext",4d,6a,ad,1f))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/MessageSync.hx",ca,42,0e,c4))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),87)));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),94)));
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::Array< int >,counterSameTime,::Array< ::String >,previousMessageTime) HXARGC(1)
             				::String _hx_run( ::EReg ereg){
-            					HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_90_fetchNext)
-HXLINE(  91)					bool eventToken;
-HXDLIN(  91)					if (::hx::IsNotNull( ereg->matched(2) )) {
-HXLINE(  91)						eventToken = (ereg->matched(2) == HX_(".000",c2,66,8c,1e));
+            					HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_97_fetchNext)
+HXLINE(  98)					bool eventToken;
+HXDLIN(  98)					if (::hx::IsNotNull( ereg->matched(2) )) {
+HXLINE(  98)						eventToken = (ereg->matched(2) == HX_(".000",c2,66,8c,1e));
             					}
             					else {
-HXLINE(  91)						eventToken = true;
+HXLINE(  98)						eventToken = true;
             					}
-HXDLIN(  91)					if (eventToken) {
-HXLINE(  92)						::String eventToken1 = ereg->matched(1);
-HXDLIN(  92)						if ((eventToken1 == previousMessageTime->__get(0))) {
-HXLINE(  93)							counterSameTime[0]++;
+HXDLIN(  98)					if (eventToken) {
+HXLINE(  99)						::String eventToken1 = ereg->matched(1);
+HXDLIN(  99)						if ((eventToken1 == previousMessageTime->__get(0))) {
+HXLINE( 100)							counterSameTime[0]++;
             						}
             						else {
-HXLINE(  95)							previousMessageTime[0] = ereg->matched(1);
-HXLINE(  96)							counterSameTime[0] = 1;
+HXLINE( 102)							previousMessageTime[0] = ereg->matched(1);
+HXLINE( 103)							counterSameTime[0] = 1;
             						}
-HXLINE(  99)						::String eventToken2 = (ereg->matched(1) + HX_(".",2e,00,00,00));
-HXDLIN(  99)						return (eventToken2 + ::StringTools_obj::lpad(::Std_obj::string(counterSameTime->__get(0)),HX_("0",30,00,00,00),3));
+HXLINE( 106)						::String eventToken2 = (ereg->matched(1) + HX_(".",2e,00,00,00));
+HXDLIN( 106)						return (eventToken2 + ::StringTools_obj::lpad(::Std_obj::string(counterSameTime->__get(0)),HX_("0",30,00,00,00),3));
             					}
-HXLINE( 102)					return ereg->matched(0);
+HXLINE( 109)					return ereg->matched(0);
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE(  90)				::Array< ::String > timestamp1 = timestamp;
-HXDLIN(  90)				 ::EReg eventToken2 =  ::EReg_obj::__alloc( HX_CTX ,HX_("([0-9][0-9]:[0-9][0-9]:[0-9][0-9])(\\.[0-9][0-9][0-9])?",99,64,fa,66),HX_("",00,00,00,00));
-HXDLIN(  90)				timestamp1[0] = eventToken2->map(timestamp->__get(0), ::Dynamic(new _hx_Closure_0(counterSameTime,previousMessageTime)));
+HXLINE(  97)				::Array< ::String > timeReceived1 = timeReceived;
+HXDLIN(  97)				 ::EReg eventToken2 =  ::EReg_obj::__alloc( HX_CTX ,HX_("([0-9][0-9]:[0-9][0-9]:[0-9][0-9])(\\.[0-9][0-9][0-9])?",99,64,fa,66),HX_("",00,00,00,00));
+HXDLIN(  97)				timeReceived1[0] = eventToken2->map(timeReceived->__get(0), ::Dynamic(new _hx_Closure_0(counterSameTime,previousMessageTime)));
             			}
-HXLINE( 106)			::Array< ::Dynamic> jmiChildren = originalMessage->allTags(null(),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 107)			if ((jmiChildren->length > 0)) {
-HXLINE( 108)				::Dynamic this1 = _gthis->jmi;
-HXDLIN( 108)				( ( ::haxe::ds::StringMap)(this1) )->set(( (::String)(::Reflect_obj::field(jmiChildren->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("id",db,5b,00,00))) ),originalMessage);
+HXLINE( 113)			::Array< ::Dynamic> jmiChildren = originalMessage->allTags(null(),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 114)			if ((jmiChildren->length > 0)) {
+HXLINE( 115)				::Dynamic this1 = _gthis->jmi;
+HXDLIN( 115)				( ( ::haxe::ds::StringMap)(this1) )->set(jmiChildren->__get(0).StaticCast<  ::borogove::Stanza >()->attr->get_string(HX_("id",db,5b,00,00)),originalMessage);
             			}
-HXLINE( 142)			 ::Dynamic eventToken3 = ::haxe::Log_obj::trace;
-HXDLIN( 142)			::String eventToken4 = (HX_("MAM: Processing non-OMEMO message from ",f8,ed,2b,0d) + ( (::String)(::Reflect_obj::field(originalMessage->attr,HX_("from",6a,a5,c2,43))) ));
-HXDLIN( 142)			eventToken3(eventToken4,::hx::SourceInfo(HX_("borogove/MessageSync.hx",ca,42,0e,c4),142,HX_("borogove.MessageSync",d5,52,9a,8d),HX_("fetchNext",4d,6a,ad,1f)));
-HXLINE( 144)			 ::borogove::Message msg = ::borogove::Message_obj::fromStanza(originalMessage,_gthis->client->jid, ::Dynamic(new _hx_Closure_1(_gthis,timestamp,result)),null(),null());
-HXLINE( 152)			::Array< ::Dynamic> promisedMessages1 = promisedMessages;
-HXDLIN( 152)			promisedMessages1->push(::thenshim::_Promise::Promise_Impl__obj::resolve(msg));
-HXLINE( 154)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE( 118)			::String sortId = _gthis->sortA;
+HXLINE( 170)			 ::Dynamic eventToken3 = ::haxe::Log_obj::trace;
+HXDLIN( 170)			::String eventToken4 = (HX_("MAM: Processing non-OMEMO message from ",f8,ed,2b,0d) + originalMessage->attr->get(HX_("from",6a,a5,c2,43)));
+HXDLIN( 170)			eventToken3(eventToken4,::hx::SourceInfo(HX_("borogove/MessageSync.hx",ca,42,0e,c4),170,HX_("borogove.MessageSync",d5,52,9a,8d),HX_("fetchNext",4d,6a,ad,1f)));
+HXLINE( 172)			 ::borogove::Message msg = ::borogove::Message_obj::fromStanza(originalMessage,_gthis->client->jid, ::Dynamic(new _hx_Closure_1(_gthis,serverReceivedAt,sortId,timeReceived,result,sortLower)),null(),null());
+HXLINE( 190)			::Array< ::Dynamic> promisedMessages1 = promisedMessages;
+HXDLIN( 190)			promisedMessages1->push(::thenshim::_Promise::Promise_Impl__obj::resolve(msg));
+HXLINE( 192)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_4, ::borogove::MessageSync,_gthis, ::borogove::queries::MAMQuery,query,int,eventToken,::Array< ::Dynamic>,promisedMessages) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_156_fetchNext)
-HXLINE( 157)			_gthis->stream->removeEventListener(eventToken);
-HXLINE( 158)			 ::Dynamic result = query->getResult();
-HXLINE( 159)			if (::hx::IsNull( result )) {
-HXLINE( 160)				::haxe::Log_obj::trace(HX_("Error from MAM, stopping sync",b8,c9,46,be),::hx::SourceInfo(HX_("borogove/MessageSync.hx",ca,42,0e,c4),160,HX_("borogove.MessageSync",d5,52,9a,8d),HX_("fetchNext",4d,6a,ad,1f)));
-HXLINE( 161)				_gthis->complete = true;
-HXLINE( 162)				if (::hx::IsNotNull( _gthis->errorHandler )) {
-HXLINE( 163)					_gthis->errorHandler(query->responseStanza);
+            			HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_194_fetchNext)
+HXLINE( 195)			_gthis->stream->removeEventListener(eventToken);
+HXLINE( 196)			 ::Dynamic result = query->getResult();
+HXLINE( 197)			if (::hx::IsNull( result )) {
+HXLINE( 198)				::haxe::Log_obj::trace(HX_("Error from MAM, stopping sync",b8,c9,46,be), ::Dynamic(::hx::Anon_obj::Create(5)
+            					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.MessageSync",d5,52,9a,8d))
+            					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,query->responseStanza))
+            					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("fetchNext",4d,6a,ad,1f))
+            					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/MessageSync.hx",ca,42,0e,c4))
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),198)));
+HXLINE( 199)				_gthis->complete = true;
+HXLINE( 200)				if (::hx::IsNotNull( _gthis->errorHandler )) {
+HXLINE( 201)					_gthis->errorHandler(query->responseStanza);
             				}
             			}
             			else {
-HXLINE( 165)				_gthis->complete = ( (bool)(result->__Field(HX_("complete",b9,00,c8,7f),::hx::paccDynamic)) );
-HXLINE( 166)				_gthis->lastPage = result->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic);
+HXLINE( 203)				_gthis->complete = ( (bool)(result->__Field(HX_("complete",b9,00,c8,7f),::hx::paccDynamic)) );
+HXLINE( 204)				_gthis->lastPage = result->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic);
             			}
-HXLINE( 168)			bool _hx_tmp;
-HXDLIN( 168)			if (::hx::IsNull( result )) {
-HXLINE( 168)				_hx_tmp = ::hx::IsNull( _gthis->errorHandler );
+HXLINE( 206)			bool _hx_tmp;
+HXDLIN( 206)			if (::hx::IsNull( result )) {
+HXLINE( 206)				_hx_tmp = ::hx::IsNull( _gthis->errorHandler );
             			}
             			else {
-HXLINE( 168)				_hx_tmp = true;
+HXLINE( 206)				_hx_tmp = true;
             			}
-HXDLIN( 168)			if (_hx_tmp) {
+HXDLIN( 206)			if (_hx_tmp) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::MessageSync,_gthis) HXARGC(1)
             				void _hx_run(::Array< ::Dynamic> messages){
-            					HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_170_fetchNext)
-HXLINE( 170)					_gthis->handler( ::Dynamic(::hx::Anon_obj::Create(2)
+            					HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_208_fetchNext)
+HXLINE( 208)					_gthis->handler( ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("messages",cc,d8,fd,34),messages)
             						->setFixed(1,HX_("sync",5b,ba,5f,4c),_gthis)));
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 169)				::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promisedMessages), ::Dynamic(new _hx_Closure_3(_gthis)),null());
+HXLINE( 207)				::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promisedMessages), ::Dynamic(new _hx_Closure_3(_gthis)),null());
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_50_fetchNext)
-HXDLIN(  50)		 ::borogove::MessageSync _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  51)		if (::hx::IsNull( this->handler )) {
-HXLINE(  52)			HX_STACK_DO_THROW( ::haxe::Exception_obj::__alloc( HX_CTX ,HX_("Attempt to fetch messages, but no handler has been set",72,e3,58,24),null(),null()));
+            	HX_GC_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_55_fetchNext)
+HXDLIN(  55)		 ::borogove::MessageSync _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  56)		if (::hx::IsNull( this->handler )) {
+HXLINE(  57)			HX_STACK_DO_THROW( ::haxe::Exception_obj::__alloc( HX_CTX ,HX_("Attempt to fetch messages, but no handler has been set",72,e3,58,24),null(),null()));
             		}
-HXLINE(  54)		if (this->complete) {
-HXLINE(  55)			HX_STACK_DO_THROW( ::haxe::Exception_obj::__alloc( HX_CTX ,HX_("Attempt to fetch messages, but already complete",f8,43,a7,37),null(),null()));
+HXLINE(  59)		if (this->complete) {
+HXLINE(  60)			HX_STACK_DO_THROW( ::haxe::Exception_obj::__alloc( HX_CTX ,HX_("Attempt to fetch messages, but already complete",f8,43,a7,37),null(),null()));
             		}
-HXLINE(  57)		::Array< ::Dynamic> promisedMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(  58)		if (::hx::IsNotNull( this->lastPage )) {
-HXLINE(  59)			if (::hx::IsNull( this->filter->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic) )) {
-HXLINE(  59)				this->filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(0)),::hx::paccDynamic);
+HXLINE(  62)		::Array< ::Dynamic> promisedMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(  63)		if (::hx::IsNotNull( this->lastPage )) {
+HXLINE(  64)			if (::hx::IsNull( this->filter->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic) )) {
+HXLINE(  64)				this->filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(0)),::hx::paccDynamic);
             			}
-HXLINE(  60)			if (::hx::IsNull(  ::Dynamic(this->filter->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic))->__Field(HX_("before",7f,54,32,9a),::hx::paccDynamic) )) {
-HXLINE(  61)				 ::Dynamic(this->filter->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic))->__SetField(HX_("after",1c,66,a2,1d),this->lastPage->__Field(HX_("last",56,0a,ad,47),::hx::paccDynamic),::hx::paccDynamic);
+HXLINE(  65)			if (::hx::IsNull(  ::Dynamic(this->filter->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic))->__Field(HX_("before",7f,54,32,9a),::hx::paccDynamic) )) {
+HXLINE(  66)				 ::Dynamic(this->filter->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic))->__SetField(HX_("after",1c,66,a2,1d),this->lastPage->__Field(HX_("last",56,0a,ad,47),::hx::paccDynamic),::hx::paccDynamic);
             			}
             			else {
-HXLINE(  63)				 ::Dynamic(this->filter->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic))->__SetField(HX_("before",7f,54,32,9a),this->lastPage->__Field(HX_("first",30,78,9d,00),::hx::paccDynamic),::hx::paccDynamic);
+HXLINE(  68)				 ::Dynamic(this->filter->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic))->__SetField(HX_("before",7f,54,32,9a),this->lastPage->__Field(HX_("first",30,78,9d,00),::hx::paccDynamic),::hx::paccDynamic);
             			}
             		}
-HXLINE(  66)		 ::borogove::queries::MAMQuery query =  ::borogove::queries::MAMQuery_obj::__alloc( HX_CTX ,this->filter,this->serviceJID);
-HXLINE(  67)		::Array< ::String > previousMessageTime = ::Array_obj< ::String >::fromData( _hx_array_data_8d9a52d5_8,1);
-HXLINE(  68)		::Array< int > counterSameTime = ::Array_obj< int >::fromData( _hx_array_data_8d9a52d5_9,1);
-HXLINE(  69)		int eventToken = this->stream->on(HX_("message",c7,35,11,9a), ::Dynamic(new _hx_Closure_2(counterSameTime,_gthis,query,previousMessageTime,promisedMessages)));
-HXLINE( 156)		query->onFinished( ::Dynamic(new _hx_Closure_4(_gthis,query,eventToken,promisedMessages)));
-HXLINE( 177)		this->client->sendQuery(query);
+HXLINE(  71)		 ::borogove::queries::MAMQuery query =  ::borogove::queries::MAMQuery_obj::__alloc( HX_CTX ,this->filter,this->serviceJID);
+HXLINE(  72)		::Array< ::String > previousMessageTime = ::Array_obj< ::String >::fromData( _hx_array_data_8d9a52d5_8,1);
+HXLINE(  73)		::Array< int > counterSameTime = ::Array_obj< int >::fromData( _hx_array_data_8d9a52d5_9,1);
+HXLINE(  74)		int eventToken = this->stream->on(HX_("message",c7,35,11,9a), ::Dynamic(new _hx_Closure_2(counterSameTime,_gthis,query,previousMessageTime,promisedMessages)));
+HXLINE( 194)		query->onFinished( ::Dynamic(new _hx_Closure_4(_gthis,query,eventToken,promisedMessages)));
+HXLINE( 215)		this->client->sendQuery(query);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(MessageSync_obj,fetchNext,(void))
 
 bool MessageSync_obj::hasMore(){
-            	HX_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_181_hasMore)
-HXDLIN( 181)		return !(this->complete);
+            	HX_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_219_hasMore)
+HXDLIN( 219)		return !(this->complete);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(MessageSync_obj,hasMore,return )
 
 void MessageSync_obj::addContext( ::Dynamic handler){
-            	HX_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_185_addContext)
-HXDLIN( 185)		this->contextHandler = handler;
+            	HX_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_223_addContext)
+HXDLIN( 223)		this->contextHandler = handler;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(MessageSync_obj,addContext,(void))
 
 void MessageSync_obj::onMessages( ::Dynamic handler){
-            	HX_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_189_onMessages)
-HXDLIN( 189)		this->handler = handler;
+            	HX_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_227_onMessages)
+HXDLIN( 227)		this->handler = handler;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(MessageSync_obj,onMessages,(void))
 
 void MessageSync_obj::onError( ::Dynamic handler){
-            	HX_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_193_onError)
-HXDLIN( 193)		this->errorHandler = handler;
+            	HX_STACKFRAME(&_hx_pos_b6f42aa0d664cfb6_231_onError)
+HXDLIN( 231)		this->errorHandler = handler;
             	}
 
 
@@ -374,8 +408,11 @@ void MessageSync_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(handler,"handler");
 	HX_MARK_MEMBER_NAME(contextHandler,"contextHandler");
 	HX_MARK_MEMBER_NAME(errorHandler,"errorHandler");
+	HX_MARK_MEMBER_NAME(startSortA,"startSortA");
+	HX_MARK_MEMBER_NAME(startFilter,"startFilter");
 	HX_MARK_MEMBER_NAME(sortA,"sortA");
 	HX_MARK_MEMBER_NAME(sortB,"sortB");
+	HX_MARK_MEMBER_NAME(startedAt,"startedAt");
 	HX_MARK_MEMBER_NAME(lastPage,"lastPage");
 	HX_MARK_MEMBER_NAME(progress,"progress");
 	HX_MARK_MEMBER_NAME(complete,"complete");
@@ -392,8 +429,11 @@ void MessageSync_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(handler,"handler");
 	HX_VISIT_MEMBER_NAME(contextHandler,"contextHandler");
 	HX_VISIT_MEMBER_NAME(errorHandler,"errorHandler");
+	HX_VISIT_MEMBER_NAME(startSortA,"startSortA");
+	HX_VISIT_MEMBER_NAME(startFilter,"startFilter");
 	HX_VISIT_MEMBER_NAME(sortA,"sortA");
 	HX_VISIT_MEMBER_NAME(sortB,"sortB");
+	HX_VISIT_MEMBER_NAME(startedAt,"startedAt");
 	HX_VISIT_MEMBER_NAME(lastPage,"lastPage");
 	HX_VISIT_MEMBER_NAME(progress,"progress");
 	HX_VISIT_MEMBER_NAME(complete,"complete");
@@ -426,13 +466,18 @@ void MessageSync_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"complete") ) { return ::hx::Val( complete ); }
 		break;
 	case 9:
+		if (HX_FIELD_EQ(inName,"startedAt") ) { return ::hx::Val( startedAt ); }
 		if (HX_FIELD_EQ(inName,"fetchNext") ) { return ::hx::Val( fetchNext_dyn() ); }
 		break;
 	case 10:
 		if (HX_FIELD_EQ(inName,"serviceJID") ) { return ::hx::Val( serviceJID ); }
+		if (HX_FIELD_EQ(inName,"startSortA") ) { return ::hx::Val( startSortA ); }
 		if (HX_FIELD_EQ(inName,"addContext") ) { return ::hx::Val( addContext_dyn() ); }
 		if (HX_FIELD_EQ(inName,"onMessages") ) { return ::hx::Val( onMessages_dyn() ); }
 		break;
+	case 11:
+		if (HX_FIELD_EQ(inName,"startFilter") ) { return ::hx::Val( startFilter ); }
+		break;
 	case 12:
 		if (HX_FIELD_EQ(inName,"errorHandler") ) { return ::hx::Val( errorHandler ); }
 		break;
@@ -465,8 +510,15 @@ void MessageSync_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"progress") ) { progress=inValue.Cast< int >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"complete") ) { complete=inValue.Cast< bool >(); return inValue; }
 		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"startedAt") ) { startedAt=inValue.Cast< Float >(); return inValue; }
+		break;
 	case 10:
 		if (HX_FIELD_EQ(inName,"serviceJID") ) { serviceJID=inValue.Cast< ::String >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"startSortA") ) { startSortA=inValue.Cast< ::String >(); return inValue; }
+		break;
+	case 11:
+		if (HX_FIELD_EQ(inName,"startFilter") ) { startFilter=inValue.Cast<  ::Dynamic >(); return inValue; }
 		break;
 	case 12:
 		if (HX_FIELD_EQ(inName,"errorHandler") ) { errorHandler=inValue.Cast<  ::Dynamic >(); return inValue; }
@@ -483,8 +535,11 @@ void MessageSync_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("stream",80,14,2d,11));
 	outFields->push(HX_("filter",b8,1f,35,85));
 	outFields->push(HX_("serviceJID",90,19,2d,7d));
+	outFields->push(HX_("startSortA",61,23,e1,9c));
+	outFields->push(HX_("startFilter",ba,7d,1b,fd));
 	outFields->push(HX_("sortA",23,4b,ca,80));
 	outFields->push(HX_("sortB",24,4b,ca,80));
+	outFields->push(HX_("startedAt",94,f4,28,11));
 	outFields->push(HX_("lastPage",c5,f3,9a,dd));
 	outFields->push(HX_("progress",ad,f7,2a,86));
 	outFields->push(HX_("complete",b9,00,c8,7f));
@@ -501,8 +556,11 @@ static ::hx::StorageInfo MessageSync_obj_sMemberStorageInfo[] = {
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(MessageSync_obj,handler),HX_("handler",ca,af,d5,45)},
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(MessageSync_obj,contextHandler),HX_("contextHandler",9b,6d,14,e9)},
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(MessageSync_obj,errorHandler),HX_("errorHandler",e2,94,05,f7)},
+	{::hx::fsString,(int)offsetof(MessageSync_obj,startSortA),HX_("startSortA",61,23,e1,9c)},
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(MessageSync_obj,startFilter),HX_("startFilter",ba,7d,1b,fd)},
 	{::hx::fsString,(int)offsetof(MessageSync_obj,sortA),HX_("sortA",23,4b,ca,80)},
 	{::hx::fsString,(int)offsetof(MessageSync_obj,sortB),HX_("sortB",24,4b,ca,80)},
+	{::hx::fsFloat,(int)offsetof(MessageSync_obj,startedAt),HX_("startedAt",94,f4,28,11)},
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(MessageSync_obj,lastPage),HX_("lastPage",c5,f3,9a,dd)},
 	{::hx::fsInt,(int)offsetof(MessageSync_obj,progress),HX_("progress",ad,f7,2a,86)},
 	{::hx::fsBool,(int)offsetof(MessageSync_obj,complete),HX_("complete",b9,00,c8,7f)},
@@ -520,8 +578,11 @@ static ::String MessageSync_obj_sMemberFields[] = {
 	HX_("handler",ca,af,d5,45),
 	HX_("contextHandler",9b,6d,14,e9),
 	HX_("errorHandler",e2,94,05,f7),
+	HX_("startSortA",61,23,e1,9c),
+	HX_("startFilter",ba,7d,1b,fd),
 	HX_("sortA",23,4b,ca,80),
 	HX_("sortB",24,4b,ca,80),
+	HX_("startedAt",94,f4,28,11),
 	HX_("lastPage",c5,f3,9a,dd),
 	HX_("progress",ad,f7,2a,86),
 	HX_("complete",b9,00,c8,7f),
diff --git a/Sources/c_borogove/src/borogove/ModerationAction.cpp b/Sources/c_borogove/src/borogove/ModerationAction.cpp
index da5d81d..33c2e5c 100644
--- a/Sources/c_borogove/src/borogove/ModerationAction.cpp
+++ b/Sources/c_borogove/src/borogove/ModerationAction.cpp
@@ -5,16 +5,17 @@
 #include <borogove/ModerationAction.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_1331bd461281db0a_10_new,"borogove.ModerationAction","new",0x2766727b,"borogove.ModerationAction.new","borogove/ModerationAction.hx",10,0x442159f4)
+HX_DEFINE_STACK_FRAME(_hx_pos_1331bd461281db0a_11_new,"borogove.ModerationAction","new",0x2766727b,"borogove.ModerationAction.new","borogove/ModerationAction.hx",11,0x442159f4)
 namespace borogove{
 
-void ModerationAction_obj::__construct(::String chatId,::String moderateServerId,::String timestamp,::String moderatorId,::String reason){
-            	HX_STACKFRAME(&_hx_pos_1331bd461281db0a_10_new)
-HXLINE(  11)		this->chatId = chatId;
-HXLINE(  12)		this->moderateServerId = moderateServerId;
-HXLINE(  13)		this->timestamp = timestamp;
-HXLINE(  14)		this->moderatorId = moderatorId;
-HXLINE(  15)		this->reason = reason;
+void ModerationAction_obj::__construct(::String chatId,::String moderateServerId,::String timeSent,::String timeReceived,::String moderatorId,::String reason){
+            	HX_STACKFRAME(&_hx_pos_1331bd461281db0a_11_new)
+HXLINE(  12)		this->chatId = chatId;
+HXLINE(  13)		this->moderateServerId = moderateServerId;
+HXLINE(  14)		this->timeSent = timeSent;
+HXLINE(  15)		this->timeReceived = timeReceived;
+HXLINE(  16)		this->moderatorId = moderatorId;
+HXLINE(  17)		this->reason = reason;
             	}
 
 Dynamic ModerationAction_obj::__CreateEmpty() { return new ModerationAction_obj; }
@@ -24,7 +25,7 @@ void *ModerationAction_obj::_hx_vtable = 0;
 Dynamic ModerationAction_obj::__Create(::hx::DynamicArray inArgs)
 {
 	::hx::ObjectPtr< ModerationAction_obj > _hx_result = new ModerationAction_obj();
-	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2],inArgs[3],inArgs[4]);
+	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2],inArgs[3],inArgs[4],inArgs[5]);
 	return _hx_result;
 }
 
@@ -42,7 +43,8 @@ void ModerationAction_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_BEGIN_CLASS(ModerationAction);
 	HX_MARK_MEMBER_NAME(chatId,"chatId");
 	HX_MARK_MEMBER_NAME(moderateServerId,"moderateServerId");
-	HX_MARK_MEMBER_NAME(timestamp,"timestamp");
+	HX_MARK_MEMBER_NAME(timeSent,"timeSent");
+	HX_MARK_MEMBER_NAME(timeReceived,"timeReceived");
 	HX_MARK_MEMBER_NAME(moderatorId,"moderatorId");
 	HX_MARK_MEMBER_NAME(reason,"reason");
 	HX_MARK_END_CLASS();
@@ -52,7 +54,8 @@ void ModerationAction_obj::__Visit(HX_VISIT_PARAMS)
 {
 	HX_VISIT_MEMBER_NAME(chatId,"chatId");
 	HX_VISIT_MEMBER_NAME(moderateServerId,"moderateServerId");
-	HX_VISIT_MEMBER_NAME(timestamp,"timestamp");
+	HX_VISIT_MEMBER_NAME(timeSent,"timeSent");
+	HX_VISIT_MEMBER_NAME(timeReceived,"timeReceived");
 	HX_VISIT_MEMBER_NAME(moderatorId,"moderatorId");
 	HX_VISIT_MEMBER_NAME(reason,"reason");
 }
@@ -64,12 +67,15 @@ void ModerationAction_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"chatId") ) { return ::hx::Val( chatId ); }
 		if (HX_FIELD_EQ(inName,"reason") ) { return ::hx::Val( reason ); }
 		break;
-	case 9:
-		if (HX_FIELD_EQ(inName,"timestamp") ) { return ::hx::Val( timestamp ); }
+	case 8:
+		if (HX_FIELD_EQ(inName,"timeSent") ) { return ::hx::Val( timeSent ); }
 		break;
 	case 11:
 		if (HX_FIELD_EQ(inName,"moderatorId") ) { return ::hx::Val( moderatorId ); }
 		break;
+	case 12:
+		if (HX_FIELD_EQ(inName,"timeReceived") ) { return ::hx::Val( timeReceived ); }
+		break;
 	case 16:
 		if (HX_FIELD_EQ(inName,"moderateServerId") ) { return ::hx::Val( moderateServerId ); }
 	}
@@ -83,12 +89,15 @@ void ModerationAction_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"chatId") ) { chatId=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"reason") ) { reason=inValue.Cast< ::String >(); return inValue; }
 		break;
-	case 9:
-		if (HX_FIELD_EQ(inName,"timestamp") ) { timestamp=inValue.Cast< ::String >(); return inValue; }
+	case 8:
+		if (HX_FIELD_EQ(inName,"timeSent") ) { timeSent=inValue.Cast< ::String >(); return inValue; }
 		break;
 	case 11:
 		if (HX_FIELD_EQ(inName,"moderatorId") ) { moderatorId=inValue.Cast< ::String >(); return inValue; }
 		break;
+	case 12:
+		if (HX_FIELD_EQ(inName,"timeReceived") ) { timeReceived=inValue.Cast< ::String >(); return inValue; }
+		break;
 	case 16:
 		if (HX_FIELD_EQ(inName,"moderateServerId") ) { moderateServerId=inValue.Cast< ::String >(); return inValue; }
 	}
@@ -99,7 +108,8 @@ void ModerationAction_obj::__GetFields(Array< ::String> &outFields)
 {
 	outFields->push(HX_("chatId",d3,04,77,b7));
 	outFields->push(HX_("moderateServerId",61,cc,27,2c));
-	outFields->push(HX_("timestamp",d6,d4,ce,a5));
+	outFields->push(HX_("timeSent",05,10,b2,ec));
+	outFields->push(HX_("timeReceived",4e,22,9a,7b));
 	outFields->push(HX_("moderatorId",40,4b,8f,97));
 	outFields->push(HX_("reason",c4,0f,9d,fc));
 	super::__GetFields(outFields);
@@ -109,7 +119,8 @@ void ModerationAction_obj::__GetFields(Array< ::String> &outFields)
 static ::hx::StorageInfo ModerationAction_obj_sMemberStorageInfo[] = {
 	{::hx::fsString,(int)offsetof(ModerationAction_obj,chatId),HX_("chatId",d3,04,77,b7)},
 	{::hx::fsString,(int)offsetof(ModerationAction_obj,moderateServerId),HX_("moderateServerId",61,cc,27,2c)},
-	{::hx::fsString,(int)offsetof(ModerationAction_obj,timestamp),HX_("timestamp",d6,d4,ce,a5)},
+	{::hx::fsString,(int)offsetof(ModerationAction_obj,timeSent),HX_("timeSent",05,10,b2,ec)},
+	{::hx::fsString,(int)offsetof(ModerationAction_obj,timeReceived),HX_("timeReceived",4e,22,9a,7b)},
 	{::hx::fsString,(int)offsetof(ModerationAction_obj,moderatorId),HX_("moderatorId",40,4b,8f,97)},
 	{::hx::fsString,(int)offsetof(ModerationAction_obj,reason),HX_("reason",c4,0f,9d,fc)},
 	{ ::hx::fsUnknown, 0, null()}
@@ -120,7 +131,8 @@ static ::hx::StaticInfo *ModerationAction_obj_sStaticStorageInfo = 0;
 static ::String ModerationAction_obj_sMemberFields[] = {
 	HX_("chatId",d3,04,77,b7),
 	HX_("moderateServerId",61,cc,27,2c),
-	HX_("timestamp",d6,d4,ce,a5),
+	HX_("timeSent",05,10,b2,ec),
+	HX_("timeReceived",4e,22,9a,7b),
 	HX_("moderatorId",40,4b,8f,97),
 	HX_("reason",c4,0f,9d,fc),
 	::String(null()) };
diff --git a/Sources/c_borogove/src/borogove/MucSettingsCommand.cpp b/Sources/c_borogove/src/borogove/MucSettingsCommand.cpp
new file mode 100644
index 0000000..96c0ad7
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/MucSettingsCommand.cpp
@@ -0,0 +1,189 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_borogove_Client
+#include <borogove/Client.h>
+#endif
+#ifndef INCLUDED_borogove_Command
+#include <borogove/Command.h>
+#endif
+#ifndef INCLUDED_borogove_CommandSession
+#include <borogove/CommandSession.h>
+#endif
+#ifndef INCLUDED_borogove_EventEmitter
+#include <borogove/EventEmitter.h>
+#endif
+#ifndef INCLUDED_borogove_Form
+#include <borogove/Form.h>
+#endif
+#ifndef INCLUDED_borogove_FormOption
+#include <borogove/FormOption.h>
+#endif
+#ifndef INCLUDED_borogove_FormSection
+#include <borogove/FormSection.h>
+#endif
+#ifndef INCLUDED_borogove_JID
+#include <borogove/JID.h>
+#endif
+#ifndef INCLUDED_borogove_MucSettingsCommand
+#include <borogove/MucSettingsCommand.h>
+#endif
+#ifndef INCLUDED_borogove_MucSettingsCommandSession
+#include <borogove/MucSettingsCommandSession.h>
+#endif
+#ifndef INCLUDED_borogove_Stanza
+#include <borogove/Stanza.h>
+#endif
+#ifndef INCLUDED_borogove_queries_GenericQuery
+#include <borogove/queries/GenericQuery.h>
+#endif
+#ifndef INCLUDED_borogove_queries_MucSettingsGet
+#include <borogove/queries/MucSettingsGet.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
+#ifndef INCLUDED_thenshim_Thenable
+#include <thenshim/Thenable.h>
+#endif
+#ifndef INCLUDED_thenshim__Promise_Promise_Impl_
+#include <thenshim/_Promise/Promise_Impl_.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_1d28ece359055a4e_17_new,"borogove.MucSettingsCommand","new",0x91ecc42c,"borogove.MucSettingsCommand.new","borogove/MucSettingsCommand.hx",17,0xf24e2f23)
+HX_LOCAL_STACK_FRAME(_hx_pos_1d28ece359055a4e_23_execute,"borogove.MucSettingsCommand","execute",0xde59d401,"borogove.MucSettingsCommand.execute","borogove/MucSettingsCommand.hx",23,0xf24e2f23)
+HX_LOCAL_STACK_FRAME(_hx_pos_1d28ece359055a4e_21_execute,"borogove.MucSettingsCommand","execute",0xde59d401,"borogove.MucSettingsCommand.execute","borogove/MucSettingsCommand.hx",21,0xf24e2f23)
+HX_LOCAL_STACK_FRAME(_hx_pos_1d28ece359055a4e_20_execute,"borogove.MucSettingsCommand","execute",0xde59d401,"borogove.MucSettingsCommand.execute","borogove/MucSettingsCommand.hx",20,0xf24e2f23)
+namespace borogove{
+
+void MucSettingsCommand_obj::__construct( ::borogove::Client client, ::borogove::JID jid){
+            	HX_STACKFRAME(&_hx_pos_1d28ece359055a4e_17_new)
+HXDLIN(  17)		super::__construct(client, ::Dynamic(::hx::Anon_obj::Create(3)
+            			->setFixed(0,HX_("jid",c5,ca,50,00),jid)
+            			->setFixed(1,HX_("name",4b,72,ff,48),HX_("Settings",03,39,ef,64))
+            			->setFixed(2,HX_("node",02,0a,0a,49),HX_("muc-settings",b5,fe,a1,e0))));
+            	}
+
+Dynamic MucSettingsCommand_obj::__CreateEmpty() { return new MucSettingsCommand_obj; }
+
+void *MucSettingsCommand_obj::_hx_vtable = 0;
+
+Dynamic MucSettingsCommand_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< MucSettingsCommand_obj > _hx_result = new MucSettingsCommand_obj();
+	_hx_result->__construct(inArgs[0],inArgs[1]);
+	return _hx_result;
+}
+
+bool MucSettingsCommand_obj::_hx_isInstanceOf(int inClassId) {
+	if (inClassId<=(int)0x108c2af6) {
+		return inClassId==(int)0x00000001 || inClassId==(int)0x108c2af6;
+	} else {
+		return inClassId==(int)0x753f386a;
+	}
+}
+
+::Dynamic MucSettingsCommand_obj::execute(){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::MucSettingsCommand,_gthis) HXARGC(2)
+            		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
+            			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_0, ::borogove::MucSettingsCommand,_gthis, ::borogove::queries::MucSettingsGet,q, ::Dynamic,resolve, ::Dynamic,reject) HXARGC(0)
+            			void _hx_run(){
+            				HX_GC_STACKFRAME(&_hx_pos_1d28ece359055a4e_23_execute)
+HXLINE(  24)				if (::hx::IsNotNull( q->error )) {
+HXLINE(  25)					 ::borogove::Stanza formish =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("result",dd,68,84,08))
+            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->textTag(HX_("instructions",a5,96,3f,6d),q->error, ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("error",c8,cb,29,73))),null());
+HXLINE(  26)					 ::Dynamic resolve1 = resolve;
+HXDLIN(  26)					resolve1( ::borogove::MucSettingsCommandSession_obj::__alloc( HX_CTX ,HX_("error",c8,cb,29,73),null(),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::Form_obj::__alloc( HX_CTX ,formish,null())),_gthis));
+HXLINE(  27)					return;
+            				}
+HXLINE(  30)				 ::borogove::Stanza form = q->getResult();
+HXLINE(  31)				if (::hx::IsNull( form )) {
+HXLINE(  32)					reject(HX_("Failed to get settings form",d5,cb,a2,00));
+HXLINE(  33)					return;
+            				}
+HXLINE(  36)				 ::Dynamic resolve2 = resolve;
+HXDLIN(  36)				::Array< ::Dynamic> _hx_tmp = ::Array_obj< ::Dynamic>::__new(2)->init(0, ::borogove::FormOption_obj::__alloc( HX_CTX ,HX_("Submit",38,cc,9a,ce),HX_("execute",35,0a,0d,cc)))->init(1, ::borogove::FormOption_obj::__alloc( HX_CTX ,HX_("Cancel",9a,61,c8,ec),HX_("cancel",7a,ed,33,b8)));
+HXDLIN(  36)				resolve2( ::borogove::MucSettingsCommandSession_obj::__alloc( HX_CTX ,HX_("executing",b2,2a,0f,b1),null(),_hx_tmp,::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::Form_obj::__alloc( HX_CTX ,form,null())),_gthis));
+            			}
+            			HX_END_LOCAL_FUNC0((void))
+
+            			HX_GC_STACKFRAME(&_hx_pos_1d28ece359055a4e_21_execute)
+HXLINE(  22)			 ::borogove::queries::MucSettingsGet q =  ::borogove::queries::MucSettingsGet_obj::__alloc( HX_CTX ,_gthis->jid->asString());
+HXLINE(  23)			q->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,q,resolve,reject)));
+HXLINE(  38)			_gthis->client->sendQuery(q);
+            		}
+            		HX_END_LOCAL_FUNC2((void))
+
+            	HX_STACKFRAME(&_hx_pos_1d28ece359055a4e_20_execute)
+HXDLIN(  20)		 ::borogove::MucSettingsCommand _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  21)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis)));
+            	}
+
+
+
+::hx::ObjectPtr< MucSettingsCommand_obj > MucSettingsCommand_obj::__new( ::borogove::Client client, ::borogove::JID jid) {
+	::hx::ObjectPtr< MucSettingsCommand_obj > __this = new MucSettingsCommand_obj();
+	__this->__construct(client,jid);
+	return __this;
+}
+
+::hx::ObjectPtr< MucSettingsCommand_obj > MucSettingsCommand_obj::__alloc(::hx::Ctx *_hx_ctx, ::borogove::Client client, ::borogove::JID jid) {
+	MucSettingsCommand_obj *__this = (MucSettingsCommand_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(MucSettingsCommand_obj), true, "borogove.MucSettingsCommand"));
+	*(void **)__this = MucSettingsCommand_obj::_hx_vtable;
+	__this->__construct(client,jid);
+	return __this;
+}
+
+MucSettingsCommand_obj::MucSettingsCommand_obj()
+{
+}
+
+::hx::Val MucSettingsCommand_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"execute") ) { return ::hx::Val( execute_dyn() ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *MucSettingsCommand_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *MucSettingsCommand_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String MucSettingsCommand_obj_sMemberFields[] = {
+	HX_("execute",35,0a,0d,cc),
+	::String(null()) };
+
+::hx::Class MucSettingsCommand_obj::__mClass;
+
+void MucSettingsCommand_obj::__register()
+{
+	MucSettingsCommand_obj _hx_dummy;
+	MucSettingsCommand_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.MucSettingsCommand",3a,7e,dc,f2);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(MucSettingsCommand_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< MucSettingsCommand_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = MucSettingsCommand_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = MucSettingsCommand_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/MucSettingsCommandSession.cpp b/Sources/c_borogove/src/borogove/MucSettingsCommandSession.cpp
new file mode 100644
index 0000000..230feaf
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/MucSettingsCommandSession.cpp
@@ -0,0 +1,200 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_borogove_Client
+#include <borogove/Client.h>
+#endif
+#ifndef INCLUDED_borogove_Command
+#include <borogove/Command.h>
+#endif
+#ifndef INCLUDED_borogove_CommandSession
+#include <borogove/CommandSession.h>
+#endif
+#ifndef INCLUDED_borogove_EventEmitter
+#include <borogove/EventEmitter.h>
+#endif
+#ifndef INCLUDED_borogove_Form
+#include <borogove/Form.h>
+#endif
+#ifndef INCLUDED_borogove_FormOption
+#include <borogove/FormOption.h>
+#endif
+#ifndef INCLUDED_borogove_FormSection
+#include <borogove/FormSection.h>
+#endif
+#ifndef INCLUDED_borogove_FormSubmitBuilder
+#include <borogove/FormSubmitBuilder.h>
+#endif
+#ifndef INCLUDED_borogove_JID
+#include <borogove/JID.h>
+#endif
+#ifndef INCLUDED_borogove_MucSettingsCommandSession
+#include <borogove/MucSettingsCommandSession.h>
+#endif
+#ifndef INCLUDED_borogove_Stanza
+#include <borogove/Stanza.h>
+#endif
+#ifndef INCLUDED_borogove_queries_GenericQuery
+#include <borogove/queries/GenericQuery.h>
+#endif
+#ifndef INCLUDED_borogove_queries_MucSettingsSubmit
+#include <borogove/queries/MucSettingsSubmit.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
+#ifndef INCLUDED_thenshim_Thenable
+#include <thenshim/Thenable.h>
+#endif
+#ifndef INCLUDED_thenshim__Promise_Promise_Impl_
+#include <thenshim/_Promise/Promise_Impl_.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_5f86a724038fa427_43_new,"borogove.MucSettingsCommandSession","new",0x9e4acb2e,"borogove.MucSettingsCommandSession.new","borogove/MucSettingsCommand.hx",43,0xf24e2f23)
+HX_LOCAL_STACK_FRAME(_hx_pos_5f86a724038fa427_73_execute,"borogove.MucSettingsCommandSession","execute",0x66948403,"borogove.MucSettingsCommandSession.execute","borogove/MucSettingsCommand.hx",73,0xf24e2f23)
+HX_LOCAL_STACK_FRAME(_hx_pos_5f86a724038fa427_71_execute,"borogove.MucSettingsCommandSession","execute",0x66948403,"borogove.MucSettingsCommandSession.execute","borogove/MucSettingsCommand.hx",71,0xf24e2f23)
+HX_LOCAL_STACK_FRAME(_hx_pos_5f86a724038fa427_63_execute,"borogove.MucSettingsCommandSession","execute",0x66948403,"borogove.MucSettingsCommandSession.execute","borogove/MucSettingsCommand.hx",63,0xf24e2f23)
+namespace borogove{
+
+void MucSettingsCommandSession_obj::__construct(::String status,::String sessionid,::Array< ::Dynamic> actions,::Array< ::Dynamic> forms, ::borogove::Command command){
+            	HX_STACKFRAME(&_hx_pos_5f86a724038fa427_43_new)
+HXDLIN(  43)		super::__construct(status,sessionid,actions,forms,command);
+            	}
+
+Dynamic MucSettingsCommandSession_obj::__CreateEmpty() { return new MucSettingsCommandSession_obj; }
+
+void *MucSettingsCommandSession_obj::_hx_vtable = 0;
+
+Dynamic MucSettingsCommandSession_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< MucSettingsCommandSession_obj > _hx_result = new MucSettingsCommandSession_obj();
+	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2],inArgs[3],inArgs[4]);
+	return _hx_result;
+}
+
+bool MucSettingsCommandSession_obj::_hx_isInstanceOf(int inClassId) {
+	if (inClassId<=(int)0x5964480c) {
+		return inClassId==(int)0x00000001 || inClassId==(int)0x5964480c;
+	} else {
+		return inClassId==(int)0x5a25f9e4;
+	}
+}
+
+::Dynamic MucSettingsCommandSession_obj::execute(::String action, ::borogove::FormSubmitBuilder data,::hx::Null< int >  __o_formIdx){
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::MucSettingsCommandSession,_gthis, ::borogove::Stanza,toSubmit) HXARGC(2)
+            		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
+            			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_0, ::borogove::MucSettingsCommandSession,_gthis, ::Dynamic,resolve, ::Dynamic,reject, ::borogove::queries::MucSettingsSubmit,q1) HXARGC(0)
+            			void _hx_run(){
+            				HX_GC_STACKFRAME(&_hx_pos_5f86a724038fa427_73_execute)
+HXLINE(  74)				if (::hx::IsNotNull( q1->error )) {
+HXLINE(  75)					 ::borogove::Stanza formish =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("result",dd,68,84,08))
+            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->textTag(HX_("instructions",a5,96,3f,6d),q1->error, ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("error",c8,cb,29,73))),null());
+HXLINE(  76)					 ::Dynamic resolve1 = resolve;
+HXDLIN(  76)					resolve1( ::borogove::MucSettingsCommandSession_obj::__alloc( HX_CTX ,HX_("error",c8,cb,29,73),null(),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::Form_obj::__alloc( HX_CTX ,formish,null())),_gthis->command));
+HXLINE(  77)					return;
+            				}
+HXLINE(  80)				if (!(q1->getResult())) {
+HXLINE(  81)					reject(HX_("Failed to submit settings",a9,fd,52,dc));
+HXLINE(  82)					return;
+            				}
+HXLINE(  85)				 ::Dynamic resolve2 = resolve;
+HXDLIN(  85)				resolve2( ::borogove::MucSettingsCommandSession_obj::__alloc( HX_CTX ,HX_("completed",8b,a1,38,4f),null(),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::Dynamic>::__new(0),_gthis->command));
+            			}
+            			HX_END_LOCAL_FUNC0((void))
+
+            			HX_GC_STACKFRAME(&_hx_pos_5f86a724038fa427_71_execute)
+HXLINE(  72)			::String q = _gthis->command->jid->asString();
+HXDLIN(  72)			 ::borogove::queries::MucSettingsSubmit q1 =  ::borogove::queries::MucSettingsSubmit_obj::__alloc( HX_CTX ,q,toSubmit);
+HXLINE(  73)			q1->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,resolve,reject,q1)));
+HXLINE(  87)			_gthis->command->client->sendQuery(q1);
+            		}
+            		HX_END_LOCAL_FUNC2((void))
+
+            		int formIdx = __o_formIdx.Default(0);
+            	HX_GC_STACKFRAME(&_hx_pos_5f86a724038fa427_63_execute)
+HXDLIN(  63)		 ::borogove::MucSettingsCommandSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  64)		bool _hx_tmp;
+HXDLIN(  64)		if ((action != HX_("cancel",7a,ed,33,b8))) {
+HXLINE(  64)			_hx_tmp = (action == HX_("prev",f3,be,5e,4a));
+            		}
+            		else {
+HXLINE(  64)			_hx_tmp = true;
+            		}
+HXDLIN(  64)		if (_hx_tmp) {
+HXLINE(  65)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(( ( ::borogove::CommandSession)( ::borogove::MucSettingsCommandSession_obj::__alloc( HX_CTX ,HX_("canceled",59,18,26,1f),null(),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::Dynamic>::__new(0),this->command)) ));
+            		}
+HXLINE(  68)		 ::borogove::Stanza toSubmit = this->forms->__get(formIdx).StaticCast<  ::borogove::Form >()->submit(data);
+HXLINE(  69)		if (::hx::IsNull( toSubmit )) {
+HXLINE(  69)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("Invalid submission",75,fd,11,31));
+            		}
+HXLINE(  71)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,toSubmit)));
+            	}
+
+
+
+::hx::ObjectPtr< MucSettingsCommandSession_obj > MucSettingsCommandSession_obj::__new(::String status,::String sessionid,::Array< ::Dynamic> actions,::Array< ::Dynamic> forms, ::borogove::Command command) {
+	::hx::ObjectPtr< MucSettingsCommandSession_obj > __this = new MucSettingsCommandSession_obj();
+	__this->__construct(status,sessionid,actions,forms,command);
+	return __this;
+}
+
+::hx::ObjectPtr< MucSettingsCommandSession_obj > MucSettingsCommandSession_obj::__alloc(::hx::Ctx *_hx_ctx,::String status,::String sessionid,::Array< ::Dynamic> actions,::Array< ::Dynamic> forms, ::borogove::Command command) {
+	MucSettingsCommandSession_obj *__this = (MucSettingsCommandSession_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(MucSettingsCommandSession_obj), true, "borogove.MucSettingsCommandSession"));
+	*(void **)__this = MucSettingsCommandSession_obj::_hx_vtable;
+	__this->__construct(status,sessionid,actions,forms,command);
+	return __this;
+}
+
+MucSettingsCommandSession_obj::MucSettingsCommandSession_obj()
+{
+}
+
+::hx::Val MucSettingsCommandSession_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"execute") ) { return ::hx::Val( execute_dyn() ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *MucSettingsCommandSession_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *MucSettingsCommandSession_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String MucSettingsCommandSession_obj_sMemberFields[] = {
+	HX_("execute",35,0a,0d,cc),
+	::String(null()) };
+
+::hx::Class MucSettingsCommandSession_obj::__mClass;
+
+void MucSettingsCommandSession_obj::__register()
+{
+	MucSettingsCommandSession_obj _hx_dummy;
+	MucSettingsCommandSession_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.MucSettingsCommandSession",3c,5c,26,8b);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(MucSettingsCommandSession_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< MucSettingsCommandSession_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = MucSettingsCommandSession_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = MucSettingsCommandSession_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/Notification.cpp b/Sources/c_borogove/src/borogove/Notification.cpp
index c1a6437..dab2fc2 100644
--- a/Sources/c_borogove/src/borogove/Notification.cpp
+++ b/Sources/c_borogove/src/borogove/Notification.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_borogove_ChatAttachment
 #include <borogove/ChatAttachment.h>
 #endif
@@ -22,9 +19,21 @@
 #ifndef INCLUDED_borogove_Notification
 #include <borogove/Notification.h>
 #endif
+#ifndef INCLUDED_borogove_Reaction
+#include <borogove/Reaction.h>
+#endif
+#ifndef INCLUDED_borogove_ReactionUpdate
+#include <borogove/ReactionUpdate.h>
+#endif
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_44a57d84c61de0e9_67_new,"borogove.Notification","new",0x9a361d6a,"borogove.Notification.new","borogove/Notification.hx",67,0x6f7c2665)
 HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_478_title__fromC,"borogove.Notification","title__fromC",0xca367f97,"borogove.Notification.title__fromC","HaxeCBridge.hx",478,0xa18550d8)
@@ -40,7 +49,9 @@ HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_478_imageUri__fromC,"borogove.Noti
 HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_478_lang__fromC,"borogove.Notification","lang__fromC",0x77e58b55,"borogove.Notification.lang__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_478_timestamp__fromC,"borogove.Notification","timestamp__fromC",0xf5425719,"borogove.Notification.timestamp__fromC","HaxeCBridge.hx",478,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_44a57d84c61de0e9_83_fromChatMessage,"borogove.Notification","fromChatMessage",0xe6bd348f,"borogove.Notification.fromChatMessage","borogove/Notification.hx",83,0x6f7c2665)
-HX_LOCAL_STACK_FRAME(_hx_pos_44a57d84c61de0e9_109_fromThinStanza,"borogove.Notification","fromThinStanza",0x4d440e6e,"borogove.Notification.fromThinStanza","borogove/Notification.hx",109,0x6f7c2665)
+HX_LOCAL_STACK_FRAME(_hx_pos_44a57d84c61de0e9_107_fromReactionUpdate,"borogove.Notification","fromReactionUpdate",0x377e93d2,"borogove.Notification.fromReactionUpdate","borogove/Notification.hx",107,0x6f7c2665)
+HX_LOCAL_STACK_FRAME(_hx_pos_44a57d84c61de0e9_109_fromReactionUpdate,"borogove.Notification","fromReactionUpdate",0x377e93d2,"borogove.Notification.fromReactionUpdate","borogove/Notification.hx",109,0x6f7c2665)
+HX_LOCAL_STACK_FRAME(_hx_pos_44a57d84c61de0e9_127_fromThinStanza,"borogove.Notification","fromThinStanza",0x4d440e6e,"borogove.Notification.fromThinStanza","borogove/Notification.hx",127,0x6f7c2665)
 HX_LOCAL_STACK_FRAME(_hx_pos_44a57d84c61de0e9_16_boot,"borogove.Notification","boot",0x4d3c9fe8,"borogove.Notification.boot","borogove/Notification.hx",16,0x6f7c2665)
 namespace borogove{
 
@@ -193,18 +204,74 @@ HXLINE(  95)		::String m2 = m->serverId;
 HXLINE(  96)		int m3 = m->type;
 HXLINE(  97)		::String _hx_tmp4 = m->callStatus();
 HXLINE(  98)		::String _hx_tmp5 = m->callSid();
-HXLINE(  89)		return  ::borogove::Notification_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,_hx_tmp2,_hx_tmp3,m1,m2,m3,_hx_tmp4,_hx_tmp5,imageUri,m->lang,m->timestamp);
+HXLINE(  89)		return  ::borogove::Notification_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,_hx_tmp2,_hx_tmp3,m1,m2,m3,_hx_tmp4,_hx_tmp5,imageUri,m->lang,m->timeSent);
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Notification_obj,fromChatMessage,return )
 
+ ::borogove::Notification Notification_obj::fromReactionUpdate( ::borogove::ReactionUpdate m, ::borogove::Stanza stanza){
+            	HX_GC_STACKFRAME(&_hx_pos_44a57d84c61de0e9_107_fromReactionUpdate)
+HXLINE( 109)		::Array< ::Dynamic> _this = m->reactions;
+HXDLIN( 109)		::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 109)		{
+HXLINE( 109)			int _g = 0;
+HXDLIN( 109)			int _g1 = _this->length;
+HXDLIN( 109)			while((_g < _g1)){
+HXLINE( 109)				_g = (_g + 1);
+HXDLIN( 109)				int i = (_g - 1);
+HXDLIN( 109)				{
+            					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            					::String _hx_run(::String s){
+            						HX_STACKFRAME(&_hx_pos_44a57d84c61de0e9_109_fromReactionUpdate)
+HXLINE( 109)						return s;
+            					}
+            					HX_END_LOCAL_FUNC1(return)
+
+            					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(2)
+            					::String _hx_run(::String name,::String uri){
+            						HX_STACKFRAME(&_hx_pos_44a57d84c61de0e9_109_fromReactionUpdate)
+HXLINE( 109)						return ((HX_(":",3a,00,00,00) + name) + HX_(":",3a,00,00,00));
+            					}
+            					HX_END_LOCAL_FUNC2(return)
+
+HXLINE( 109)					::String inValue = ( ( ::borogove::Reaction)(_hx_array_unsafe_get(_this,i)) )->render( ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1()));
+HXDLIN( 109)					result->__unsafe_set(i,inValue);
+            				}
+            			}
+            		}
+HXDLIN( 109)		::String _hx_tmp = result->join(HX_(" ",20,00,00,00));
+HXLINE( 110)		::String _hx_tmp1 = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("to",7b,65,00,00)))->asBare()->asString();
+HXLINE( 111)		::String m1 = m->chatId;
+HXLINE( 112)		::String m2 = m->senderId;
+HXLINE( 113)		::String m3 = m->serverId;
+HXLINE( 114)		int _hx_tmp2;
+HXDLIN( 114)		if (::hx::IsEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("groupchat",97,1d,c8,e5) )) {
+HXLINE( 114)			_hx_tmp2 = 2;
+            		}
+            		else {
+HXLINE( 114)			_hx_tmp2 = 0;
+            		}
+HXLINE( 107)		return  ::borogove::Notification_obj::__alloc( HX_CTX ,HX_("Reacted",7e,3d,92,cf),_hx_tmp,_hx_tmp1,m1,m2,m3,_hx_tmp2,null(),null(),null(),null(),m->timestamp);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(Notification_obj,fromReactionUpdate,return )
+
  ::borogove::Notification Notification_obj::fromThinStanza( ::borogove::Stanza stanza){
-            	HX_GC_STACKFRAME(&_hx_pos_44a57d84c61de0e9_109_fromThinStanza)
-HXLINE( 112)		::String _hx_tmp = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) ))->asBare()->asString();
-HXLINE( 113)		::String _hx_tmp1 = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->asBare()->asString();
-HXLINE( 114)		::String _hx_tmp2 = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->asString();
-HXLINE( 109)		return  ::borogove::Notification_obj::__alloc( HX_CTX ,HX_("New Message",c7,69,0e,bd),HX_("",00,00,00,00),_hx_tmp,_hx_tmp1,_hx_tmp2,stanza->getChildText(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54)),0,null(),null(),null(),null(),null());
+            	HX_GC_STACKFRAME(&_hx_pos_44a57d84c61de0e9_127_fromThinStanza)
+HXLINE( 130)		::String _hx_tmp = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("to",7b,65,00,00)))->asBare()->asString();
+HXLINE( 131)		::String _hx_tmp1 = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)))->asBare()->asString();
+HXLINE( 132)		::String _hx_tmp2 = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)))->asString();
+HXLINE( 133)		::String _hx_tmp3 = stanza->getChildText(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+HXLINE( 134)		int _hx_tmp4;
+HXDLIN( 134)		if (::hx::IsEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("groupchat",97,1d,c8,e5) )) {
+HXLINE( 134)			_hx_tmp4 = 2;
+            		}
+            		else {
+HXLINE( 134)			_hx_tmp4 = 0;
+            		}
+HXLINE( 127)		return  ::borogove::Notification_obj::__alloc( HX_CTX ,HX_("New Message",c7,69,0e,bd),HX_("",00,00,00,00),_hx_tmp,_hx_tmp1,_hx_tmp2,_hx_tmp3,_hx_tmp4,null(),null(),null(),null(),null());
             	}
 
 
@@ -315,6 +382,9 @@ bool Notification_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::
 		break;
 	case 15:
 		if (HX_FIELD_EQ(inName,"fromChatMessage") ) { outValue = fromChatMessage_dyn(); return true; }
+		break;
+	case 18:
+		if (HX_FIELD_EQ(inName,"fromReactionUpdate") ) { outValue = fromReactionUpdate_dyn(); return true; }
 	}
 	return false;
 }
@@ -418,6 +488,7 @@ static ::String Notification_obj_sMemberFields[] = {
 
 static ::String Notification_obj_sStaticFields[] = {
 	HX_("fromChatMessage",85,80,96,62),
+	HX_("fromReactionUpdate",9c,a5,e0,1e),
 	HX_("fromThinStanza",38,f3,72,5a),
 	::String(null())
 };
diff --git a/Sources/c_borogove/src/borogove/Participant.cpp b/Sources/c_borogove/src/borogove/Participant.cpp
deleted file mode 100644
index a0151ff..0000000
--- a/Sources/c_borogove/src/borogove/Participant.cpp
+++ /dev/null
@@ -1,596 +0,0 @@
-// Generated by Haxe 4.3.3
-#include <hxcpp.h>
-
-#ifndef INCLUDED__HaxeCBridge_Internal
-#include <_HaxeCBridge/Internal.h>
-#endif
-#ifndef INCLUDED_borogove_AvailableChat
-#include <borogove/AvailableChat.h>
-#endif
-#ifndef INCLUDED_borogove_Client
-#include <borogove/Client.h>
-#endif
-#ifndef INCLUDED_borogove_EventEmitter
-#include <borogove/EventEmitter.h>
-#endif
-#ifndef INCLUDED_borogove_JID
-#include <borogove/JID.h>
-#endif
-#ifndef INCLUDED_borogove_Participant
-#include <borogove/Participant.h>
-#endif
-#ifndef INCLUDED_borogove_Profile
-#include <borogove/Profile.h>
-#endif
-#ifndef INCLUDED_borogove_ProfileItem
-#include <borogove/ProfileItem.h>
-#endif
-#ifndef INCLUDED_borogove_Role
-#include <borogove/Role.h>
-#endif
-#ifndef INCLUDED_borogove_Stanza
-#include <borogove/Stanza.h>
-#endif
-#ifndef INCLUDED_borogove_Status
-#include <borogove/Status.h>
-#endif
-#ifndef INCLUDED_borogove_queries_GenericQuery
-#include <borogove/queries/GenericQuery.h>
-#endif
-#ifndef INCLUDED_borogove_queries_PubsubGet
-#include <borogove/queries/PubsubGet.h>
-#endif
-#ifndef INCLUDED_cpp_Int64Map
-#include <cpp/Int64Map.h>
-#endif
-#ifndef INCLUDED_haxe_IMap
-#include <haxe/IMap.h>
-#endif
-#ifndef INCLUDED_thenshim_Thenable
-#include <thenshim/Thenable.h>
-#endif
-#ifndef INCLUDED_thenshim__Promise_Promise_Impl_
-#include <thenshim/_Promise/Promise_Impl_.h>
-#endif
-
-HX_DEFINE_STACK_FRAME(_hx_pos_74a0113f4a5624a8_53_new,"borogove.Participant","new",0x618fcab8,"borogove.Participant.new","borogove/Participant.hx",53,0xf8259379)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_478_displayName__fromC,"borogove.Participant","displayName__fromC",0xdcc10714,"borogove.Participant.displayName__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_478_photoUri__fromC,"borogove.Participant","photoUri__fromC",0x9f724837,"borogove.Participant.photoUri__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_478_placeholderUri__fromC,"borogove.Participant","placeholderUri__fromC",0x53e4a038,"borogove.Participant.placeholderUri__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_478_isSelf__fromC,"borogove.Participant","isSelf__fromC",0xdd7b56fb,"borogove.Participant.isSelf__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_478_chat__fromC,"borogove.Participant","chat__fromC",0x15472ef9,"borogove.Participant.chat__fromC","HaxeCBridge.hx",478,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_452_roles__fromC,"borogove.Participant","roles__fromC",0x94fc0084,"borogove.Participant.roles__fromC","HaxeCBridge.hx",452,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74a0113f4a5624a8_72_profile,"borogove.Participant","profile",0xe64d4f81,"borogove.Participant.profile","borogove/Participant.hx",72,0xf8259379)
-HX_LOCAL_STACK_FRAME(_hx_pos_74a0113f4a5624a8_70_profile,"borogove.Participant","profile",0xe64d4f81,"borogove.Participant.profile","borogove/Participant.hx",70,0xf8259379)
-HX_LOCAL_STACK_FRAME(_hx_pos_74a0113f4a5624a8_69_profile,"borogove.Participant","profile",0xe64d4f81,"borogove.Participant.profile","borogove/Participant.hx",69,0xf8259379)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_365_profile__fromC,"borogove.Participant","profile__fromC",0x01e28318,"borogove.Participant.profile__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74a0113f4a5624a8_94_status,"borogove.Participant","status",0x5522f3da,"borogove.Participant.status","borogove/Participant.hx",94,0xf8259379)
-HX_LOCAL_STACK_FRAME(_hx_pos_74a0113f4a5624a8_92_status,"borogove.Participant","status",0x5522f3da,"borogove.Participant.status","borogove/Participant.hx",92,0xf8259379)
-HX_LOCAL_STACK_FRAME(_hx_pos_74a0113f4a5624a8_91_status,"borogove.Participant","status",0x5522f3da,"borogove.Participant.status","borogove/Participant.hx",91,0xf8259379)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_365_status__fromC,"borogove.Participant","status__fromC",0x7b530bdf,"borogove.Participant.status__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74a0113f4a5624a8_19_boot,"borogove.Participant","boot",0xf45a96da,"borogove.Participant.boot","borogove/Participant.hx",19,0xf8259379)
-namespace borogove{
-
-void Participant_obj::__construct(::String displayName,::String photoUri,::String placeholderUri,bool isSelf,::Array< ::Dynamic> roles, ::borogove::JID jid, ::borogove::AvailableChat chat){
-            	HX_STACKFRAME(&_hx_pos_74a0113f4a5624a8_53_new)
-HXLINE(  54)		this->displayName = displayName;
-HXLINE(  55)		this->photoUri = photoUri;
-HXLINE(  56)		this->placeholderUri = placeholderUri;
-HXLINE(  57)		this->isSelf = isSelf;
-HXLINE(  58)		this->roles = roles;
-HXLINE(  59)		this->chat = chat;
-HXLINE(  60)		this->jid = jid;
-            	}
-
-Dynamic Participant_obj::__CreateEmpty() { return new Participant_obj; }
-
-void *Participant_obj::_hx_vtable = 0;
-
-Dynamic Participant_obj::__Create(::hx::DynamicArray inArgs)
-{
-	::hx::ObjectPtr< Participant_obj > _hx_result = new Participant_obj();
-	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2],inArgs[3],inArgs[4],inArgs[5],inArgs[6]);
-	return _hx_result;
-}
-
-bool Participant_obj::_hx_isInstanceOf(int inClassId) {
-	return inClassId==(int)0x00000001 || inClassId==(int)0x09ded66e;
-}
-
-::String Participant_obj::displayName__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_478_displayName__fromC)
-HXDLIN( 478)		return this->displayName;
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC0(Participant_obj,displayName__fromC,return )
-
-::String Participant_obj::photoUri__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_478_photoUri__fromC)
-HXDLIN( 478)		return this->photoUri;
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC0(Participant_obj,photoUri__fromC,return )
-
-::String Participant_obj::placeholderUri__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_478_placeholderUri__fromC)
-HXDLIN( 478)		return this->placeholderUri;
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC0(Participant_obj,placeholderUri__fromC,return )
-
-bool Participant_obj::isSelf__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_478_isSelf__fromC)
-HXDLIN( 478)		return this->isSelf;
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC0(Participant_obj,isSelf__fromC,return )
-
- ::borogove::AvailableChat Participant_obj::chat__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_478_chat__fromC)
-HXDLIN( 478)		return this->chat;
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC0(Participant_obj,chat__fromC,return )
-
-size_t Participant_obj::roles__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_452_roles__fromC)
-HXDLIN( 452)		::Array< ::Dynamic> x = this->roles;
-HXDLIN( 452)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 452)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 452)			::Array< ::Dynamic> x1 = x;
-HXDLIN( 452)			{
-HXDLIN( 452)				int _g = 0;
-HXDLIN( 452)				while((_g < x1->length)){
-HXDLIN( 452)					 ::borogove::Role el = x1->__get(_g).StaticCast<  ::borogove::Role >();
-HXDLIN( 452)					_g = (_g + 1);
-HXDLIN( 452)					{
-HXDLIN( 452)						 ::Dynamic haxeObject = el;
-HXDLIN( 452)						void* ptr = haxeObject.mPtr;
-HXDLIN( 452)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 452)						{
-HXDLIN( 452)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 452)							if (::hx::IsNull( store )) {
-HXDLIN( 452)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
-            									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
-            									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 452)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
-            							}
-            							else {
-HXDLIN( 452)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
-            							}
-            						}
-            					}
-            				}
-            			}
-HXDLIN( 452)			void** ptr1 = (void**)x1->getBase();
-HXDLIN( 452)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 452)			{
-HXDLIN( 452)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 452)				if (::hx::IsNull( store1 )) {
-HXDLIN( 452)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
-            						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
-            						->setFixed(1,HX_("value",71,7f,b8,31),x1));
-HXDLIN( 452)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
-            				}
-            				else {
-HXDLIN( 452)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
-            				}
-            			}
-HXDLIN( 452)			_hx_tmp->set_ref(ptr1);
-            		}
-HXDLIN( 452)		return ( (size_t)(x->length) );
-            	}
-
-
-::Dynamic Participant_obj::profile( ::borogove::Client client){
-            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Participant,_gthis, ::borogove::Client,client) HXARGC(2)
-            		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
-            			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::Participant,_gthis, ::Dynamic,resolve, ::borogove::queries::PubsubGet,get) HXARGC(0)
-            			void _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_74a0113f4a5624a8_72_profile)
-HXLINE(  73)				 ::borogove::Stanza item = get->getResult()->__get(0).StaticCast<  ::borogove::Stanza >();
-HXLINE(  74)				 ::borogove::Stanza fromItem;
-HXDLIN(  74)				if (::hx::IsNotNull( item )) {
-HXLINE(  74)					fromItem = item->getChild(HX_("vcard",46,91,02,33),HX_("urn:ietf:params:xml:ns:vcard-4.0",6e,ca,81,21));
-            				}
-            				else {
-HXLINE(  74)					fromItem = null();
-            				}
-HXLINE(  75)				 ::borogove::Stanza vcard;
-HXDLIN(  75)				if (::hx::IsNull( fromItem )) {
-HXLINE(  75)					vcard =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("vcard",46,91,02,33), ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:vcard-4.0",6e,ca,81,21))));
-            				}
-            				else {
-HXLINE(  75)					vcard = fromItem;
-            				}
-HXLINE(  76)				if (!(vcard->hasChild(HX_("fn",48,59,00,00),null()))) {
-HXLINE(  77)					vcard->insertChild(0, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("fn",48,59,00,00),null())->textTag(HX_("text",ad,cc,f9,4c),_gthis->displayName,null()));
-            				}
-HXLINE(  79)				 ::Dynamic resolve1 = resolve;
-HXDLIN(  79)				resolve1( ::borogove::Profile_obj::__alloc( HX_CTX ,vcard,null()));
-            			}
-            			HX_END_LOCAL_FUNC0((void))
-
-            			HX_GC_STACKFRAME(&_hx_pos_74a0113f4a5624a8_70_profile)
-HXLINE(  71)			 ::borogove::queries::PubsubGet get =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,_gthis->jid->asString(),HX_("urn:xmpp:vcard4",4a,89,04,19),null());
-HXLINE(  72)			get->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,resolve,get)));
-HXLINE(  81)			client->sendQuery(get);
-            		}
-            		HX_END_LOCAL_FUNC2((void))
-
-            	HX_STACKFRAME(&_hx_pos_74a0113f4a5624a8_69_profile)
-HXDLIN(  69)		 ::borogove::Participant _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  70)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,client)));
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC1(Participant_obj,profile,return )
-
-void Participant_obj::profile__fromC( ::borogove::Client client,::cpp::Function< void  (void*,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_365_profile__fromC)
-HXDLIN( 365)		if (::hx::IsNull( handler )) {
-HXDLIN( 365)			this->profile(client);
-            		}
-            		else {
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
-            			void _hx_run( ::borogove::Profile v){
-            				HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_365_profile__fromC)
-HXDLIN( 365)				::cpp::Function< void  (void*,void*) > handler1 = handler;
-HXLINE( 334)				 ::Dynamic haxeObject = v;
-HXDLIN( 334)				void* ptr = haxeObject.mPtr;
-HXDLIN( 334)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 334)				{
-HXLINE( 334)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 334)					if (::hx::IsNull( store )) {
-HXLINE( 334)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
-            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
-            							->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 334)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
-            					}
-            					else {
-HXLINE( 334)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
-            					}
-            				}
-HXLINE( 365)				handler1(ptr,handler__context);
-            			}
-            			HX_END_LOCAL_FUNC1((void))
-
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
-            			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_365_profile__fromC)
-HXDLIN( 365)				handler(null(),handler__context);
-            			}
-            			HX_END_LOCAL_FUNC1((void))
-
-HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->profile(client), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
-            		}
-            	}
-
-
-::Dynamic Participant_obj::status( ::borogove::Client client){
-            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Participant,_gthis, ::borogove::Client,client) HXARGC(2)
-            		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,resolve, ::borogove::queries::PubsubGet,get) HXARGC(0)
-            			void _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_74a0113f4a5624a8_94_status)
-HXLINE(  95)				 ::borogove::Stanza item = get->getResult()->__get(0).StaticCast<  ::borogove::Stanza >();
-HXLINE(  97)				 ::borogove::Stanza activity;
-HXDLIN(  97)				if (::hx::IsNotNull( item )) {
-HXLINE(  97)					activity = item->getChild(HX_("activity",cf,2d,b2,e5),HX_("http://jabber.org/protocol/activity",43,2c,6e,94));
-            				}
-            				else {
-HXLINE(  97)					activity = null();
-            				}
-HXLINE(  98)				 ::Dynamic resolve1 = resolve;
-HXDLIN(  98)				::String _hx_tmp;
-HXDLIN(  98)				 ::borogove::Stanza tmp;
-HXDLIN(  98)				if (::hx::IsNotNull( activity )) {
-HXLINE(  98)					tmp = activity->getChild(HX_("undefined",90,3e,0a,9d),null());
-            				}
-            				else {
-HXLINE(  98)					tmp = null();
-            				}
-HXDLIN(  98)				::String tmp1;
-HXDLIN(  98)				if (::hx::IsNotNull( tmp )) {
-HXLINE(  98)					tmp1 = tmp->getChildText(HX_("emoji",86,6f,d9,6f),HX_("https://ns.borogove.dev/",0d,36,29,bd));
-            				}
-            				else {
-HXLINE(  98)					tmp1 = null();
-            				}
-HXDLIN(  98)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE(  98)					_hx_tmp = tmp1;
-            				}
-            				else {
-HXLINE(  98)					_hx_tmp = HX_("",00,00,00,00);
-            				}
-HXDLIN(  98)				::String tmp2;
-HXDLIN(  98)				if (::hx::IsNotNull( activity )) {
-HXLINE(  98)					tmp2 = activity->getChildText(HX_("text",ad,cc,f9,4c),null());
-            				}
-            				else {
-HXLINE(  98)					tmp2 = null();
-            				}
-HXDLIN(  98)				::String _hx_tmp1;
-HXDLIN(  98)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE(  98)					_hx_tmp1 = tmp2;
-            				}
-            				else {
-HXLINE(  98)					_hx_tmp1 = HX_("",00,00,00,00);
-            				}
-HXDLIN(  98)				resolve1( ::borogove::Status_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1));
-            			}
-            			HX_END_LOCAL_FUNC0((void))
-
-            			HX_GC_STACKFRAME(&_hx_pos_74a0113f4a5624a8_92_status)
-HXLINE(  93)			 ::borogove::queries::PubsubGet get =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,_gthis->jid->asString(),HX_("http://jabber.org/protocol/activity",43,2c,6e,94),null());
-HXLINE(  94)			get->onFinished( ::Dynamic(new _hx_Closure_0(resolve,get)));
-HXLINE( 100)			client->sendQuery(get);
-            		}
-            		HX_END_LOCAL_FUNC2((void))
-
-            	HX_STACKFRAME(&_hx_pos_74a0113f4a5624a8_91_status)
-HXDLIN(  91)		 ::borogove::Participant _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  92)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,client)));
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC1(Participant_obj,status,return )
-
-void Participant_obj::status__fromC( ::borogove::Client client,::cpp::Function< void  (void*,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_365_status__fromC)
-HXDLIN( 365)		if (::hx::IsNull( handler )) {
-HXDLIN( 365)			this->status(client);
-            		}
-            		else {
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
-            			void _hx_run( ::borogove::Status v){
-            				HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_365_status__fromC)
-HXDLIN( 365)				::cpp::Function< void  (void*,void*) > handler1 = handler;
-HXLINE( 334)				 ::Dynamic haxeObject = v;
-HXDLIN( 334)				void* ptr = haxeObject.mPtr;
-HXDLIN( 334)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 334)				{
-HXLINE( 334)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 334)					if (::hx::IsNull( store )) {
-HXLINE( 334)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
-            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
-            							->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 334)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
-            					}
-            					else {
-HXLINE( 334)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
-            					}
-            				}
-HXLINE( 365)				handler1(ptr,handler__context);
-            			}
-            			HX_END_LOCAL_FUNC1((void))
-
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
-            			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_365_status__fromC)
-HXDLIN( 365)				handler(null(),handler__context);
-            			}
-            			HX_END_LOCAL_FUNC1((void))
-
-HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->status(client), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
-            		}
-            	}
-
-
-
-::hx::ObjectPtr< Participant_obj > Participant_obj::__new(::String displayName,::String photoUri,::String placeholderUri,bool isSelf,::Array< ::Dynamic> roles, ::borogove::JID jid, ::borogove::AvailableChat chat) {
-	::hx::ObjectPtr< Participant_obj > __this = new Participant_obj();
-	__this->__construct(displayName,photoUri,placeholderUri,isSelf,roles,jid,chat);
-	return __this;
-}
-
-::hx::ObjectPtr< Participant_obj > Participant_obj::__alloc(::hx::Ctx *_hx_ctx,::String displayName,::String photoUri,::String placeholderUri,bool isSelf,::Array< ::Dynamic> roles, ::borogove::JID jid, ::borogove::AvailableChat chat) {
-	Participant_obj *__this = (Participant_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Participant_obj), true, "borogove.Participant"));
-	*(void **)__this = Participant_obj::_hx_vtable;
-	__this->__construct(displayName,photoUri,placeholderUri,isSelf,roles,jid,chat);
-	return __this;
-}
-
-Participant_obj::Participant_obj()
-{
-}
-
-void Participant_obj::__Mark(HX_MARK_PARAMS)
-{
-	HX_MARK_BEGIN_CLASS(Participant);
-	HX_MARK_MEMBER_NAME(displayName,"displayName");
-	HX_MARK_MEMBER_NAME(photoUri,"photoUri");
-	HX_MARK_MEMBER_NAME(placeholderUri,"placeholderUri");
-	HX_MARK_MEMBER_NAME(isSelf,"isSelf");
-	HX_MARK_MEMBER_NAME(chat,"chat");
-	HX_MARK_MEMBER_NAME(roles,"roles");
-	HX_MARK_MEMBER_NAME(jid,"jid");
-	HX_MARK_END_CLASS();
-}
-
-void Participant_obj::__Visit(HX_VISIT_PARAMS)
-{
-	HX_VISIT_MEMBER_NAME(displayName,"displayName");
-	HX_VISIT_MEMBER_NAME(photoUri,"photoUri");
-	HX_VISIT_MEMBER_NAME(placeholderUri,"placeholderUri");
-	HX_VISIT_MEMBER_NAME(isSelf,"isSelf");
-	HX_VISIT_MEMBER_NAME(chat,"chat");
-	HX_VISIT_MEMBER_NAME(roles,"roles");
-	HX_VISIT_MEMBER_NAME(jid,"jid");
-}
-
-::hx::Val Participant_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
-{
-	switch(inName.length) {
-	case 3:
-		if (HX_FIELD_EQ(inName,"jid") ) { return ::hx::Val( jid ); }
-		break;
-	case 4:
-		if (HX_FIELD_EQ(inName,"chat") ) { return ::hx::Val( chat ); }
-		break;
-	case 5:
-		if (HX_FIELD_EQ(inName,"roles") ) { return ::hx::Val( roles ); }
-		break;
-	case 6:
-		if (HX_FIELD_EQ(inName,"isSelf") ) { return ::hx::Val( isSelf ); }
-		if (HX_FIELD_EQ(inName,"status") ) { return ::hx::Val( status_dyn() ); }
-		break;
-	case 7:
-		if (HX_FIELD_EQ(inName,"profile") ) { return ::hx::Val( profile_dyn() ); }
-		break;
-	case 8:
-		if (HX_FIELD_EQ(inName,"photoUri") ) { return ::hx::Val( photoUri ); }
-		break;
-	case 11:
-		if (HX_FIELD_EQ(inName,"displayName") ) { return ::hx::Val( displayName ); }
-		if (HX_FIELD_EQ(inName,"chat__fromC") ) { return ::hx::Val( chat__fromC_dyn() ); }
-		break;
-	case 13:
-		if (HX_FIELD_EQ(inName,"isSelf__fromC") ) { return ::hx::Val( isSelf__fromC_dyn() ); }
-		break;
-	case 14:
-		if (HX_FIELD_EQ(inName,"placeholderUri") ) { return ::hx::Val( placeholderUri ); }
-		break;
-	case 15:
-		if (HX_FIELD_EQ(inName,"photoUri__fromC") ) { return ::hx::Val( photoUri__fromC_dyn() ); }
-		break;
-	case 18:
-		if (HX_FIELD_EQ(inName,"displayName__fromC") ) { return ::hx::Val( displayName__fromC_dyn() ); }
-		break;
-	case 21:
-		if (HX_FIELD_EQ(inName,"placeholderUri__fromC") ) { return ::hx::Val( placeholderUri__fromC_dyn() ); }
-	}
-	return super::__Field(inName,inCallProp);
-}
-
-::hx::Val Participant_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
-{
-	switch(inName.length) {
-	case 3:
-		if (HX_FIELD_EQ(inName,"jid") ) { jid=inValue.Cast<  ::borogove::JID >(); return inValue; }
-		break;
-	case 4:
-		if (HX_FIELD_EQ(inName,"chat") ) { chat=inValue.Cast<  ::borogove::AvailableChat >(); return inValue; }
-		break;
-	case 5:
-		if (HX_FIELD_EQ(inName,"roles") ) { roles=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
-		break;
-	case 6:
-		if (HX_FIELD_EQ(inName,"isSelf") ) { isSelf=inValue.Cast< bool >(); return inValue; }
-		break;
-	case 8:
-		if (HX_FIELD_EQ(inName,"photoUri") ) { photoUri=inValue.Cast< ::String >(); return inValue; }
-		break;
-	case 11:
-		if (HX_FIELD_EQ(inName,"displayName") ) { displayName=inValue.Cast< ::String >(); return inValue; }
-		break;
-	case 14:
-		if (HX_FIELD_EQ(inName,"placeholderUri") ) { placeholderUri=inValue.Cast< ::String >(); return inValue; }
-	}
-	return super::__SetField(inName,inValue,inCallProp);
-}
-
-void Participant_obj::__GetFields(Array< ::String> &outFields)
-{
-	outFields->push(HX_("displayName",ad,11,f2,30));
-	outFields->push(HX_("photoUri",da,15,82,60));
-	outFields->push(HX_("placeholderUri",b9,d9,ba,ae));
-	outFields->push(HX_("isSelf",96,50,b7,69));
-	outFields->push(HX_("chat",d8,5e,bf,41));
-	outFields->push(HX_("roles",3d,1c,5f,ed));
-	outFields->push(HX_("jid",c5,ca,50,00));
-	super::__GetFields(outFields);
-};
-
-#ifdef HXCPP_SCRIPTABLE
-static ::hx::StorageInfo Participant_obj_sMemberStorageInfo[] = {
-	{::hx::fsString,(int)offsetof(Participant_obj,displayName),HX_("displayName",ad,11,f2,30)},
-	{::hx::fsString,(int)offsetof(Participant_obj,photoUri),HX_("photoUri",da,15,82,60)},
-	{::hx::fsString,(int)offsetof(Participant_obj,placeholderUri),HX_("placeholderUri",b9,d9,ba,ae)},
-	{::hx::fsBool,(int)offsetof(Participant_obj,isSelf),HX_("isSelf",96,50,b7,69)},
-	{::hx::fsObject /*  ::borogove::AvailableChat */ ,(int)offsetof(Participant_obj,chat),HX_("chat",d8,5e,bf,41)},
-	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(Participant_obj,roles),HX_("roles",3d,1c,5f,ed)},
-	{::hx::fsObject /*  ::borogove::JID */ ,(int)offsetof(Participant_obj,jid),HX_("jid",c5,ca,50,00)},
-	{ ::hx::fsUnknown, 0, null()}
-};
-static ::hx::StaticInfo *Participant_obj_sStaticStorageInfo = 0;
-#endif
-
-static ::String Participant_obj_sMemberFields[] = {
-	HX_("displayName",ad,11,f2,30),
-	HX_("displayName__fromC",6c,9e,e5,22),
-	HX_("photoUri",da,15,82,60),
-	HX_("photoUri__fromC",df,29,fc,dc),
-	HX_("placeholderUri",b9,d9,ba,ae),
-	HX_("placeholderUri__fromC",e0,2f,a3,85),
-	HX_("isSelf",96,50,b7,69),
-	HX_("isSelf__fromC",a3,fe,4d,03),
-	HX_("chat",d8,5e,bf,41),
-	HX_("chat__fromC",a1,1c,85,3d),
-	HX_("roles",3d,1c,5f,ed),
-	HX_("jid",c5,ca,50,00),
-	HX_("profile",29,49,49,f3),
-	HX_("status",32,e7,fb,05),
-	::String(null()) };
-
-::hx::Class Participant_obj::__mClass;
-
-void Participant_obj::__register()
-{
-	Participant_obj _hx_dummy;
-	Participant_obj::_hx_vtable = *(void **)&_hx_dummy;
-	::hx::Static(__mClass) = new ::hx::Class_obj();
-	__mClass->mName = HX_("borogove.Participant",c6,4e,3e,89);
-	__mClass->mSuper = &super::__SGetClass();
-	__mClass->mConstructEmpty = &__CreateEmpty;
-	__mClass->mConstructArgs = &__Create;
-	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
-	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
-	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
-	__mClass->mMembers = ::hx::Class_obj::dupFunctions(Participant_obj_sMemberFields);
-	__mClass->mCanCast = ::hx::TCanCast< Participant_obj >;
-#ifdef HXCPP_SCRIPTABLE
-	__mClass->mMemberStorageInfo = Participant_obj_sMemberStorageInfo;
-#endif
-#ifdef HXCPP_SCRIPTABLE
-	__mClass->mStaticStorageInfo = Participant_obj_sStaticStorageInfo;
-#endif
-	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
-}
-
-void Participant_obj::__boot()
-{
-{
-            	HX_STACKFRAME(&_hx_pos_74a0113f4a5624a8_19_boot)
-HXDLIN(  19)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(10)
-            				->setFixed(0,HX_("placeholderUri__fromC",e0,2f,a3,85), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(1,HX_("status__fromC",87,b3,25,a1), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(2,HX_("roles__fromC",dc,05,ee,a2), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(3,HX_("photoUri__fromC",df,29,fc,dc), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(4,HX_("profile",29,49,49,f3), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(5,HX_("profile__fromC",70,8e,62,f4), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(6,HX_("isSelf__fromC",a3,fe,4d,03), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(7,HX_("status",32,e7,fb,05), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(8,HX_("displayName__fromC",6c,9e,e5,22), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(9,HX_("chat__fromC",a1,1c,85,3d), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
-            	}
-}
-
-} // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/Persistence.cpp b/Sources/c_borogove/src/borogove/Persistence.cpp
index b1de8e5..84f993c 100644
--- a/Sources/c_borogove/src/borogove/Persistence.cpp
+++ b/Sources/c_borogove/src/borogove/Persistence.cpp
@@ -13,6 +13,9 @@
 #ifndef INCLUDED_borogove_EventEmitter
 #include <borogove/EventEmitter.h>
 #endif
+#ifndef INCLUDED_borogove_Hash
+#include <borogove/Hash.h>
+#endif
 #ifndef INCLUDED_borogove_Member
 #include <borogove/Member.h>
 #endif
@@ -28,6 +31,9 @@
 #ifndef INCLUDED_thenshim_Thenable
 #include <thenshim/Thenable.h>
 #endif
+#ifndef INCLUDED_tink_streams_StreamObject
+#include <tink/streams/StreamObject.h>
+#endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_86b0a481bb186c19_23_boot,"borogove.Persistence","boot",0x620c37ae,"borogove.Persistence.boot","borogove/Persistence.hx",23,0x3c6f974d)
 namespace borogove{
@@ -42,6 +48,8 @@ static ::String Persistence_obj_sMemberFields[] = {
 	HX_("clearMemberPresence",22,9d,db,a5),
 	HX_("getMembers",e3,b2,d1,69),
 	HX_("getMemberDetails",12,2b,2f,b3),
+	HX_("storeVoiceRequest",3e,09,f8,ef),
+	HX_("listVoiceRequests",d8,ba,8f,00),
 	HX_("getChatsUnreadDetails",ee,d4,5a,85),
 	HX_("storeReaction",aa,00,75,ab),
 	HX_("storeMessages",cd,f1,bd,e9),
@@ -51,6 +59,7 @@ static ::String Persistence_obj_sMemberFields[] = {
 	HX_("getMessagesBefore",a1,f1,44,11),
 	HX_("getMessagesAfter",3a,43,91,57),
 	HX_("getMessagesAround",6f,95,16,2d),
+	HX_("getMessagesByStatus",0b,d6,52,1e),
 	HX_("hasMedia",2a,4f,14,92),
 	HX_("storeMedia",43,b1,3a,43),
 	HX_("removeMedia",00,e2,ef,03),
@@ -83,7 +92,7 @@ void Persistence_obj::__boot()
 {
             	HX_STACKFRAME(&_hx_pos_86b0a481bb186c19_23_boot)
 HXDLIN(  23)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(30)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(33)
             				->setFixed(0,HX_("storeChats",fa,4a,32,83), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
             				->setFixed(1,HX_("getChatsUnreadDetails",ee,d4,5a,85), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -118,31 +127,37 @@ HXDLIN(  23)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
             				->setFixed(16,HX_("storeMessages",cd,f1,bd,e9), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(17,HX_("listAccounts",a4,81,e8,f5), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(17,HX_("storeVoiceRequest",3e,09,f8,ef), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(18,HX_("listAccounts",a4,81,e8,f5), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(18,HX_("removeMedia",00,e2,ef,03), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(19,HX_("listVoiceRequests",d8,ba,8f,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(20,HX_("removeMedia",00,e2,ef,03), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(19,HX_("updateMessageStatus",90,98,ad,0f), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(21,HX_("updateMessageStatus",90,98,ad,0f), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(20,HX_("getMessagesBefore",a1,f1,44,11), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(22,HX_("getMessagesBefore",a1,f1,44,11), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(21,HX_("getCaps",d7,cb,3c,14), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(23,HX_("getCaps",d7,cb,3c,14), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(24,HX_("getMessagesByStatus",0b,d6,52,1e), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(22,HX_("getMessagesAround",6f,95,16,2d), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(25,HX_("getMessagesAround",6f,95,16,2d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(23,HX_("storeMedia",43,b1,3a,43), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(26,HX_("storeMedia",43,b1,3a,43), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(24,HX_("findServicesWithFeature",99,4e,bd,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(27,HX_("findServicesWithFeature",99,4e,bd,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(25,HX_("getMessagesAfter",3a,43,91,57), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(28,HX_("getMessagesAfter",3a,43,91,57), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(26,HX_("updateMessage",be,9a,7f,65), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(29,HX_("updateMessage",be,9a,7f,65), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(27,HX_("getMembers",e3,b2,d1,69), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(30,HX_("getMembers",e3,b2,d1,69), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(28,HX_("getStreamManagement",d9,03,ec,6c), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(31,HX_("getStreamManagement",d9,03,ec,6c), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(29,HX_("removeAccount",c9,58,14,7a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(32,HX_("removeAccount",c9,58,14,7a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d))))))));
             	}
 }
diff --git a/Sources/c_borogove/src/borogove/Persistence__Companion.cpp b/Sources/c_borogove/src/borogove/Persistence__Companion.cpp
index 1f15510..65d6373 100644
--- a/Sources/c_borogove/src/borogove/Persistence__Companion.cpp
+++ b/Sources/c_borogove/src/borogove/Persistence__Companion.cpp
@@ -19,6 +19,9 @@
 #ifndef INCLUDED_borogove_EventEmitter
 #include <borogove/EventEmitter.h>
 #endif
+#ifndef INCLUDED_borogove_Hash
+#include <borogove/Hash.h>
+#endif
 #ifndef INCLUDED_borogove_Persistence
 #include <borogove/Persistence.h>
 #endif
@@ -37,6 +40,9 @@
 #ifndef INCLUDED_thenshim__Promise_Promise_Impl_
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
+#ifndef INCLUDED_tink_streams_StreamObject
+#include <tink/streams/StreamObject.h>
+#endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_365_syncPoint__fromC,"borogove.Persistence__Companion","syncPoint__fromC",0x55d370f8,"borogove.Persistence__Companion.syncPoint__fromC","HaxeCBridge.hx",365,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_354_storeChats__fromC,"borogove.Persistence__Companion","storeChats__fromC",0xc83eca6b,"borogove.Persistence__Companion.storeChats__fromC","HaxeCBridge.hx",354,0xa18550d8)
@@ -349,96 +355,82 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persist
             	}
 
 
-void Persistence__Companion_obj::hasMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context){
+void Persistence__Companion_obj::hasMedia__fromC(::Dynamic self, ::borogove::Hash hash,::cpp::Function< void  (const char*,void*) > handler,void* handler__context){
             	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_365_hasMedia__fromC)
 HXDLIN( 365)		if (::hx::IsNull( handler )) {
-HXLINE( 302)			::Array< unsigned char > _hx_tmp;
-HXDLIN( 302)			if (::hx::IsNull( hash )) {
-HXLINE( 302)				_hx_tmp = ::Array_obj< unsigned char >::__new(0);
-            			}
-            			else {
-HXLINE( 302)				::cpp::Pointer< unsigned char > _this = hash->reinterpret();
-HXDLIN( 302)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
-HXDLIN( 302)				::cpp::Pointer< unsigned char > tmp = _this;
-HXDLIN( 302)				result->setUnmanagedData(tmp,( (int)(hash__len) ));
-HXDLIN( 302)				_hx_tmp = result->copy();
-            			}
-HXLINE( 365)			::borogove::Persistence_obj::hasMedia(self,hashAlgorithm,_hx_tmp);
+HXDLIN( 365)			::borogove::Persistence_obj::hasMedia(self,hash);
             		}
             		else {
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
-            			void _hx_run(bool v){
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::String v){
             				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_365_hasMedia__fromC)
-HXDLIN( 365)				handler(v,handler__context);
+HXDLIN( 365)				::cpp::Function< void  (const char*,void*) > handler1 = handler;
+HXLINE( 332)				const char* cStrPtr = v.utf8_str();
+HXDLIN( 332)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 332)				{
+HXLINE( 332)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 332)					if (::hx::IsNull( store )) {
+HXLINE( 332)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),v));
+HXDLIN( 332)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            					}
+            					else {
+HXLINE( 332)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 365)				handler1(cStrPtr,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
             				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_365_hasMedia__fromC)
-HXDLIN( 365)				handler(false,handler__context);
+HXDLIN( 365)				handler(null(),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 302)			::Array< unsigned char > _hx_tmp1;
-HXDLIN( 302)			if (::hx::IsNull( hash )) {
-HXLINE( 302)				_hx_tmp1 = ::Array_obj< unsigned char >::__new(0);
-            			}
-            			else {
-HXLINE( 302)				::cpp::Pointer< unsigned char > _this1 = hash->reinterpret();
-HXDLIN( 302)				::Array< unsigned char > result1 = ::Array_obj< unsigned char >::__new();
-HXDLIN( 302)				::cpp::Pointer< unsigned char > tmp1 = _this1;
-HXDLIN( 302)				result1->setUnmanagedData(tmp1,( (int)(hash__len) ));
-HXDLIN( 302)				_hx_tmp1 = result1->copy();
-            			}
-HXLINE( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(self,hashAlgorithm,_hx_tmp1), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(self,hash), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
 
-void Persistence__Companion_obj::storeMedia__fromC(::Dynamic self,::String mime,::cpp::Pointer< unsigned char > bytes,size_t bytes__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context){
+void Persistence__Companion_obj::storeMedia__fromC(::Dynamic self,::String mime,::Dynamic source,::cpp::Function< void  (const char*,void*) > handler,void* handler__context){
             	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_365_storeMedia__fromC)
 HXDLIN( 365)		if (::hx::IsNull( handler )) {
-HXLINE( 302)			::Array< unsigned char > _hx_tmp;
-HXDLIN( 302)			if (::hx::IsNull( bytes )) {
-HXLINE( 302)				_hx_tmp = ::Array_obj< unsigned char >::__new(0);
-            			}
-            			else {
-HXLINE( 302)				::cpp::Pointer< unsigned char > _this = bytes->reinterpret();
-HXDLIN( 302)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
-HXDLIN( 302)				::cpp::Pointer< unsigned char > tmp = _this;
-HXDLIN( 302)				result->setUnmanagedData(tmp,( (int)(bytes__len) ));
-HXDLIN( 302)				_hx_tmp = result->copy();
-            			}
-HXLINE( 365)			::borogove::Persistence_obj::storeMedia(self,mime,_hx_tmp);
+HXDLIN( 365)			::borogove::Persistence_obj::storeMedia(self,mime,source);
             		}
             		else {
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
-            			void _hx_run(bool v){
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::String v){
             				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_365_storeMedia__fromC)
-HXDLIN( 365)				handler(v,handler__context);
+HXDLIN( 365)				::cpp::Function< void  (const char*,void*) > handler1 = handler;
+HXLINE( 332)				const char* cStrPtr = v.utf8_str();
+HXDLIN( 332)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 332)				{
+HXLINE( 332)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 332)					if (::hx::IsNull( store )) {
+HXLINE( 332)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),v));
+HXDLIN( 332)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            					}
+            					else {
+HXLINE( 332)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 365)				handler1(cStrPtr,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
             				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_365_storeMedia__fromC)
-HXDLIN( 365)				handler(false,handler__context);
+HXDLIN( 365)				handler(null(),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 302)			::Array< unsigned char > _hx_tmp1;
-HXDLIN( 302)			if (::hx::IsNull( bytes )) {
-HXLINE( 302)				_hx_tmp1 = ::Array_obj< unsigned char >::__new(0);
-            			}
-            			else {
-HXLINE( 302)				::cpp::Pointer< unsigned char > _this1 = bytes->reinterpret();
-HXDLIN( 302)				::Array< unsigned char > result1 = ::Array_obj< unsigned char >::__new();
-HXDLIN( 302)				::cpp::Pointer< unsigned char > tmp1 = _this1;
-HXDLIN( 302)				result1->setUnmanagedData(tmp1,( (int)(bytes__len) ));
-HXDLIN( 302)				_hx_tmp1 = result1->copy();
-            			}
-HXLINE( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(self,mime,_hx_tmp1), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(self,mime,source), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
@@ -490,10 +482,10 @@ HXLINE( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persist
             	}
 
 
-void Persistence__Companion_obj::storeLogin__fromC(::Dynamic self,::String accountId,::String clientId,::String displayName,::String token,::cpp::Function< void  (bool,void*) > handler,void* handler__context){
+void Persistence__Companion_obj::storeLogin__fromC(::Dynamic self,::String accountId,::String clientId,::String displayName,::String rosterVer,::String token,::cpp::Function< void  (bool,void*) > handler,void* handler__context){
             	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_365_storeLogin__fromC)
 HXDLIN( 365)		if (::hx::IsNull( handler )) {
-HXDLIN( 365)			::borogove::Persistence_obj::storeLogin(self,accountId,clientId,displayName,token);
+HXDLIN( 365)			::borogove::Persistence_obj::storeLogin(self,accountId,clientId,displayName,rosterVer,token);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
@@ -510,7 +502,7 @@ HXDLIN( 365)				handler(false,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeLogin(self,accountId,clientId,displayName,token), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeLogin(self,accountId,clientId,displayName,rosterVer,token), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
diff --git a/Sources/c_borogove/src/borogove/ProfileBuilder.cpp b/Sources/c_borogove/src/borogove/ProfileBuilder.cpp
index fb34de6..6110609 100644
--- a/Sources/c_borogove/src/borogove/ProfileBuilder.cpp
+++ b/Sources/c_borogove/src/borogove/ProfileBuilder.cpp
@@ -102,7 +102,7 @@ void ProfileBuilder_obj::add(::String k,::String v){
             	HX_GC_STACKFRAME(&_hx_pos_330db0caed3d734f_187_add)
 HXLINE( 188)		::String type = ::borogove::_Profile::Profile_Fields__obj::TYPES->get_string(k);
 HXLINE( 189)		if (::hx::IsNotNull( type )) {
-HXLINE( 190)			 ::borogove::Stanza el =  ::borogove::Stanza_obj::__alloc( HX_CTX ,k,null())->textTag(type,v,null());
+HXLINE( 190)			 ::borogove::Stanza el =  ::borogove::Stanza_obj::__alloc( HX_CTX ,k,null(),null())->textTag(type,v,null(),null());
 HXLINE( 191)			this->vcard->addChild(el);
 HXLINE( 192)			::Array< ::Dynamic> _hx_tmp = this->items;
 HXDLIN( 192)			_hx_tmp->push( ::borogove::ProfileItem_obj::__alloc( HX_CTX ,el,((k + HX_("/",2f,00,00,00)) + ::_UUIDv7::UUIDv7_Fields__obj::uuidv7())));
@@ -140,7 +140,7 @@ HXLINE( 205)			HX_STACK_DO_THROW((HX_("prop not found for ",5f,11,d5,80) + id));
 HXLINE( 207)		::String type = ::borogove::_Profile::Profile_Fields__obj::TYPES->get_string(k);
 HXLINE( 208)		if (::hx::IsNotNull( type )) {
 HXLINE( 209)			prop->removeChildren(null(),null());
-HXLINE( 210)			prop->textTag(type,v,null());
+HXLINE( 210)			prop->textTag(type,v,null(),null());
             		}
             		else {
 HXLINE( 212)			HX_STACK_DO_THROW((HX_("Unknown profile property ",3e,fe,b6,f1) + k));
diff --git a/Sources/c_borogove/src/borogove/PubsubEvent.cpp b/Sources/c_borogove/src/borogove/PubsubEvent.cpp
index 8b0385d..6c910cc 100644
--- a/Sources/c_borogove/src/borogove/PubsubEvent.cpp
+++ b/Sources/c_borogove/src/borogove/PubsubEvent.cpp
@@ -1,15 +1,18 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_borogove_PubsubEvent
 #include <borogove/PubsubEvent.h>
 #endif
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_b1bbb10371f77428_9_new,"borogove.PubsubEvent","new",0x97075b3c,"borogove.PubsubEvent.new","borogove/PubsubEvent.hx",9,0x86bc7f75)
 HX_LOCAL_STACK_FRAME(_hx_pos_b1bbb10371f77428_28_getFrom,"borogove.PubsubEvent","getFrom",0x7aad7dfc,"borogove.PubsubEvent.getFrom","borogove/PubsubEvent.hx",28,0x86bc7f75)
@@ -75,9 +78,9 @@ HXLINE(  20)		 ::borogove::Stanza items = event->getChild(HX_("items",00,ac,0c,c
 HXLINE(  21)		if (::hx::IsNull( items )) {
 HXLINE(  21)			return null();
             		}
-HXLINE(  24)		::String _hx_tmp = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN(  24)		::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) );
-HXDLIN(  24)		::String _hx_tmp2 = ( (::String)(::Reflect_obj::field(items->attr,HX_("node",02,0a,0a,49))) );
+HXLINE(  24)		::String _hx_tmp = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
+HXDLIN(  24)		::String _hx_tmp1 = stanza->attr->get_string(HX_("to",7b,65,00,00));
+HXDLIN(  24)		::String _hx_tmp2 = items->attr->get_string(HX_("node",02,0a,0a,49));
 HXDLIN(  24)		return  ::borogove::PubsubEvent_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,_hx_tmp2,items->allTags(HX_("item",13,c5,bf,45),null()));
             	}
 
diff --git a/Sources/c_borogove/src/borogove/Push.cpp b/Sources/c_borogove/src/borogove/Push.cpp
index 4811716..9e10005 100644
--- a/Sources/c_borogove/src/borogove/Push.cpp
+++ b/Sources/c_borogove/src/borogove/Push.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED__FractionalIndexing_FractionalIndexing_Fields_
 #include <_FractionalIndexing/FractionalIndexing_Fields_.h>
 #endif
@@ -13,9 +10,18 @@
 #ifndef INCLUDED_borogove_ChatMessageBuilder
 #include <borogove/ChatMessageBuilder.h>
 #endif
+#ifndef INCLUDED_borogove_EncryptionInfo
+#include <borogove/EncryptionInfo.h>
+#endif
 #ifndef INCLUDED_borogove_JID
 #include <borogove/JID.h>
 #endif
+#ifndef INCLUDED_borogove_Message
+#include <borogove/Message.h>
+#endif
+#ifndef INCLUDED_borogove_MessageStanza
+#include <borogove/MessageStanza.h>
+#endif
 #ifndef INCLUDED_borogove_Notification
 #include <borogove/Notification.h>
 #endif
@@ -25,9 +31,18 @@
 #ifndef INCLUDED_borogove_Push
 #include <borogove/Push.h>
 #endif
+#ifndef INCLUDED_borogove_ReactionUpdate
+#include <borogove/ReactionUpdate.h>
+#endif
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 #ifndef INCLUDED_thenshim_Thenable
 #include <thenshim/Thenable.h>
 #endif
@@ -36,10 +51,10 @@
 #endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_3e92fffecd881428_28_receive,"borogove.Push","receive",0xa9c048dc,"borogove.Push.receive","borogove/Push.hx",28,0xbbe648d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_3e92fffecd881428_50_receive,"borogove.Push","receive",0xa9c048dc,"borogove.Push.receive","borogove/Push.hx",50,0xbbe648d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_3e92fffecd881428_45_receive,"borogove.Push","receive",0xa9c048dc,"borogove.Push.receive","borogove/Push.hx",45,0xbbe648d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_3e92fffecd881428_43_receive,"borogove.Push","receive",0xa9c048dc,"borogove.Push.receive","borogove/Push.hx",43,0xbbe648d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_3e92fffecd881428_44_receive,"borogove.Push","receive",0xa9c048dc,"borogove.Push.receive","borogove/Push.hx",44,0xbbe648d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_3e92fffecd881428_54_receive,"borogove.Push","receive",0xa9c048dc,"borogove.Push.receive","borogove/Push.hx",54,0xbbe648d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_3e92fffecd881428_48_receive,"borogove.Push","receive",0xa9c048dc,"borogove.Push.receive","borogove/Push.hx",48,0xbbe648d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_3e92fffecd881428_46_receive,"borogove.Push","receive",0xa9c048dc,"borogove.Push.receive","borogove/Push.hx",46,0xbbe648d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_3e92fffecd881428_47_receive,"borogove.Push","receive",0xa9c048dc,"borogove.Push.receive","borogove/Push.hx",47,0xbbe648d6)
 namespace borogove{
 
 void Push_obj::__construct() { }
@@ -61,99 +76,121 @@ bool Push_obj::_hx_isInstanceOf(int inClassId) {
 
  ::borogove::Notification Push_obj::receive(::String data,::Dynamic persistence){
             	HX_STACKFRAME(&_hx_pos_3e92fffecd881428_28_receive)
-HXLINE(  29)		::Array< ::Dynamic> stanza = ::Array_obj< ::Dynamic>::__new(1)->init(0,::borogove::Stanza_obj::parse(data));
-HXLINE(  30)		if (::hx::IsNull( stanza->__get(0).StaticCast<  ::borogove::Stanza >() )) {
-HXLINE(  30)			return null();
+HXLINE(  31)		__hxcpp_collect(true);
+HXLINE(  33)		::Array< ::Dynamic> stanza = ::Array_obj< ::Dynamic>::__new(1)->init(0,::borogove::Stanza_obj::parse(data));
+HXLINE(  34)		if (::hx::IsNull( stanza->__get(0).StaticCast<  ::borogove::Stanza >() )) {
+HXLINE(  34)			return null();
             		}
-HXLINE(  31)		bool _hx_tmp;
-HXDLIN(  31)		if ((stanza->__get(0).StaticCast<  ::borogove::Stanza >()->name == HX_("envelope",10,df,6c,0c))) {
-HXLINE(  31)			_hx_tmp = (( (::String)(::Reflect_obj::field(stanza->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:sce:1",30,c6,40,50));
+HXLINE(  35)		bool _hx_tmp;
+HXDLIN(  35)		if ((stanza->__get(0).StaticCast<  ::borogove::Stanza >()->name == HX_("envelope",10,df,6c,0c))) {
+HXLINE(  35)			_hx_tmp = ::hx::IsEq( stanza->__get(0).StaticCast<  ::borogove::Stanza >()->attr->get(HX_("xmlns",dc,31,74,60)),HX_("urn:xmpp:sce:1",30,c6,40,50) );
             		}
             		else {
-HXLINE(  31)			_hx_tmp = false;
+HXLINE(  35)			_hx_tmp = false;
             		}
-HXDLIN(  31)		if (_hx_tmp) {
-HXLINE(  32)			stanza[0] = stanza->__get(0).StaticCast<  ::borogove::Stanza >()->getChild(HX_("content",39,8d,77,19),null())->getFirstChild();
+HXDLIN(  35)		if (_hx_tmp) {
+HXLINE(  36)			stanza[0] = stanza->__get(0).StaticCast<  ::borogove::Stanza >()->getChild(HX_("content",39,8d,77,19),null())->getFirstChild();
             		}
-HXLINE(  34)		bool _hx_tmp1;
-HXDLIN(  34)		if ((stanza->__get(0).StaticCast<  ::borogove::Stanza >()->name == HX_("forwarded",64,f5,9a,17))) {
-HXLINE(  34)			_hx_tmp1 = (( (::String)(::Reflect_obj::field(stanza->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
+HXLINE(  38)		bool _hx_tmp1;
+HXDLIN(  38)		if ((stanza->__get(0).StaticCast<  ::borogove::Stanza >()->name == HX_("forwarded",64,f5,9a,17))) {
+HXLINE(  38)			_hx_tmp1 = ::hx::IsEq( stanza->__get(0).StaticCast<  ::borogove::Stanza >()->attr->get(HX_("xmlns",dc,31,74,60)),HX_("urn:xmpp:forward:0",1f,ec,b0,d1) );
             		}
             		else {
-HXLINE(  34)			_hx_tmp1 = false;
+HXLINE(  38)			_hx_tmp1 = false;
             		}
-HXDLIN(  34)		if (_hx_tmp1) {
-HXLINE(  35)			stanza[0] = stanza->__get(0).StaticCast<  ::borogove::Stanza >()->getChild(HX_("message",c7,35,11,9a),HX_("jabber:client",21,64,c5,e4));
+HXDLIN(  38)		if (_hx_tmp1) {
+HXLINE(  39)			stanza[0] = stanza->__get(0).StaticCast<  ::borogove::Stanza >()->getChild(HX_("message",c7,35,11,9a),HX_("jabber:client",21,64,c5,e4));
             		}
-HXLINE(  37)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("to",7b,65,00,00))) ) )) {
-HXLINE(  37)			return null();
+HXLINE(  41)		if (::hx::IsNull( stanza->__get(0).StaticCast<  ::borogove::Stanza >()->attr->get(HX_("to",7b,65,00,00)) )) {
+HXLINE(  41)			return null();
             		}
-HXLINE(  39)		 ::borogove::Stanza stanza1 = stanza->__get(0).StaticCast<  ::borogove::Stanza >();
-HXDLIN(  39)		 ::borogove::ChatMessage message = ::borogove::ChatMessage_obj::fromStanza(stanza1,::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("to",7b,65,00,00))) ))->asBare(),null());
-HXLINE(  40)		if (::hx::IsNotNull( message )) {
-            			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_3, ::borogove::ChatMessage,message,::Dynamic,persistence,::Array< ::Dynamic>,stanza) HXARGC(1)
-            			::Dynamic _hx_run(::String sortId){
-            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2,::String,sortId1) HXARGC(2)
-            				 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            					HX_STACKFRAME(&_hx_pos_3e92fffecd881428_50_receive)
-HXLINE(  51)					builder->sortId = sortId1;
-HXLINE(  52)					return builder;
-            				}
-            				HX_END_LOCAL_FUNC2(return)
-
-            				HX_STACKFRAME(&_hx_pos_3e92fffecd881428_45_receive)
-HXLINE(  46)				::String sortId1 = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(sortId,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
-HXLINE(  48)				 ::borogove::Stanza stanza1 = stanza->__get(0).StaticCast<  ::borogove::Stanza >();
-HXLINE(  47)				 ::borogove::ChatMessage toStore = ::borogove::ChatMessage_obj::fromStanza(stanza1,::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("to",7b,65,00,00))) ))->asBare(), ::Dynamic(new _hx_Closure_2(sortId1)));
-HXLINE(  55)				::Dynamic persistence1 = persistence;
-HXDLIN(  55)				return ::borogove::Persistence_obj::storeMessages(persistence1,message->account(),::Array_obj< ::Dynamic>::__new(1)->init(0,toStore));
-            			}
-            			HX_END_LOCAL_FUNC1(return)
-
-HXLINE(  42)			::Dynamic _hx_tmp2;
-HXDLIN(  42)			if ((message->type == 2)) {
-            				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
-            				::String _hx_run( ::borogove::ChatMessage point){
-            					HX_STACKFRAME(&_hx_pos_3e92fffecd881428_43_receive)
-HXLINE(  43)					::String tmp;
-HXDLIN(  43)					if (::hx::IsNotNull( point )) {
-HXLINE(  43)						tmp = point->sortId;
-            					}
-            					else {
-HXLINE(  43)						tmp = null();
-            					}
-HXDLIN(  43)					if (::hx::IsNotNull( tmp )) {
-HXLINE(  43)						return tmp;
+HXLINE(  42)		 ::borogove::Stanza stanza1 = stanza->__get(0).StaticCast<  ::borogove::Stanza >();
+HXDLIN(  42)		 ::borogove::MessageStanza _g = ::borogove::Message_obj::fromStanza(stanza1,::borogove::JID_obj::parse(stanza->__get(0).StaticCast<  ::borogove::Stanza >()->attr->get_string(HX_("to",7b,65,00,00)))->asBare(),null(),null(),null())->parsed;
+HXDLIN(  42)		switch((int)(_g->_hx_getIndex())){
+            			case (int)1: {
+            				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_3, ::borogove::ChatMessage,message,::Dynamic,persistence,::Array< ::Dynamic>,stanza) HXARGC(1)
+            				::Dynamic _hx_run(::String sortId){
+            					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2,::String,sortId1,::String,lower) HXARGC(2)
+            					 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
+            						HX_STACKFRAME(&_hx_pos_3e92fffecd881428_54_receive)
+HXLINE(  55)						builder->sortId = sortId1;
+HXLINE(  56)						builder->debug =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("sortId",d9,7a,37,30), ::Dynamic(::hx::Anon_obj::Create(3)
+            								->setFixed(0,HX_("upper",62,19,3f,a8),null())
+            								->setFixed(1,HX_("method",e1,f6,5a,09),HX_("between",c8,91,b3,66))
+            								->setFixed(2,HX_("lower",01,fa,ff,78),lower)))
+            							->setFixed(1,HX_("source",db,b0,31,32),HX_("push",da,11,61,4a)));
+HXLINE(  60)						return builder;
             					}
-            					else {
-HXLINE(  43)						return HX_("a ",9f,54,00,00);
-            					}
-HXDLIN(  43)					return null();
+            					HX_END_LOCAL_FUNC2(return)
+
+            					HX_STACKFRAME(&_hx_pos_3e92fffecd881428_48_receive)
+HXLINE(  49)					::String lower = sortId;
+HXLINE(  50)					::String sortId1 = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(lower,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
+HXLINE(  52)					 ::borogove::Stanza stanza1 = stanza->__get(0).StaticCast<  ::borogove::Stanza >();
+HXLINE(  51)					 ::borogove::ChatMessage toStore = ::borogove::ChatMessage_obj::fromStanza(stanza1,::borogove::JID_obj::parse(stanza->__get(0).StaticCast<  ::borogove::Stanza >()->attr->get_string(HX_("to",7b,65,00,00)))->asBare(), ::Dynamic(new _hx_Closure_2(sortId1,lower)),null());
+HXLINE(  63)					toStore->debug =  ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(0,HX_("sortId",d9,7a,37,30), ::Dynamic(::hx::Anon_obj::Create(3)
+            							->setFixed(0,HX_("upper",62,19,3f,a8),null())
+            							->setFixed(1,HX_("method",e1,f6,5a,09),HX_("between",c8,91,b3,66))
+            							->setFixed(2,HX_("lower",01,fa,ff,78),lower)))
+            						->setFixed(1,HX_("source",db,b0,31,32),HX_("push",da,11,61,4a)));
+HXLINE(  64)					::Dynamic persistence1 = persistence;
+HXDLIN(  64)					return ::borogove::Persistence_obj::storeMessages(persistence1,message->account(),::Array_obj< ::Dynamic>::__new(1)->init(0,toStore));
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE(  43)				::Dynamic persistence1 = persistence;
-HXDLIN(  43)				::String _hx_tmp3 = message->account();
-HXLINE(  42)				_hx_tmp2 = ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::syncPoint(persistence1,_hx_tmp3,message->chatId()), ::Dynamic(new _hx_Closure_0()),null());
-            			}
-            			else {
-            				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
-            				::String _hx_run( ::Dynamic data){
-            					HX_STACKFRAME(&_hx_pos_3e92fffecd881428_44_receive)
-HXLINE(  44)					return ( (::String)(data->__Field(HX_("sortId",d9,7a,37,30),::hx::paccDynamic)) );
+HXLINE(  43)				 ::borogove::ChatMessage message = _g->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
+HXLINE(  45)				::Dynamic _hx_tmp2;
+HXDLIN(  45)				if ((message->type == 2)) {
+            					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            					::String _hx_run( ::borogove::ChatMessage point){
+            						HX_STACKFRAME(&_hx_pos_3e92fffecd881428_46_receive)
+HXLINE(  46)						::String tmp;
+HXDLIN(  46)						if (::hx::IsNotNull( point )) {
+HXLINE(  46)							tmp = point->sortId;
+            						}
+            						else {
+HXLINE(  46)							tmp = null();
+            						}
+HXDLIN(  46)						if (::hx::IsNotNull( tmp )) {
+HXLINE(  46)							return tmp;
+            						}
+            						else {
+HXLINE(  46)							return HX_("a ",9f,54,00,00);
+            						}
+HXDLIN(  46)						return null();
+            					}
+            					HX_END_LOCAL_FUNC1(return)
+
+HXLINE(  46)					::Dynamic persistence1 = persistence;
+HXDLIN(  46)					::String _hx_tmp3 = message->account();
+HXLINE(  45)					_hx_tmp2 = ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::syncPoint(persistence1,_hx_tmp3,message->chatId()), ::Dynamic(new _hx_Closure_0()),null());
             				}
-            				HX_END_LOCAL_FUNC1(return)
+            				else {
+            					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
+            					::String _hx_run( ::Dynamic data){
+            						HX_STACKFRAME(&_hx_pos_3e92fffecd881428_47_receive)
+HXLINE(  47)						return ( (::String)(data->__Field(HX_("sortId",d9,7a,37,30),::hx::paccDynamic)) );
+            					}
+            					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(  44)				::Dynamic persistence2 = persistence;
-HXLINE(  42)				_hx_tmp2 = ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getStreamManagement(persistence2,message->account()), ::Dynamic(new _hx_Closure_1()),null());
+HXLINE(  47)					::Dynamic persistence2 = persistence;
+HXLINE(  45)					_hx_tmp2 = ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getStreamManagement(persistence2,message->account()), ::Dynamic(new _hx_Closure_1()),null());
+            				}
+HXDLIN(  45)				::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp2, ::Dynamic(new _hx_Closure_3(message,persistence,stanza)),null());
+HXLINE(  66)				return ::borogove::Notification_obj::fromChatMessage(message);
+            			}
+            			break;
+            			case (int)4: {
+HXLINE(  68)				return ::borogove::Notification_obj::fromReactionUpdate(_g->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >(),stanza->__get(0).StaticCast<  ::borogove::Stanza >());
+            			}
+            			break;
+            			default:{
+HXLINE(  70)				return ::borogove::Notification_obj::fromThinStanza(stanza->__get(0).StaticCast<  ::borogove::Stanza >());
             			}
-HXDLIN(  42)			::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp2, ::Dynamic(new _hx_Closure_3(message,persistence,stanza)),null());
-HXLINE(  57)			return ::borogove::Notification_obj::fromChatMessage(message);
-            		}
-            		else {
-HXLINE(  59)			return ::borogove::Notification_obj::fromThinStanza(stanza->__get(0).StaticCast<  ::borogove::Stanza >());
             		}
-HXLINE(  40)		return null();
+HXLINE(  42)		return null();
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/ReactionUpdate.cpp b/Sources/c_borogove/src/borogove/ReactionUpdate.cpp
index 1100a92..e6c9d6a 100644
--- a/Sources/c_borogove/src/borogove/ReactionUpdate.cpp
+++ b/Sources/c_borogove/src/borogove/ReactionUpdate.cpp
@@ -197,7 +197,7 @@ HXLINE(  97)			attrs = HX_("groupchat",97,1d,c8,e5);
             		}
 HXLINE(  98)		 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->updateId)
-            			->setFixed(1,HX_("type",ba,f2,08,4d),attrs)));
+            			->setFixed(1,HX_("type",ba,f2,08,4d),attrs)),null());
 HXLINE( 100)		::String tmp = this->localId;
 HXDLIN( 100)		::String _hx_tmp;
 HXDLIN( 100)		if (::hx::IsNotNull( tmp )) {
@@ -208,7 +208,7 @@ HXLINE( 100)			_hx_tmp = this->serverId;
             		}
 HXDLIN( 100)		stanza->tag(HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp)
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reactions:0",44,fb,42,53))));
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reactions:0",44,fb,42,53))),null());
 HXLINE( 101)		{
 HXLINE( 101)			int _g = 0;
 HXDLIN( 101)			::Array< ::Dynamic> _g1 = this->reactions;
@@ -216,7 +216,7 @@ HXDLIN( 101)			while((_g < _g1->length)){
 HXLINE( 101)				 ::borogove::Reaction reaction = _g1->__get(_g).StaticCast<  ::borogove::Reaction >();
 HXDLIN( 101)				_g = (_g + 1);
 HXLINE( 102)				if (!(::Std_obj::isOfType(reaction,::hx::ClassOf< ::borogove::CustomEmojiReaction >()))) {
-HXLINE( 102)					stanza->textTag(HX_("reaction",a9,e7,b4,f6),reaction->text,null());
+HXLINE( 102)					stanza->textTag(HX_("reaction",a9,e7,b4,f6),reaction->text,null(),null());
             				}
             			}
             		}
diff --git a/Sources/c_borogove/src/borogove/SerializedChat.cpp b/Sources/c_borogove/src/borogove/SerializedChat.cpp
index 265d9fe..5f6eb2d 100644
--- a/Sources/c_borogove/src/borogove/SerializedChat.cpp
+++ b/Sources/c_borogove/src/borogove/SerializedChat.cpp
@@ -46,60 +46,69 @@
 #ifndef INCLUDED_haxe_ds_StringMap
 #include <haxe/ds/StringMap.h>
 #endif
+#ifndef INCLUDED_thenshim_PromiseTools
+#include <thenshim/PromiseTools.h>
+#endif
 #ifndef INCLUDED_thenshim_Thenable
 #include <thenshim/Thenable.h>
 #endif
+#ifndef INCLUDED_thenshim__Promise_Promise_Impl_
+#include <thenshim/_Promise/Promise_Impl_.h>
+#endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_10d675922f29bad2_2363_new,"borogove.SerializedChat","new",0x812203bb,"borogove.SerializedChat.new","borogove/Chat.hx",2363,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_10d675922f29bad2_2416_toChat,"borogove.SerializedChat","toChat",0xdd72e178,"borogove.SerializedChat.toChat","borogove/Chat.hx",2416,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_10d675922f29bad2_2448_toChat,"borogove.SerializedChat","toChat",0xdd72e178,"borogove.SerializedChat.toChat","borogove/Chat.hx",2448,0x1763ae98)
+HX_DEFINE_STACK_FRAME(_hx_pos_10d675922f29bad2_2686_new,"borogove.SerializedChat","new",0x812203bb,"borogove.SerializedChat.new","borogove/Chat.hx",2686,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_10d675922f29bad2_2774_toChat,"borogove.SerializedChat","toChat",0xdd72e178,"borogove.SerializedChat.toChat","borogove/Chat.hx",2774,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_10d675922f29bad2_2739_toChat,"borogove.SerializedChat","toChat",0xdd72e178,"borogove.SerializedChat.toChat","borogove/Chat.hx",2739,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_10d675922f29bad2_2771_toChat,"borogove.SerializedChat","toChat",0xdd72e178,"borogove.SerializedChat.toChat","borogove/Chat.hx",2771,0x1763ae98)
 namespace borogove{
 
-void SerializedChat_obj::__construct(::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status,::String extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass){
-            	HX_GC_STACKFRAME(&_hx_pos_10d675922f29bad2_2363_new)
-HXLINE(2377)		this->threads =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(2390)		this->chatId = chatId;
-HXLINE(2391)		this->trusted = trusted;
-HXLINE(2392)		this->isBookmarked = isBookmarked;
-HXLINE(2393)		this->avatarSha1 = avatarSha1;
-HXLINE(2394)		this->presence = presence;
-HXLINE(2395)		this->membersForName = membersForName;
-HXLINE(2396)		this->displayName = displayName;
-HXLINE(2397)		int _hx_tmp;
-HXDLIN(2397)		if (::hx::IsNotNull( uiState )) {
-HXLINE(2397)			_hx_tmp = ( (int)(uiState) );
+void SerializedChat_obj::__construct(::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass){
+            	HX_GC_STACKFRAME(&_hx_pos_10d675922f29bad2_2686_new)
+HXLINE(2700)		this->threads =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(2713)		this->chatId = chatId;
+HXLINE(2714)		this->trusted = trusted;
+HXLINE(2715)		this->isBookmarked = isBookmarked;
+HXLINE(2716)		this->avatarSha1 = avatarSha1;
+HXLINE(2717)		this->presence = presence;
+HXLINE(2718)		this->membersForName = membersForName;
+HXLINE(2719)		this->displayName = displayName;
+HXLINE(2720)		int _hx_tmp;
+HXDLIN(2720)		if (::hx::IsNotNull( uiState )) {
+HXLINE(2720)			_hx_tmp = ( (int)(uiState) );
             		}
             		else {
-HXLINE(2397)			_hx_tmp = 1;
+HXLINE(2720)			_hx_tmp = 1;
             		}
-HXDLIN(2397)		this->uiState = _hx_tmp;
-HXLINE(2398)		bool _hx_tmp1;
-HXDLIN(2398)		if (::hx::IsNotNull( isBlocked )) {
-HXLINE(2398)			_hx_tmp1 = ( (bool)(isBlocked) );
+HXDLIN(2720)		this->uiState = _hx_tmp;
+HXLINE(2721)		bool _hx_tmp1;
+HXDLIN(2721)		if (::hx::IsNotNull( isBlocked )) {
+HXLINE(2721)			_hx_tmp1 = ( (bool)(isBlocked) );
             		}
             		else {
-HXLINE(2398)			_hx_tmp1 = false;
+HXLINE(2721)			_hx_tmp1 = false;
             		}
-HXDLIN(2398)		this->isBlocked = _hx_tmp1;
-HXLINE(2399)		this->status = status;
-HXLINE(2400)		::String _hx_tmp2;
-HXDLIN(2400)		if (::hx::IsNotNull( extensions )) {
-HXLINE(2400)			_hx_tmp2 = extensions;
+HXDLIN(2721)		this->isBlocked = _hx_tmp1;
+HXLINE(2722)		this->status = status;
+HXLINE(2723)		 ::borogove::Stanza _hx_tmp2;
+HXDLIN(2723)		if (::hx::IsNotNull( extensions )) {
+HXLINE(2723)			_hx_tmp2 = extensions;
             		}
             		else {
-HXLINE(2400)			_hx_tmp2 = HX_("<extensions xmlns='urn:app:bookmarks:1' />",84,43,42,a9);
+HXLINE(2723)			 ::haxe::ds::StringMap _g =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXDLIN(2723)			_g->set(HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
+HXDLIN(2723)			_hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("extensions",14,7c,70,89),null(),_g);
             		}
-HXDLIN(2400)		this->extensions = _hx_tmp2;
-HXLINE(2401)		this->readUpToId = readUpToId;
-HXLINE(2402)		this->readUpToBy = readUpToBy;
-HXLINE(2403)		this->notificationsFiltered = notificationsFiltered;
-HXLINE(2404)		this->notifyMention = notifyMention;
-HXLINE(2405)		this->notifyReply = notifyReply;
-HXLINE(2406)		this->threads = threads;
-HXLINE(2407)		this->disco = disco;
-HXLINE(2408)		this->mavUntil = mavUntil;
-HXLINE(2409)		this->omemoContactDeviceIDs = omemoContactDeviceIDs;
-HXLINE(2410)		this->klass = klass;
+HXDLIN(2723)		this->extensions = _hx_tmp2;
+HXLINE(2724)		this->readUpToId = readUpToId;
+HXLINE(2725)		this->readUpToBy = readUpToBy;
+HXLINE(2726)		this->notificationsFiltered = notificationsFiltered;
+HXLINE(2727)		this->notifyMention = notifyMention;
+HXLINE(2728)		this->notifyReply = notifyReply;
+HXLINE(2729)		this->threads = threads;
+HXLINE(2730)		this->disco = disco;
+HXLINE(2731)		this->mavUntil = mavUntil;
+HXLINE(2732)		this->omemoContactDeviceIDs = omemoContactDeviceIDs;
+HXLINE(2733)		this->klass = klass;
             	}
 
 Dynamic SerializedChat_obj::__CreateEmpty() { return new SerializedChat_obj; }
@@ -117,134 +126,142 @@ bool SerializedChat_obj::_hx_isInstanceOf(int inClassId) {
 	return inClassId==(int)0x00000001 || inClassId==(int)0x1b18ce3d;
 }
 
- ::borogove::Chat SerializedChat_obj::toChat( ::borogove::Client client, ::borogove::GenericStream stream,::Dynamic persistence){
-            	HX_GC_STACKFRAME(&_hx_pos_10d675922f29bad2_2416_toChat)
-HXLINE(2417)		 ::borogove::Stanza extensionsStanza = ::borogove::Stanza_obj::parse(this->extensions);
-HXLINE(2418)		bool filterN;
-HXDLIN(2418)		 ::Dynamic tmp = this->notificationsFiltered;
-HXDLIN(2418)		if (::hx::IsNotNull( tmp )) {
-HXLINE(2418)			filterN = ( (bool)(tmp) );
+::Dynamic SerializedChat_obj::toChat( ::borogove::Client client, ::borogove::GenericStream stream,::Dynamic persistence){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Chat,chat) HXARGC(1)
+            		 ::borogove::Chat _hx_run(::Array< ::Dynamic> _){
+            			HX_GC_STACKFRAME(&_hx_pos_10d675922f29bad2_2774_toChat)
+HXLINE(2774)			return chat;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_GC_STACKFRAME(&_hx_pos_10d675922f29bad2_2739_toChat)
+HXLINE(2740)		bool filterN;
+HXDLIN(2740)		 ::Dynamic tmp = this->notificationsFiltered;
+HXDLIN(2740)		if (::hx::IsNotNull( tmp )) {
+HXLINE(2740)			filterN = ( (bool)(tmp) );
             		}
             		else {
-HXLINE(2418)			filterN = false;
+HXLINE(2740)			filterN = false;
             		}
-HXLINE(2419)		bool mention = this->notifyMention;
-HXLINE(2422)		{
-HXLINE(2422)			::Dynamic this1 = this->presence;
-HXDLIN(2422)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN(2422)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(2422)				 ::borogove::Stanza _g_value = ( ( ::borogove::Stanza)(::haxe::IMap_obj::get(this1,_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)())) );
-HXLINE(2423)				if (::hx::IsNotNull( _g_value )) {
-HXLINE(2423)					client->capsRepo->getAsync(_g_value);
+HXLINE(2741)		bool mention = this->notifyMention;
+HXLINE(2743)		::Array< ::Dynamic> getCapsPromises = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2745)		{
+HXLINE(2745)			::Dynamic this1 = this->presence;
+HXDLIN(2745)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN(2745)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(2745)				 ::borogove::Stanza _g_value = ( ( ::borogove::Stanza)(::haxe::IMap_obj::get(this1,_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)())) );
+HXLINE(2746)				if (::hx::IsNotNull( _g_value )) {
+HXLINE(2746)					getCapsPromises->push(client->capsRepo->getAsync(_g_value));
             				}
             			}
             		}
-HXLINE(2426)		 ::borogove::Chat chat;
-HXDLIN(2426)		if ((this->klass == HX_("DirectChat",c1,22,a3,05))) {
-HXLINE(2426)			chat =  ::borogove::DirectChat_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBookmarked,this->isBlocked,extensionsStanza,this->readUpToId,this->readUpToBy,this->omemoContactDeviceIDs);
+HXLINE(2749)		 ::borogove::Chat chat;
+HXDLIN(2749)		if ((this->klass == HX_("DirectChat",c1,22,a3,05))) {
+HXLINE(2749)			chat =  ::borogove::DirectChat_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBookmarked,this->isBlocked,this->extensions,this->readUpToId,this->readUpToBy,this->omemoContactDeviceIDs);
             		}
             		else {
-HXLINE(2428)			if ((this->klass == HX_("Channel",a3,28,23,9a))) {
-HXLINE(2429)				 ::borogove::Channel channel =  ::borogove::Channel_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBookmarked,this->isBlocked,extensionsStanza,this->readUpToId,this->readUpToBy,null());
-HXLINE(2430)				channel->membersForName = this->membersForName;
-HXLINE(2431)				channel->mavUntil = this->mavUntil;
-HXLINE(2432)				if (::hx::IsNotNull( this->disco )) {
-HXLINE(2432)					channel->disco = client->capsRepo->add(this->disco,false);
+HXLINE(2751)			if ((this->klass == HX_("Channel",a3,28,23,9a))) {
+HXLINE(2752)				 ::borogove::Channel channel =  ::borogove::Channel_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBookmarked,this->isBlocked,this->extensions,this->readUpToId,this->readUpToBy,null());
+HXLINE(2753)				channel->membersForName = this->membersForName;
+HXLINE(2754)				channel->mavUntil = this->mavUntil;
+HXLINE(2755)				if (::hx::IsNotNull( this->disco )) {
+HXLINE(2755)					channel->disco = client->capsRepo->add(this->disco,false);
             				}
-HXLINE(2433)				bool chat1;
-HXDLIN(2433)				if (::hx::IsNull( this->notificationsFiltered )) {
-HXLINE(2433)					chat1 = !(channel->isPrivate());
+HXLINE(2756)				bool chat1;
+HXDLIN(2756)				if (::hx::IsNull( this->notificationsFiltered )) {
+HXLINE(2756)					chat1 = !(channel->isPrivate());
             				}
             				else {
-HXLINE(2433)					chat1 = false;
+HXLINE(2756)					chat1 = false;
             				}
-HXDLIN(2433)				if (chat1) {
-HXLINE(2434)					filterN = true;
-HXDLIN(2434)					mention = true;
+HXDLIN(2756)				if (chat1) {
+HXLINE(2757)					filterN = true;
+HXDLIN(2757)					mention = true;
             				}
-HXLINE(2426)				chat = channel;
+HXLINE(2749)				chat = channel;
             			}
             			else {
-HXLINE(2438)				HX_STACK_DO_THROW((((HX_("Unknown class of ",0b,cb,7f,f2) + this->chatId) + HX_(": ",a6,32,00,00)) + this->klass));
+HXLINE(2761)				HX_STACK_DO_THROW((((HX_("Unknown class of ",0b,cb,7f,f2) + this->chatId) + HX_(": ",a6,32,00,00)) + this->klass));
             			}
             		}
-HXLINE(2440)		chat->setNotificationsInternal(filterN,mention,this->notifyReply);
-HXLINE(2441)		bool _hx_tmp;
-HXDLIN(2441)		if (::hx::IsNotNull( this->displayName )) {
-HXLINE(2441)			_hx_tmp = (this->displayName != HX_("",00,00,00,00));
+HXLINE(2763)		chat->setNotificationsInternal(filterN,mention,this->notifyReply);
+HXLINE(2764)		bool _hx_tmp;
+HXDLIN(2764)		if (::hx::IsNotNull( this->displayName )) {
+HXLINE(2764)			_hx_tmp = (this->displayName != HX_("",00,00,00,00));
             		}
             		else {
-HXLINE(2441)			_hx_tmp = false;
+HXLINE(2764)			_hx_tmp = false;
             		}
-HXDLIN(2441)		if (_hx_tmp) {
-HXLINE(2441)			chat->displayName = this->displayName;
+HXDLIN(2764)		if (_hx_tmp) {
+HXLINE(2764)			chat->displayName = this->displayName;
             		}
-HXLINE(2442)		if (::hx::IsNotNull( this->avatarSha1 )) {
-HXLINE(2442)			chat->setAvatarSha1(this->avatarSha1);
+HXLINE(2765)		if (::hx::IsNotNull( this->avatarSha1 )) {
+HXLINE(2765)			chat->setAvatarSha1(this->avatarSha1);
             		}
-HXLINE(2443)		chat->status = this->status;
-HXLINE(2444)		chat->setTrusted(this->trusted);
-HXLINE(2445)		{
-HXLINE(2445)			::Dynamic this2 = this->presence;
-HXDLIN(2445)			 ::Dynamic _g_keys1 = ::haxe::IMap_obj::keys(this2);
-HXDLIN(2445)			while(( (bool)(_g_keys1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(2445)				::String key = ( (::String)(_g_keys1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE(2446)				chat->setPresence(key,( ( ::borogove::Stanza)(::haxe::IMap_obj::get(this2,key)) ),true);
+HXLINE(2766)		chat->status = this->status;
+HXLINE(2767)		chat->setTrusted(this->trusted);
+HXLINE(2768)		{
+HXLINE(2768)			::Dynamic this2 = this->presence;
+HXDLIN(2768)			 ::Dynamic _g_keys1 = ::haxe::IMap_obj::keys(this2);
+HXDLIN(2768)			while(( (bool)(_g_keys1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(2768)				::String key = ( (::String)(_g_keys1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(2768)				 ::borogove::Stanza _g_value1 = ( ( ::borogove::Stanza)(::haxe::IMap_obj::get(this2,key)) );
+HXLINE(2769)				chat->setPresence(key,_g_value1,true);
             			}
             		}
-HXLINE(2448)		{
+HXLINE(2771)		{
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,iter_keys) HXARGC(0)
             			bool _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_10d675922f29bad2_2448_toChat)
-HXLINE(2448)				return ( (bool)(iter_keys->__get(0)->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
+            				HX_GC_STACKFRAME(&_hx_pos_10d675922f29bad2_2771_toChat)
+HXLINE(2771)				return ( (bool)(iter_keys->__get(0)->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
             			}
             			HX_END_LOCAL_FUNC0(return)
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::Array< ::Dynamic>,iter_map,::Array< ::Dynamic>,iter_keys) HXARGC(0)
             			 ::Dynamic _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_10d675922f29bad2_2448_toChat)
-HXLINE(2448)				::String key = ( (::String)(iter_keys->__get(0)->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(2448)				 ::Dynamic v =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_GC_STACKFRAME(&_hx_pos_10d675922f29bad2_2771_toChat)
+HXLINE(2771)				::String key = ( (::String)(iter_keys->__get(0)->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(2771)				 ::Dynamic v =  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("key",9f,89,51,00),key)
             					->setFixed(1,HX_("value",71,7f,b8,31),( (::String)(::haxe::IMap_obj::get(iter_map->__get(0),key)) )));
-HXDLIN(2448)				if (::hx::IsEq( v->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic),::borogove::_Chat::Chat_Fields__obj::nullSentinel )) {
-HXLINE(2448)					return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN(2771)				if (::hx::IsEq( v->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic),::borogove::_Chat::Chat_Fields__obj::nullSentinel )) {
+HXLINE(2771)					return  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("key",9f,89,51,00),null())
             						->setFixed(1,HX_("value",71,7f,b8,31), ::Dynamic(v->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic))));
             				}
             				else {
-HXLINE(2448)					return v;
+HXLINE(2771)					return v;
             				}
-HXDLIN(2448)				return null();
+HXDLIN(2771)				return null();
             			}
             			HX_END_LOCAL_FUNC0(return)
 
-HXLINE(2448)			::Array< ::Dynamic> iter_map = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN(2448)			::Array< ::Dynamic> iter_keys = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN(2448)			::Dynamic map = this->threads;
-HXDLIN(2448)			iter_map[0] = map;
-HXDLIN(2448)			iter_keys[0] = ::haxe::IMap_obj::keys(map);
-HXDLIN(2448)			 ::Dynamic _g_hasNext =  ::Dynamic(new _hx_Closure_0(iter_keys));
-HXDLIN(2448)			 ::Dynamic _g_next =  ::Dynamic(new _hx_Closure_1(iter_map,iter_keys));
-HXDLIN(2448)			while(( (bool)(_g_hasNext()) )){
-HXLINE(2448)				 ::Dynamic _g = _g_next();
-HXLINE(2449)				chat->setThreadSubject(( (::String)(_g->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) ),( (::String)(_g->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) ));
+HXLINE(2771)			::Array< ::Dynamic> iter_map = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(2771)			::Array< ::Dynamic> iter_keys = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(2771)			::Dynamic map = this->threads;
+HXDLIN(2771)			iter_map[0] = map;
+HXDLIN(2771)			iter_keys[0] = ::haxe::IMap_obj::keys(map);
+HXDLIN(2771)			 ::Dynamic _g_hasNext =  ::Dynamic(new _hx_Closure_0(iter_keys));
+HXDLIN(2771)			 ::Dynamic _g_next =  ::Dynamic(new _hx_Closure_1(iter_map,iter_keys));
+HXDLIN(2771)			while(( (bool)(_g_hasNext()) )){
+HXLINE(2771)				 ::Dynamic _g = _g_next();
+HXLINE(2772)				chat->setThreadSubject(( (::String)(_g->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) ),( (::String)(_g->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) ));
             			}
             		}
-HXLINE(2451)		return chat;
+HXLINE(2774)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(getCapsPromises), ::Dynamic(new _hx_Closure_2(chat)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(SerializedChat_obj,toChat,return )
 
 
-::hx::ObjectPtr< SerializedChat_obj > SerializedChat_obj::__new(::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status,::String extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass) {
+::hx::ObjectPtr< SerializedChat_obj > SerializedChat_obj::__new(::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass) {
 	::hx::ObjectPtr< SerializedChat_obj > __this = new SerializedChat_obj();
 	__this->__construct(chatId,trusted,isBookmarked,avatarSha1,presence,membersForName,displayName,uiState,isBlocked,status,extensions,readUpToId,readUpToBy,notificationsFiltered,notifyMention,notifyReply,threads,disco,mavUntil,omemoContactDeviceIDs,klass);
 	return __this;
 }
 
-::hx::ObjectPtr< SerializedChat_obj > SerializedChat_obj::__alloc(::hx::Ctx *_hx_ctx,::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status,::String extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass) {
+::hx::ObjectPtr< SerializedChat_obj > SerializedChat_obj::__alloc(::hx::Ctx *_hx_ctx,::String chatId,bool trusted,bool isBookmarked,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::Array< ::Dynamic> membersForName,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked, ::borogove::Status status, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::haxe::ds::StringMap threads, ::borogove::Caps disco,::String mavUntil,::Array< int > omemoContactDeviceIDs,::String klass) {
 	SerializedChat_obj *__this = (SerializedChat_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(SerializedChat_obj), true, "borogove.SerializedChat"));
 	*(void **)__this = SerializedChat_obj::_hx_vtable;
 	__this->__construct(chatId,trusted,isBookmarked,avatarSha1,presence,membersForName,displayName,uiState,isBlocked,status,extensions,readUpToId,readUpToBy,notificationsFiltered,notifyMention,notifyReply,threads,disco,mavUntil,omemoContactDeviceIDs,klass);
@@ -382,7 +399,7 @@ void SerializedChat_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 10:
 		if (HX_FIELD_EQ(inName,"avatarSha1") ) { avatarSha1=inValue.Cast< ::Array< unsigned char > >(); return inValue; }
-		if (HX_FIELD_EQ(inName,"extensions") ) { extensions=inValue.Cast< ::String >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"extensions") ) { extensions=inValue.Cast<  ::borogove::Stanza >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"readUpToId") ) { readUpToId=inValue.Cast< ::String >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"readUpToBy") ) { readUpToBy=inValue.Cast< ::String >(); return inValue; }
 		break;
@@ -444,7 +461,7 @@ static ::hx::StorageInfo SerializedChat_obj_sMemberStorageInfo[] = {
 	{::hx::fsInt,(int)offsetof(SerializedChat_obj,uiState),HX_("uiState",1d,0f,01,14)},
 	{::hx::fsBool,(int)offsetof(SerializedChat_obj,isBlocked),HX_("isBlocked",22,f8,fc,48)},
 	{::hx::fsObject /*  ::borogove::Status */ ,(int)offsetof(SerializedChat_obj,status),HX_("status",32,e7,fb,05)},
-	{::hx::fsString,(int)offsetof(SerializedChat_obj,extensions),HX_("extensions",14,7c,70,89)},
+	{::hx::fsObject /*  ::borogove::Stanza */ ,(int)offsetof(SerializedChat_obj,extensions),HX_("extensions",14,7c,70,89)},
 	{::hx::fsString,(int)offsetof(SerializedChat_obj,readUpToId),HX_("readUpToId",27,7a,f8,75)},
 	{::hx::fsString,(int)offsetof(SerializedChat_obj,readUpToBy),HX_("readUpToBy",23,74,f8,75)},
 	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(SerializedChat_obj,threads),HX_("threads",69,f6,91,53)},
diff --git a/Sources/c_borogove/src/borogove/Sha1.cpp b/Sources/c_borogove/src/borogove/Sha1.cpp
new file mode 100644
index 0000000..e9d90cf
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/Sha1.cpp
@@ -0,0 +1,440 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_38344beec7696400
+#define INCLUDED_38344beec7696400
+#include "cpp/Int64.h"
+#endif
+#ifndef INCLUDED_borogove_Sha1
+#include <borogove/Sha1.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_79273fb10af5a3bd_126_new,"borogove.Sha1","new",0x8c366f04,"borogove.Sha1.new","borogove/Sha1.hx",126,0x8471cf0b)
+static const int _hx_array_data_e591dd12_1[] = {
+	(int)1732584193,(int)-271733879,(int)-1732584194,(int)271733878,(int)-1009589776,
+};
+HX_LOCAL_STACK_FRAME(_hx_pos_79273fb10af5a3bd_133_update,"borogove.Sha1","update",0xf080a5e5,"borogove.Sha1.update","borogove/Sha1.hx",133,0x8471cf0b)
+HX_LOCAL_STACK_FRAME(_hx_pos_79273fb10af5a3bd_154_digest,"borogove.Sha1","digest",0x1ea02020,"borogove.Sha1.digest","borogove/Sha1.hx",154,0x8471cf0b)
+HX_LOCAL_STACK_FRAME(_hx_pos_79273fb10af5a3bd_194_processBlock,"borogove.Sha1","processBlock",0xaa3f7d3a,"borogove.Sha1.processBlock","borogove/Sha1.hx",194,0x8471cf0b)
+HX_LOCAL_STACK_FRAME(_hx_pos_79273fb10af5a3bd_238_ft,"borogove.Sha1","ft",0x4b3f5b2a,"borogove.Sha1.ft","borogove/Sha1.hx",238,0x8471cf0b)
+HX_LOCAL_STACK_FRAME(_hx_pos_79273fb10af5a3bd_251_kt,"borogove.Sha1","kt",0x4b3f5f85,"borogove.Sha1.kt","borogove/Sha1.hx",251,0x8471cf0b)
+HX_LOCAL_STACK_FRAME(_hx_pos_79273fb10af5a3bd_83_make,"borogove.Sha1","make",0x22be6aca,"borogove.Sha1.make","borogove/Sha1.hx",83,0x8471cf0b)
+namespace borogove{
+
+void Sha1_obj::__construct(){
+            	HX_STACKFRAME(&_hx_pos_79273fb10af5a3bd_126_new)
+HXLINE( 127)		this->h = ::Array_obj< int >::fromData( _hx_array_data_e591dd12_1,5);
+HXLINE( 128)		this->buffer = ::haxe::io::Bytes_obj::alloc(64);
+HXLINE( 129)		this->bufferLen = 0;
+HXLINE( 130)		this->totalLen = ( (::cpp::Int64)(0) );
+            	}
+
+Dynamic Sha1_obj::__CreateEmpty() { return new Sha1_obj; }
+
+void *Sha1_obj::_hx_vtable = 0;
+
+Dynamic Sha1_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< Sha1_obj > _hx_result = new Sha1_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool Sha1_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x3562e806;
+}
+
+void Sha1_obj::update( ::haxe::io::Bytes b){
+            	HX_STACKFRAME(&_hx_pos_79273fb10af5a3bd_133_update)
+HXLINE( 134)		if ((b->length == 0)) {
+HXLINE( 134)			return;
+            		}
+HXLINE( 136)		this->totalLen = _hx_int64_add(this->totalLen,( (::cpp::Int64)(b->length) ));
+HXLINE( 138)		int pos = 0;
+HXLINE( 139)		int len = b->length;
+HXLINE( 140)		while((len > 0)){
+HXLINE( 141)			int copyLen;
+HXDLIN( 141)			if ((len < (64 - this->bufferLen))) {
+HXLINE( 141)				copyLen = len;
+            			}
+            			else {
+HXLINE( 141)				copyLen = (64 - this->bufferLen);
+            			}
+HXLINE( 142)			this->buffer->blit(this->bufferLen,b,pos,copyLen);
+HXLINE( 143)			this->bufferLen = (this->bufferLen + copyLen);
+HXLINE( 144)			pos = (pos + copyLen);
+HXLINE( 145)			len = (len - copyLen);
+HXLINE( 147)			if ((this->bufferLen == 64)) {
+HXLINE( 148)				this->processBlock();
+HXLINE( 149)				this->bufferLen = 0;
+            			}
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Sha1_obj,update,(void))
+
+ ::haxe::io::Bytes Sha1_obj::digest(){
+            	HX_STACKFRAME(&_hx_pos_79273fb10af5a3bd_154_digest)
+HXLINE( 155)		this->buffer->b[this->bufferLen] = ( (unsigned char)(128) );
+HXLINE( 156)		this->bufferLen++;
+HXLINE( 158)		if ((this->bufferLen > 56)) {
+HXLINE( 159)			while((this->bufferLen < 64)){
+HXLINE( 160)				this->buffer->b[this->bufferLen] = ( (unsigned char)(0) );
+HXLINE( 161)				this->bufferLen++;
+            			}
+HXLINE( 163)			this->processBlock();
+HXLINE( 164)			this->bufferLen = 0;
+            		}
+HXLINE( 167)		while((this->bufferLen < 56)){
+HXLINE( 168)			this->buffer->b[this->bufferLen] = ( (unsigned char)(0) );
+HXLINE( 169)			this->bufferLen++;
+            		}
+HXLINE( 172)		::cpp::Int64 bitLen = _hx_int64_mul(this->totalLen,( (::cpp::Int64)(8) ));
+HXLINE( 173)		{
+HXLINE( 173)			 ::haxe::io::Bytes _this = this->buffer;
+HXDLIN( 173)			::cpp::Int64 x = _hx_int64_and(_hx_int64_ushr(bitLen,56),( (::cpp::Int64)(255) ));
+HXDLIN( 173)			int _hx_tmp = _hx_int64_high(x);
+HXDLIN( 173)			if ((_hx_tmp != (_hx_int64_low(x) >> 31))) {
+HXLINE( 173)				HX_STACK_DO_THROW(HX_("Overflow",62,9f,ed,1a));
+            			}
+HXDLIN( 173)			int v = _hx_int64_low(x);
+HXDLIN( 173)			_this->b[56] = ( (unsigned char)(v) );
+            		}
+HXLINE( 174)		{
+HXLINE( 174)			 ::haxe::io::Bytes _this1 = this->buffer;
+HXDLIN( 174)			::cpp::Int64 x1 = _hx_int64_ushr(bitLen,48);
+HXDLIN( 174)			int v1 = _hx_int64_high(x1);
+HXDLIN( 174)			if ((v1 != (_hx_int64_low(x1) >> 31))) {
+HXLINE( 174)				HX_STACK_DO_THROW(HX_("Overflow",62,9f,ed,1a));
+            			}
+HXDLIN( 174)			int v2 = (_hx_int64_low(x1) & 255);
+HXDLIN( 174)			_this1->b[57] = ( (unsigned char)(v2) );
+            		}
+HXLINE( 175)		{
+HXLINE( 175)			 ::haxe::io::Bytes _this2 = this->buffer;
+HXDLIN( 175)			::cpp::Int64 x2 = _hx_int64_ushr(bitLen,40);
+HXDLIN( 175)			int v3 = _hx_int64_high(x2);
+HXDLIN( 175)			if ((v3 != (_hx_int64_low(x2) >> 31))) {
+HXLINE( 175)				HX_STACK_DO_THROW(HX_("Overflow",62,9f,ed,1a));
+            			}
+HXDLIN( 175)			int v4 = (_hx_int64_low(x2) & 255);
+HXDLIN( 175)			_this2->b[58] = ( (unsigned char)(v4) );
+            		}
+HXLINE( 176)		{
+HXLINE( 176)			 ::haxe::io::Bytes _this3 = this->buffer;
+HXDLIN( 176)			::cpp::Int64 x3 = _hx_int64_ushr(bitLen,32);
+HXDLIN( 176)			int v5 = _hx_int64_high(x3);
+HXDLIN( 176)			if ((v5 != (_hx_int64_low(x3) >> 31))) {
+HXLINE( 176)				HX_STACK_DO_THROW(HX_("Overflow",62,9f,ed,1a));
+            			}
+HXDLIN( 176)			int v6 = (_hx_int64_low(x3) & 255);
+HXDLIN( 176)			_this3->b[59] = ( (unsigned char)(v6) );
+            		}
+HXLINE( 177)		{
+HXLINE( 177)			 ::haxe::io::Bytes _this4 = this->buffer;
+HXDLIN( 177)			::cpp::Int64 x4 = _hx_int64_ushr(bitLen,24);
+HXDLIN( 177)			int v7 = _hx_int64_high(x4);
+HXDLIN( 177)			if ((v7 != (_hx_int64_low(x4) >> 31))) {
+HXLINE( 177)				HX_STACK_DO_THROW(HX_("Overflow",62,9f,ed,1a));
+            			}
+HXDLIN( 177)			int v8 = (_hx_int64_low(x4) & 255);
+HXDLIN( 177)			_this4->b[60] = ( (unsigned char)(v8) );
+            		}
+HXLINE( 178)		{
+HXLINE( 178)			 ::haxe::io::Bytes _this5 = this->buffer;
+HXDLIN( 178)			::cpp::Int64 x5 = _hx_int64_ushr(bitLen,16);
+HXDLIN( 178)			int v9 = _hx_int64_high(x5);
+HXDLIN( 178)			if ((v9 != (_hx_int64_low(x5) >> 31))) {
+HXLINE( 178)				HX_STACK_DO_THROW(HX_("Overflow",62,9f,ed,1a));
+            			}
+HXDLIN( 178)			int v10 = (_hx_int64_low(x5) & 255);
+HXDLIN( 178)			_this5->b[61] = ( (unsigned char)(v10) );
+            		}
+HXLINE( 179)		{
+HXLINE( 179)			 ::haxe::io::Bytes _this6 = this->buffer;
+HXDLIN( 179)			::cpp::Int64 x6 = _hx_int64_ushr(bitLen,8);
+HXDLIN( 179)			int v11 = _hx_int64_high(x6);
+HXDLIN( 179)			if ((v11 != (_hx_int64_low(x6) >> 31))) {
+HXLINE( 179)				HX_STACK_DO_THROW(HX_("Overflow",62,9f,ed,1a));
+            			}
+HXDLIN( 179)			int v12 = (_hx_int64_low(x6) & 255);
+HXDLIN( 179)			_this6->b[62] = ( (unsigned char)(v12) );
+            		}
+HXLINE( 180)		{
+HXLINE( 180)			 ::haxe::io::Bytes _this7 = this->buffer;
+HXDLIN( 180)			int v13 = _hx_int64_high(bitLen);
+HXDLIN( 180)			if ((v13 != (_hx_int64_low(bitLen) >> 31))) {
+HXLINE( 180)				HX_STACK_DO_THROW(HX_("Overflow",62,9f,ed,1a));
+            			}
+HXDLIN( 180)			int v14 = (_hx_int64_low(bitLen) & 255);
+HXDLIN( 180)			_this7->b[63] = ( (unsigned char)(v14) );
+            		}
+HXLINE( 182)		this->processBlock();
+HXLINE( 184)		 ::haxe::io::Bytes out = ::haxe::io::Bytes_obj::alloc(20);
+HXLINE( 185)		{
+HXLINE( 185)			int _g = 0;
+HXDLIN( 185)			while((_g < 5)){
+HXLINE( 185)				_g = (_g + 1);
+HXDLIN( 185)				int i = (_g - 1);
+HXLINE( 186)				out->b[(i * 4)] = ( (unsigned char)(::hx::UShr(this->h->__get(i),24)) );
+HXLINE( 187)				out->b[((i * 4) + 1)] = ( (unsigned char)(((this->h->__get(i) >> 16) & 255)) );
+HXLINE( 188)				out->b[((i * 4) + 2)] = ( (unsigned char)(((this->h->__get(i) >> 8) & 255)) );
+HXLINE( 189)				out->b[((i * 4) + 3)] = ( (unsigned char)((this->h->__get(i) & 255)) );
+            			}
+            		}
+HXLINE( 191)		return out;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Sha1_obj,digest,return )
+
+void Sha1_obj::processBlock(){
+            	HX_STACKFRAME(&_hx_pos_79273fb10af5a3bd_194_processBlock)
+HXLINE( 195)		::Array< int > w = ::Array_obj< int >::__new();
+HXLINE( 196)		{
+HXLINE( 196)			int _g = 0;
+HXDLIN( 196)			while((_g < 16)){
+HXLINE( 196)				_g = (_g + 1);
+HXDLIN( 196)				int j = (_g - 1);
+HXLINE( 197)				w[j] = ((((( (int)(this->buffer->b->__get((j * 4))) ) << 24) | ((( (int)(this->buffer->b->__get(((j * 4) + 1))) ) & 255) << 16)) | ((( (int)(this->buffer->b->__get(((j * 4) + 2))) ) & 255) << 8)) | (( (int)(this->buffer->b->__get(((j * 4) + 3))) ) & 255));
+            			}
+            		}
+HXLINE( 203)		int a = this->h->__get(0);
+HXLINE( 204)		int b = this->h->__get(1);
+HXLINE( 205)		int c = this->h->__get(2);
+HXLINE( 206)		int d = this->h->__get(3);
+HXLINE( 207)		int e = this->h->__get(4);
+HXLINE( 209)		{
+HXLINE( 209)			int _g1 = 0;
+HXDLIN( 209)			while((_g1 < 80)){
+HXLINE( 209)				_g1 = (_g1 + 1);
+HXDLIN( 209)				int j1 = (_g1 - 1);
+HXLINE( 210)				if ((j1 >= 16)) {
+HXLINE( 211)					int num = (((w->__get((j1 - 3)) ^ w->__get((j1 - 8))) ^ w->__get((j1 - 14))) ^ w->__get((j1 - 16)));
+HXDLIN( 211)					w[j1] = ((num << 1) | ::hx::UShr(num,31));
+            				}
+HXLINE( 213)				int t = ((((a << 5) | ::hx::UShr(a,27)) + this->ft(j1,b,c,d)) + e);
+HXDLIN( 213)				int t1 = (t + w->__get(j1));
+HXLINE( 214)				e = d;
+HXLINE( 215)				d = c;
+HXLINE( 216)				c = ((b << 30) | ::hx::UShr(b,2));
+HXLINE( 217)				b = a;
+HXLINE( 218)				a = (t1 + this->kt(j1));
+            			}
+            		}
+HXLINE( 221)		::Array< int > base = this->h;
+HXDLIN( 221)		base[0] = (base->__get(0) + a);
+HXLINE( 222)		::Array< int > base1 = this->h;
+HXDLIN( 222)		base1[1] = (base1->__get(1) + b);
+HXLINE( 223)		::Array< int > base2 = this->h;
+HXDLIN( 223)		base2[2] = (base2->__get(2) + c);
+HXLINE( 224)		::Array< int > base3 = this->h;
+HXDLIN( 224)		base3[3] = (base3->__get(3) + d);
+HXLINE( 225)		::Array< int > base4 = this->h;
+HXDLIN( 225)		base4[4] = (base4->__get(4) + e);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Sha1_obj,processBlock,(void))
+
+int Sha1_obj::ft(int t,int b,int c,int d){
+            	HX_STACKFRAME(&_hx_pos_79273fb10af5a3bd_238_ft)
+HXLINE( 239)		if ((t < 20)) {
+HXLINE( 240)			return ((b & c) | (~(b) & d));
+            		}
+HXLINE( 241)		if ((t < 40)) {
+HXLINE( 242)			return ((b ^ c) ^ d);
+            		}
+HXLINE( 243)		if ((t < 60)) {
+HXLINE( 244)			return (((b & c) | (b & d)) | (c & d));
+            		}
+HXLINE( 245)		return ((b ^ c) ^ d);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC4(Sha1_obj,ft,return )
+
+int Sha1_obj::kt(int t){
+            	HX_STACKFRAME(&_hx_pos_79273fb10af5a3bd_251_kt)
+HXLINE( 252)		if ((t < 20)) {
+HXLINE( 253)			return (int)1518500249;
+            		}
+HXLINE( 254)		if ((t < 40)) {
+HXLINE( 255)			return (int)1859775393;
+            		}
+HXLINE( 256)		if ((t < 60)) {
+HXLINE( 257)			return (int)-1894007588;
+            		}
+HXLINE( 258)		return -899497514;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Sha1_obj,kt,return )
+
+ ::haxe::io::Bytes Sha1_obj::make( ::haxe::io::Bytes b){
+            	HX_GC_STACKFRAME(&_hx_pos_79273fb10af5a3bd_83_make)
+HXLINE(  84)		 ::borogove::Sha1 sh =  ::borogove::Sha1_obj::__alloc( HX_CTX );
+HXLINE(  85)		sh->update(b);
+HXLINE(  86)		return sh->digest();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Sha1_obj,make,return )
+
+
+::hx::ObjectPtr< Sha1_obj > Sha1_obj::__new() {
+	::hx::ObjectPtr< Sha1_obj > __this = new Sha1_obj();
+	__this->__construct();
+	return __this;
+}
+
+::hx::ObjectPtr< Sha1_obj > Sha1_obj::__alloc(::hx::Ctx *_hx_ctx) {
+	Sha1_obj *__this = (Sha1_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Sha1_obj), true, "borogove.Sha1"));
+	*(void **)__this = Sha1_obj::_hx_vtable;
+	__this->__construct();
+	return __this;
+}
+
+Sha1_obj::Sha1_obj()
+{
+}
+
+void Sha1_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(Sha1);
+	HX_MARK_MEMBER_NAME(h,"h");
+	HX_MARK_MEMBER_NAME(buffer,"buffer");
+	HX_MARK_MEMBER_NAME(bufferLen,"bufferLen");
+	HX_MARK_MEMBER_NAME(totalLen,"totalLen");
+	HX_MARK_END_CLASS();
+}
+
+void Sha1_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(h,"h");
+	HX_VISIT_MEMBER_NAME(buffer,"buffer");
+	HX_VISIT_MEMBER_NAME(bufferLen,"bufferLen");
+	HX_VISIT_MEMBER_NAME(totalLen,"totalLen");
+}
+
+::hx::Val Sha1_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 1:
+		if (HX_FIELD_EQ(inName,"h") ) { return ::hx::Val( h ); }
+		break;
+	case 2:
+		if (HX_FIELD_EQ(inName,"ft") ) { return ::hx::Val( ft_dyn() ); }
+		if (HX_FIELD_EQ(inName,"kt") ) { return ::hx::Val( kt_dyn() ); }
+		break;
+	case 6:
+		if (HX_FIELD_EQ(inName,"buffer") ) { return ::hx::Val( buffer ); }
+		if (HX_FIELD_EQ(inName,"update") ) { return ::hx::Val( update_dyn() ); }
+		if (HX_FIELD_EQ(inName,"digest") ) { return ::hx::Val( digest_dyn() ); }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"totalLen") ) { return ::hx::Val( totalLen ); }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"bufferLen") ) { return ::hx::Val( bufferLen ); }
+		break;
+	case 12:
+		if (HX_FIELD_EQ(inName,"processBlock") ) { return ::hx::Val( processBlock_dyn() ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+bool Sha1_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 4:
+		if (HX_FIELD_EQ(inName,"make") ) { outValue = make_dyn(); return true; }
+	}
+	return false;
+}
+
+::hx::Val Sha1_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 1:
+		if (HX_FIELD_EQ(inName,"h") ) { h=inValue.Cast< ::Array< int > >(); return inValue; }
+		break;
+	case 6:
+		if (HX_FIELD_EQ(inName,"buffer") ) { buffer=inValue.Cast<  ::haxe::io::Bytes >(); return inValue; }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"totalLen") ) { totalLen=inValue.Cast< ::cpp::Int64 >(); return inValue; }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"bufferLen") ) { bufferLen=inValue.Cast< int >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+void Sha1_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("h",68,00,00,00));
+	outFields->push(HX_("buffer",00,bd,94,d0));
+	outFields->push(HX_("bufferLen",b5,66,79,b1));
+	outFields->push(HX_("totalLen",71,62,8b,75));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo Sha1_obj_sMemberStorageInfo[] = {
+	{::hx::fsObject /* ::Array< int > */ ,(int)offsetof(Sha1_obj,h),HX_("h",68,00,00,00)},
+	{::hx::fsObject /*  ::haxe::io::Bytes */ ,(int)offsetof(Sha1_obj,buffer),HX_("buffer",00,bd,94,d0)},
+	{::hx::fsInt,(int)offsetof(Sha1_obj,bufferLen),HX_("bufferLen",b5,66,79,b1)},
+	{::hx::fsUnknown /* ::cpp::Int64 */ ,(int)offsetof(Sha1_obj,totalLen),HX_("totalLen",71,62,8b,75)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo *Sha1_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String Sha1_obj_sMemberFields[] = {
+	HX_("h",68,00,00,00),
+	HX_("buffer",00,bd,94,d0),
+	HX_("bufferLen",b5,66,79,b1),
+	HX_("totalLen",71,62,8b,75),
+	HX_("update",09,86,05,87),
+	HX_("digest",44,00,25,b5),
+	HX_("processBlock",5e,10,b1,9c),
+	HX_("ft",4e,59,00,00),
+	HX_("kt",a9,5d,00,00),
+	::String(null()) };
+
+::hx::Class Sha1_obj::__mClass;
+
+static ::String Sha1_obj_sStaticFields[] = {
+	HX_("make",ee,39,56,48),
+	::String(null())
+};
+
+void Sha1_obj::__register()
+{
+	Sha1_obj _hx_dummy;
+	Sha1_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.Sha1",12,dd,91,e5);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &Sha1_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(Sha1_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(Sha1_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< Sha1_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = Sha1_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = Sha1_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/Stanza.cpp b/Sources/c_borogove/src/borogove/Stanza.cpp
index cacf427..61ee7c0 100644
--- a/Sources/c_borogove/src/borogove/Stanza.cpp
+++ b/Sources/c_borogove/src/borogove/Stanza.cpp
@@ -7,6 +7,12 @@
 #ifndef INCLUDED_Reflect
 #include <Reflect.h>
 #endif
+#ifndef INCLUDED_Xml
+#include <Xml.h>
+#endif
+#ifndef INCLUDED__Xml_XmlType_Impl_
+#include <_Xml/XmlType_Impl_.h>
+#endif
 #ifndef INCLUDED_borogove_EventEmitter
 #include <borogove/EventEmitter.h>
 #endif
@@ -28,53 +34,73 @@
 #ifndef INCLUDED_haxe_Exception
 #include <haxe/Exception.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_67_new,"borogove.Stanza","new",0x686a19b4,"borogove.Stanza.new","borogove/Stanza.hx",67,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_83_serialize,"borogove.Stanza","serialize",0xd5705e34,"borogove.Stanza.serialize","borogove/Stanza.hx",83,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_118_toString,"borogove.Stanza","toString",0x63ea36d8,"borogove.Stanza.toString","borogove/Stanza.hx",118,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_158_tag,"borogove.Stanza","tag",0x686ea3ae,"borogove.Stanza.tag","borogove/Stanza.hx",158,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_167_text,"borogove.Stanza","text",0xf863acd9,"borogove.Stanza.text","borogove/Stanza.hx",167,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_173_textTag,"borogove.Stanza","textTag",0x67df3301,"borogove.Stanza.textTag","borogove/Stanza.hx",173,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_179_up,"borogove.Stanza","up",0xef3fa387,"borogove.Stanza.up","borogove/Stanza.hx",179,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_186_reset,"borogove.Stanza","reset",0x38029023,"borogove.Stanza.reset","borogove/Stanza.hx",186,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_192_addChildren,"borogove.Stanza","addChildren",0x1e040dd4,"borogove.Stanza.addChildren","borogove/Stanza.hx",192,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_201_addChildNodes,"borogove.Stanza","addChildNodes",0xfdaa2cca,"borogove.Stanza.addChildNodes","borogove/Stanza.hx",201,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_209_insertChild,"borogove.Stanza","insertChild",0x09ac44f7,"borogove.Stanza.insertChild","borogove/Stanza.hx",209,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_215_addChild,"borogove.Stanza","addChild",0xea9235e7,"borogove.Stanza.addChild","borogove/Stanza.hx",215,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_221_addDirectChild,"borogove.Stanza","addDirectChild",0xc782103e,"borogove.Stanza.addDirectChild","borogove/Stanza.hx",221,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_227_clone,"borogove.Stanza","clone",0x999d59b1,"borogove.Stanza.clone","borogove/Stanza.hx",227,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_239_allTags,"borogove.Stanza","allTags",0x205b01ee,"borogove.Stanza.allTags","borogove/Stanza.hx",239,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_261_allText,"borogove.Stanza","allText",0x205e19c2,"borogove.Stanza.allText","borogove/Stanza.hx",261,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_272_getFirstChild,"borogove.Stanza","getFirstChild",0x353109d6,"borogove.Stanza.getFirstChild","borogove/Stanza.hx",272,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_275_getErrorText,"borogove.Stanza","getErrorText",0xbc80d14b,"borogove.Stanza.getErrorText","borogove/Stanza.hx",275,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_284_getChild,"borogove.Stanza","getChild",0xd10c1f52,"borogove.Stanza.getChild","borogove/Stanza.hx",284,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_301_getChildText,"borogove.Stanza","getChildText",0x21b6291f,"borogove.Stanza.getChildText","borogove/Stanza.hx",301,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_310_hasChild,"borogove.Stanza","hasChild",0xfd8d5a0e,"borogove.Stanza.hasChild","borogove/Stanza.hx",310,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_314_getText,"borogove.Stanza","getText",0xe893ffb7,"borogove.Stanza.getText","borogove/Stanza.hx",314,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_317_find,"borogove.Stanza","find",0xef25b065,"borogove.Stanza.find","borogove/Stanza.hx",317,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_355_findChild,"borogove.Stanza","findChild",0x152edaf7,"borogove.Stanza.findChild","borogove/Stanza.hx",355,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_366_findText,"borogove.Stanza","findText",0xcb093fb2,"borogove.Stanza.findText","borogove/Stanza.hx",366,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_377_traverse,"borogove.Stanza","traverse",0x97e5e3de,"borogove.Stanza.traverse","borogove/Stanza.hx",377,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_387_reduce,"borogove.Stanza","reduce",0xc05d70d2,"borogove.Stanza.reduce","borogove/Stanza.hx",387,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_393_getError,"borogove.Stanza","getError",0xfe7c417e,"borogove.Stanza.getError","borogove/Stanza.hx",393,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_406_removeChild,"borogove.Stanza","removeChild",0xc02b440c,"borogove.Stanza.removeChild","borogove/Stanza.hx",406,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_416_removeChildren,"borogove.Stanza","removeChildren",0x677ca4cf,"borogove.Stanza.removeChildren","borogove/Stanza.hx",416,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_121_parse,"borogove.Stanza","parse",0x0e8fd687,"borogove.Stanza.parse","borogove/Stanza.hx",121,0xaf8a101b)
-HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_436_parseXmlBool,"borogove.Stanza","parseXmlBool",0x01d395da,"borogove.Stanza.parseXmlBool","borogove/Stanza.hx",436,0xaf8a101b)
+HX_DEFINE_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_66_new,"borogove.Stanza","new",0x686a19b4,"borogove.Stanza.new","borogove/Stanza.hx",66,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_87_serialize,"borogove.Stanza","serialize",0xd5705e34,"borogove.Stanza.serialize","borogove/Stanza.hx",87,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_122_toString,"borogove.Stanza","toString",0x63ea36d8,"borogove.Stanza.toString","borogove/Stanza.hx",122,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_156_tag,"borogove.Stanza","tag",0x686ea3ae,"borogove.Stanza.tag","borogove/Stanza.hx",156,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_165_text,"borogove.Stanza","text",0xf863acd9,"borogove.Stanza.text","borogove/Stanza.hx",165,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_171_textTag,"borogove.Stanza","textTag",0x67df3301,"borogove.Stanza.textTag","borogove/Stanza.hx",171,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_178_atTop,"borogove.Stanza","atTop",0x780569b6,"borogove.Stanza.atTop","borogove/Stanza.hx",178,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_181_up,"borogove.Stanza","up",0xef3fa387,"borogove.Stanza.up","borogove/Stanza.hx",181,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_188_reset,"borogove.Stanza","reset",0x38029023,"borogove.Stanza.reset","borogove/Stanza.hx",188,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_194_addChildren,"borogove.Stanza","addChildren",0x1e040dd4,"borogove.Stanza.addChildren","borogove/Stanza.hx",194,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_203_addChildNodes,"borogove.Stanza","addChildNodes",0xfdaa2cca,"borogove.Stanza.addChildNodes","borogove/Stanza.hx",203,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_211_insertChild,"borogove.Stanza","insertChild",0x09ac44f7,"borogove.Stanza.insertChild","borogove/Stanza.hx",211,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_217_addChild,"borogove.Stanza","addChild",0xea9235e7,"borogove.Stanza.addChild","borogove/Stanza.hx",217,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_223_addDirectChild,"borogove.Stanza","addDirectChild",0xc782103e,"borogove.Stanza.addDirectChild","borogove/Stanza.hx",223,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_229_clone,"borogove.Stanza","clone",0x999d59b1,"borogove.Stanza.clone","borogove/Stanza.hx",229,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_241_allTags,"borogove.Stanza","allTags",0x205b01ee,"borogove.Stanza.allTags","borogove/Stanza.hx",241,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_263_allText,"borogove.Stanza","allText",0x205e19c2,"borogove.Stanza.allText","borogove/Stanza.hx",263,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_274_getFirstChild,"borogove.Stanza","getFirstChild",0x353109d6,"borogove.Stanza.getFirstChild","borogove/Stanza.hx",274,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_277_getErrorText,"borogove.Stanza","getErrorText",0xbc80d14b,"borogove.Stanza.getErrorText","borogove/Stanza.hx",277,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_286_getChild,"borogove.Stanza","getChild",0xd10c1f52,"borogove.Stanza.getChild","borogove/Stanza.hx",286,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_303_getChildText,"borogove.Stanza","getChildText",0x21b6291f,"borogove.Stanza.getChildText","borogove/Stanza.hx",303,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_312_hasChild,"borogove.Stanza","hasChild",0xfd8d5a0e,"borogove.Stanza.hasChild","borogove/Stanza.hx",312,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_316_getText,"borogove.Stanza","getText",0xe893ffb7,"borogove.Stanza.getText","borogove/Stanza.hx",316,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_319_find,"borogove.Stanza","find",0xef25b065,"borogove.Stanza.find","borogove/Stanza.hx",319,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_358_findChild,"borogove.Stanza","findChild",0x152edaf7,"borogove.Stanza.findChild","borogove/Stanza.hx",358,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_369_findText,"borogove.Stanza","findText",0xcb093fb2,"borogove.Stanza.findText","borogove/Stanza.hx",369,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_380_traverse,"borogove.Stanza","traverse",0x97e5e3de,"borogove.Stanza.traverse","borogove/Stanza.hx",380,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_390_reduce,"borogove.Stanza","reduce",0xc05d70d2,"borogove.Stanza.reduce","borogove/Stanza.hx",390,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_396_getError,"borogove.Stanza","getError",0xfe7c417e,"borogove.Stanza.getError","borogove/Stanza.hx",396,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_409_removeChild,"borogove.Stanza","removeChild",0xc02b440c,"borogove.Stanza.removeChild","borogove/Stanza.hx",409,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_419_removeChildren,"borogove.Stanza","removeChildren",0x677ca4cf,"borogove.Stanza.removeChildren","borogove/Stanza.hx",419,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_125_parse,"borogove.Stanza","parse",0x0e8fd687,"borogove.Stanza.parse","borogove/Stanza.hx",125,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_138_fromXml,"borogove.Stanza","fromXml",0x211dc1e1,"borogove.Stanza.fromXml","borogove/Stanza.hx",138,0xaf8a101b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f25e9a34e2b06c56_439_parseXmlBool,"borogove.Stanza","parseXmlBool",0x01d395da,"borogove.Stanza.parseXmlBool","borogove/Stanza.hx",439,0xaf8a101b)
 namespace borogove{
 
-void Stanza_obj::__construct(::String name, ::Dynamic attr){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_67_new)
-HXLINE(  73)		this->serialized = null();
-HXLINE(  72)		this->last_added_stack = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(  70)		this->children = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(  69)		this->attr =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE(  68)		this->name = null();
-HXLINE(  76)		this->name = name;
-HXLINE(  77)		if (::hx::IsNotNull( attr )) {
-HXLINE(  78)			this->attr = attr;
+void Stanza_obj::__construct(::String name, ::Dynamic attr, ::haxe::ds::StringMap attrMap){
+            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_66_new)
+HXLINE(  72)		this->serialized = null();
+HXLINE(  71)		this->last_added_stack = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(  69)		this->children = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(  67)		this->name = null();
+HXLINE(  75)		this->name = name;
+HXLINE(  76)		if (::hx::IsNotNull( attrMap )) {
+HXLINE(  77)			this->attr = attrMap;
             		}
-HXLINE(  80)		this->last_added = ::hx::ObjectPtr<OBJ_>(this);
+            		else {
+HXLINE(  79)			this->attr =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+            		}
+HXLINE(  81)		if (::hx::IsNotNull( attr )) {
+HXLINE(  82)			::Array< ::String > _g_keys = ::Reflect_obj::fields(attr);
+HXDLIN(  82)			int _g_index = 0;
+HXDLIN(  82)			while((_g_index < _g_keys->length)){
+HXLINE(  82)				_g_index = (_g_index + 1);
+HXDLIN(  82)				::String key = _g_keys->__get((_g_index - 1));
+HXDLIN(  82)				::String _g_value = ( (::String)(::Reflect_obj::field(attr,key)) );
+HXDLIN(  82)				this->attr->set(key,_g_value);
+            			}
+            		}
+HXLINE(  84)		this->last_added = ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 Dynamic Stanza_obj::__CreateEmpty() { return new Stanza_obj; }
@@ -84,7 +110,7 @@ void *Stanza_obj::_hx_vtable = 0;
 Dynamic Stanza_obj::__Create(::hx::DynamicArray inArgs)
 {
 	::hx::ObjectPtr< Stanza_obj > _hx_result = new Stanza_obj();
-	_hx_result->__construct(inArgs[0],inArgs[1]);
+	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2]);
 	return _hx_result;
 }
 
@@ -93,718 +119,794 @@ bool Stanza_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Stanza_obj::serialize(){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_83_serialize)
-HXLINE(  84)		if (::hx::IsNotNull( this->serialized )) {
-HXLINE(  84)			return this->serialized;
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_87_serialize)
+HXLINE(  88)		if (::hx::IsNotNull( this->serialized )) {
+HXLINE(  88)			return this->serialized;
             		}
-HXLINE(  87)		return (this->serialized = ::borogove::streams::XmppStropheStream_obj::serializeStanza(::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(  91)		return (this->serialized = ::borogove::streams::XmppStropheStream_obj::serializeStanza(::hx::ObjectPtr<OBJ_>(this)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Stanza_obj,serialize,return )
 
 ::String Stanza_obj::toString(){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_118_toString)
-HXDLIN( 118)		return this->serialize();
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_122_toString)
+HXDLIN( 122)		return this->serialize();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Stanza_obj,toString,return )
 
- ::borogove::Stanza Stanza_obj::tag(::String name, ::Dynamic attr){
-            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_158_tag)
-HXLINE( 159)		this->serialized = null();
-HXLINE( 160)		 ::borogove::Stanza child =  ::borogove::Stanza_obj::__alloc( HX_CTX ,name,attr);
-HXLINE( 161)		this->last_added->addDirectChild(::borogove::Node_obj::Element(child));
-HXLINE( 162)		this->last_added_stack->push(this->last_added);
-HXLINE( 163)		this->last_added = child;
-HXLINE( 164)		return ::hx::ObjectPtr<OBJ_>(this);
+ ::borogove::Stanza Stanza_obj::tag(::String name, ::Dynamic attr, ::haxe::ds::StringMap attrMap){
+            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_156_tag)
+HXLINE( 157)		this->serialized = null();
+HXLINE( 158)		 ::borogove::Stanza child =  ::borogove::Stanza_obj::__alloc( HX_CTX ,name,attr,attrMap);
+HXLINE( 159)		this->last_added->addDirectChild(::borogove::Node_obj::Element(child));
+HXLINE( 160)		this->last_added_stack->push(this->last_added);
+HXLINE( 161)		this->last_added = child;
+HXLINE( 162)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC2(Stanza_obj,tag,return )
+HX_DEFINE_DYNAMIC_FUNC3(Stanza_obj,tag,return )
 
  ::borogove::Stanza Stanza_obj::text(::String content){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_167_text)
-HXLINE( 168)		this->serialized = null();
-HXLINE( 169)		this->last_added->addDirectChild(::borogove::Node_obj::CData(content));
-HXLINE( 170)		return ::hx::ObjectPtr<OBJ_>(this);
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_165_text)
+HXLINE( 166)		this->serialized = null();
+HXLINE( 167)		this->last_added->addDirectChild(::borogove::Node_obj::CData(content));
+HXLINE( 168)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,text,return )
 
- ::borogove::Stanza Stanza_obj::textTag(::String tagName,::String textContent, ::Dynamic attr){
-            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_173_textTag)
-HXLINE( 174)		this->serialized = null();
-HXLINE( 175)		 ::borogove::Stanza _hx_tmp = this->last_added;
-HXDLIN( 175)		 ::Dynamic _hx_tmp1;
-HXDLIN( 175)		if (::hx::IsNotNull( attr )) {
-HXLINE( 175)			_hx_tmp1 = attr;
-            		}
-            		else {
-HXLINE( 175)			_hx_tmp1 =  ::Dynamic(::hx::Anon_obj::Create(0));
-            		}
-HXDLIN( 175)		_hx_tmp->addDirectChild(::borogove::Node_obj::Element( ::borogove::Stanza_obj::__alloc( HX_CTX ,tagName,_hx_tmp1)->text(textContent)));
-HXLINE( 176)		return ::hx::ObjectPtr<OBJ_>(this);
+ ::borogove::Stanza Stanza_obj::textTag(::String tagName,::String textContent, ::Dynamic attr, ::haxe::ds::StringMap attrMap){
+            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_171_textTag)
+HXLINE( 172)		this->serialized = null();
+HXLINE( 173)		 ::borogove::Stanza _hx_tmp = this->last_added;
+HXDLIN( 173)		_hx_tmp->addDirectChild(::borogove::Node_obj::Element( ::borogove::Stanza_obj::__alloc( HX_CTX ,tagName,attr,attrMap)->text(textContent)));
+HXLINE( 174)		return ::hx::ObjectPtr<OBJ_>(this);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC4(Stanza_obj,textTag,return )
+
+bool Stanza_obj::atTop(){
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_178_atTop)
+HXDLIN( 178)		return ::hx::IsInstanceEq( this->last_added,::hx::ObjectPtr<OBJ_>(this) );
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC3(Stanza_obj,textTag,return )
+HX_DEFINE_DYNAMIC_FUNC0(Stanza_obj,atTop,return )
 
  ::borogove::Stanza Stanza_obj::up(){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_179_up)
-HXLINE( 180)		if (::hx::IsInstanceNotEq( this->last_added,::hx::ObjectPtr<OBJ_>(this) )) {
-HXLINE( 181)			this->last_added = this->last_added_stack->pop().StaticCast<  ::borogove::Stanza >();
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_181_up)
+HXLINE( 182)		if (::hx::IsInstanceNotEq( this->last_added,::hx::ObjectPtr<OBJ_>(this) )) {
+HXLINE( 183)			this->last_added = this->last_added_stack->pop().StaticCast<  ::borogove::Stanza >();
             		}
-HXLINE( 183)		return ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 185)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Stanza_obj,up,return )
 
  ::borogove::Stanza Stanza_obj::reset(){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_186_reset)
-HXLINE( 187)		this->last_added = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 188)		return ::hx::ObjectPtr<OBJ_>(this);
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_188_reset)
+HXLINE( 189)		this->last_added = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 190)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Stanza_obj,reset,return )
 
  ::borogove::Stanza Stanza_obj::addChildren( ::Dynamic children){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_192_addChildren)
-HXLINE( 193)		this->serialized = null();
-HXLINE( 194)		{
-HXLINE( 194)			 ::Dynamic child = children->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 194)			while(( (bool)(child->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 195)				this->addChild(( ( ::borogove::Stanza)(child->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) ));
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_194_addChildren)
+HXLINE( 195)		this->serialized = null();
+HXLINE( 196)		{
+HXLINE( 196)			 ::Dynamic child = children->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 196)			while(( (bool)(child->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 197)				this->addChild(( ( ::borogove::Stanza)(child->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) ));
             			}
             		}
-HXLINE( 197)		return ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 199)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,addChildren,return )
 
  ::borogove::Stanza Stanza_obj::addChildNodes( ::Dynamic children){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_201_addChildNodes)
-HXLINE( 202)		this->serialized = null();
-HXLINE( 203)		{
-HXLINE( 203)			 ::Dynamic child = children->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 203)			while(( (bool)(child->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 204)				this->addDirectChild(child->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_203_addChildNodes)
+HXLINE( 204)		this->serialized = null();
+HXLINE( 205)		{
+HXLINE( 205)			 ::Dynamic child = children->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 205)			while(( (bool)(child->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 206)				this->addDirectChild(child->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             			}
             		}
-HXLINE( 206)		return ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 208)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,addChildNodes,return )
 
  ::borogove::Stanza Stanza_obj::insertChild(int idx, ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_209_insertChild)
-HXLINE( 210)		this->serialized = null();
-HXLINE( 211)		this->last_added->children->insert(idx,::borogove::Node_obj::Element(stanza));
-HXLINE( 212)		return ::hx::ObjectPtr<OBJ_>(this);
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_211_insertChild)
+HXLINE( 212)		this->serialized = null();
+HXLINE( 213)		this->last_added->children->insert(idx,::borogove::Node_obj::Element(stanza));
+HXLINE( 214)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Stanza_obj,insertChild,return )
 
  ::borogove::Stanza Stanza_obj::addChild( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_215_addChild)
-HXLINE( 216)		this->serialized = null();
-HXLINE( 217)		this->last_added->children->push(::borogove::Node_obj::Element(stanza));
-HXLINE( 218)		return ::hx::ObjectPtr<OBJ_>(this);
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_217_addChild)
+HXLINE( 218)		this->serialized = null();
+HXLINE( 219)		this->last_added->children->push(::borogove::Node_obj::Element(stanza));
+HXLINE( 220)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,addChild,return )
 
  ::borogove::Stanza Stanza_obj::addDirectChild( ::borogove::Node child){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_221_addDirectChild)
-HXLINE( 222)		this->serialized = null();
-HXLINE( 223)		this->children->push(child);
-HXLINE( 224)		return ::hx::ObjectPtr<OBJ_>(this);
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_223_addDirectChild)
+HXLINE( 224)		this->serialized = null();
+HXLINE( 225)		this->children->push(child);
+HXLINE( 226)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,addDirectChild,return )
 
  ::borogove::Stanza Stanza_obj::clone(){
-            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_227_clone)
-HXLINE( 228)		 ::borogove::Stanza clone =  ::borogove::Stanza_obj::__alloc( HX_CTX ,this->name,this->attr);
-HXLINE( 229)		{
-HXLINE( 229)			int _g = 0;
-HXDLIN( 229)			::Array< ::Dynamic> _g1 = this->children;
-HXDLIN( 229)			while((_g < _g1->length)){
-HXLINE( 229)				 ::borogove::Node child = _g1->__get(_g).StaticCast<  ::borogove::Node >();
-HXDLIN( 229)				_g = (_g + 1);
-HXLINE( 230)				 ::borogove::Node _hx_tmp;
-HXDLIN( 230)				switch((int)(child->_hx_getIndex())){
+            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_229_clone)
+HXLINE( 230)		 ::borogove::Stanza clone =  ::borogove::Stanza_obj::__alloc( HX_CTX ,this->name,null(),this->attr);
+HXLINE( 231)		{
+HXLINE( 231)			int _g = 0;
+HXDLIN( 231)			::Array< ::Dynamic> _g1 = this->children;
+HXDLIN( 231)			while((_g < _g1->length)){
+HXLINE( 231)				 ::borogove::Node child = _g1->__get(_g).StaticCast<  ::borogove::Node >();
+HXDLIN( 231)				_g = (_g + 1);
+HXLINE( 232)				 ::borogove::Node _hx_tmp;
+HXDLIN( 232)				switch((int)(child->_hx_getIndex())){
             					case (int)0: {
-HXLINE( 230)						_hx_tmp = ::borogove::Node_obj::Element(child->_hx_getObject(0).StaticCast<  ::borogove::Stanza >()->clone());
+HXLINE( 232)						_hx_tmp = ::borogove::Node_obj::Element(child->_hx_getObject(0).StaticCast<  ::borogove::Stanza >()->clone());
             					}
             					break;
             					case (int)1: {
-HXLINE( 230)						_hx_tmp = ::borogove::Node_obj::CData(child->_hx_getString(0));
+HXLINE( 232)						_hx_tmp = ::borogove::Node_obj::CData(child->_hx_getString(0));
             					}
             					break;
             				}
-HXDLIN( 230)				clone->addDirectChild(_hx_tmp);
+HXDLIN( 232)				clone->addDirectChild(_hx_tmp);
             			}
             		}
-HXLINE( 235)		clone->serialized = this->serialized;
-HXLINE( 236)		return clone;
+HXLINE( 237)		clone->serialized = this->serialized;
+HXLINE( 238)		return clone;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Stanza_obj,clone,return )
 
 ::Array< ::Dynamic> Stanza_obj::allTags(::String name,::String xmlns){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_239_allTags)
-HXLINE( 240)		::Array< ::Dynamic> _this = this->children;
-HXDLIN( 240)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 240)		{
-HXLINE( 240)			int _g1 = 0;
-HXDLIN( 240)			while((_g1 < _this->length)){
-HXLINE( 240)				 ::borogove::Node v = _this->__get(_g1).StaticCast<  ::borogove::Node >();
-HXDLIN( 240)				_g1 = (_g1 + 1);
-HXLINE( 241)				bool _hx_tmp;
-HXDLIN( 241)				if ((v->_hx_getIndex() == 0)) {
-HXLINE( 241)					_hx_tmp = true;
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_241_allTags)
+HXLINE( 242)		::Array< ::Dynamic> _this = this->children;
+HXDLIN( 242)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 242)		{
+HXLINE( 242)			int _g1 = 0;
+HXDLIN( 242)			while((_g1 < _this->length)){
+HXLINE( 242)				 ::borogove::Node v = _this->__get(_g1).StaticCast<  ::borogove::Node >();
+HXDLIN( 242)				_g1 = (_g1 + 1);
+HXLINE( 243)				bool _hx_tmp;
+HXDLIN( 243)				if ((v->_hx_getIndex() == 0)) {
+HXLINE( 243)					_hx_tmp = true;
             				}
             				else {
-HXLINE( 241)					_hx_tmp = false;
+HXLINE( 243)					_hx_tmp = false;
             				}
-HXLINE( 240)				if (_hx_tmp) {
-HXLINE( 240)					_g->push(v);
+HXLINE( 242)				if (_hx_tmp) {
+HXLINE( 242)					_g->push(v);
             				}
             			}
             		}
-HXDLIN( 240)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
-HXDLIN( 240)		{
-HXLINE( 240)			int _g2 = 0;
-HXDLIN( 240)			int _g3 = _g->length;
-HXDLIN( 240)			while((_g2 < _g3)){
-HXLINE( 240)				_g2 = (_g2 + 1);
-HXDLIN( 240)				int i = (_g2 - 1);
-HXDLIN( 240)				{
-HXLINE( 243)					 ::borogove::Node child = _hx_array_unsafe_get(_g,i);
-HXLINE( 240)					 ::borogove::Stanza inValue;
-HXLINE( 243)					if ((child->_hx_getIndex() == 0)) {
-HXLINE( 240)						inValue = child->_hx_getObject(0).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 242)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
+HXDLIN( 242)		{
+HXLINE( 242)			int _g2 = 0;
+HXDLIN( 242)			int _g3 = _g->length;
+HXDLIN( 242)			while((_g2 < _g3)){
+HXLINE( 242)				_g2 = (_g2 + 1);
+HXDLIN( 242)				int i = (_g2 - 1);
+HXDLIN( 242)				{
+HXLINE( 245)					 ::borogove::Node child = _hx_array_unsafe_get(_g,i);
+HXLINE( 242)					 ::borogove::Stanza inValue;
+HXLINE( 245)					if ((child->_hx_getIndex() == 0)) {
+HXLINE( 242)						inValue = child->_hx_getObject(0).StaticCast<  ::borogove::Stanza >();
             					}
             					else {
-HXLINE( 240)						inValue = null();
+HXLINE( 242)						inValue = null();
             					}
-HXDLIN( 240)					result->__unsafe_set(i,inValue);
+HXDLIN( 242)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 240)		::Array< ::Dynamic> tags = result;
-HXLINE( 248)		bool _hx_tmp1;
-HXDLIN( 248)		if (::hx::IsNull( name )) {
-HXLINE( 248)			_hx_tmp1 = ::hx::IsNotNull( xmlns );
+HXDLIN( 242)		::Array< ::Dynamic> tags = result;
+HXLINE( 250)		bool _hx_tmp1;
+HXDLIN( 250)		if (::hx::IsNull( name )) {
+HXLINE( 250)			_hx_tmp1 = ::hx::IsNotNull( xmlns );
             		}
             		else {
-HXLINE( 248)			_hx_tmp1 = true;
+HXLINE( 250)			_hx_tmp1 = true;
             		}
-HXDLIN( 248)		if (_hx_tmp1) {
-HXLINE( 249)			::String ourXmlns = ( (::String)(::Reflect_obj::field(this->attr,HX_("xmlns",dc,31,74,60))) );
-HXLINE( 250)			::Array< ::Dynamic> _g4 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 250)			{
-HXLINE( 250)				int _g5 = 0;
-HXDLIN( 250)				::Array< ::Dynamic> _g6 = result;
-HXDLIN( 250)				while((_g5 < _g6->length)){
-HXLINE( 250)					 ::borogove::Stanza v1 = _g6->__get(_g5).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 250)					_g5 = (_g5 + 1);
-HXLINE( 251)					::String childXmlns = ( (::String)(::Reflect_obj::field(v1->attr,HX_("xmlns",dc,31,74,60))) );
-HXLINE( 250)					bool tags1;
-HXLINE( 252)					bool tags2;
-HXDLIN( 252)					if (::hx::IsNotNull( name )) {
-HXLINE( 252)						tags2 = (v1->name == name);
+HXDLIN( 250)		if (_hx_tmp1) {
+HXLINE( 251)			::String ourXmlns = this->attr->get_string(HX_("xmlns",dc,31,74,60));
+HXLINE( 252)			::Array< ::Dynamic> _g4 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 252)			{
+HXLINE( 252)				int _g5 = 0;
+HXDLIN( 252)				::Array< ::Dynamic> _g6 = result;
+HXDLIN( 252)				while((_g5 < _g6->length)){
+HXLINE( 252)					 ::borogove::Stanza v1 = _g6->__get(_g5).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 252)					_g5 = (_g5 + 1);
+HXLINE( 253)					::String childXmlns = v1->attr->get_string(HX_("xmlns",dc,31,74,60));
+HXLINE( 252)					bool tags1;
+HXLINE( 254)					bool tags2;
+HXDLIN( 254)					if (::hx::IsNotNull( name )) {
+HXLINE( 254)						tags2 = (v1->name == name);
             					}
             					else {
-HXLINE( 252)						tags2 = true;
+HXLINE( 254)						tags2 = true;
             					}
-HXDLIN( 252)					if (tags2) {
-HXLINE( 253)						bool tags3;
-HXDLIN( 253)						if (::hx::IsNull( xmlns )) {
-HXLINE( 253)							if ((ourXmlns != childXmlns)) {
-HXLINE( 253)								tags3 = ::hx::IsNull( childXmlns );
+HXDLIN( 254)					if (tags2) {
+HXLINE( 255)						bool tags3;
+HXDLIN( 255)						if (::hx::IsNull( xmlns )) {
+HXLINE( 255)							if ((ourXmlns != childXmlns)) {
+HXLINE( 255)								tags3 = ::hx::IsNull( childXmlns );
             							}
             							else {
-HXLINE( 253)								tags3 = true;
+HXLINE( 255)								tags3 = true;
             							}
             						}
             						else {
-HXLINE( 253)							tags3 = false;
+HXLINE( 255)							tags3 = false;
             						}
-HXDLIN( 253)						if (!(tags3)) {
-HXLINE( 250)							tags1 = (childXmlns == xmlns);
+HXDLIN( 255)						if (!(tags3)) {
+HXLINE( 252)							tags1 = (childXmlns == xmlns);
             						}
             						else {
-HXLINE( 250)							tags1 = true;
+HXLINE( 252)							tags1 = true;
             						}
             					}
             					else {
-HXLINE( 250)						tags1 = false;
+HXLINE( 252)						tags1 = false;
             					}
-HXDLIN( 250)					if (tags1) {
-HXLINE( 250)						_g4->push(v1);
+HXDLIN( 252)					if (tags1) {
+HXLINE( 252)						_g4->push(v1);
             					}
             				}
             			}
-HXDLIN( 250)			tags = _g4;
+HXDLIN( 252)			tags = _g4;
             		}
-HXLINE( 257)		return tags;
+HXLINE( 259)		return tags;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Stanza_obj,allTags,return )
 
 ::Array< ::String > Stanza_obj::allText(){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_261_allText)
-HXDLIN( 261)		::Array< ::Dynamic> _this = this->children;
-HXDLIN( 261)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 261)		{
-HXDLIN( 261)			int _g1 = 0;
-HXDLIN( 261)			while((_g1 < _this->length)){
-HXDLIN( 261)				 ::borogove::Node v = _this->__get(_g1).StaticCast<  ::borogove::Node >();
-HXDLIN( 261)				_g1 = (_g1 + 1);
-HXLINE( 262)				bool _hx_tmp;
-HXDLIN( 262)				if ((v->_hx_getIndex() == 1)) {
-HXLINE( 262)					_hx_tmp = true;
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_263_allText)
+HXDLIN( 263)		::Array< ::Dynamic> _this = this->children;
+HXDLIN( 263)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 263)		{
+HXDLIN( 263)			int _g1 = 0;
+HXDLIN( 263)			while((_g1 < _this->length)){
+HXDLIN( 263)				 ::borogove::Node v = _this->__get(_g1).StaticCast<  ::borogove::Node >();
+HXDLIN( 263)				_g1 = (_g1 + 1);
+HXLINE( 264)				bool _hx_tmp;
+HXDLIN( 264)				if ((v->_hx_getIndex() == 1)) {
+HXLINE( 264)					_hx_tmp = true;
             				}
             				else {
-HXLINE( 262)					_hx_tmp = false;
+HXLINE( 264)					_hx_tmp = false;
             				}
-HXLINE( 261)				if (_hx_tmp) {
-HXDLIN( 261)					_g->push(v);
+HXLINE( 263)				if (_hx_tmp) {
+HXDLIN( 263)					_g->push(v);
             				}
             			}
             		}
-HXDLIN( 261)		::Array< ::String > result = ::Array_obj< ::String >::__new(_g->length);
-HXDLIN( 261)		{
-HXDLIN( 261)			int _g2 = 0;
-HXDLIN( 261)			int _g3 = _g->length;
-HXDLIN( 261)			while((_g2 < _g3)){
-HXDLIN( 261)				_g2 = (_g2 + 1);
-HXDLIN( 261)				int i = (_g2 - 1);
-HXDLIN( 261)				{
-HXLINE( 264)					 ::borogove::Node child = _hx_array_unsafe_get(_g,i);
-HXLINE( 261)					::String inValue;
-HXLINE( 264)					if ((child->_hx_getIndex() == 1)) {
-HXDLIN( 261)						inValue = child->_hx_getString(0);
+HXDLIN( 263)		::Array< ::String > result = ::Array_obj< ::String >::__new(_g->length);
+HXDLIN( 263)		{
+HXDLIN( 263)			int _g2 = 0;
+HXDLIN( 263)			int _g3 = _g->length;
+HXDLIN( 263)			while((_g2 < _g3)){
+HXDLIN( 263)				_g2 = (_g2 + 1);
+HXDLIN( 263)				int i = (_g2 - 1);
+HXDLIN( 263)				{
+HXLINE( 266)					 ::borogove::Node child = _hx_array_unsafe_get(_g,i);
+HXLINE( 263)					::String inValue;
+HXLINE( 266)					if ((child->_hx_getIndex() == 1)) {
+HXDLIN( 263)						inValue = child->_hx_getString(0);
             					}
             					else {
-HXDLIN( 261)						inValue = null();
+HXDLIN( 263)						inValue = null();
             					}
-HXDLIN( 261)					result->__unsafe_set(i,inValue);
+HXDLIN( 263)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 261)		return result;
+HXDLIN( 263)		return result;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Stanza_obj,allText,return )
 
  ::borogove::Stanza Stanza_obj::getFirstChild(){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_272_getFirstChild)
-HXDLIN( 272)		return this->allTags(null(),null())->__get(0).StaticCast<  ::borogove::Stanza >();
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_274_getFirstChild)
+HXDLIN( 274)		return this->allTags(null(),null())->__get(0).StaticCast<  ::borogove::Stanza >();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Stanza_obj,getFirstChild,return )
 
 ::String Stanza_obj::getErrorText(){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_275_getErrorText)
-HXLINE( 276)		if ((( (::String)(::Reflect_obj::field(this->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE( 277)			 ::borogove::StanzaError error = this->getError();
-HXLINE( 278)			::String tmp;
-HXDLIN( 278)			if (::hx::IsNotNull( error )) {
-HXLINE( 278)				tmp = error->text;
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_277_getErrorText)
+HXLINE( 278)		if (::hx::IsEq( this->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) )) {
+HXLINE( 279)			 ::borogove::StanzaError error = this->getError();
+HXLINE( 280)			::String tmp;
+HXDLIN( 280)			if (::hx::IsNotNull( error )) {
+HXLINE( 280)				tmp = error->text;
             			}
             			else {
-HXLINE( 278)				tmp = null();
+HXLINE( 280)				tmp = null();
             			}
-HXDLIN( 278)			::String tmp1;
-HXDLIN( 278)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 278)				tmp1 = tmp;
+HXDLIN( 280)			::String tmp1;
+HXDLIN( 280)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 280)				tmp1 = tmp;
             			}
             			else {
-HXLINE( 278)				if (::hx::IsNotNull( error )) {
-HXLINE( 278)					tmp1 = error->condition;
+HXLINE( 280)				if (::hx::IsNotNull( error )) {
+HXLINE( 280)					tmp1 = error->condition;
             				}
             				else {
-HXLINE( 278)					tmp1 = null();
+HXLINE( 280)					tmp1 = null();
             				}
             			}
-HXDLIN( 278)			::String tmp2;
-HXDLIN( 278)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 278)				tmp2 = tmp1;
+HXDLIN( 280)			::String tmp2;
+HXDLIN( 280)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 280)				tmp2 = tmp1;
             			}
             			else {
-HXLINE( 278)				if (::hx::IsNotNull( error )) {
-HXLINE( 278)					tmp2 = error->type;
+HXLINE( 280)				if (::hx::IsNotNull( error )) {
+HXLINE( 280)					tmp2 = error->type;
             				}
             				else {
-HXLINE( 278)					tmp2 = null();
+HXLINE( 280)					tmp2 = null();
             				}
             			}
-HXDLIN( 278)			if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 278)				return tmp2;
+HXDLIN( 280)			if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 280)				return tmp2;
             			}
             			else {
-HXLINE( 278)				return HX_("error",c8,cb,29,73);
+HXLINE( 280)				return HX_("error",c8,cb,29,73);
             			}
             		}
-HXLINE( 281)		return null();
+HXLINE( 283)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Stanza_obj,getErrorText,return )
 
  ::borogove::Stanza Stanza_obj::getChild(::String name,::String xmlns){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_284_getChild)
-HXLINE( 285)		::Reflect_obj::field(this->attr,HX_("xmlns",dc,31,74,60));
-HXLINE( 294)		::Array< ::Dynamic> tags = this->allTags(name,xmlns);
-HXLINE( 295)		if ((tags->length == 0)) {
-HXLINE( 296)			return null();
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_286_getChild)
+HXLINE( 287)		this->attr->get_bool(HX_("xmlns",dc,31,74,60));
+HXLINE( 296)		::Array< ::Dynamic> tags = this->allTags(name,xmlns);
+HXLINE( 297)		if ((tags->length == 0)) {
+HXLINE( 298)			return null();
             		}
-HXLINE( 298)		return tags->__get(0).StaticCast<  ::borogove::Stanza >();
+HXLINE( 300)		return tags->__get(0).StaticCast<  ::borogove::Stanza >();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Stanza_obj,getChild,return )
 
 ::String Stanza_obj::getChildText(::String name,::String xmlns){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_301_getChildText)
-HXLINE( 302)		 ::borogove::Stanza child = this->getChild(name,xmlns);
-HXLINE( 303)		if (::hx::IsNull( child )) {
-HXLINE( 304)			return null();
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_303_getChildText)
+HXLINE( 304)		 ::borogove::Stanza child = this->getChild(name,xmlns);
+HXLINE( 305)		if (::hx::IsNull( child )) {
+HXLINE( 306)			return null();
             		}
-HXLINE( 306)		return child->getText();
+HXLINE( 308)		return child->getText();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Stanza_obj,getChildText,return )
 
 bool Stanza_obj::hasChild(::String name,::String xmlns){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_310_hasChild)
-HXDLIN( 310)		return ::hx::IsNotNull( this->getChild(name,xmlns) );
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_312_hasChild)
+HXDLIN( 312)		return ::hx::IsNotNull( this->getChild(name,xmlns) );
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Stanza_obj,hasChild,return )
 
 ::String Stanza_obj::getText(){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_314_getText)
-HXDLIN( 314)		return this->allText()->join(HX_("",00,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_316_getText)
+HXDLIN( 316)		return this->allText()->join(HX_("",00,00,00,00));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Stanza_obj,getText,return )
 
  ::borogove::Node Stanza_obj::find(::String path){
-            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_317_find)
-HXLINE( 318)		int pos = 0;
-HXLINE( 319)		int len = path.length;
-HXLINE( 320)		 ::borogove::Stanza cursor = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 322)		do {
-HXLINE( 323)			::String xmlns = null();
-HXLINE( 324)			::String _hx_char = path.charAt(pos);
-HXLINE( 325)			if ((_hx_char == HX_("@",40,00,00,00))) {
-HXLINE( 326)				 ::Dynamic this1 = cursor->attr;
-HXDLIN( 326)				return ::borogove::Node_obj::CData(( (::String)(::Reflect_obj::field(this1,path.substr((pos + 1),null()))) ));
+            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_319_find)
+HXLINE( 320)		int pos = 0;
+HXLINE( 321)		int len = path.length;
+HXLINE( 322)		 ::borogove::Stanza cursor = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 324)		do {
+HXLINE( 325)			::String xmlns = null();
+HXLINE( 326)			::String _hx_char = path.charAt(pos);
+HXLINE( 327)			if ((_hx_char == HX_("@",40,00,00,00))) {
+HXLINE( 328)				 ::haxe::ds::StringMap cursor1 = cursor->attr;
+HXDLIN( 328)				return ::borogove::Node_obj::CData(cursor1->get_string(path.substr((pos + 1),null())));
             			}
             			else {
-HXLINE( 327)				if ((_hx_char == HX_("{",7b,00,00,00))) {
-HXLINE( 328)					xmlns = path.substring((pos + 1),path.indexOf(HX_("}",7d,00,00,00),(pos + 1)));
-HXLINE( 329)					pos = (pos + (xmlns.length + 2));
+HXLINE( 329)				if ((_hx_char == HX_("{",7b,00,00,00))) {
+HXLINE( 330)					xmlns = path.substring((pos + 1),path.indexOf(HX_("}",7d,00,00,00),(pos + 1)));
+HXLINE( 331)					pos = (pos + (xmlns.length + 2));
             				}
             			}
-HXLINE( 331)			 ::EReg reName =  ::EReg_obj::__alloc( HX_CTX ,HX_("([^@/#]*)([/#]?)",cd,f2,19,5a),HX_("",00,00,00,00));
-HXLINE( 332)			if (!(reName->matchSub(path,pos,null()))) {
-HXLINE( 333)				HX_STACK_DO_THROW( ::haxe::Exception_obj::__alloc( HX_CTX ,(HX_("Invalid path to Stanza.find(): ",c6,3a,06,10) + path),null(),null()));
+HXLINE( 333)			 ::EReg reName =  ::EReg_obj::__alloc( HX_CTX ,HX_("([^@/#]*)([/#]?)",cd,f2,19,5a),HX_("",00,00,00,00));
+HXLINE( 334)			if (!(reName->matchSub(path,pos,null()))) {
+HXLINE( 335)				HX_STACK_DO_THROW( ::haxe::Exception_obj::__alloc( HX_CTX ,(HX_("Invalid path to Stanza.find(): ",c6,3a,06,10) + path),null(),null()));
             			}
-HXLINE( 335)			::String name = reName->matched(1);
-HXDLIN( 335)			::String text = reName->matched(2);
-HXLINE( 336)			int pos1 = ( (int)(reName->matchedPos()->__Field(HX_("pos",94,5d,55,00),::hx::paccDynamic)) );
-HXDLIN( 336)			pos = ( (int)((pos1 + reName->matchedPos()->__Field(HX_("len",d5,4b,52,00),::hx::paccDynamic))) );
-HXLINE( 337)			if ((name == HX_("",00,00,00,00))) {
-HXLINE( 338)				name = null();
+HXLINE( 337)			::String name = reName->matched(1);
+HXDLIN( 337)			::String text = reName->matched(2);
+HXLINE( 338)			int pos1 = ( (int)(reName->matchedPos()->__Field(HX_("pos",94,5d,55,00),::hx::paccDynamic)) );
+HXDLIN( 338)			pos = ( (int)((pos1 + reName->matchedPos()->__Field(HX_("len",d5,4b,52,00),::hx::paccDynamic))) );
+HXLINE( 339)			if ((name == HX_("",00,00,00,00))) {
+HXLINE( 340)				name = null();
             			}
-HXLINE( 340)			if ((pos == len)) {
-HXLINE( 341)				if ((text == HX_("#",23,00,00,00))) {
-HXLINE( 342)					::String text1 = cursor->getChildText(name,xmlns);
-HXLINE( 343)					if (::hx::IsNull( text1 )) {
-HXLINE( 344)						return null();
+HXLINE( 342)			if ((pos == len)) {
+HXLINE( 343)				if ((text == HX_("#",23,00,00,00))) {
+HXLINE( 344)					::String text1 = cursor->getChildText(name,xmlns);
+HXLINE( 345)					if (::hx::IsNull( text1 )) {
+HXLINE( 346)						return null();
             					}
-HXLINE( 346)					return ::borogove::Node_obj::CData(text1);
+HXLINE( 348)					return ::borogove::Node_obj::CData(text1);
+            				}
+HXLINE( 350)				 ::borogove::Stanza got = cursor->getChild(name,xmlns);
+HXLINE( 351)				if (::hx::IsNull( got )) {
+HXLINE( 351)					return null();
+            				}
+            				else {
+HXLINE( 351)					return ::borogove::Node_obj::Element(got);
             				}
-HXLINE( 348)				return ::borogove::Node_obj::Element(cursor->getChild(name,xmlns));
             			}
-HXLINE( 350)			cursor = cursor->getChild(name,xmlns);
+HXLINE( 353)			cursor = cursor->getChild(name,xmlns);
             		} while(::hx::IsNotNull( cursor ));
 ;
-HXLINE( 352)		return null();
+HXLINE( 355)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,find,return )
 
  ::borogove::Stanza Stanza_obj::findChild(::String path){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_355_findChild)
-HXLINE( 356)		 ::borogove::Node result = this->find(path);
-HXLINE( 357)		if (::hx::IsNull( result )) {
-HXLINE( 358)			return null();
-            		}
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_358_findChild)
+HXLINE( 359)		 ::borogove::Node result = this->find(path);
 HXLINE( 360)		if (::hx::IsNull( result )) {
-HXLINE( 362)			return null();
+HXLINE( 361)			return null();
+            		}
+HXLINE( 363)		if (::hx::IsNull( result )) {
+HXLINE( 365)			return null();
             		}
             		else {
-HXLINE( 360)			if ((result->_hx_getIndex() == 0)) {
-HXLINE( 361)				return result->_hx_getObject(0).StaticCast<  ::borogove::Stanza >();
+HXLINE( 363)			if ((result->_hx_getIndex() == 0)) {
+HXLINE( 364)				return result->_hx_getObject(0).StaticCast<  ::borogove::Stanza >();
             			}
             			else {
-HXLINE( 362)				return null();
+HXLINE( 365)				return null();
             			}
             		}
-HXLINE( 360)		return null();
+HXLINE( 363)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,findChild,return )
 
 ::String Stanza_obj::findText(::String path){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_366_findText)
-HXLINE( 367)		 ::borogove::Node result = this->find(path);
-HXLINE( 368)		if (::hx::IsNull( result )) {
-HXLINE( 369)			return null();
-            		}
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_369_findText)
+HXLINE( 370)		 ::borogove::Node result = this->find(path);
 HXLINE( 371)		if (::hx::IsNull( result )) {
-HXLINE( 373)			return null();
+HXLINE( 372)			return null();
+            		}
+HXLINE( 374)		if (::hx::IsNull( result )) {
+HXLINE( 376)			return null();
             		}
             		else {
-HXLINE( 371)			if ((result->_hx_getIndex() == 1)) {
-HXLINE( 372)				return result->_hx_getString(0);
+HXLINE( 374)			if ((result->_hx_getIndex() == 1)) {
+HXLINE( 375)				return result->_hx_getString(0);
             			}
             			else {
-HXLINE( 373)				return null();
+HXLINE( 376)				return null();
             			}
             		}
-HXLINE( 371)		return null();
+HXLINE( 374)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,findText,return )
 
  ::borogove::Stanza Stanza_obj::traverse( ::Dynamic f){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_377_traverse)
-HXLINE( 378)		if (!(( (bool)(f(::hx::ObjectPtr<OBJ_>(this))) ))) {
-HXLINE( 379)			int _g = 0;
-HXDLIN( 379)			::Array< ::Dynamic> _g1 = this->allTags(null(),null());
-HXDLIN( 379)			while((_g < _g1->length)){
-HXLINE( 379)				 ::borogove::Stanza child = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 379)				_g = (_g + 1);
-HXLINE( 380)				child->traverse(f);
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_380_traverse)
+HXLINE( 381)		if (!(( (bool)(f(::hx::ObjectPtr<OBJ_>(this))) ))) {
+HXLINE( 382)			int _g = 0;
+HXDLIN( 382)			::Array< ::Dynamic> _g1 = this->allTags(null(),null());
+HXDLIN( 382)			while((_g < _g1->length)){
+HXLINE( 382)				 ::borogove::Stanza child = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 382)				_g = (_g + 1);
+HXLINE( 383)				child->traverse(f);
             			}
             		}
-HXLINE( 383)		return ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 386)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,traverse,return )
 
  ::Dynamic Stanza_obj::reduce( ::Dynamic stanza, ::Dynamic text){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_387_reduce)
-HXDLIN( 387)		::Array< ::Dynamic> _this = this->children;
-HXDLIN( 387)		::cpp::VirtualArray result = ::cpp::VirtualArray_obj::__new(_this->length);
-HXDLIN( 387)		{
-HXDLIN( 387)			int _g = 0;
-HXDLIN( 387)			int _g1 = _this->length;
-HXDLIN( 387)			while((_g < _g1)){
-HXDLIN( 387)				_g = (_g + 1);
-HXDLIN( 387)				int i = (_g - 1);
-HXDLIN( 387)				{
-HXDLIN( 387)					 ::borogove::Node c = _hx_array_unsafe_get(_this,i);
-HXDLIN( 387)					 ::Dynamic inValue;
-HXDLIN( 387)					switch((int)(c->_hx_getIndex())){
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_390_reduce)
+HXDLIN( 390)		::Array< ::Dynamic> _this = this->children;
+HXDLIN( 390)		::cpp::VirtualArray result = ::cpp::VirtualArray_obj::__new(_this->length);
+HXDLIN( 390)		{
+HXDLIN( 390)			int _g = 0;
+HXDLIN( 390)			int _g1 = _this->length;
+HXDLIN( 390)			while((_g < _g1)){
+HXDLIN( 390)				_g = (_g + 1);
+HXDLIN( 390)				int i = (_g - 1);
+HXDLIN( 390)				{
+HXDLIN( 390)					 ::borogove::Node c = _hx_array_unsafe_get(_this,i);
+HXDLIN( 390)					 ::Dynamic inValue;
+HXDLIN( 390)					switch((int)(c->_hx_getIndex())){
             						case (int)0: {
-HXDLIN( 387)							inValue = c->_hx_getObject(0).StaticCast<  ::borogove::Stanza >()->reduce(stanza,text);
+HXDLIN( 390)							inValue = c->_hx_getObject(0).StaticCast<  ::borogove::Stanza >()->reduce(stanza,text);
             						}
             						break;
             						case (int)1: {
-HXDLIN( 387)							inValue = text(c->_hx_getString(0));
+HXDLIN( 390)							inValue = text(c->_hx_getString(0));
             						}
             						break;
             					}
-HXDLIN( 387)					result->__unsafe_set(i,inValue);
+HXDLIN( 390)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 387)		return stanza(::hx::ObjectPtr<OBJ_>(this),result);
+HXDLIN( 390)		return stanza(::hx::ObjectPtr<OBJ_>(this),result);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Stanza_obj,reduce,return )
 
  ::borogove::StanzaError Stanza_obj::getError(){
-            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_393_getError)
-HXLINE( 394)		 ::borogove::Stanza errorTag = this->getChild(HX_("error",c8,cb,29,73),null());
-HXLINE( 395)		if (::hx::IsNull( errorTag )) {
-HXLINE( 396)			return null();
+            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_396_getError)
+HXLINE( 397)		 ::borogove::Stanza errorTag = this->getChild(HX_("error",c8,cb,29,73),null());
+HXLINE( 398)		if (::hx::IsNull( errorTag )) {
+HXLINE( 399)			return null();
             		}
-HXLINE( 399)		::String _hx_tmp = ( (::String)(::Reflect_obj::field(errorTag->attr,HX_("type",ba,f2,08,4d))) );
-HXLINE( 400)		 ::borogove::Stanza tmp = errorTag->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
-HXDLIN( 400)		::String _hx_tmp1;
-HXDLIN( 400)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 400)			_hx_tmp1 = tmp->name;
+HXLINE( 402)		::String _hx_tmp = errorTag->attr->get_string(HX_("type",ba,f2,08,4d));
+HXLINE( 403)		 ::borogove::Stanza tmp = errorTag->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
+HXDLIN( 403)		::String _hx_tmp1;
+HXDLIN( 403)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 403)			_hx_tmp1 = tmp->name;
             		}
             		else {
-HXLINE( 400)			_hx_tmp1 = null();
+HXLINE( 403)			_hx_tmp1 = null();
             		}
-HXLINE( 398)		return  ::borogove::StanzaError_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,errorTag->getChildText(HX_("text",ad,cc,f9,4c),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30)));
+HXLINE( 401)		return  ::borogove::StanzaError_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,errorTag->getChildText(HX_("text",ad,cc,f9,4c),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Stanza_obj,getError,return )
 
 void Stanza_obj::removeChild( ::borogove::Stanza remove){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_406_removeChild)
-HXDLIN( 406)		::Array< ::Dynamic> _this = this->children;
-HXDLIN( 406)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 406)		{
-HXDLIN( 406)			int _g1 = 0;
-HXDLIN( 406)			while((_g1 < _this->length)){
-HXDLIN( 406)				 ::borogove::Node v = _this->__get(_g1).StaticCast<  ::borogove::Node >();
-HXDLIN( 406)				_g1 = (_g1 + 1);
-HXLINE( 407)				bool _hx_tmp;
-HXDLIN( 407)				if ((v->_hx_getIndex() == 0)) {
-HXLINE( 407)					_hx_tmp = ::hx::IsInstanceNotEq( remove,v->_hx_getObject(0).StaticCast<  ::borogove::Stanza >() );
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_409_removeChild)
+HXDLIN( 409)		::Array< ::Dynamic> _this = this->children;
+HXDLIN( 409)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 409)		{
+HXDLIN( 409)			int _g1 = 0;
+HXDLIN( 409)			while((_g1 < _this->length)){
+HXDLIN( 409)				 ::borogove::Node v = _this->__get(_g1).StaticCast<  ::borogove::Node >();
+HXDLIN( 409)				_g1 = (_g1 + 1);
+HXLINE( 410)				bool _hx_tmp;
+HXDLIN( 410)				if ((v->_hx_getIndex() == 0)) {
+HXLINE( 410)					_hx_tmp = ::hx::IsInstanceNotEq( remove,v->_hx_getObject(0).StaticCast<  ::borogove::Stanza >() );
             				}
             				else {
-HXLINE( 407)					_hx_tmp = true;
+HXLINE( 410)					_hx_tmp = true;
             				}
-HXLINE( 406)				if (_hx_tmp) {
-HXDLIN( 406)					_g->push(v);
+HXLINE( 409)				if (_hx_tmp) {
+HXDLIN( 409)					_g->push(v);
             				}
             			}
             		}
-HXDLIN( 406)		this->children = _g;
+HXDLIN( 409)		this->children = _g;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,removeChild,(void))
 
 void Stanza_obj::removeChildren(::String name,::String xmlns_){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_416_removeChildren)
-HXLINE( 417)		this->serialized = null();
-HXLINE( 419)		bool _hx_tmp;
-HXDLIN( 419)		if (::hx::IsNull( name )) {
-HXLINE( 419)			_hx_tmp = ::hx::IsNull( xmlns_ );
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_419_removeChildren)
+HXLINE( 420)		this->serialized = null();
+HXLINE( 422)		bool _hx_tmp;
+HXDLIN( 422)		if (::hx::IsNull( name )) {
+HXLINE( 422)			_hx_tmp = ::hx::IsNull( xmlns_ );
             		}
             		else {
-HXLINE( 419)			_hx_tmp = false;
+HXLINE( 422)			_hx_tmp = false;
             		}
-HXDLIN( 419)		if (_hx_tmp) {
-HXLINE( 420)			this->children = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 421)			return;
+HXDLIN( 422)		if (_hx_tmp) {
+HXLINE( 423)			this->children = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 424)			return;
             		}
-HXLINE( 424)		::String xmlns;
-HXDLIN( 424)		if (::hx::IsNotNull( xmlns_ )) {
-HXLINE( 424)			xmlns = xmlns_;
+HXLINE( 427)		::String xmlns;
+HXDLIN( 427)		if (::hx::IsNotNull( xmlns_ )) {
+HXLINE( 427)			xmlns = xmlns_;
             		}
             		else {
-HXLINE( 424)			xmlns = ( (::String)(::Reflect_obj::field(this->attr,HX_("xmlns",dc,31,74,60))) );
+HXLINE( 427)			xmlns = this->attr->get_string(HX_("xmlns",dc,31,74,60));
             		}
-HXLINE( 425)		::Array< ::Dynamic> _this = this->children;
-HXDLIN( 425)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 425)		{
-HXLINE( 425)			int _g1 = 0;
-HXDLIN( 425)			while((_g1 < _this->length)){
-HXLINE( 425)				 ::borogove::Node v = _this->__get(_g1).StaticCast<  ::borogove::Node >();
-HXDLIN( 425)				_g1 = (_g1 + 1);
-HXLINE( 426)				bool _hx_tmp1;
-HXDLIN( 426)				if ((v->_hx_getIndex() == 0)) {
-HXLINE( 427)					 ::borogove::Stanza _g2 = v->_hx_getObject(0).StaticCast<  ::borogove::Stanza >();
-HXLINE( 428)					bool _hx_tmp2;
-HXDLIN( 428)					bool _hx_tmp3;
-HXDLIN( 428)					if (::hx::IsNotNull( name )) {
-HXLINE( 428)						_hx_tmp3 = (_g2->name == name);
+HXLINE( 428)		::Array< ::Dynamic> _this = this->children;
+HXDLIN( 428)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 428)		{
+HXLINE( 428)			int _g1 = 0;
+HXDLIN( 428)			while((_g1 < _this->length)){
+HXLINE( 428)				 ::borogove::Node v = _this->__get(_g1).StaticCast<  ::borogove::Node >();
+HXDLIN( 428)				_g1 = (_g1 + 1);
+HXLINE( 429)				bool _hx_tmp1;
+HXDLIN( 429)				if ((v->_hx_getIndex() == 0)) {
+HXLINE( 430)					 ::borogove::Stanza _g2 = v->_hx_getObject(0).StaticCast<  ::borogove::Stanza >();
+HXLINE( 431)					bool _hx_tmp2;
+HXDLIN( 431)					bool _hx_tmp3;
+HXDLIN( 431)					if (::hx::IsNotNull( name )) {
+HXLINE( 431)						_hx_tmp3 = (_g2->name == name);
             					}
             					else {
-HXLINE( 428)						_hx_tmp3 = true;
+HXLINE( 431)						_hx_tmp3 = true;
             					}
-HXDLIN( 428)					if (_hx_tmp3) {
-HXLINE( 428)						::String tmp = ( (::String)(::Reflect_obj::field(_g2->attr,HX_("xmlns",dc,31,74,60))) );
-HXDLIN( 428)						::String _hx_tmp4;
-HXDLIN( 428)						if (::hx::IsNotNull( tmp )) {
-HXLINE( 428)							_hx_tmp4 = tmp;
+HXDLIN( 431)					if (_hx_tmp3) {
+HXLINE( 431)						::String tmp = _g2->attr->get_string(HX_("xmlns",dc,31,74,60));
+HXDLIN( 431)						::String _hx_tmp4;
+HXDLIN( 431)						if (::hx::IsNotNull( tmp )) {
+HXLINE( 431)							_hx_tmp4 = tmp;
             						}
             						else {
-HXLINE( 428)							_hx_tmp4 = xmlns;
+HXLINE( 431)							_hx_tmp4 = xmlns;
             						}
-HXDLIN( 428)						_hx_tmp2 = (_hx_tmp4 == xmlns);
+HXDLIN( 431)						_hx_tmp2 = (_hx_tmp4 == xmlns);
             					}
             					else {
-HXLINE( 428)						_hx_tmp2 = false;
+HXLINE( 431)						_hx_tmp2 = false;
             					}
-HXLINE( 426)					_hx_tmp1 = !(_hx_tmp2);
+HXLINE( 429)					_hx_tmp1 = !(_hx_tmp2);
             				}
             				else {
-HXLINE( 426)					_hx_tmp1 = true;
+HXLINE( 429)					_hx_tmp1 = true;
             				}
-HXLINE( 425)				if (_hx_tmp1) {
-HXLINE( 425)					_g->push(v);
+HXLINE( 428)				if (_hx_tmp1) {
+HXLINE( 428)					_g->push(v);
             				}
             			}
             		}
-HXDLIN( 425)		this->children = _g;
+HXDLIN( 428)		this->children = _g;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Stanza_obj,removeChildren,(void))
 
  ::borogove::Stanza Stanza_obj::parse(::String s){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_121_parse)
-HXLINE( 123)		 ::borogove::Stanza stanza = ::borogove::streams::XmppStropheStream_obj::parseStanza(s);
-HXLINE( 129)		stanza->serialized = s;
-HXLINE( 130)		return stanza;
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_125_parse)
+HXLINE( 127)		 ::borogove::Stanza stanza = ::borogove::streams::XmppStropheStream_obj::parseStanza(s);
+HXLINE( 133)		stanza->serialized = s;
+HXLINE( 134)		return stanza;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,parse,return )
 
+ ::borogove::Stanza Stanza_obj::fromXml( ::Xml el){
+            	HX_GC_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_138_fromXml)
+HXDLIN( 138)		while(true){
+HXLINE( 139)			if ((el->nodeType == 6)) {
+HXLINE( 140)				el = el->firstElement();
+HXLINE(   1)				continue;
+            			}
+HXLINE( 143)			if ((el->nodeType != ::Xml_obj::Element)) {
+HXLINE( 143)				HX_STACK_DO_THROW((HX_("Bad node type, expected Element but found ",d8,90,8b,bb) + ::_Xml::XmlType_Impl__obj::toString(el->nodeType)));
+            			}
+HXDLIN( 143)			 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,el->nodeName,null(),el->attributeMap);
+HXLINE( 144)			{
+HXLINE( 144)				bool _hx_tmp;
+HXDLIN( 144)				if ((el->nodeType != ::Xml_obj::Document)) {
+HXLINE( 144)					_hx_tmp = (el->nodeType != ::Xml_obj::Element);
+            				}
+            				else {
+HXLINE( 144)					_hx_tmp = false;
+            				}
+HXDLIN( 144)				if (_hx_tmp) {
+HXLINE( 144)					HX_STACK_DO_THROW((HX_("Bad node type, expected Element or Document but found ",a0,d6,ba,79) + ::_Xml::XmlType_Impl__obj::toString(el->nodeType)));
+            				}
+HXDLIN( 144)				::Array< ::Dynamic> _this = el->children;
+HXDLIN( 144)				int _g_current = 0;
+HXDLIN( 144)				while((_g_current < _this->length)){
+HXLINE( 144)					_g_current = (_g_current + 1);
+HXDLIN( 144)					 ::Xml child = _this->__get((_g_current - 1)).StaticCast<  ::Xml >();
+HXLINE( 145)					if ((child->nodeType == 0)) {
+HXLINE( 146)						stanza->addChild(::borogove::Stanza_obj::fromXml(child));
+            					}
+            					else {
+HXLINE( 147)						bool _hx_tmp1;
+HXDLIN( 147)						bool _hx_tmp2;
+HXDLIN( 147)						if ((child->nodeType != 5)) {
+HXLINE( 147)							_hx_tmp2 = (child->nodeType == 4);
+            						}
+            						else {
+HXLINE( 147)							_hx_tmp2 = true;
+            						}
+HXDLIN( 147)						if (!(_hx_tmp2)) {
+HXLINE( 147)							_hx_tmp1 = (child->nodeType == 3);
+            						}
+            						else {
+HXLINE( 147)							_hx_tmp1 = true;
+            						}
+HXDLIN( 147)						if (!(_hx_tmp1)) {
+HXLINE( 150)							bool _hx_tmp3;
+HXDLIN( 150)							if ((child->nodeType != ::Xml_obj::Document)) {
+HXLINE( 150)								_hx_tmp3 = (child->nodeType == ::Xml_obj::Element);
+            							}
+            							else {
+HXLINE( 150)								_hx_tmp3 = true;
+            							}
+HXDLIN( 150)							if (_hx_tmp3) {
+HXLINE( 150)								HX_STACK_DO_THROW((HX_("Bad node type, unexpected ",be,79,d5,11) + ::_Xml::XmlType_Impl__obj::toString(child->nodeType)));
+            							}
+HXDLIN( 150)							stanza->text(child->nodeValue);
+            						}
+            					}
+            				}
+            			}
+HXLINE( 153)			return stanza;
+            		}
+HXLINE( 138)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,fromXml,return )
+
 bool Stanza_obj::parseXmlBool(::String x){
-            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_436_parseXmlBool)
-HXDLIN( 436)		if ((x != HX_("true",4e,a7,03,4d))) {
-HXDLIN( 436)			return (x == HX_("1",31,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_f25e9a34e2b06c56_439_parseXmlBool)
+HXDLIN( 439)		if ((x != HX_("true",4e,a7,03,4d))) {
+HXDLIN( 439)			return (x == HX_("1",31,00,00,00));
             		}
             		else {
-HXDLIN( 436)			return true;
+HXDLIN( 439)			return true;
             		}
-HXDLIN( 436)		return false;
+HXDLIN( 439)		return false;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Stanza_obj,parseXmlBool,return )
 
 
-::hx::ObjectPtr< Stanza_obj > Stanza_obj::__new(::String name, ::Dynamic attr) {
+::hx::ObjectPtr< Stanza_obj > Stanza_obj::__new(::String name, ::Dynamic attr, ::haxe::ds::StringMap attrMap) {
 	::hx::ObjectPtr< Stanza_obj > __this = new Stanza_obj();
-	__this->__construct(name,attr);
+	__this->__construct(name,attr,attrMap);
 	return __this;
 }
 
-::hx::ObjectPtr< Stanza_obj > Stanza_obj::__alloc(::hx::Ctx *_hx_ctx,::String name, ::Dynamic attr) {
+::hx::ObjectPtr< Stanza_obj > Stanza_obj::__alloc(::hx::Ctx *_hx_ctx,::String name, ::Dynamic attr, ::haxe::ds::StringMap attrMap) {
 	Stanza_obj *__this = (Stanza_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Stanza_obj), true, "borogove.Stanza"));
 	*(void **)__this = Stanza_obj::_hx_vtable;
-	__this->__construct(name,attr);
+	__this->__construct(name,attr,attrMap);
 	return __this;
 }
 
@@ -850,6 +952,7 @@ void Stanza_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"find") ) { return ::hx::Val( find_dyn() ); }
 		break;
 	case 5:
+		if (HX_FIELD_EQ(inName,"atTop") ) { return ::hx::Val( atTop_dyn() ); }
 		if (HX_FIELD_EQ(inName,"reset") ) { return ::hx::Val( reset_dyn() ); }
 		if (HX_FIELD_EQ(inName,"clone") ) { return ::hx::Val( clone_dyn() ); }
 		break;
@@ -909,6 +1012,9 @@ bool Stanza_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::Pr
 	case 5:
 		if (HX_FIELD_EQ(inName,"parse") ) { outValue = parse_dyn(); return true; }
 		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"fromXml") ) { outValue = fromXml_dyn(); return true; }
+		break;
 	case 12:
 		if (HX_FIELD_EQ(inName,"parseXmlBool") ) { outValue = parseXmlBool_dyn(); return true; }
 	}
@@ -920,7 +1026,7 @@ bool Stanza_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::Pr
 	switch(inName.length) {
 	case 4:
 		if (HX_FIELD_EQ(inName,"name") ) { name=inValue.Cast< ::String >(); return inValue; }
-		if (HX_FIELD_EQ(inName,"attr") ) { attr=inValue.Cast<  ::Dynamic >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"attr") ) { attr=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
 		break;
 	case 8:
 		if (HX_FIELD_EQ(inName,"children") ) { children=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
@@ -949,7 +1055,7 @@ void Stanza_obj::__GetFields(Array< ::String> &outFields)
 #ifdef HXCPP_SCRIPTABLE
 static ::hx::StorageInfo Stanza_obj_sMemberStorageInfo[] = {
 	{::hx::fsString,(int)offsetof(Stanza_obj,name),HX_("name",4b,72,ff,48)},
-	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(Stanza_obj,attr),HX_("attr",31,1d,76,40)},
+	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(Stanza_obj,attr),HX_("attr",31,1d,76,40)},
 	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(Stanza_obj,children),HX_("children",3f,19,6a,70)},
 	{::hx::fsObject /*  ::borogove::Stanza */ ,(int)offsetof(Stanza_obj,last_added),HX_("last_added",d7,8a,71,ae)},
 	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(Stanza_obj,last_added_stack),HX_("last_added_stack",a0,74,ae,97)},
@@ -971,6 +1077,7 @@ static ::String Stanza_obj_sMemberFields[] = {
 	HX_("tag",5a,5a,58,00),
 	HX_("text",ad,cc,f9,4c),
 	HX_("textTag",ad,af,c7,9e),
+	HX_("atTop",62,23,cb,26),
 	HX_("up",5b,66,00,00),
 	HX_("reset",cf,49,c8,e6),
 	HX_("addChildren",80,50,c6,a1),
@@ -1001,6 +1108,7 @@ static ::String Stanza_obj_sMemberFields[] = {
 
 static ::String Stanza_obj_sStaticFields[] = {
 	HX_("parse",33,90,55,bd),
+	HX_("fromXml",8d,3e,06,58),
 	HX_("parseXmlBool",ae,a9,0b,c8),
 	::String(null())
 };
diff --git a/Sources/c_borogove/src/borogove/StanzaError.cpp b/Sources/c_borogove/src/borogove/StanzaError.cpp
index 5b50ba9..3a994cf 100644
--- a/Sources/c_borogove/src/borogove/StanzaError.cpp
+++ b/Sources/c_borogove/src/borogove/StanzaError.cpp
@@ -5,14 +5,14 @@
 #include <borogove/StanzaError.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_484813a5ad2c9a87_59_new,"borogove.StanzaError","new",0x40385898,"borogove.StanzaError.new","borogove/Stanza.hx",59,0xaf8a101b)
+HX_DEFINE_STACK_FRAME(_hx_pos_484813a5ad2c9a87_57_new,"borogove.StanzaError","new",0x40385898,"borogove.StanzaError.new","borogove/Stanza.hx",57,0xaf8a101b)
 namespace borogove{
 
 void StanzaError_obj::__construct(::String type_,::String condition_,::String text_){
-            	HX_STACKFRAME(&_hx_pos_484813a5ad2c9a87_59_new)
-HXLINE(  60)		this->type = type_;
-HXLINE(  61)		this->condition = condition_;
-HXLINE(  62)		this->text = text_;
+            	HX_STACKFRAME(&_hx_pos_484813a5ad2c9a87_57_new)
+HXLINE(  58)		this->type = type_;
+HXLINE(  59)		this->condition = condition_;
+HXLINE(  60)		this->text = text_;
             	}
 
 Dynamic StanzaError_obj::__CreateEmpty() { return new StanzaError_obj; }
diff --git a/Sources/c_borogove/src/borogove/Status.cpp b/Sources/c_borogove/src/borogove/Status.cpp
index 30d9c66..235502b 100644
--- a/Sources/c_borogove/src/borogove/Status.cpp
+++ b/Sources/c_borogove/src/borogove/Status.cpp
@@ -7,6 +7,12 @@
 #ifndef INCLUDED_borogove_Status
 #include <borogove/Status.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_1e3dc2b0d4179260_20_new,"borogove.Status","new",0xbf588571,"borogove.Status.new","borogove/Status.hx",20,0x40932afe)
 HX_LOCAL_STACK_FRAME(_hx_pos_c82280c5737a8ee0_478_emoji__fromC,"borogove.Status","emoji__fromC",0x1a453e82,"borogove.Status.emoji__fromC","HaxeCBridge.hx",478,0xa18550d8)
@@ -78,16 +84,16 @@ HX_DEFINE_DYNAMIC_FUNC0(Status_obj,toString,return )
  ::borogove::Stanza Status_obj::toStanza(){
             	HX_GC_STACKFRAME(&_hx_pos_1e3dc2b0d4179260_33_toStanza)
 HXLINE(  34)		 ::borogove::Stanza s =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("activity",cf,2d,b2,e5), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/activity",43,2c,6e,94))));
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/activity",43,2c,6e,94))),null());
 HXLINE(  35)		if ((this->text != HX_("",00,00,00,00))) {
-HXLINE(  35)			s->textTag(HX_("text",ad,cc,f9,4c),this->text,null());
+HXLINE(  35)			s->textTag(HX_("text",ad,cc,f9,4c),this->text,null(),null());
             		}
 HXLINE(  36)		if ((this->emoji == HX_("",00,00,00,00))) {
-HXLINE(  37)			s->tag(HX_("undefined",90,3e,0a,9d),null())->tag(HX_("other",d0,66,76,36),null())->up()->up();
+HXLINE(  37)			s->tag(HX_("undefined",90,3e,0a,9d),null(),null())->tag(HX_("other",d0,66,76,36),null(),null())->up()->up();
             		}
             		else {
-HXLINE(  39)			s->tag(HX_("undefined",90,3e,0a,9d),null())->textTag(HX_("emoji",86,6f,d9,6f),this->emoji, ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("https://ns.borogove.dev/",0d,36,29,bd))))->up();
+HXLINE(  39)			s->tag(HX_("undefined",90,3e,0a,9d),null(),null())->textTag(HX_("emoji",86,6f,d9,6f),this->emoji, ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("https://ns.borogove.dev/",0d,36,29,bd))),null())->up();
             		}
 HXLINE(  41)		return s;
             	}
diff --git a/Sources/c_borogove/src/borogove/Util.cpp b/Sources/c_borogove/src/borogove/Util.cpp
index 13a9ae8..08e537b 100644
--- a/Sources/c_borogove/src/borogove/Util.cpp
+++ b/Sources/c_borogove/src/borogove/Util.cpp
@@ -8,9 +8,9 @@
 #include <borogove/Util.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_00eec5fd061edd1c_178_findLastIndex,"borogove.Util","findLastIndex",0x92392d44,"borogove.Util.findLastIndex","borogove/Util.hx",178,0x66194bae)
-HX_LOCAL_STACK_FRAME(_hx_pos_00eec5fd061edd1c_207_convertIndex,"borogove.Util","convertIndex",0xe062cf5e,"borogove.Util.convertIndex","borogove/Util.hx",207,0x66194bae)
-HX_LOCAL_STACK_FRAME(_hx_pos_00eec5fd061edd1c_234_capitalize,"borogove.Util","capitalize",0xdbf39f2b,"borogove.Util.capitalize","borogove/Util.hx",234,0x66194bae)
+HX_LOCAL_STACK_FRAME(_hx_pos_00eec5fd061edd1c_189_findLastIndex,"borogove.Util","findLastIndex",0x92392d44,"borogove.Util.findLastIndex","borogove/Util.hx",189,0x66194bae)
+HX_LOCAL_STACK_FRAME(_hx_pos_00eec5fd061edd1c_218_convertIndex,"borogove.Util","convertIndex",0xe062cf5e,"borogove.Util.convertIndex","borogove/Util.hx",218,0x66194bae)
+HX_LOCAL_STACK_FRAME(_hx_pos_00eec5fd061edd1c_245_capitalize,"borogove.Util","capitalize",0xdbf39f2b,"borogove.Util.capitalize","borogove/Util.hx",245,0x66194bae)
 namespace borogove{
 
 void Util_obj::__construct() { }
@@ -31,72 +31,72 @@ bool Util_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 int Util_obj::findLastIndex(::cpp::VirtualArray it, ::Dynamic f){
-            	HX_STACKFRAME(&_hx_pos_00eec5fd061edd1c_178_findLastIndex)
-HXLINE( 182)		int i = (it->get_length() - 1);
-HXLINE( 183)		while((i > -1)){
-HXLINE( 184)			if (( (bool)(f(it->__get(i))) )) {
-HXLINE( 185)				return i;
+            	HX_STACKFRAME(&_hx_pos_00eec5fd061edd1c_189_findLastIndex)
+HXLINE( 193)		int i = (it->get_length() - 1);
+HXLINE( 194)		while((i > -1)){
+HXLINE( 195)			if (( (bool)(f(it->__get(i))) )) {
+HXLINE( 196)				return i;
             			}
-HXLINE( 186)			i = (i - 1);
+HXLINE( 197)			i = (i - 1);
             		}
-HXLINE( 188)		return -1;
+HXLINE( 199)		return -1;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC2(Util_obj,findLastIndex,return )
 
 int Util_obj::convertIndex(::String u,int index){
-            	HX_STACKFRAME(&_hx_pos_00eec5fd061edd1c_207_convertIndex)
-HXLINE( 208)		::String s = u;
-HXLINE( 209)		int unicodeOffset = 0;
-HXLINE( 210)		int nativeOffset = 0;
-HXLINE( 211)		while((nativeOffset < s.length)){
-HXLINE( 212)			if ((nativeOffset == index)) {
-HXLINE( 213)				return unicodeOffset;
+            	HX_STACKFRAME(&_hx_pos_00eec5fd061edd1c_218_convertIndex)
+HXLINE( 219)		::String s = u;
+HXLINE( 220)		int unicodeOffset = 0;
+HXLINE( 221)		int nativeOffset = 0;
+HXLINE( 222)		while((nativeOffset < s.length)){
+HXLINE( 223)			if ((nativeOffset == index)) {
+HXLINE( 224)				return unicodeOffset;
             			}
-HXLINE( 215)			nativeOffset = (nativeOffset + 1);
-HXDLIN( 215)			int index1 = (nativeOffset - 1);
-HXDLIN( 215)			int c = s.cca(index1);
-HXDLIN( 215)			bool _hx_tmp;
-HXDLIN( 215)			if ((c >= 55296)) {
-HXLINE( 215)				_hx_tmp = (c <= 56319);
+HXLINE( 226)			nativeOffset = (nativeOffset + 1);
+HXDLIN( 226)			int index1 = (nativeOffset - 1);
+HXDLIN( 226)			int c = s.cca(index1);
+HXDLIN( 226)			bool _hx_tmp;
+HXDLIN( 226)			if ((c >= 55296)) {
+HXLINE( 226)				_hx_tmp = (c <= 56319);
             			}
             			else {
-HXLINE( 215)				_hx_tmp = false;
+HXLINE( 226)				_hx_tmp = false;
             			}
-HXDLIN( 215)			if (_hx_tmp) {
-HXLINE( 215)				c = (((c - 55232) << 10) | (s.cca((index1 + 1)) & 1023));
+HXDLIN( 226)			if (_hx_tmp) {
+HXLINE( 226)				c = (((c - 55232) << 10) | (s.cca((index1 + 1)) & 1023));
             			}
-HXLINE( 216)			if ((c >= 65536)) {
-HXLINE( 217)				nativeOffset = (nativeOffset + 1);
+HXLINE( 227)			if ((c >= 65536)) {
+HXLINE( 228)				nativeOffset = (nativeOffset + 1);
             			}
-HXLINE( 219)			unicodeOffset = (unicodeOffset + 1);
+HXLINE( 230)			unicodeOffset = (unicodeOffset + 1);
             		}
-HXLINE( 222)		if ((nativeOffset == index)) {
-HXLINE( 223)			return unicodeOffset;
+HXLINE( 233)		if ((nativeOffset == index)) {
+HXLINE( 234)			return unicodeOffset;
             		}
-HXLINE( 226)		HX_STACK_DO_THROW(HX_("No matching index",4e,b8,b1,51));
-HXDLIN( 226)		return 0;
+HXLINE( 237)		HX_STACK_DO_THROW(HX_("No matching index",4e,b8,b1,51));
+HXDLIN( 237)		return 0;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC2(Util_obj,convertIndex,return )
 
 ::String Util_obj::capitalize(::String s){
-            	HX_STACKFRAME(&_hx_pos_00eec5fd061edd1c_234_capitalize)
-HXLINE( 235)		bool _hx_tmp;
-HXDLIN( 235)		if (::hx::IsNotNull( s )) {
-HXLINE( 235)			_hx_tmp = (s.length == 0);
+            	HX_STACKFRAME(&_hx_pos_00eec5fd061edd1c_245_capitalize)
+HXLINE( 246)		bool _hx_tmp;
+HXDLIN( 246)		if (::hx::IsNotNull( s )) {
+HXLINE( 246)			_hx_tmp = (s.length == 0);
             		}
             		else {
-HXLINE( 235)			_hx_tmp = true;
+HXLINE( 246)			_hx_tmp = true;
             		}
-HXDLIN( 235)		if (_hx_tmp) {
-HXLINE( 235)			return s;
+HXDLIN( 246)		if (_hx_tmp) {
+HXLINE( 246)			return s;
             		}
-HXLINE( 237)		::String u = s;
-HXLINE( 239)		::String first = ::_UnicodeString::UnicodeString_Impl__obj::charAt(u,0).toUpperCase();
-HXLINE( 242)		return (first + ::_UnicodeString::UnicodeString_Impl__obj::substr(u,1,(::_UnicodeString::UnicodeString_Impl__obj::get_length(u) - 1)));
+HXLINE( 248)		::String u = s;
+HXLINE( 250)		::String first = ::_UnicodeString::UnicodeString_Impl__obj::charAt(u,0).toUpperCase();
+HXLINE( 253)		return (first + ::_UnicodeString::UnicodeString_Impl__obj::substr(u,1,(::_UnicodeString::UnicodeString_Impl__obj::get_length(u) - 1)));
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/XEP0393.cpp b/Sources/c_borogove/src/borogove/XEP0393.cpp
index 0668f46..54d3525 100644
--- a/Sources/c_borogove/src/borogove/XEP0393.cpp
+++ b/Sources/c_borogove/src/borogove/XEP0393.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
@@ -31,6 +28,12 @@
 #ifndef INCLUDED_borogove_XEP0393
 #include <borogove/XEP0393.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_db68028455a3ae0e_9_parse,"borogove.XEP0393","parse",0x6c67f618,"borogove.XEP0393.parse","borogove/XEP0393.hx",9,0xa99def4c)
 HX_LOCAL_STACK_FRAME(_hx_pos_db68028455a3ae0e_19_render,"borogove.XEP0393","render",0x86302dd1,"borogove.XEP0393.render","borogove/XEP0393.hx",19,0xa99def4c)
@@ -126,7 +129,7 @@ HXLINE(  20)		if ((xhtml->name == HX_("br",d0,55,00,00))) {
 HXLINE(  21)			return HX_("\n",0a,00,00,00);
             		}
 HXLINE(  24)		if ((xhtml->name == HX_("img",03,0c,50,00))) {
-HXLINE(  25)			::String tmp = ( (::String)(::Reflect_obj::field(xhtml->attr,HX_("alt",29,f9,49,00))) );
+HXLINE(  25)			::String tmp = xhtml->attr->get_string(HX_("alt",29,f9,49,00));
 HXDLIN(  25)			if (::hx::IsNotNull( tmp )) {
 HXLINE(  25)				return tmp;
             			}
@@ -169,7 +172,7 @@ HXLINE(  39)				_hx_tmp1 = false;
             			}
 HXDLIN(  39)			if (_hx_tmp1) {
 HXLINE(  40)				::String className;
-HXDLIN(  40)				::String tmp1 = ( (::String)(::Reflect_obj::field(code->attr,HX_("class",38,78,58,48))) );
+HXDLIN(  40)				::String tmp1 = code->attr->get_string(HX_("class",38,78,58,48));
 HXDLIN(  40)				if (::hx::IsNotNull( tmp1 )) {
 HXLINE(  40)					className = tmp1;
             				}
@@ -286,7 +289,7 @@ HXLINE(  66)			endsWithNewline = false;
             		}
 HXLINE(  69)		if ((xhtml->name == HX_("a",61,00,00,00))) {
 HXLINE(  70)			::String href;
-HXDLIN(  70)			::String tmp2 = ( (::String)(::Reflect_obj::field(xhtml->attr,HX_("href",eb,09,15,45))) );
+HXDLIN(  70)			::String tmp2 = xhtml->attr->get_string(HX_("href",eb,09,15,45));
 HXDLIN(  70)			if (::hx::IsNotNull( tmp2 )) {
 HXLINE(  70)				href = tmp2;
             			}
@@ -464,7 +467,7 @@ HXLINE( 112)				s->b->push(HX_("\n",0a,00,00,00));
             		}
 HXLINE( 116)		bool _hx_tmp11;
 HXDLIN( 116)		if ((xhtml->name == HX_("p",70,00,00,00))) {
-HXLINE( 116)			_hx_tmp11 = (( (::String)(::Reflect_obj::field(xhtml->attr,HX_("class",38,78,58,48))) ) != HX_("tight",de,34,31,10));
+HXLINE( 116)			_hx_tmp11 = ::hx::IsNotEq( xhtml->attr->get(HX_("class",38,78,58,48)),HX_("tight",de,34,31,10) );
             		}
             		else {
 HXLINE( 116)			_hx_tmp11 = false;
@@ -686,13 +689,13 @@ HXLINE( 220)				return  ::Dynamic(::hx::Anon_obj::Create(2)
             			}
             			else {
 HXLINE( 221)				if ((marker == HX_("`",60,00,00,00))) {
-HXLINE( 222)					 ::borogove::Stanza _hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,tagName,null());
+HXLINE( 222)					 ::borogove::Stanza _hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,tagName,null(),null());
 HXDLIN( 222)					return  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("end",db,03,4d,00),(end + 1))
             						->setFixed(1,HX_("span",ca,da,58,4c),::borogove::Node_obj::Element(_hx_tmp1->text(::_UnicodeString::UnicodeString_Impl__obj::substr(styled,(start + 1),((end - start) - 1))))));
             				}
             				else {
-HXLINE( 224)					 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,tagName,null());
+HXLINE( 224)					 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,tagName,null(),null());
 HXDLIN( 224)					return  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("end",db,03,4d,00),(end + 1))
             						->setFixed(1,HX_("span",ca,da,58,4c),::borogove::Node_obj::Element(_hx_tmp2->addChildNodes(::borogove::XEP0393_obj::parseSpans(::_UnicodeString::UnicodeString_Impl__obj::substr(styled,(start + 1),((end - start) - 1)))))));
@@ -736,7 +739,7 @@ HXDLIN( 240)						lineEnd = (lineEnd + 1);
             					}
             					_hx_goto_27:;
 HXLINE( 241)					if ((nodes->length > 0)) {
-HXLINE( 241)						nodes->push(::borogove::Node_obj::Element( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("br",d0,55,00,00),null())));
+HXLINE( 241)						nodes->push(::borogove::Node_obj::Element( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("br",d0,55,00,00),null(),null())));
             					}
 HXLINE( 242)					{
 HXLINE( 242)						 ::Dynamic span = ::borogove::XEP0393_obj::parseSpans(::_UnicodeString::UnicodeString_Impl__obj::substr(styled,end,(lineEnd - end)))->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
@@ -770,7 +773,7 @@ HXLINE( 254)					_hx_tmp2 =  ::Dynamic(::hx::Anon_obj::Create(1)
             				else {
 HXLINE( 254)					_hx_tmp2 =  ::Dynamic(::hx::Anon_obj::Create(0));
             				}
-HXDLIN( 254)				 ::borogove::Stanza _hx_tmp3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("p",70,00,00,00),_hx_tmp2)->addChildNodes(nodes);
+HXDLIN( 254)				 ::borogove::Stanza _hx_tmp3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("p",70,00,00,00),_hx_tmp2,null())->addChildNodes(nodes);
 HXDLIN( 254)				return  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("block",4d,75,fc,b4),_hx_tmp3)
             					->setFixed(1,HX_("rest",14,5b,a7,4b),::_UnicodeString::UnicodeString_Impl__obj::substr(styled,end,null())));
@@ -836,7 +839,7 @@ HXLINE( 277)				goto _hx_goto_30;
 HXLINE( 281)		if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) == HX_("\n",0a,00,00,00))) {
 HXLINE( 282)			end = (end + 1);
             		}
-HXLINE( 285)		 ::borogove::Stanza _hx_tmp3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("blockquote",cf,56,28,a2),null());
+HXLINE( 285)		 ::borogove::Stanza _hx_tmp3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("blockquote",cf,56,28,a2),null(),null());
 HXDLIN( 285)		 ::borogove::Stanza _hx_tmp4 = _hx_tmp3->addChildren(::borogove::XEP0393_obj::parse(lines->join(HX_("",00,00,00,00))));
 HXDLIN( 285)		return  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("block",4d,75,fc,b4),_hx_tmp4)
@@ -902,10 +905,10 @@ HXLINE( 312)				goto _hx_goto_33;
 HXLINE( 316)		if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) == HX_("\n",0a,00,00,00))) {
 HXLINE( 317)			end = (end + 1);
             		}
-HXLINE( 320)		 ::borogove::Stanza block =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("pre",23,60,55,00),null());
+HXLINE( 320)		 ::borogove::Stanza block =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("pre",23,60,55,00),null(),null());
 HXLINE( 321)		if ((lang != HX_("",00,00,00,00))) {
 HXLINE( 322)			 ::borogove::Stanza _hx_tmp3 = block->tag(HX_("code",2d,b1,c4,41), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("class",38,78,58,48),(HX_("language-",d5,cc,3e,55) + lang))));
+            				->setFixed(0,HX_("class",38,78,58,48),(HX_("language-",d5,cc,3e,55) + lang))),null());
 HXDLIN( 322)			_hx_tmp3->text(lines->join(HX_("",00,00,00,00)));
             		}
             		else {
diff --git a/Sources/c_borogove/src/borogove/_DataForm/DataForm_Impl_.cpp b/Sources/c_borogove/src/borogove/_DataForm/DataForm_Impl_.cpp
index 0d7737f..eb32df0 100644
--- a/Sources/c_borogove/src/borogove/_DataForm/DataForm_Impl_.cpp
+++ b/Sources/c_borogove/src/borogove/_DataForm/DataForm_Impl_.cpp
@@ -1,18 +1,21 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
 #ifndef INCLUDED_borogove__DataForm_DataForm_Impl_
 #include <borogove/_DataForm/DataForm_Impl_.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
 #ifndef INCLUDED_haxe_Log
 #include <haxe/Log.h>
 #endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_a4f53da467a636c2_40_field,"borogove._DataForm.DataForm_Impl_","field",0xe4ae26c8,"borogove._DataForm.DataForm_Impl_.field","borogove/DataForm.hx",40,0x710703a2)
 namespace borogove{
@@ -44,7 +47,7 @@ HXLINE(  41)			int _g1 = 0;
 HXDLIN(  41)			while((_g1 < _this->length)){
 HXLINE(  41)				 ::borogove::Stanza v = _this->__get(_g1).StaticCast<  ::borogove::Stanza >();
 HXDLIN(  41)				_g1 = (_g1 + 1);
-HXDLIN(  41)				::String tmp = ( (::String)(::Reflect_obj::field(v->attr,HX_("var",e7,de,59,00))) );
+HXDLIN(  41)				::String tmp = v->attr->get_string(HX_("var",e7,de,59,00));
 HXDLIN(  41)				::String _hx_tmp;
 HXDLIN(  41)				if (::hx::IsNotNull( tmp )) {
 HXLINE(  41)					_hx_tmp = tmp;
diff --git a/Sources/c_borogove/src/borogove/_DataForm/Field_Impl_.cpp b/Sources/c_borogove/src/borogove/_DataForm/Field_Impl_.cpp
index 72e7b55..fe023e7 100644
--- a/Sources/c_borogove/src/borogove/_DataForm/Field_Impl_.cpp
+++ b/Sources/c_borogove/src/borogove/_DataForm/Field_Impl_.cpp
@@ -1,23 +1,26 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
 #ifndef INCLUDED_borogove__DataForm_Field_Impl_
 #include <borogove/_DataForm/Field_Impl_.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_4f5145cd5a0b59c7_75_get_value,"borogove._DataForm.Field_Impl_","get_value",0x95f920a6,"borogove._DataForm.Field_Impl_.get_value","borogove/DataForm.hx",75,0x710703a2)
 HX_LOCAL_STACK_FRAME(_hx_pos_4f5145cd5a0b59c7_87_set_value,"borogove._DataForm.Field_Impl_","set_value",0x794a0cb2,"borogove._DataForm.Field_Impl_.set_value","borogove/DataForm.hx",87,0x710703a2)
-HX_LOCAL_STACK_FRAME(_hx_pos_4f5145cd5a0b59c7_108_get_datatype,"borogove._DataForm.Field_Impl_","get_datatype",0xf3c5f3cf,"borogove._DataForm.Field_Impl_.get_datatype","borogove/DataForm.hx",108,0x710703a2)
+HX_LOCAL_STACK_FRAME(_hx_pos_4f5145cd5a0b59c7_109_get_datatype,"borogove._DataForm.Field_Impl_","get_datatype",0xf3c5f3cf,"borogove._DataForm.Field_Impl_.get_datatype","borogove/DataForm.hx",109,0x710703a2)
 static const ::String _hx_array_data_f99683cc_5[] = {
 	HX_("jid-single",50,8e,f5,83),HX_("jid-multi",b1,73,6d,1a),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4f5145cd5a0b59c7_121_get_options,"borogove._DataForm.Field_Impl_","get_options",0x4e914bd3,"borogove._DataForm.Field_Impl_.get_options","borogove/DataForm.hx",121,0x710703a2)
+HX_LOCAL_STACK_FRAME(_hx_pos_4f5145cd5a0b59c7_122_get_options,"borogove._DataForm.Field_Impl_","get_options",0x4e914bd3,"borogove._DataForm.Field_Impl_.get_options","borogove/DataForm.hx",122,0x710703a2)
 namespace borogove{
 namespace _DataForm{
 
@@ -81,7 +84,7 @@ HXLINE(  89)			int _g = 0;
 HXDLIN(  89)			while((_g < val->length)){
 HXLINE(  89)				::String v = val->__get(_g);
 HXDLIN(  89)				_g = (_g + 1);
-HXLINE(  90)				this1->textTag(HX_("value",71,7f,b8,31),v,null());
+HXLINE(  90)				this1->textTag(HX_("value",71,7f,b8,31),v,null(),null());
             			}
             		}
 HXLINE(  92)		return val;
@@ -91,33 +94,33 @@ HXLINE(  92)		return val;
 STATIC_HX_DEFINE_DYNAMIC_FUNC2(Field_Impl__obj,set_value,return )
 
 ::String Field_Impl__obj::get_datatype( ::borogove::Stanza this1){
-            	HX_STACKFRAME(&_hx_pos_4f5145cd5a0b59c7_108_get_datatype)
-HXLINE( 109)		 ::borogove::Stanza validate = this1->getChild(HX_("validate",96,d0,e3,04),HX_("http://jabber.org/protocol/xdata-validate",55,3c,d4,d4));
-HXLINE( 110)		bool _hx_tmp;
-HXDLIN( 110)		if (::hx::IsNotNull( validate )) {
-HXLINE( 110)			_hx_tmp = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(validate->attr,HX_("datatype",e4,a5,a3,a1))) ) );
+            	HX_STACKFRAME(&_hx_pos_4f5145cd5a0b59c7_109_get_datatype)
+HXLINE( 110)		 ::borogove::Stanza validate = this1->getChild(HX_("validate",96,d0,e3,04),HX_("http://jabber.org/protocol/xdata-validate",55,3c,d4,d4));
+HXLINE( 111)		bool _hx_tmp;
+HXDLIN( 111)		if (::hx::IsNotNull( validate )) {
+HXLINE( 111)			_hx_tmp = ::hx::IsNotNull( validate->attr->get(HX_("datatype",e4,a5,a3,a1)) );
             		}
             		else {
-HXLINE( 110)			_hx_tmp = false;
+HXLINE( 111)			_hx_tmp = false;
             		}
-HXDLIN( 110)		if (_hx_tmp) {
-HXLINE( 111)			return ( (::String)(::Reflect_obj::field(validate->attr,HX_("datatype",e4,a5,a3,a1))) );
+HXDLIN( 111)		if (_hx_tmp) {
+HXLINE( 112)			return validate->attr->get_string(HX_("datatype",e4,a5,a3,a1));
             		}
-HXLINE( 113)		if (::Array_obj< ::String >::fromData( _hx_array_data_f99683cc_5,2)->contains(( (::String)(::Reflect_obj::field(this1->attr,HX_("type",ba,f2,08,4d))) ))) {
-HXLINE( 114)			return HX_("jid",c5,ca,50,00);
+HXLINE( 114)		if (::Array_obj< ::String >::fromData( _hx_array_data_f99683cc_5,2)->contains(this1->attr->get(HX_("type",ba,f2,08,4d)))) {
+HXLINE( 115)			return HX_("jid",c5,ca,50,00);
             		}
-HXLINE( 116)		if ((( (::String)(::Reflect_obj::field(this1->attr,HX_("type",ba,f2,08,4d))) ) == HX_("boolean",a8,ea,fe,7d))) {
-HXLINE( 116)			return HX_("xs:boolean",a9,21,c7,58);
+HXLINE( 117)		if (::hx::IsEq( this1->attr->get(HX_("type",ba,f2,08,4d)),HX_("boolean",a8,ea,fe,7d) )) {
+HXLINE( 117)			return HX_("xs:boolean",a9,21,c7,58);
             		}
-HXLINE( 117)		return HX_("xs:string",f0,8c,df,0f);
+HXLINE( 118)		return HX_("xs:string",f0,8c,df,0f);
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Field_Impl__obj,get_datatype,return )
 
 ::Array< ::Dynamic> Field_Impl__obj::get_options( ::borogove::Stanza this1){
-            	HX_STACKFRAME(&_hx_pos_4f5145cd5a0b59c7_121_get_options)
-HXDLIN( 121)		return this1->allTags(HX_("option",75,d3,7a,2b),null());
+            	HX_STACKFRAME(&_hx_pos_4f5145cd5a0b59c7_122_get_options)
+HXDLIN( 122)		return this1->allTags(HX_("option",75,d3,7a,2b),null());
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/_Presence/Presence_Impl_.cpp b/Sources/c_borogove/src/borogove/_Presence/Presence_Impl_.cpp
index a553332..adc241e 100644
--- a/Sources/c_borogove/src/borogove/_Presence/Presence_Impl_.cpp
+++ b/Sources/c_borogove/src/borogove/_Presence/Presence_Impl_.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
@@ -22,6 +19,12 @@
 #ifndef INCLUDED_borogove__Presence_Presence_Impl_
 #include <borogove/_Presence/Presence_Impl_.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_b686ec129cbf220d_31__new,"borogove._Presence.Presence_Impl_","_new",0x025878b3,"borogove._Presence.Presence_Impl_._new","borogove/Presence.hx",31,0xe43e7c15)
 HX_LOCAL_STACK_FRAME(_hx_pos_b686ec129cbf220d_42_get_capsNode,"borogove._Presence.Presence_Impl_","get_capsNode",0xd956301e,"borogove._Presence.Presence_Impl_.get_capsNode","borogove/Presence.hx",42,0xe43e7c15)
@@ -55,7 +58,7 @@ bool Presence_Impl__obj::_hx_isInstanceOf(int inClassId) {
  ::borogove::Stanza Presence_Impl__obj::_new( ::borogove::Caps caps, ::borogove::Stanza mucUser, ::borogove::Hash avatarHash){
             	HX_GC_STACKFRAME(&_hx_pos_b686ec129cbf220d_31__new)
 HXLINE(  32)		 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:client",21,64,c5,e4))));
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:client",21,64,c5,e4))),null());
 HXLINE(  33)		if (::hx::IsNotNull( caps )) {
 HXLINE(  33)			caps->addC(stanza);
             		}
@@ -64,8 +67,8 @@ HXLINE(  34)			stanza->addChild(mucUser);
             		}
 HXLINE(  35)		if (::hx::IsNotNull( avatarHash )) {
 HXLINE(  36)			 ::borogove::Stanza _hx_tmp = stanza->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("vcard-temp:x:update",6a,98,84,45))));
-HXDLIN(  36)			_hx_tmp->textTag(HX_("photo",b2,c8,f3,c1),avatarHash->toHex(),null())->up();
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("vcard-temp:x:update",6a,98,84,45))),null());
+HXDLIN(  36)			_hx_tmp->textTag(HX_("photo",b2,c8,f3,c1),avatarHash->toHex(),null(),null())->up();
             		}
 HXLINE(  31)		return stanza;
             	}
@@ -76,7 +79,7 @@ STATIC_HX_DEFINE_DYNAMIC_FUNC3(Presence_Impl__obj,_new,return )
 ::String Presence_Impl__obj::get_capsNode( ::borogove::Stanza this1){
             	HX_STACKFRAME(&_hx_pos_b686ec129cbf220d_42_get_capsNode)
 HXLINE(  43)		 ::borogove::Stanza c = this1->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
-HXLINE(  44)		 ::Dynamic tmp;
+HXLINE(  44)		 ::haxe::ds::StringMap tmp;
 HXDLIN(  44)		if (::hx::IsNotNull( c )) {
 HXLINE(  44)			tmp = c->attr;
             		}
@@ -84,7 +87,7 @@ HXLINE(  44)			tmp = c->attr;
 HXLINE(  44)			tmp = null();
             		}
 HXDLIN(  44)		if (::hx::IsNotNull( tmp )) {
-HXLINE(  44)			return ( (::String)(::Reflect_obj::field(tmp,HX_("node",02,0a,0a,49))) );
+HXLINE(  44)			return tmp->get_string(HX_("node",02,0a,0a,49));
             		}
             		else {
 HXLINE(  44)			return null();
@@ -98,7 +101,7 @@ STATIC_HX_DEFINE_DYNAMIC_FUNC1(Presence_Impl__obj,get_capsNode,return )
 ::String Presence_Impl__obj::get_ver( ::borogove::Stanza this1){
             	HX_STACKFRAME(&_hx_pos_b686ec129cbf220d_47_get_ver)
 HXLINE(  48)		 ::borogove::Stanza c = this1->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
-HXLINE(  49)		 ::Dynamic tmp;
+HXLINE(  49)		 ::haxe::ds::StringMap tmp;
 HXDLIN(  49)		if (::hx::IsNotNull( c )) {
 HXLINE(  49)			tmp = c->attr;
             		}
@@ -106,7 +109,7 @@ HXLINE(  49)			tmp = c->attr;
 HXLINE(  49)			tmp = null();
             		}
 HXDLIN(  49)		if (::hx::IsNotNull( tmp )) {
-HXLINE(  49)			return ( (::String)(::Reflect_obj::field(tmp,HX_("ver",63,e2,59,00))) );
+HXLINE(  49)			return tmp->get_string(HX_("ver",63,e2,59,00));
             		}
             		else {
 HXLINE(  49)			return null();
@@ -152,14 +155,14 @@ HXDLIN(  57)				int i = (_g - 1);
 HXDLIN(  57)				{
 HXDLIN(  57)					 ::borogove::Stanza hat = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) );
 HXDLIN(  57)					::String inValue;
-HXDLIN(  57)					::String tmp2 = ( (::String)(::Reflect_obj::field(hat->attr,HX_("uri",6c,2b,59,00))) );
+HXDLIN(  57)					::String tmp2 = hat->attr->get_string(HX_("uri",6c,2b,59,00));
 HXDLIN(  57)					if (::hx::IsNotNull( tmp2 )) {
 HXDLIN(  57)						inValue = tmp2;
             					}
             					else {
 HXDLIN(  57)						inValue = HX_("",00,00,00,00);
             					}
-HXDLIN(  57)					::String tmp3 = ( (::String)(::Reflect_obj::field(hat->attr,HX_("title",98,15,3b,10))) );
+HXDLIN(  57)					::String tmp3 = hat->attr->get_string(HX_("title",98,15,3b,10));
 HXDLIN(  57)					::String inValue1;
 HXDLIN(  57)					if (::hx::IsNotNull( tmp3 )) {
 HXDLIN(  57)						inValue1 = tmp3;
@@ -201,7 +204,7 @@ STATIC_HX_DEFINE_DYNAMIC_FUNC1(Presence_Impl__obj,get_avatarHash,return )
 
 ::String Presence_Impl__obj::get_type( ::borogove::Stanza this1){
             	HX_STACKFRAME(&_hx_pos_b686ec129cbf220d_66_get_type)
-HXDLIN(  66)		return ( (::String)(::Reflect_obj::field(this1->attr,HX_("type",ba,f2,08,4d))) );
+HXDLIN(  66)		return this1->attr->get_string(HX_("type",ba,f2,08,4d));
             	}
 
 
@@ -209,7 +212,7 @@ STATIC_HX_DEFINE_DYNAMIC_FUNC1(Presence_Impl__obj,get_type,return )
 
 int Presence_Impl__obj::get_show( ::borogove::Stanza this1){
             	HX_STACKFRAME(&_hx_pos_b686ec129cbf220d_69_get_show)
-HXLINE(  70)		if ((( (::String)(::Reflect_obj::field(this1->attr,HX_("type",ba,f2,08,4d))) ) == HX_("unavailable",50,e0,29,fd))) {
+HXLINE(  70)		if (::hx::IsEq( this1->attr->get(HX_("type",ba,f2,08,4d)),HX_("unavailable",50,e0,29,fd) )) {
 HXLINE(  70)			return 4;
             		}
 HXLINE(  72)		::String _g = this1->getChildText(HX_("show",fd,d4,52,4c),null());
diff --git a/Sources/c_borogove/src/borogove/_Source/Source_Impl_.cpp b/Sources/c_borogove/src/borogove/_Source/Source_Impl_.cpp
new file mode 100644
index 0000000..e3c30ff
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/_Source/Source_Impl_.cpp
@@ -0,0 +1,103 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_borogove__Source_Source_Impl_
+#include <borogove/_Source/Source_Impl_.h>
+#endif
+#ifndef INCLUDED_tink_streams_StreamObject
+#include <tink/streams/StreamObject.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_02d5d50ec3eb36a4_19__new,"borogove._Source.Source_Impl_","_new",0x3b062e73,"borogove._Source.Source_Impl_._new","borogove/Source.hx",19,0x2f1610f5)
+HX_LOCAL_STACK_FRAME(_hx_pos_02d5d50ec3eb36a4_55_ofTinkSource,"borogove._Source.Source_Impl_","ofTinkSource",0xf71ff676,"borogove._Source.Source_Impl_.ofTinkSource","borogove/Source.hx",55,0x2f1610f5)
+namespace borogove{
+namespace _Source{
+
+void Source_Impl__obj::__construct() { }
+
+Dynamic Source_Impl__obj::__CreateEmpty() { return new Source_Impl__obj; }
+
+void *Source_Impl__obj::_hx_vtable = 0;
+
+Dynamic Source_Impl__obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< Source_Impl__obj > _hx_result = new Source_Impl__obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool Source_Impl__obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x16ab3ea4;
+}
+
+::Dynamic Source_Impl__obj::_new(::Dynamic source){
+            	HX_STACKFRAME(&_hx_pos_02d5d50ec3eb36a4_19__new)
+HXDLIN(  19)		return source;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Source_Impl__obj,_new,return )
+
+::Dynamic Source_Impl__obj::ofTinkSource(::Dynamic source){
+            	HX_STACKFRAME(&_hx_pos_02d5d50ec3eb36a4_55_ofTinkSource)
+HXDLIN(  55)		return ::borogove::_Source::Source_Impl__obj::_new(source);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Source_Impl__obj,ofTinkSource,return )
+
+
+Source_Impl__obj::Source_Impl__obj()
+{
+}
+
+bool Source_Impl__obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 4:
+		if (HX_FIELD_EQ(inName,"_new") ) { outValue = _new_dyn(); return true; }
+		break;
+	case 12:
+		if (HX_FIELD_EQ(inName,"ofTinkSource") ) { outValue = ofTinkSource_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *Source_Impl__obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *Source_Impl__obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class Source_Impl__obj::__mClass;
+
+static ::String Source_Impl__obj_sStaticFields[] = {
+	HX_("_new",61,15,1f,3f),
+	HX_("ofTinkSource",64,7b,fe,d3),
+	::String(null())
+};
+
+void Source_Impl__obj::__register()
+{
+	Source_Impl__obj _hx_dummy;
+	Source_Impl__obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove._Source.Source_Impl_",9c,e0,a7,33);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &Source_Impl__obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(Source_Impl__obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< Source_Impl__obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = Source_Impl__obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = Source_Impl__obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace borogove
+} // end namespace _Source
diff --git a/Sources/c_borogove/src/borogove/_Util/Util_Fields_.cpp b/Sources/c_borogove/src/borogove/_Util/Util_Fields_.cpp
index 7426d20..ef99c22 100644
--- a/Sources/c_borogove/src/borogove/_Util/Util_Fields_.cpp
+++ b/Sources/c_borogove/src/borogove/_Util/Util_Fields_.cpp
@@ -63,8 +63,8 @@ HX_LOCAL_STACK_FRAME(_hx_pos_1e0430250bb3af17_55_xmppLinkHeader,"borogove._Util.
 HX_LOCAL_STACK_FRAME(_hx_pos_1e0430250bb3af17_53_xmppLinkHeader,"borogove._Util.Util_Fields_","xmppLinkHeader",0x9fac46c7,"borogove._Util.Util_Fields_.xmppLinkHeader","borogove/Util.hx",53,0x66194bae)
 HX_LOCAL_STACK_FRAME(_hx_pos_1e0430250bb3af17_52_xmppLinkHeader,"borogove._Util.Util_Fields_","xmppLinkHeader",0x9fac46c7,"borogove._Util.Util_Fields_.xmppLinkHeader","borogove/Util.hx",52,0x66194bae)
 HX_LOCAL_STACK_FRAME(_hx_pos_1e0430250bb3af17_105_downcast,"borogove._Util.Util_Fields_","downcast",0x608fd4ec,"borogove._Util.Util_Fields_.downcast","borogove/Util.hx",105,0x66194bae)
-HX_LOCAL_STACK_FRAME(_hx_pos_1e0430250bb3af17_111_xmlEscape,"borogove._Util.Util_Fields_","xmlEscape",0x2f61ed8d,"borogove._Util.Util_Fields_.xmlEscape","borogove/Util.hx",111,0x66194bae)
-HX_LOCAL_STACK_FRAME(_hx_pos_1e0430250bb3af17_115_uriDecode,"borogove._Util.Util_Fields_","uriDecode",0xe1dca28f,"borogove._Util.Util_Fields_.uriDecode","borogove/Util.hx",115,0x66194bae)
+HX_LOCAL_STACK_FRAME(_hx_pos_1e0430250bb3af17_122_xmlEscape,"borogove._Util.Util_Fields_","xmlEscape",0x2f61ed8d,"borogove._Util.Util_Fields_.xmlEscape","borogove/Util.hx",122,0x66194bae)
+HX_LOCAL_STACK_FRAME(_hx_pos_1e0430250bb3af17_126_uriDecode,"borogove._Util.Util_Fields_","uriDecode",0xe1dca28f,"borogove._Util.Util_Fields_.uriDecode","borogove/Util.hx",126,0x66194bae)
 namespace borogove{
 namespace _Util{
 
@@ -142,49 +142,49 @@ HXDLIN( 105)		return ::Std_obj::downcast(value,c);
 STATIC_HX_DEFINE_DYNAMIC_FUNC2(Util_Fields__obj,downcast,return )
 
 ::String Util_Fields__obj::xmlEscape(::String s){
-            	HX_STACKFRAME(&_hx_pos_1e0430250bb3af17_111_xmlEscape)
-HXDLIN( 111)		return ::StringTools_obj::replace(::StringTools_obj::replace(::StringTools_obj::replace(s,HX_("&",26,00,00,00),HX_("&amp;",dd,d4,aa,21)),HX_("<",3c,00,00,00),HX_("&lt;",4d,74,70,19)),HX_(">",3e,00,00,00),HX_("&gt;",08,a9,6c,19));
+            	HX_STACKFRAME(&_hx_pos_1e0430250bb3af17_122_xmlEscape)
+HXDLIN( 122)		return ::StringTools_obj::replace(::StringTools_obj::replace(::StringTools_obj::replace(s,HX_("&",26,00,00,00),HX_("&amp;",dd,d4,aa,21)),HX_("<",3c,00,00,00),HX_("&lt;",4d,74,70,19)),HX_(">",3e,00,00,00),HX_("&gt;",08,a9,6c,19));
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Util_Fields__obj,xmlEscape,return )
 
 ::String Util_Fields__obj::uriDecode(::String s){
-            	HX_GC_STACKFRAME(&_hx_pos_1e0430250bb3af17_115_uriDecode)
-HXLINE( 130)		 ::haxe::io::BytesBuffer bytes =  ::haxe::io::BytesBuffer_obj::__alloc( HX_CTX );
-HXLINE( 131)		int i = 0;
-HXLINE( 133)		while((i < s.length)){
-HXLINE( 134)			::String c = s.charAt(i);
-HXLINE( 135)			bool _hx_tmp;
-HXDLIN( 135)			if ((c == HX_("%",25,00,00,00))) {
-HXLINE( 135)				_hx_tmp = ((i + 2) < s.length);
+            	HX_GC_STACKFRAME(&_hx_pos_1e0430250bb3af17_126_uriDecode)
+HXLINE( 141)		 ::haxe::io::BytesBuffer bytes =  ::haxe::io::BytesBuffer_obj::__alloc( HX_CTX );
+HXLINE( 142)		int i = 0;
+HXLINE( 144)		while((i < s.length)){
+HXLINE( 145)			::String c = s.charAt(i);
+HXLINE( 146)			bool _hx_tmp;
+HXDLIN( 146)			if ((c == HX_("%",25,00,00,00))) {
+HXLINE( 146)				_hx_tmp = ((i + 2) < s.length);
             			}
             			else {
-HXLINE( 135)				_hx_tmp = false;
+HXLINE( 146)				_hx_tmp = false;
             			}
-HXDLIN( 135)			if (_hx_tmp) {
-HXLINE( 136)				 ::Dynamic value = ::Std_obj::parseInt((HX_("0x",48,2a,00,00) + s.substr((i + 1),2)));
-HXLINE( 137)				if (::hx::IsNotNull( value )) {
-HXLINE( 138)					bytes->b->push(( (int)(value) ));
-HXLINE( 139)					i = (i + 3);
-HXLINE( 140)					continue;
+HXDLIN( 146)			if (_hx_tmp) {
+HXLINE( 147)				 ::Dynamic value = ::Std_obj::parseInt((HX_("0x",48,2a,00,00) + s.substr((i + 1),2)));
+HXLINE( 148)				if (::hx::IsNotNull( value )) {
+HXLINE( 149)					bytes->b->push(( (int)(value) ));
+HXLINE( 150)					i = (i + 3);
+HXLINE( 151)					continue;
             				}
             			}
-HXLINE( 143)			{
-HXLINE( 143)				 ::haxe::io::Bytes src = ::haxe::io::Bytes_obj::ofString(c,::haxe::io::Encoding_obj::UTF8_dyn());
-HXDLIN( 143)				::Array< unsigned char > b2 = src->b;
-HXDLIN( 143)				{
-HXLINE( 143)					int _g = 0;
-HXDLIN( 143)					int _g1 = src->length;
-HXDLIN( 143)					while((_g < _g1)){
-HXLINE( 143)						_g = (_g + 1);
-HXDLIN( 143)						bytes->b->push(b2->__get((_g - 1)));
+HXLINE( 154)			{
+HXLINE( 154)				 ::haxe::io::Bytes src = ::haxe::io::Bytes_obj::ofString(c,::haxe::io::Encoding_obj::UTF8_dyn());
+HXDLIN( 154)				::Array< unsigned char > b2 = src->b;
+HXDLIN( 154)				{
+HXLINE( 154)					int _g = 0;
+HXDLIN( 154)					int _g1 = src->length;
+HXDLIN( 154)					while((_g < _g1)){
+HXLINE( 154)						_g = (_g + 1);
+HXDLIN( 154)						bytes->b->push(b2->__get((_g - 1)));
             					}
             				}
             			}
-HXLINE( 144)			i = (i + 1);
+HXLINE( 155)			i = (i + 1);
             		}
-HXLINE( 147)		return bytes->getBytes()->toString();
+HXLINE( 158)		return bytes->getBytes()->toString();
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/_XEP0454/XEP0454_Fields_.cpp b/Sources/c_borogove/src/borogove/_XEP0454/XEP0454_Fields_.cpp
new file mode 100644
index 0000000..8773dfd
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/_XEP0454/XEP0454_Fields_.cpp
@@ -0,0 +1,340 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_EReg
+#include <EReg.h>
+#endif
+#ifndef INCLUDED_borogove__XEP0454_XEP0454_Fields_
+#include <borogove/_XEP0454/XEP0454_Fields_.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_Aes
+#include <haxe/crypto/Aes.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_random_SecureRandom
+#include <haxe/crypto/random/SecureRandom.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+#ifndef INCLUDED_haxe_io_Path
+#include <haxe/io/Path.h>
+#endif
+#ifndef INCLUDED_thenshim_Thenable
+#include <thenshim/Thenable.h>
+#endif
+#ifndef INCLUDED_thenshim__Promise_Promise_Impl_
+#include <thenshim/_Promise/Promise_Impl_.h>
+#endif
+#ifndef INCLUDED_tink__Url_Url_Impl_
+#include <tink/_Url/Url_Impl_.h>
+#endif
+#ifndef INCLUDED_tink_chunk_ByteChunk
+#include <tink/chunk/ByteChunk.h>
+#endif
+#ifndef INCLUDED_tink_chunk_ChunkBase
+#include <tink/chunk/ChunkBase.h>
+#endif
+#ifndef INCLUDED_tink_chunk_ChunkObject
+#include <tink/chunk/ChunkObject.h>
+#endif
+#ifndef INCLUDED_tink_core_LinkObject
+#include <tink/core/LinkObject.h>
+#endif
+#ifndef INCLUDED_tink_core_Outcome
+#include <tink/core/Outcome.h>
+#endif
+#ifndef INCLUDED_tink_core_TypedError
+#include <tink/core/TypedError.h>
+#endif
+#ifndef INCLUDED_tink_core__Future_FutureObject
+#include <tink/core/_Future/FutureObject.h>
+#endif
+#ifndef INCLUDED_tink_core__Lazy_Computable
+#include <tink/core/_Lazy/Computable.h>
+#endif
+#ifndef INCLUDED_tink_core__Lazy_LazyConst
+#include <tink/core/_Lazy/LazyConst.h>
+#endif
+#ifndef INCLUDED_tink_core__Lazy_LazyObject
+#include <tink/core/_Lazy/LazyObject.h>
+#endif
+#ifndef INCLUDED_tink_http_Fetch
+#include <tink/http/Fetch.h>
+#endif
+#ifndef INCLUDED_tink_http_Message
+#include <tink/http/Message.h>
+#endif
+#ifndef INCLUDED_tink_http__Fetch_FetchResponse_Impl_
+#include <tink/http/_Fetch/FetchResponse_Impl_.h>
+#endif
+#ifndef INCLUDED_tink_io_RealSourceTools
+#include <tink/io/RealSourceTools.h>
+#endif
+#ifndef INCLUDED_tink_streams_Single
+#include <tink/streams/Single.h>
+#endif
+#ifndef INCLUDED_tink_streams_StreamBase
+#include <tink/streams/StreamBase.h>
+#endif
+#ifndef INCLUDED_tink_streams_StreamObject
+#include <tink/streams/StreamObject.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_fada3bef2666286d_14_fetch,"borogove._XEP0454.XEP0454_Fields_","fetch",0x639783ff,"borogove._XEP0454.XEP0454_Fields_.fetch","borogove/XEP0454.hx",14,0xc3083046)
+HX_LOCAL_STACK_FRAME(_hx_pos_fada3bef2666286d_20_fetch,"borogove._XEP0454.XEP0454_Fields_","fetch",0x639783ff,"borogove._XEP0454.XEP0454_Fields_.fetch","borogove/XEP0454.hx",20,0xc3083046)
+HX_LOCAL_STACK_FRAME(_hx_pos_fada3bef2666286d_13_fetch,"borogove._XEP0454.XEP0454_Fields_","fetch",0x639783ff,"borogove._XEP0454.XEP0454_Fields_.fetch","borogove/XEP0454.hx",13,0xc3083046)
+HX_LOCAL_STACK_FRAME(_hx_pos_fada3bef2666286d_38_put,"borogove._XEP0454.XEP0454_Fields_","put",0x4fa4e754,"borogove._XEP0454.XEP0454_Fields_.put","borogove/XEP0454.hx",38,0xc3083046)
+HX_LOCAL_STACK_FRAME(_hx_pos_fada3bef2666286d_52_put,"borogove._XEP0454.XEP0454_Fields_","put",0x4fa4e754,"borogove._XEP0454.XEP0454_Fields_.put","borogove/XEP0454.hx",52,0xc3083046)
+HX_LOCAL_STACK_FRAME(_hx_pos_fada3bef2666286d_42_put,"borogove._XEP0454.XEP0454_Fields_","put",0x4fa4e754,"borogove._XEP0454.XEP0454_Fields_.put","borogove/XEP0454.hx",42,0xc3083046)
+HX_LOCAL_STACK_FRAME(_hx_pos_fada3bef2666286d_33_put,"borogove._XEP0454.XEP0454_Fields_","put",0x4fa4e754,"borogove._XEP0454.XEP0454_Fields_.put","borogove/XEP0454.hx",33,0xc3083046)
+HX_LOCAL_STACK_FRAME(_hx_pos_fada3bef2666286d_63_parse,"borogove._XEP0454.XEP0454_Fields_","parse",0x22f2fff8,"borogove._XEP0454.XEP0454_Fields_.parse","borogove/XEP0454.hx",63,0xc3083046)
+HX_LOCAL_STACK_FRAME(_hx_pos_fada3bef2666286d_87_parseURI,"borogove._XEP0454.XEP0454_Fields_","parseURI",0xf1e41254,"borogove._XEP0454.XEP0454_Fields_.parseURI","borogove/XEP0454.hx",87,0xc3083046)
+namespace borogove{
+namespace _XEP0454{
+
+void XEP0454_Fields__obj::__construct() { }
+
+Dynamic XEP0454_Fields__obj::__CreateEmpty() { return new XEP0454_Fields__obj; }
+
+void *XEP0454_Fields__obj::_hx_vtable = 0;
+
+Dynamic XEP0454_Fields__obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< XEP0454_Fields__obj > _hx_result = new XEP0454_Fields__obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool XEP0454_Fields__obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x2bbca83d;
+}
+
+::Dynamic XEP0454_Fields__obj::fetch( ::Dynamic aesgcm){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,aesgcm) HXARGC(2)
+            		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,resolve, ::Dynamic,reject) HXARGC(1)
+            			void _hx_run( ::tink::core::Outcome o){
+            				HX_STACKFRAME(&_hx_pos_fada3bef2666286d_14_fetch)
+HXLINE(  14)				switch((int)(o->_hx_getIndex())){
+            					case (int)0: {
+HXLINE(  16)						resolve(( ( ::tink::http::Message)(o->_hx_getObject(0)) )->body);
+            					}
+            					break;
+            					case (int)1: {
+HXLINE(  18)						reject(o->_hx_getObject(0));
+            					}
+            					break;
+            				}
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_STACKFRAME(&_hx_pos_fada3bef2666286d_14_fetch)
+HXLINE(  14)			 ::Dynamic options = null();
+HXDLIN(  14)			::tink::http::_Fetch::FetchResponse_Impl__obj::all(::tink::http::Fetch_obj::fetch(::tink::_Url::Url_Impl__obj::fromString(( (::String)(aesgcm->__Field(HX_("https",eb,7b,b1,2e),::hx::paccDynamic)) )),options))->handle( ::Dynamic(new _hx_Closure_0(resolve,reject)));
+            		}
+            		HX_END_LOCAL_FUNC2((void))
+
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::Dynamic,aesgcm) HXARGC(1)
+            		 ::haxe::io::Bytes _hx_run(::Dynamic encrypted){
+            			HX_GC_STACKFRAME(&_hx_pos_fada3bef2666286d_20_fetch)
+HXLINE(  27)			 ::haxe::crypto::Aes aes =  ::haxe::crypto::Aes_obj::__alloc( HX_CTX ,( ( ::haxe::io::Bytes)(aesgcm->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) ),( ( ::haxe::io::Bytes)(aesgcm->__Field(HX_("iv",ed,5b,00,00),::hx::paccDynamic)) ));
+HXLINE(  28)			 ::haxe::io::Bytes _hx_tmp = ::tink::chunk::ChunkObject_obj::toBytes(encrypted);
+HXDLIN(  28)			return aes->decrypt(HX_("gcm",d1,7e,4e,00),_hx_tmp,null(),::haxe::io::Bytes_obj::alloc(0),null(),null());
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_fada3bef2666286d_13_fetch)
+HXDLIN(  13)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(aesgcm))), ::Dynamic(new _hx_Closure_2(aesgcm)),null());
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(XEP0454_Fields__obj,fetch,return )
+
+::Dynamic XEP0454_Fields__obj::put(::Dynamic source, ::Dynamic httpPut){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1,::Dynamic,source) HXARGC(2)
+            		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,resolve, ::Dynamic,reject) HXARGC(1)
+            			void _hx_run( ::tink::core::Outcome o){
+            				HX_STACKFRAME(&_hx_pos_fada3bef2666286d_38_put)
+HXLINE(  38)				switch((int)(o->_hx_getIndex())){
+            					case (int)0: {
+HXLINE(  39)						 ::Dynamic resolve1 = resolve;
+HXDLIN(  39)						resolve1(::tink::chunk::ChunkObject_obj::toBytes(o->_hx_getObject(0)));
+            					}
+            					break;
+            					case (int)1: {
+HXLINE(  40)						reject(o->_hx_getObject(0));
+            					}
+            					break;
+            				}
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_STACKFRAME(&_hx_pos_fada3bef2666286d_38_put)
+HXLINE(  38)			::tink::io::RealSourceTools_obj::all(source)->handle( ::Dynamic(new _hx_Closure_0(resolve,reject)));
+            		}
+            		HX_END_LOCAL_FUNC2((void))
+
+            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_5, ::haxe::io::Bytes,key, ::haxe::io::Bytes,iv, ::Dynamic,httpPut) HXARGC(1)
+            		::Dynamic _hx_run( ::haxe::io::Bytes bytes){
+            			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_4, ::haxe::io::Bytes,key, ::haxe::io::Bytes,iv, ::Dynamic,httpPut) HXARGC(1)
+            			::Dynamic _hx_run( ::haxe::io::Bytes encrypted){
+            				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_3, ::haxe::io::Bytes,encrypted, ::haxe::io::Bytes,key, ::haxe::io::Bytes,iv) HXARGC(1)
+            				 ::Dynamic _hx_run(::String uri){
+            					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
+            					::String _hx_run( ::EReg _){
+            						HX_GC_STACKFRAME(&_hx_pos_fada3bef2666286d_52_put)
+HXLINE(  52)						return HX_("aesgcm://",f8,2d,2a,a4);
+            					}
+            					HX_END_LOCAL_FUNC1(return)
+
+            					HX_GC_STACKFRAME(&_hx_pos_fada3bef2666286d_52_put)
+HXLINE(  52)					::String _hx_tmp = ( ::EReg_obj::__alloc( HX_CTX ,HX_("^https?://",48,ee,dd,38),HX_("",00,00,00,00))->map(uri, ::Dynamic(new _hx_Closure_2())) + HX_("#",23,00,00,00));
+HXDLIN(  52)					::String _hx_tmp1 = (_hx_tmp + iv->toHex());
+HXDLIN(  52)					::String _hx_tmp2 = (_hx_tmp1 + key->toHex());
+HXDLIN(  52)					return  ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(0,HX_("uri",6c,2b,59,00),_hx_tmp2)
+            						->setFixed(1,HX_("size",c1,a0,53,4c),encrypted->length));
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_GC_STACKFRAME(&_hx_pos_fada3bef2666286d_52_put)
+HXLINE(  52)				 ::Dynamic httpPut1 = httpPut;
+HXDLIN(  52)				::Dynamic _hx_tmp =  ::tink::streams::Single_obj::__alloc( HX_CTX , ::tink::core::_Lazy::LazyConst_obj::__alloc( HX_CTX ,::tink::chunk::ByteChunk_obj::of(encrypted)));
+HXDLIN(  52)				return ::thenshim::_Promise::Promise_Impl__obj::then(httpPut1(_hx_tmp,encrypted->length), ::Dynamic(new _hx_Closure_3(encrypted,key,iv)),null());
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+            			HX_GC_STACKFRAME(&_hx_pos_fada3bef2666286d_42_put)
+HXLINE(  49)			 ::haxe::crypto::Aes aes =  ::haxe::crypto::Aes_obj::__alloc( HX_CTX ,key,iv);
+HXLINE(  52)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::resolve(aes->encrypt(HX_("gcm",d1,7e,4e,00),bytes,null(),::haxe::io::Bytes_obj::alloc(0),16,null())), ::Dynamic(new _hx_Closure_4(key,iv,httpPut)),null());
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_fada3bef2666286d_33_put)
+HXLINE(  34)		 ::haxe::io::Bytes iv = ::haxe::crypto::random::SecureRandom_obj::bytes(12);
+HXLINE(  35)		 ::haxe::io::Bytes key = ::haxe::crypto::random::SecureRandom_obj::bytes(32);
+HXLINE(  37)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(source))), ::Dynamic(new _hx_Closure_5(key,iv,httpPut)),null());
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(XEP0454_Fields__obj,put,return )
+
+ ::Dynamic XEP0454_Fields__obj::parse(::String uriStr){
+            	HX_STACKFRAME(&_hx_pos_fada3bef2666286d_63_parse)
+HXLINE(  64)		 ::Dynamic uri = ::borogove::_XEP0454::XEP0454_Fields__obj::parseURI(uriStr);
+HXLINE(  65)		if (::hx::IsNull( uri )) {
+HXLINE(  65)			return null();
+            		}
+HXLINE(  67)		::String https = ( (::String)((HX_("https:",ef,f1,9a,ac) + uri->__Field(HX_("rest",14,5b,a7,4b),::hx::paccDynamic))) );
+HXLINE(  68)		::String ext = ::haxe::io::Path_obj::extension(( (::String)(uri->__Field(HX_("rest",14,5b,a7,4b),::hx::paccDynamic)) ));
+HXLINE(  69)		 ::haxe::io::Bytes iv = ::haxe::io::Bytes_obj::ofHex(( (::String)(uri->__Field(HX_("fragment",d0,5f,e5,ad),::hx::paccDynamic)) ).substr(0,24));
+HXLINE(  70)		 ::haxe::io::Bytes key = ::haxe::io::Bytes_obj::ofHex(( (::String)(uri->__Field(HX_("fragment",d0,5f,e5,ad),::hx::paccDynamic)) ).substr(24,null()));
+HXLINE(  73)		::String mime;
+HXDLIN(  73)		::String _hx_switch_0 = ext;
+            		if (  (_hx_switch_0==HX_("jpg",e1,d0,50,00)) ){
+HXLINE(  73)			mime = HX_("image/jpeg",1c,8d,db,ce);
+HXDLIN(  73)			goto _hx_goto_11;
+            		}
+            		if (  (_hx_switch_0==HX_("png",a9,5c,55,00)) ){
+HXLINE(  73)			mime = HX_("image/png",b5,cc,c1,16);
+HXDLIN(  73)			goto _hx_goto_11;
+            		}
+            		/* default */{
+HXLINE(  73)			mime = HX_("application/octet-stream",5d,f8,82,30);
+            		}
+            		_hx_goto_11:;
+HXLINE(  79)		return  ::Dynamic(::hx::Anon_obj::Create(4)
+            			->setFixed(0,HX_("iv",ed,5b,00,00),iv)
+            			->setFixed(1,HX_("key",9f,89,51,00),key)
+            			->setFixed(2,HX_("https",eb,7b,b1,2e),https)
+            			->setFixed(3,HX_("mime",b4,4d,5c,48),mime));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(XEP0454_Fields__obj,parse,return )
+
+ ::Dynamic XEP0454_Fields__obj::parseURI(::String uriStr){
+            	HX_GC_STACKFRAME(&_hx_pos_fada3bef2666286d_87_parseURI)
+HXLINE(  88)		 ::EReg r =  ::EReg_obj::__alloc( HX_CTX ,HX_("^aesgcm:(//[^#]+)#(.{88})$",dd,f7,23,43),HX_("",00,00,00,00));
+HXLINE(  89)		if (!(r->match(uriStr))) {
+HXLINE(  89)			return null();
+            		}
+HXLINE(  91)		::String frag = r->matched(2);
+HXLINE(  93)		::String _hx_tmp = r->matched(1);
+HXLINE(  94)		::String _hx_tmp1;
+HXDLIN(  94)		if (::hx::IsNotNull( frag )) {
+HXLINE(  94)			_hx_tmp1 = frag;
+            		}
+            		else {
+HXLINE(  94)			_hx_tmp1 = HX_("",00,00,00,00);
+            		}
+HXLINE(  92)		return  ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("fragment",d0,5f,e5,ad),_hx_tmp1)
+            			->setFixed(1,HX_("rest",14,5b,a7,4b),_hx_tmp));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(XEP0454_Fields__obj,parseURI,return )
+
+
+XEP0454_Fields__obj::XEP0454_Fields__obj()
+{
+}
+
+bool XEP0454_Fields__obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"put") ) { outValue = put_dyn(); return true; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"fetch") ) { outValue = fetch_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"parse") ) { outValue = parse_dyn(); return true; }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"parseURI") ) { outValue = parseURI_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *XEP0454_Fields__obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *XEP0454_Fields__obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class XEP0454_Fields__obj::__mClass;
+
+static ::String XEP0454_Fields__obj_sStaticFields[] = {
+	HX_("fetch",3a,14,fa,fd),
+	HX_("put",cf,62,55,00),
+	HX_("parse",33,90,55,bd),
+	HX_("parseURI",f9,18,7b,d6),
+	::String(null())
+};
+
+void XEP0454_Fields__obj::__register()
+{
+	XEP0454_Fields__obj _hx_dummy;
+	XEP0454_Fields__obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove._XEP0454.XEP0454_Fields_",73,fe,fb,98);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &XEP0454_Fields__obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(XEP0454_Fields__obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< XEP0454_Fields__obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = XEP0454_Fields__obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = XEP0454_Fields__obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace borogove
+} // end namespace _XEP0454
diff --git a/Sources/c_borogove/src/borogove/calls/Group.cpp b/Sources/c_borogove/src/borogove/calls/Group.cpp
index 1eb4db1..f5db4b9 100644
--- a/Sources/c_borogove/src/borogove/calls/Group.cpp
+++ b/Sources/c_borogove/src/borogove/calls/Group.cpp
@@ -1,15 +1,18 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
 #ifndef INCLUDED_borogove_calls_Group
 #include <borogove/calls/Group.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_014425d322a1c72e_7_new,"borogove.calls.Group","new",0x2c6a4cab,"borogove.calls.Group.new","borogove/calls/Group.hx",7,0xdc1239e7)
 HX_LOCAL_STACK_FRAME(_hx_pos_014425d322a1c72e_26_toSdp,"borogove.calls.Group","toSdp",0x4fffb10f,"borogove.calls.Group.toSdp","borogove/calls/Group.hx",26,0xdc1239e7)
@@ -56,7 +59,7 @@ HX_DEFINE_DYNAMIC_FUNC0(Group_obj,toSdp,return )
             	HX_GC_STACKFRAME(&_hx_pos_014425d322a1c72e_33_toElement)
 HXLINE(  34)		 ::borogove::Stanza group =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("group",3f,b3,f4,99), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:grouping:0",14,f9,f4,ed))
-            			->setFixed(1,HX_("semantics",ad,54,ab,73),this->semantics)));
+            			->setFixed(1,HX_("semantics",ad,54,ab,73),this->semantics)),null());
 HXLINE(  35)		{
 HXLINE(  35)			int _g = 0;
 HXDLIN(  35)			::Array< ::String > _g1 = this->identificationTags;
@@ -64,7 +67,7 @@ HXDLIN(  35)			while((_g < _g1->length)){
 HXLINE(  35)				::String tag = _g1->__get(_g);
 HXDLIN(  35)				_g = (_g + 1);
 HXLINE(  36)				group->tag(HX_("content",39,8d,77,19), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("name",4b,72,ff,48),tag)))->up();
+            					->setFixed(0,HX_("name",4b,72,ff,48),tag)),null())->up();
             			}
             		}
 HXLINE(  38)		return group;
@@ -95,12 +98,12 @@ HXDLIN(  20)			::Array< ::Dynamic> _g1 = el->allTags(HX_("content",39,8d,77,19),
 HXDLIN(  20)			while((_g < _g1->length)){
 HXLINE(  20)				 ::borogove::Stanza content = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
 HXDLIN(  20)				_g = (_g + 1);
-HXLINE(  21)				if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(content->attr,HX_("name",4b,72,ff,48))) ) )) {
-HXLINE(  21)					idTags->push(( (::String)(::Reflect_obj::field(content->attr,HX_("name",4b,72,ff,48))) ));
+HXLINE(  21)				if (::hx::IsNotNull( content->attr->get(HX_("name",4b,72,ff,48)) )) {
+HXLINE(  21)					idTags->push(content->attr->get(HX_("name",4b,72,ff,48)));
             				}
             			}
             		}
-HXLINE(  23)		return  ::borogove::calls::Group_obj::__alloc( HX_CTX ,( (::String)(::Reflect_obj::field(el->attr,HX_("semantics",ad,54,ab,73))) ),idTags);
+HXLINE(  23)		return  ::borogove::calls::Group_obj::__alloc( HX_CTX ,el->attr->get_string(HX_("semantics",ad,54,ab,73)),idTags);
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/calls/IceCandidate.cpp b/Sources/c_borogove/src/borogove/calls/IceCandidate.cpp
index 9b5884e..4ca10f0 100644
--- a/Sources/c_borogove/src/borogove/calls/IceCandidate.cpp
+++ b/Sources/c_borogove/src/borogove/calls/IceCandidate.cpp
@@ -102,7 +102,7 @@ HXLINE( 590)			::Reflect_obj::setField(attrs8,HX_("rel-port",35,42,5e,42),this->
 HXLINE( 591)		if (::hx::IsNotNull( this->parameters->get(HX_("tcptype",5b,73,f8,36)) )) {
 HXLINE( 591)			::Reflect_obj::setField(attrs8,HX_("tcptype",5b,73,f8,36),this->parameters->get(HX_("tcptype",5b,73,f8,36)));
             		}
-HXLINE( 592)		return  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("candidate",43,34,d8,d0),attrs8);
+HXLINE( 592)		return  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("candidate",43,34,d8,d0),attrs8,null());
             	}
 
 
@@ -154,30 +154,30 @@ HX_DEFINE_DYNAMIC_FUNC0(IceCandidate_obj,toSdp,return )
  ::borogove::calls::IceCandidate IceCandidate_obj::fromElement( ::borogove::Stanza candidate,::String sdpMid,::String ufrag){
             	HX_GC_STACKFRAME(&_hx_pos_6b21dc0034dfbe4a_519_fromElement)
 HXLINE( 520)		 ::haxe::ds::StringMap parameters =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 521)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("type",ba,f2,08,4d))) ) )) {
-HXLINE( 521)			parameters->set(HX_("typ",4b,6f,58,00),( (::String)(::Reflect_obj::field(candidate->attr,HX_("type",ba,f2,08,4d))) ));
+HXLINE( 521)		if (::hx::IsNotNull( candidate->attr->get(HX_("type",ba,f2,08,4d)) )) {
+HXLINE( 521)			parameters->set(HX_("typ",4b,6f,58,00),candidate->attr->get(HX_("type",ba,f2,08,4d)));
             		}
-HXLINE( 522)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-addr",e5,a9,6b,38))) ) )) {
-HXLINE( 522)			parameters->set(HX_("raddr",a3,0c,18,e4),( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-addr",e5,a9,6b,38))) ));
+HXLINE( 522)		if (::hx::IsNotNull( candidate->attr->get(HX_("rel-addr",e5,a9,6b,38)) )) {
+HXLINE( 522)			parameters->set(HX_("raddr",a3,0c,18,e4),candidate->attr->get(HX_("rel-addr",e5,a9,6b,38)));
             		}
-HXLINE( 523)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-port",35,42,5e,42))) ) )) {
-HXLINE( 523)			parameters->set(HX_("rport",f3,a4,0a,ee),( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-port",35,42,5e,42))) ));
+HXLINE( 523)		if (::hx::IsNotNull( candidate->attr->get(HX_("rel-port",35,42,5e,42)) )) {
+HXLINE( 523)			parameters->set(HX_("rport",f3,a4,0a,ee),candidate->attr->get(HX_("rel-port",35,42,5e,42)));
             		}
-HXLINE( 524)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("generation",98,c0,63,4e))) ) )) {
-HXLINE( 524)			parameters->set(HX_("generation",98,c0,63,4e),( (::String)(::Reflect_obj::field(candidate->attr,HX_("generation",98,c0,63,4e))) ));
+HXLINE( 524)		if (::hx::IsNotNull( candidate->attr->get(HX_("generation",98,c0,63,4e)) )) {
+HXLINE( 524)			parameters->set(HX_("generation",98,c0,63,4e),candidate->attr->get(HX_("generation",98,c0,63,4e)));
             		}
-HXLINE( 525)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("tcptype",5b,73,f8,36))) ) )) {
-HXLINE( 525)			parameters->set(HX_("tcptype",5b,73,f8,36),( (::String)(::Reflect_obj::field(candidate->attr,HX_("tcptype",5b,73,f8,36))) ));
+HXLINE( 525)		if (::hx::IsNotNull( candidate->attr->get(HX_("tcptype",5b,73,f8,36)) )) {
+HXLINE( 525)			parameters->set(HX_("tcptype",5b,73,f8,36),candidate->attr->get(HX_("tcptype",5b,73,f8,36)));
             		}
 HXLINE( 526)		if (::hx::IsNotNull( ufrag )) {
 HXLINE( 526)			parameters->set(HX_("ufrag",27,78,a4,a1),ufrag);
             		}
-HXLINE( 530)		::String _hx_tmp = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("foundation",33,a1,2a,39))) );
-HXLINE( 531)		::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("component",bd,f0,53,0f))) );
-HXLINE( 532)		::String _hx_tmp2 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("protocol",58,56,63,00))) ).toLowerCase();
-HXLINE( 533)		::String _hx_tmp3 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("priority",64,7b,3e,bb))) );
-HXLINE( 534)		::String _hx_tmp4 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("ip",e7,5b,00,00))) );
-HXLINE( 527)		return  ::borogove::calls::IceCandidate_obj::__alloc( HX_CTX ,sdpMid,ufrag,_hx_tmp,_hx_tmp1,_hx_tmp2,_hx_tmp3,_hx_tmp4,( (::String)(::Reflect_obj::field(candidate->attr,HX_("port",81,83,5c,4a))) ),parameters);
+HXLINE( 530)		::String _hx_tmp = candidate->attr->get_string(HX_("foundation",33,a1,2a,39));
+HXLINE( 531)		::String _hx_tmp1 = candidate->attr->get_string(HX_("component",bd,f0,53,0f));
+HXLINE( 532)		::String _hx_tmp2 = candidate->attr->get_string(HX_("protocol",58,56,63,00)).toLowerCase();
+HXLINE( 533)		::String _hx_tmp3 = candidate->attr->get_string(HX_("priority",64,7b,3e,bb));
+HXLINE( 534)		::String _hx_tmp4 = candidate->attr->get_string(HX_("ip",e7,5b,00,00));
+HXLINE( 527)		return  ::borogove::calls::IceCandidate_obj::__alloc( HX_CTX ,sdpMid,ufrag,_hx_tmp,_hx_tmp1,_hx_tmp2,_hx_tmp3,_hx_tmp4,candidate->attr->get_string(HX_("port",81,83,5c,4a)),parameters);
             	}
 
 
@@ -195,7 +195,7 @@ HXDLIN( 541)				_g = (_g + 1);
 HXDLIN( 541)				int i = (_g - 1);
 HXDLIN( 541)				{
 HXDLIN( 541)					 ::borogove::Stanza el = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN( 541)					 ::borogove::calls::IceCandidate inValue = ::borogove::calls::IceCandidate_obj::fromElement(el,sdpMid,( (::String)(::Reflect_obj::field(transport->attr,HX_("ufrag",27,78,a4,a1))) ));
+HXDLIN( 541)					 ::borogove::calls::IceCandidate inValue = ::borogove::calls::IceCandidate_obj::fromElement(el,sdpMid,transport->attr->get_string(HX_("ufrag",27,78,a4,a1)));
 HXDLIN( 541)					result->__unsafe_set(i,inValue);
             				}
             			}
@@ -214,7 +214,7 @@ HXLINE( 546)			 ::Dynamic x = iq->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xm
 HXDLIN( 546)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
 HXLINE( 546)				 ::borogove::Stanza x1 = ( ( ::borogove::Stanza)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
 HXLINE( 547)				 ::borogove::Stanza transport = x1->getChild(HX_("transport",a9,4f,2f,4c),HX_("urn:xmpp:jingle:transports:ice-udp:1",f3,67,4f,53));
-HXLINE( 546)				_g->push(::borogove::calls::IceCandidate_obj::fromTransport(transport,( (::String)(::Reflect_obj::field(x1->attr,HX_("name",4b,72,ff,48))) )));
+HXLINE( 546)				_g->push(::borogove::calls::IceCandidate_obj::fromTransport(transport,x1->attr->get_string(HX_("name",4b,72,ff,48))));
             			}
             		}
 HXDLIN( 546)		::Array< ::Dynamic> _g1 = ::Array_obj< ::Dynamic>::__new(0);
diff --git a/Sources/c_borogove/src/borogove/calls/IncomingProposedSession.cpp b/Sources/c_borogove/src/borogove/calls/IncomingProposedSession.cpp
index 2c9e9ce..5148e74 100644
--- a/Sources/c_borogove/src/borogove/calls/IncomingProposedSession.cpp
+++ b/Sources/c_borogove/src/borogove/calls/IncomingProposedSession.cpp
@@ -59,36 +59,36 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_75_new,"borogove.calls.IncomingProposedSession","new",0x1258db76,"borogove.calls.IncomingProposedSession.new","borogove/calls/Session.hx",75,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_95_ring,"borogove.calls.IncomingProposedSession","ring",0xfe0f07da,"borogove.calls.IncomingProposedSession.ring","borogove/calls/Session.hx",95,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_89_ring,"borogove.calls.IncomingProposedSession","ring",0xfe0f07da,"borogove.calls.IncomingProposedSession.ring","borogove/calls/Session.hx",89,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_107_hangup,"borogove.calls.IncomingProposedSession","hangup",0x4afe58f7,"borogove.calls.IncomingProposedSession.hangup","borogove/calls/Session.hx",107,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_100_hangup,"borogove.calls.IncomingProposedSession","hangup",0x4afe58f7,"borogove.calls.IncomingProposedSession.hangup","borogove/calls/Session.hx",100,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_115_retract,"borogove.calls.IncomingProposedSession","retract",0x08713017,"borogove.calls.IncomingProposedSession.retract","borogove/calls/Session.hx",115,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_119_terminate,"borogove.calls.IncomingProposedSession","terminate",0xe089b1f7,"borogove.calls.IncomingProposedSession.terminate","borogove/calls/Session.hx",119,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_123_contentAdd,"borogove.calls.IncomingProposedSession","contentAdd",0xc1b58a12,"borogove.calls.IncomingProposedSession.contentAdd","borogove/calls/Session.hx",123,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_127_contentAccept,"borogove.calls.IncomingProposedSession","contentAccept",0x2cffc7b7,"borogove.calls.IncomingProposedSession.contentAccept","borogove/calls/Session.hx",127,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_130_transportInfo,"borogove.calls.IncomingProposedSession","transportInfo",0x02cd3f4d,"borogove.calls.IncomingProposedSession.transportInfo","borogove/calls/Session.hx",130,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_141_accept,"borogove.calls.IncomingProposedSession","accept",0x9e0519b2,"borogove.calls.IncomingProposedSession.accept","borogove/calls/Session.hx",141,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_135_accept,"borogove.calls.IncomingProposedSession","accept",0x9e0519b2,"borogove.calls.IncomingProposedSession.accept","borogove/calls/Session.hx",135,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_152_initiate,"borogove.calls.IncomingProposedSession","initiate",0x943c6f83,"borogove.calls.IncomingProposedSession.initiate","borogove/calls/Session.hx",152,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_164_addMedia,"borogove.calls.IncomingProposedSession","addMedia",0xb3c6302d,"borogove.calls.IncomingProposedSession.addMedia","borogove/calls/Session.hx",164,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_169_callStatus,"borogove.calls.IncomingProposedSession","callStatus",0xaf03e21a,"borogove.calls.IncomingProposedSession.callStatus","borogove/calls/Session.hx",169,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_174_audioTracks,"borogove.calls.IncomingProposedSession","audioTracks",0xb3746e14,"borogove.calls.IncomingProposedSession.audioTracks","borogove/calls/Session.hx",174,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_179_videoTracks,"borogove.calls.IncomingProposedSession","videoTracks",0x5d6bd379,"borogove.calls.IncomingProposedSession.videoTracks","borogove/calls/Session.hx",179,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_184_dtmf,"borogove.calls.IncomingProposedSession","dtmf",0xf4d66313,"borogove.calls.IncomingProposedSession.dtmf","borogove/calls/Session.hx",184,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_188_get_sid,"borogove.calls.IncomingProposedSession","get_sid",0x3283b5bb,"borogove.calls.IncomingProposedSession.get_sid","borogove/calls/Session.hx",188,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_192_get_chatId,"borogove.calls.IncomingProposedSession","get_chatId",0x25d69846,"borogove.calls.IncomingProposedSession.get_chatId","borogove/calls/Session.hx",192,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_75_boot,"borogove.calls.IncomingProposedSession","boot",0xf3802c5c,"borogove.calls.IncomingProposedSession.boot","borogove/calls/Session.hx",75,0x33a79030)
+HX_DEFINE_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_79_new,"borogove.calls.IncomingProposedSession","new",0x1258db76,"borogove.calls.IncomingProposedSession.new","borogove/calls/Session.hx",79,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_99_ring,"borogove.calls.IncomingProposedSession","ring",0xfe0f07da,"borogove.calls.IncomingProposedSession.ring","borogove/calls/Session.hx",99,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_93_ring,"borogove.calls.IncomingProposedSession","ring",0xfe0f07da,"borogove.calls.IncomingProposedSession.ring","borogove/calls/Session.hx",93,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_111_hangup,"borogove.calls.IncomingProposedSession","hangup",0x4afe58f7,"borogove.calls.IncomingProposedSession.hangup","borogove/calls/Session.hx",111,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_104_hangup,"borogove.calls.IncomingProposedSession","hangup",0x4afe58f7,"borogove.calls.IncomingProposedSession.hangup","borogove/calls/Session.hx",104,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_119_retract,"borogove.calls.IncomingProposedSession","retract",0x08713017,"borogove.calls.IncomingProposedSession.retract","borogove/calls/Session.hx",119,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_123_terminate,"borogove.calls.IncomingProposedSession","terminate",0xe089b1f7,"borogove.calls.IncomingProposedSession.terminate","borogove/calls/Session.hx",123,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_127_contentAdd,"borogove.calls.IncomingProposedSession","contentAdd",0xc1b58a12,"borogove.calls.IncomingProposedSession.contentAdd","borogove/calls/Session.hx",127,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_131_contentAccept,"borogove.calls.IncomingProposedSession","contentAccept",0x2cffc7b7,"borogove.calls.IncomingProposedSession.contentAccept","borogove/calls/Session.hx",131,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_134_transportInfo,"borogove.calls.IncomingProposedSession","transportInfo",0x02cd3f4d,"borogove.calls.IncomingProposedSession.transportInfo","borogove/calls/Session.hx",134,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_145_accept,"borogove.calls.IncomingProposedSession","accept",0x9e0519b2,"borogove.calls.IncomingProposedSession.accept","borogove/calls/Session.hx",145,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_139_accept,"borogove.calls.IncomingProposedSession","accept",0x9e0519b2,"borogove.calls.IncomingProposedSession.accept","borogove/calls/Session.hx",139,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_156_initiate,"borogove.calls.IncomingProposedSession","initiate",0x943c6f83,"borogove.calls.IncomingProposedSession.initiate","borogove/calls/Session.hx",156,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_168_addMedia,"borogove.calls.IncomingProposedSession","addMedia",0xb3c6302d,"borogove.calls.IncomingProposedSession.addMedia","borogove/calls/Session.hx",168,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_173_callStatus,"borogove.calls.IncomingProposedSession","callStatus",0xaf03e21a,"borogove.calls.IncomingProposedSession.callStatus","borogove/calls/Session.hx",173,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_178_audioTracks,"borogove.calls.IncomingProposedSession","audioTracks",0xb3746e14,"borogove.calls.IncomingProposedSession.audioTracks","borogove/calls/Session.hx",178,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_183_videoTracks,"borogove.calls.IncomingProposedSession","videoTracks",0x5d6bd379,"borogove.calls.IncomingProposedSession.videoTracks","borogove/calls/Session.hx",183,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_188_dtmf,"borogove.calls.IncomingProposedSession","dtmf",0xf4d66313,"borogove.calls.IncomingProposedSession.dtmf","borogove/calls/Session.hx",188,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_192_get_sid,"borogove.calls.IncomingProposedSession","get_sid",0x3283b5bb,"borogove.calls.IncomingProposedSession.get_sid","borogove/calls/Session.hx",192,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_196_get_chatId,"borogove.calls.IncomingProposedSession","get_chatId",0x25d69846,"borogove.calls.IncomingProposedSession.get_chatId","borogove/calls/Session.hx",196,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_79_boot,"borogove.calls.IncomingProposedSession","boot",0xf3802c5c,"borogove.calls.IncomingProposedSession.boot","borogove/calls/Session.hx",79,0x33a79030)
 namespace borogove{
 namespace calls{
 
 void IncomingProposedSession_obj::__construct( ::borogove::Client client, ::borogove::JID from,::String sid){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_75_new)
-HXLINE(  81)		this->accepted = false;
-HXLINE(  84)		this->client = client;
-HXLINE(  85)		this->from = from;
-HXLINE(  86)		this->_sid = sid;
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_79_new)
+HXLINE(  85)		this->accepted = false;
+HXLINE(  88)		this->client = client;
+HXLINE(  89)		this->from = from;
+HXLINE(  90)		this->_sid = sid;
             	}
 
 Dynamic IncomingProposedSession_obj::__CreateEmpty() { return new IncomingProposedSession_obj; }
@@ -138,19 +138,19 @@ void *IncomingProposedSession_obj::_hx_getInterface(int inHash) {
 void IncomingProposedSession_obj::ring(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::IncomingProposedSession,_gthis) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_95_ring)
-HXLINE(  95)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_99_ring)
+HXLINE(  99)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_89_ring)
-HXDLIN(  89)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  92)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("ringing",32,9b,80,1a), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_93_ring)
+HXDLIN(  93)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  96)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("ringing",32,9b,80,1a), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE(  93)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client,event);
-HXLINE(  94)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis)),null());
-HXLINE(  97)		this->client->trigger(HX_("call/ring",01,8e,91,54), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))),null());
+HXLINE(  97)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client,event);
+HXLINE(  98)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+HXLINE( 101)		this->client->trigger(HX_("call/ring",01,8e,91,54), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("session",56,17,98,93),::hx::ObjectPtr<OBJ_>(this))));
             	}
 
@@ -160,29 +160,29 @@ HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,ring,(void))
 void IncomingProposedSession_obj::hangup(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::IncomingProposedSession,_gthis) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_107_hangup)
-HXLINE( 107)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_111_hangup)
+HXLINE( 111)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_100_hangup)
-HXDLIN( 100)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 104)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("reject",5f,51,85,02), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_104_hangup)
+HXDLIN( 104)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 108)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("reject",5f,51,85,02), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE( 105)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client,event);
-HXLINE( 106)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis)),null());
-HXLINE( 109)		{
-HXLINE( 109)			 ::borogove::Client tmp = this->client;
-HXDLIN( 109)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
-HXDLIN( 109)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 109)				::Dynamic this1 = tmp1->jingleSessions;
-HXDLIN( 109)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))),null());
+HXLINE( 109)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client,event);
+HXLINE( 110)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+HXLINE( 113)		{
+HXLINE( 113)			 ::borogove::Client tmp = this->client;
+HXDLIN( 113)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
+HXDLIN( 113)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 113)				::Dynamic this1 = tmp1->jingleSessions;
+HXDLIN( 113)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
             			}
             		}
-HXLINE( 110)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 110)		::String _hx_tmp1 = this->get_chatId();
-HXDLIN( 110)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 114)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 114)		::String _hx_tmp1 = this->get_chatId();
+HXDLIN( 114)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
             			->setFixed(1,HX_("sid",0e,9f,57,00),this->get_sid())));
             	}
@@ -191,10 +191,10 @@ HXDLIN( 110)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,hangup,(void))
 
 void IncomingProposedSession_obj::retract(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_115_retract)
-HXDLIN( 115)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 115)		::String _hx_tmp1 = this->get_chatId();
-HXDLIN( 115)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_119_retract)
+HXDLIN( 119)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 119)		::String _hx_tmp1 = this->get_chatId();
+HXDLIN( 119)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
             			->setFixed(1,HX_("sid",0e,9f,57,00),this->get_sid())));
             	}
@@ -203,61 +203,61 @@ HXDLIN( 115)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,retract,(void))
 
 void IncomingProposedSession_obj::terminate(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_119_terminate)
-HXDLIN( 119)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 119)		::String _hx_tmp1 = (HX_("Tried to terminate before session-initiate: ",a9,d4,f3,a4) + this->get_sid());
-HXDLIN( 119)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_123_terminate)
+HXDLIN( 123)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 123)		::String _hx_tmp1 = (HX_("Tried to terminate before session-initiate: ",a9,d4,f3,a4) + this->get_sid());
+HXDLIN( 123)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.IncomingProposedSession",84,a8,44,af))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("terminate",61,32,d2,fd))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),119)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),123)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,terminate,(void))
 
 void IncomingProposedSession_obj::contentAdd( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_123_contentAdd)
-HXDLIN( 123)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 123)		::String _hx_tmp1 = (HX_("Got content-add before session-initiate: ",10,d3,fa,8a) + this->get_sid());
-HXDLIN( 123)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_127_contentAdd)
+HXDLIN( 127)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 127)		::String _hx_tmp1 = (HX_("Got content-add before session-initiate: ",10,d3,fa,8a) + this->get_sid());
+HXDLIN( 127)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.IncomingProposedSession",84,a8,44,af))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("contentAdd",68,66,dd,43))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),123)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),127)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(IncomingProposedSession_obj,contentAdd,(void))
 
 void IncomingProposedSession_obj::contentAccept( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_127_contentAccept)
-HXDLIN( 127)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 127)		::String _hx_tmp1 = (HX_("Got content-accept before session-initiate: ",47,72,87,71) + this->get_sid());
-HXDLIN( 127)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_131_contentAccept)
+HXDLIN( 131)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 131)		::String _hx_tmp1 = (HX_("Got content-accept before session-initiate: ",47,72,87,71) + this->get_sid());
+HXDLIN( 131)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.IncomingProposedSession",84,a8,44,af))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("contentAccept",21,c5,01,e1))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),127)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),131)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(IncomingProposedSession_obj,contentAccept,(void))
 
 ::Dynamic IncomingProposedSession_obj::transportInfo( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_130_transportInfo)
-HXLINE( 131)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 131)		::String _hx_tmp1 = (HX_("Got transport-info before session-initiate: ",bd,bd,9d,08) + this->get_sid());
-HXDLIN( 131)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_134_transportInfo)
+HXLINE( 135)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 135)		::String _hx_tmp1 = (HX_("Got transport-info before session-initiate: ",bd,bd,9d,08) + this->get_sid());
+HXDLIN( 135)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.IncomingProposedSession",84,a8,44,af))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("transportInfo",b7,3c,cf,b6))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),131)));
-HXLINE( 132)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),135)));
+HXLINE( 136)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
@@ -266,106 +266,106 @@ HX_DEFINE_DYNAMIC_FUNC1(IncomingProposedSession_obj,transportInfo,return )
 void IncomingProposedSession_obj::accept(){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::IncomingProposedSession,_gthis, ::borogove::Stanza,event, ::borogove::ChatMessage,msg) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_141_accept)
-HXLINE( 142)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
-HXLINE( 143)			 ::borogove::Client _gthis1 = _gthis->client;
-HXLINE( 144)			::String _hx_tmp = _gthis->from->asString();
-HXLINE( 143)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_145_accept)
+HXLINE( 146)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+HXLINE( 147)			 ::borogove::Client _gthis1 = _gthis->client;
+HXLINE( 148)			::String _hx_tmp = _gthis->from->asString();
+HXLINE( 147)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),msg->versions->__get(0).StaticCast<  ::borogove::ChatMessage >()->localId)
             				->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp)
-            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hints",70,b3,d6,fe)))));
+            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))),null())->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hints",70,b3,d6,fe))),null()));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_135_accept)
-HXDLIN( 135)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 136)		if (this->accepted) {
-HXLINE( 136)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_139_accept)
+HXDLIN( 139)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 140)		if (this->accepted) {
+HXLINE( 140)			return;
             		}
-HXLINE( 137)		this->accepted = true;
-HXLINE( 138)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 138)		_hx_tmp->sendPresence(this->from->asString(),null());
-HXLINE( 139)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("proceed",2e,96,4a,f1), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 141)		this->accepted = true;
+HXLINE( 142)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 142)		_hx_tmp->sendPresence(this->from->asString(),null());
+HXLINE( 143)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("proceed",2e,96,4a,f1), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE( 140)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client,event);
-HXLINE( 141)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))),null());
+HXLINE( 144)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client,event);
+HXLINE( 145)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,accept,(void))
 
  ::borogove::calls::InitiatedSession IncomingProposedSession_obj::initiate( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_152_initiate)
-HXLINE( 154)		 ::borogove::calls::InitiatedSession session = ::borogove::calls::InitiatedSession_obj::fromSessionInitiate(this->client,stanza);
-HXLINE( 155)		::String _hx_tmp = session->get_sid();
-HXDLIN( 155)		if ((_hx_tmp != this->get_sid())) {
-HXLINE( 155)			HX_STACK_DO_THROW(HX_("id mismatch",33,05,74,bd));
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_156_initiate)
+HXLINE( 158)		 ::borogove::calls::InitiatedSession session = ::borogove::calls::InitiatedSession_obj::fromSessionInitiate(this->client,stanza);
+HXLINE( 159)		::String _hx_tmp = session->get_sid();
+HXDLIN( 159)		if ((_hx_tmp != this->get_sid())) {
+HXLINE( 159)			HX_STACK_DO_THROW(HX_("id mismatch",33,05,74,bd));
             		}
-HXLINE( 156)		if (!(this->accepted)) {
-HXLINE( 156)			HX_STACK_DO_THROW(HX_("trying to initiate unaccepted session",b1,34,34,a4));
+HXLINE( 160)		if (!(this->accepted)) {
+HXLINE( 160)			HX_STACK_DO_THROW(HX_("trying to initiate unaccepted session",b1,34,34,a4));
             		}
-HXLINE( 157)		session->accept();
-HXLINE( 158)		this->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 161)		session->accept();
+HXLINE( 162)		this->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("session",56,17,98,93),session)));
-HXLINE( 159)		return session;
+HXLINE( 163)		return session;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(IncomingProposedSession_obj,initiate,return )
 
 void IncomingProposedSession_obj::addMedia(::Array< ::Dynamic> _){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_164_addMedia)
-HXDLIN( 164)		HX_STACK_DO_THROW(HX_("Cannot add media before call starts",aa,0a,79,d5));
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_168_addMedia)
+HXDLIN( 168)		HX_STACK_DO_THROW(HX_("Cannot add media before call starts",aa,0a,79,d5));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(IncomingProposedSession_obj,addMedia,(void))
 
 int IncomingProposedSession_obj::callStatus(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_169_callStatus)
-HXDLIN( 169)		return 1;
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_173_callStatus)
+HXDLIN( 173)		return 1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,callStatus,return )
 
 ::Array< ::Dynamic> IncomingProposedSession_obj::audioTracks(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_174_audioTracks)
-HXDLIN( 174)		return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_178_audioTracks)
+HXDLIN( 178)		return ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,audioTracks,return )
 
 ::Array< ::Dynamic> IncomingProposedSession_obj::videoTracks(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_179_videoTracks)
-HXDLIN( 179)		return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_183_videoTracks)
+HXDLIN( 183)		return ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,videoTracks,return )
 
  ::borogove::calls::DTMFSender IncomingProposedSession_obj::dtmf(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_184_dtmf)
-HXDLIN( 184)		return null();
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_188_dtmf)
+HXDLIN( 188)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,dtmf,return )
 
 ::String IncomingProposedSession_obj::get_sid(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_188_get_sid)
-HXDLIN( 188)		return this->_sid;
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_192_get_sid)
+HXDLIN( 192)		return this->_sid;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,get_sid,return )
 
 ::String IncomingProposedSession_obj::get_chatId(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_192_get_chatId)
-HXDLIN( 192)		return this->from->asBare()->asString();
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_196_get_chatId)
+HXDLIN( 196)		return this->from->asBare()->asString();
             	}
 
 
@@ -554,8 +554,8 @@ void IncomingProposedSession_obj::__register()
 void IncomingProposedSession_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_75_boot)
-HXDLIN(  75)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_79_boot)
+HXDLIN(  79)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(5)
             				->setFixed(0,HX_("videoTracks",63,c2,24,be), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
diff --git a/Sources/c_borogove/src/borogove/calls/InitiatedSession.cpp b/Sources/c_borogove/src/borogove/calls/InitiatedSession.cpp
index d7715b3..7f81096 100644
--- a/Sources/c_borogove/src/borogove/calls/InitiatedSession.cpp
+++ b/Sources/c_borogove/src/borogove/calls/InitiatedSession.cpp
@@ -4,9 +4,6 @@
 #ifndef INCLUDED_Lambda
 #include <Lambda.h>
 #endif
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
@@ -101,85 +98,85 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_7acc2c8020739c2c_331_new,"borogove.calls.InitiatedSession","new",0x27873263,"borogove.calls.InitiatedSession.new","borogove/calls/Session.hx",331,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_373_get_sid,"borogove.calls.InitiatedSession","get_sid",0x628c8728,"borogove.calls.InitiatedSession.get_sid","borogove/calls/Session.hx",373,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_377_get_chatId,"borogove.calls.InitiatedSession","get_chatId",0x1872a8f9,"borogove.calls.InitiatedSession.get_chatId","borogove/calls/Session.hx",377,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_382_ring,"borogove.calls.InitiatedSession","ring",0x716cc04d,"borogove.calls.InitiatedSession.ring","borogove/calls/Session.hx",382,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_387_retract,"borogove.calls.InitiatedSession","retract",0x387a0184,"borogove.calls.InitiatedSession.retract","borogove/calls/Session.hx",387,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_394_accept,"borogove.calls.InitiatedSession","accept",0xee9814e5,"borogove.calls.InitiatedSession.accept","borogove/calls/Session.hx",394,0x33a79030)
+HX_DEFINE_STACK_FRAME(_hx_pos_7acc2c8020739c2c_335_new,"borogove.calls.InitiatedSession","new",0x27873263,"borogove.calls.InitiatedSession.new","borogove/calls/Session.hx",335,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_377_get_sid,"borogove.calls.InitiatedSession","get_sid",0x628c8728,"borogove.calls.InitiatedSession.get_sid","borogove/calls/Session.hx",377,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_381_get_chatId,"borogove.calls.InitiatedSession","get_chatId",0x1872a8f9,"borogove.calls.InitiatedSession.get_chatId","borogove/calls/Session.hx",381,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_386_ring,"borogove.calls.InitiatedSession","ring",0x716cc04d,"borogove.calls.InitiatedSession.ring","borogove/calls/Session.hx",386,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_391_retract,"borogove.calls.InitiatedSession","retract",0x387a0184,"borogove.calls.InitiatedSession.retract","borogove/calls/Session.hx",391,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_398_accept,"borogove.calls.InitiatedSession","accept",0xee9814e5,"borogove.calls.InitiatedSession.accept","borogove/calls/Session.hx",398,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_399_accept,"borogove.calls.InitiatedSession","accept",0xee9814e5,"borogove.calls.InitiatedSession.accept","borogove/calls/Session.hx",399,0x33a79030)
 HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_395_accept,"borogove.calls.InitiatedSession","accept",0xee9814e5,"borogove.calls.InitiatedSession.accept","borogove/calls/Session.hx",395,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_391_accept,"borogove.calls.InitiatedSession","accept",0xee9814e5,"borogove.calls.InitiatedSession.accept","borogove/calls/Session.hx",391,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_400_hangup,"borogove.calls.InitiatedSession","hangup",0x9b91542a,"borogove.calls.InitiatedSession.hangup","borogove/calls/Session.hx",400,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_411_initiate,"borogove.calls.InitiatedSession","initiate",0x6beadd76,"borogove.calls.InitiatedSession.initiate","borogove/calls/Session.hx",411,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_432_terminate,"borogove.calls.InitiatedSession","terminate",0xc17b78a4,"borogove.calls.InitiatedSession.terminate","borogove/calls/Session.hx",432,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_417_terminate,"borogove.calls.InitiatedSession","terminate",0xc17b78a4,"borogove.calls.InitiatedSession.terminate","borogove/calls/Session.hx",417,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_467_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",467,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_466_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",466,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_460_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",460,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_459_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",459,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_444_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",444,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_404_hangup,"borogove.calls.InitiatedSession","hangup",0x9b91542a,"borogove.calls.InitiatedSession.hangup","borogove/calls/Session.hx",404,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_415_initiate,"borogove.calls.InitiatedSession","initiate",0x6beadd76,"borogove.calls.InitiatedSession.initiate","borogove/calls/Session.hx",415,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_436_terminate,"borogove.calls.InitiatedSession","terminate",0xc17b78a4,"borogove.calls.InitiatedSession.terminate","borogove/calls/Session.hx",436,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_421_terminate,"borogove.calls.InitiatedSession","terminate",0xc17b78a4,"borogove.calls.InitiatedSession.terminate","borogove/calls/Session.hx",421,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_471_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",471,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_470_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",470,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_464_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",464,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_463_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",463,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_448_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",448,0x33a79030)
 static const bool _hx_array_data_ac07c4f1_21[] = {
 	0,
 };
 static const bool _hx_array_data_ac07c4f1_22[] = {
 	0,
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_451_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",451,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_484_contentAccept,"borogove.calls.InitiatedSession","contentAccept",0xcd9ee8e4,"borogove.calls.InitiatedSession.contentAccept","borogove/calls/Session.hx",484,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_511_transportInfo,"borogove.calls.InitiatedSession","transportInfo",0xa36c607a,"borogove.calls.InitiatedSession.transportInfo","borogove/calls/Session.hx",511,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_497_transportInfo,"borogove.calls.InitiatedSession","transportInfo",0xa36c607a,"borogove.calls.InitiatedSession.transportInfo","borogove/calls/Session.hx",497,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_515_addMedia,"borogove.calls.InitiatedSession","addMedia",0x8b749e20,"borogove.calls.InitiatedSession.addMedia","borogove/calls/Session.hx",515,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_530_callStatus,"borogove.calls.InitiatedSession","callStatus",0xa19ff2cd,"borogove.calls.InitiatedSession.callStatus","borogove/calls/Session.hx",530,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_540_audioTracks,"borogove.calls.InitiatedSession","audioTracks",0x0966fa01,"borogove.calls.InitiatedSession.audioTracks","borogove/calls/Session.hx",540,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_548_videoTracks,"borogove.calls.InitiatedSession","videoTracks",0xb35e5f66,"borogove.calls.InitiatedSession.videoTracks","borogove/calls/Session.hx",548,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_558_dtmf,"borogove.calls.InitiatedSession","dtmf",0x68341b86,"borogove.calls.InitiatedSession.dtmf","borogove/calls/Session.hx",558,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_556_dtmf,"borogove.calls.InitiatedSession","dtmf",0x68341b86,"borogove.calls.InitiatedSession.dtmf","borogove/calls/Session.hx",556,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_573_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",573,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_585_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",585,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_563_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",563,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_586_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",586,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_598_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",598,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_606_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",606,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_597_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",597,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_455_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",455,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_488_contentAccept,"borogove.calls.InitiatedSession","contentAccept",0xcd9ee8e4,"borogove.calls.InitiatedSession.contentAccept","borogove/calls/Session.hx",488,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_515_transportInfo,"borogove.calls.InitiatedSession","transportInfo",0xa36c607a,"borogove.calls.InitiatedSession.transportInfo","borogove/calls/Session.hx",515,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_501_transportInfo,"borogove.calls.InitiatedSession","transportInfo",0xa36c607a,"borogove.calls.InitiatedSession.transportInfo","borogove/calls/Session.hx",501,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_519_addMedia,"borogove.calls.InitiatedSession","addMedia",0x8b749e20,"borogove.calls.InitiatedSession.addMedia","borogove/calls/Session.hx",519,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_534_callStatus,"borogove.calls.InitiatedSession","callStatus",0xa19ff2cd,"borogove.calls.InitiatedSession.callStatus","borogove/calls/Session.hx",534,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_544_audioTracks,"borogove.calls.InitiatedSession","audioTracks",0x0966fa01,"borogove.calls.InitiatedSession.audioTracks","borogove/calls/Session.hx",544,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_552_videoTracks,"borogove.calls.InitiatedSession","videoTracks",0xb35e5f66,"borogove.calls.InitiatedSession.videoTracks","borogove/calls/Session.hx",552,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_562_dtmf,"borogove.calls.InitiatedSession","dtmf",0x68341b86,"borogove.calls.InitiatedSession.dtmf","borogove/calls/Session.hx",562,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_560_dtmf,"borogove.calls.InitiatedSession","dtmf",0x68341b86,"borogove.calls.InitiatedSession.dtmf","borogove/calls/Session.hx",560,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_577_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",577,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_589_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",589,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_567_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",567,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_590_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",590,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_602_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",602,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_610_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",610,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_601_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",601,0x33a79030)
 HX_LOCAL_STACK_FRAME(_hx_pos_a639e4155ff9c820_354_supplyMedia__fromC,"borogove.calls.InitiatedSession","supplyMedia__fromC",0x9589de41,"borogove.calls.InitiatedSession.supplyMedia__fromC","HaxeCBridge.hx",354,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_624_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",624,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_626_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",626,0x33a79030)
 HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_628_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",628,0x33a79030)
 HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_630_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",630,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_621_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",621,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_616_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",616,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_647_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",647,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_652_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",652,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_632_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",632,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_634_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",634,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_625_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",625,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_620_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",620,0x33a79030)
 HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_651_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",651,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_656_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",656,0x33a79030)
 HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_655_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",655,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_659_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",659,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_654_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",654,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_667_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",667,0x33a79030)
 HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_650_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",650,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_663_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",663,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_646_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",646,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_691_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",691,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_697_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",697,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_698_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",698,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_689_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",689,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_360_fromSessionInitiate,"borogove.calls.InitiatedSession","fromSessionInitiate",0xba506588,"borogove.calls.InitiatedSession.fromSessionInitiate","borogove/calls/Session.hx",360,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_331_boot,"borogove.calls.InitiatedSession","boot",0x66dde4cf,"borogove.calls.InitiatedSession.boot","borogove/calls/Session.hx",331,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_695_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",695,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_701_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",701,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_702_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",702,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_693_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",693,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_364_fromSessionInitiate,"borogove.calls.InitiatedSession","fromSessionInitiate",0xba506588,"borogove.calls.InitiatedSession.fromSessionInitiate","borogove/calls/Session.hx",364,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_335_boot,"borogove.calls.InitiatedSession","boot",0x66dde4cf,"borogove.calls.InitiatedSession.boot","borogove/calls/Session.hx",335,0x33a79030)
 namespace borogove{
 namespace calls{
 
 void InitiatedSession_obj::__construct( ::borogove::Client client, ::borogove::JID counterpart,::String sid, ::borogove::calls::SessionDescription remoteDescription){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_331_new)
-HXLINE( 348)		this->candidatesDone = null();
-HXLINE( 346)		this->afterMedia = null();
-HXLINE( 345)		this->accepted = false;
-HXLINE( 344)		this->queuedOutboundCandidate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 343)		this->queuedInboundTransportInfo = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 342)		this->peerDtlsSetup = HX_("actpass",23,e7,c3,6b);
-HXLINE( 341)		this->pc = null();
-HXLINE( 340)		this->localDescription = null();
-HXLINE( 339)		this->remoteDescription = null();
-HXLINE( 352)		this->client = client;
-HXLINE( 353)		this->counterpart = counterpart;
-HXLINE( 354)		this->_sid = sid;
-HXLINE( 355)		this->remoteDescription = remoteDescription;
-HXLINE( 356)		this->initiator = ::hx::IsNull( remoteDescription );
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_335_new)
+HXLINE( 352)		this->candidatesDone = null();
+HXLINE( 350)		this->afterMedia = null();
+HXLINE( 349)		this->accepted = false;
+HXLINE( 348)		this->queuedOutboundCandidate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 347)		this->queuedInboundTransportInfo = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 346)		this->peerDtlsSetup = HX_("actpass",23,e7,c3,6b);
+HXLINE( 345)		this->pc = null();
+HXLINE( 344)		this->localDescription = null();
+HXLINE( 343)		this->remoteDescription = null();
+HXLINE( 356)		this->client = client;
+HXLINE( 357)		this->counterpart = counterpart;
+HXLINE( 358)		this->_sid = sid;
+HXLINE( 359)		this->remoteDescription = remoteDescription;
+HXLINE( 360)		this->initiator = ::hx::IsNull( remoteDescription );
             	}
 
 Dynamic InitiatedSession_obj::__CreateEmpty() { return new InitiatedSession_obj; }
@@ -230,24 +227,24 @@ void *InitiatedSession_obj::_hx_getInterface(int inHash) {
 }
 
 ::String InitiatedSession_obj::get_sid(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_373_get_sid)
-HXDLIN( 373)		return this->_sid;
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_377_get_sid)
+HXDLIN( 377)		return this->_sid;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,get_sid,return )
 
 ::String InitiatedSession_obj::get_chatId(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_377_get_chatId)
-HXDLIN( 377)		return this->counterpart->asBare()->asString();
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_381_get_chatId)
+HXDLIN( 381)		return this->counterpart->asBare()->asString();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,get_chatId,return )
 
 void InitiatedSession_obj::ring(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_382_ring)
-HXDLIN( 382)		this->client->trigger(HX_("call/ring",01,8e,91,54), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_386_ring)
+HXDLIN( 386)		this->client->trigger(HX_("call/ring",01,8e,91,54), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("session",56,17,98,93),::hx::ObjectPtr<OBJ_>(this))));
             	}
 
@@ -255,15 +252,15 @@ HXDLIN( 382)		this->client->trigger(HX_("call/ring",01,8e,91,54), ::Dynamic(::hx
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,ring,(void))
 
 void InitiatedSession_obj::retract(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_387_retract)
-HXDLIN( 387)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 387)		::String _hx_tmp1 = (HX_("Tried to retract session in wrong state: ",e1,1c,0c,db) + this->get_sid());
-HXDLIN( 387)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_391_retract)
+HXDLIN( 391)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 391)		::String _hx_tmp1 = (HX_("Tried to retract session in wrong state: ",e1,1c,0c,db) + this->get_sid());
+HXDLIN( 391)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.InitiatedSession",f1,c4,07,ac))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("retract",01,e2,b9,fc))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),387)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),391)));
             	}
 
 
@@ -272,33 +269,33 @@ HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,retract,(void))
 void InitiatedSession_obj::accept(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::calls::Media m){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_394_accept)
-HXLINE( 394)			return (m->media == HX_("audio",d6,78,80,27));
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_398_accept)
+HXLINE( 398)			return (m->media == HX_("audio",d6,78,80,27));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run( ::borogove::calls::Media m){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_395_accept)
-HXLINE( 395)			return (m->media == HX_("video",7b,14,fc,36));
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_399_accept)
+HXLINE( 399)			return (m->media == HX_("video",7b,14,fc,36));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_391_accept)
-HXLINE( 392)		bool _hx_tmp;
-HXDLIN( 392)		if (!(this->accepted)) {
-HXLINE( 392)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_395_accept)
+HXLINE( 396)		bool _hx_tmp;
+HXDLIN( 396)		if (!(this->accepted)) {
+HXLINE( 396)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
             		}
             		else {
-HXLINE( 392)			_hx_tmp = true;
+HXLINE( 396)			_hx_tmp = true;
             		}
-HXDLIN( 392)		if (_hx_tmp) {
-HXLINE( 392)			return;
+HXDLIN( 396)		if (_hx_tmp) {
+HXLINE( 396)			return;
             		}
-HXLINE( 393)		this->accepted = true;
-HXLINE( 394)		bool audio = ::hx::IsNotNull( ::Lambda_obj::find(this->remoteDescription->media, ::Dynamic(new _hx_Closure_0())) );
-HXLINE( 395)		bool video = ::hx::IsNotNull( ::Lambda_obj::find(this->remoteDescription->media, ::Dynamic(new _hx_Closure_1())) );
-HXLINE( 396)		this->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 397)		this->accepted = true;
+HXLINE( 398)		bool audio = ::hx::IsNotNull( ::Lambda_obj::find(this->remoteDescription->media, ::Dynamic(new _hx_Closure_0())) );
+HXLINE( 399)		bool video = ::hx::IsNotNull( ::Lambda_obj::find(this->remoteDescription->media, ::Dynamic(new _hx_Closure_1())) );
+HXLINE( 400)		this->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("session",56,17,98,93),::hx::ObjectPtr<OBJ_>(this))
             			->setFixed(1,HX_("audio",d6,78,80,27),audio)
             			->setFixed(2,HX_("video",7b,14,fc,36),video)));
@@ -308,30 +305,30 @@ HXLINE( 396)		this->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::h
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,accept,(void))
 
 void InitiatedSession_obj::hangup(){
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_400_hangup)
-HXLINE( 401)		 ::borogove::Client _hx_tmp = this->client;
-HXLINE( 402)		::String _hx_tmp1 = this->counterpart->asString();
-HXDLIN( 402)		 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_404_hangup)
+HXLINE( 405)		 ::borogove::Client _hx_tmp = this->client;
+HXLINE( 406)		::String _hx_tmp1 = this->counterpart->asString();
+HXDLIN( 406)		 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7())
             			->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp1)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))));
-HXLINE( 401)		_hx_tmp->sendStanza(_hx_tmp2->tag(HX_("jingle",31,27,eb,1f), ::Dynamic(::hx::Anon_obj::Create(3)
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null());
+HXLINE( 405)		_hx_tmp->sendStanza(_hx_tmp2->tag(HX_("jingle",31,27,eb,1f), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("sid",0e,9f,57,00),this->get_sid())
             			->setFixed(1,HX_("action",b6,3b,46,16),HX_("session-terminate",6a,23,dc,12))
-            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:1",44,c4,fe,f7))))->tag(HX_("reason",c4,0f,9d,fc),null())->tag(HX_("success",c3,25,4e,b8),null())->up()->up()->up());
-HXLINE( 407)		this->terminate();
+            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:1",44,c4,fe,f7))),null())->tag(HX_("reason",c4,0f,9d,fc),null(),null())->tag(HX_("success",c3,25,4e,b8),null(),null())->up()->up()->up());
+HXLINE( 411)		this->terminate();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,hangup,(void))
 
  ::borogove::calls::OutgoingSession InitiatedSession_obj::initiate( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_411_initiate)
-HXLINE( 412)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 412)		::String _hx_tmp1 = (HX_("Trying to initiate already initiated session: ",84,56,c8,79) + this->get_sid());
-HXDLIN( 412)		_hx_tmp(_hx_tmp1,::hx::SourceInfo(HX_("borogove/calls/Session.hx",30,90,a7,33),412,HX_("borogove.calls.InitiatedSession",f1,c4,07,ac),HX_("initiate",59,6a,8f,5f)));
-HXLINE( 413)		HX_STACK_DO_THROW(HX_("already initiated",63,a5,36,1a));
-HXDLIN( 413)		return null();
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_415_initiate)
+HXLINE( 416)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 416)		::String _hx_tmp1 = (HX_("Trying to initiate already initiated session: ",84,56,c8,79) + this->get_sid());
+HXDLIN( 416)		_hx_tmp(_hx_tmp1,::hx::SourceInfo(HX_("borogove/calls/Session.hx",30,90,a7,33),416,HX_("borogove.calls.InitiatedSession",f1,c4,07,ac),HX_("initiate",59,6a,8f,5f)));
+HXLINE( 417)		HX_STACK_DO_THROW(HX_("already initiated",63,a5,36,1a));
+HXDLIN( 417)		return null();
             	}
 
 
@@ -340,60 +337,60 @@ HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,initiate,return )
 void InitiatedSession_obj::terminate(){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::InitiatedSession,_gthis, ::borogove::Stanza,event, ::borogove::ChatMessage,msg) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_432_terminate)
-HXLINE( 433)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
-HXLINE( 434)			 ::borogove::Client _gthis1 = _gthis->client;
-HXLINE( 435)			::String _hx_tmp = _gthis->counterpart->asString();
-HXLINE( 434)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_436_terminate)
+HXLINE( 437)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+HXLINE( 438)			 ::borogove::Client _gthis1 = _gthis->client;
+HXLINE( 439)			::String _hx_tmp = _gthis->counterpart->asString();
+HXLINE( 438)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),msg->versions->__get(0).StaticCast<  ::borogove::ChatMessage >()->localId)
             				->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp)
-            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hints",70,b3,d6,fe)))));
+            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))),null())->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hints",70,b3,d6,fe))),null()));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_417_terminate)
-HXDLIN( 417)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 418)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 418)		::String _hx_tmp1 = this->get_chatId();
-HXDLIN( 418)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_421_terminate)
+HXDLIN( 421)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 422)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 422)		::String _hx_tmp1 = this->get_chatId();
+HXDLIN( 422)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
             			->setFixed(1,HX_("sid",0e,9f,57,00),this->get_sid())));
-HXLINE( 420)		if (::hx::IsNull( this->pc )) {
-HXLINE( 420)			return;
+HXLINE( 424)		if (::hx::IsNull( this->pc )) {
+HXLINE( 424)			return;
             		}
-HXLINE( 421)		 ::borogove::calls::PeerConnection oldPc = this->pc;
-HXLINE( 422)		this->pc = null();
-HXLINE( 423)		oldPc->close();
-HXLINE( 424)		{
-HXLINE( 424)			int _g = 0;
-HXDLIN( 424)			::Array< ::Dynamic> _g1 = oldPc->getTransceivers();
-HXDLIN( 424)			while((_g < _g1->length)){
-HXLINE( 424)				 ::Dynamic tranceiver = _g1->__get(_g);
-HXDLIN( 424)				_g = (_g + 1);
-HXLINE( 425)				bool _hx_tmp2;
-HXDLIN( 425)				if (::hx::IsNotNull( tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic) )) {
-HXLINE( 425)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
+HXLINE( 425)		 ::borogove::calls::PeerConnection oldPc = this->pc;
+HXLINE( 426)		this->pc = null();
+HXLINE( 427)		oldPc->close();
+HXLINE( 428)		{
+HXLINE( 428)			int _g = 0;
+HXDLIN( 428)			::Array< ::Dynamic> _g1 = oldPc->getTransceivers();
+HXDLIN( 428)			while((_g < _g1->length)){
+HXLINE( 428)				 ::Dynamic tranceiver = _g1->__get(_g);
+HXDLIN( 428)				_g = (_g + 1);
+HXLINE( 429)				bool _hx_tmp2;
+HXDLIN( 429)				if (::hx::IsNotNull( tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic) )) {
+HXLINE( 429)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
             				}
             				else {
-HXLINE( 425)					_hx_tmp2 = false;
+HXLINE( 429)					_hx_tmp2 = false;
             				}
-HXDLIN( 425)				if (_hx_tmp2) {
-HXLINE( 426)					( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->stop();
+HXDLIN( 429)				if (_hx_tmp2) {
+HXLINE( 430)					( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->stop();
             				}
             			}
             		}
-HXLINE( 430)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("finish",53,40,7f,86), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 434)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("finish",53,40,7f,86), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE( 431)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->counterpart,this->client,event);
-HXLINE( 432)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
-HXLINE( 440)		{
-HXLINE( 440)			 ::borogove::Client tmp = this->client;
-HXDLIN( 440)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
-HXDLIN( 440)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 440)				::Dynamic this1 = tmp1->jingleSessions;
-HXDLIN( 440)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))),null());
+HXLINE( 435)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->counterpart,this->client,event);
+HXLINE( 436)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
+HXLINE( 444)		{
+HXLINE( 444)			 ::borogove::Client tmp = this->client;
+HXDLIN( 444)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
+HXDLIN( 444)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 444)				::Dynamic this1 = tmp1->jingleSessions;
+HXDLIN( 444)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
             			}
             		}
             	}
@@ -412,108 +409,104 @@ void InitiatedSession_obj::contentAdd( ::borogove::Stanza stanza){
             					bool _hx_run( ::borogove::calls::Media m){
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::calls::Media,m) HXARGC(1)
             						bool _hx_run( ::borogove::calls::Media addM){
-            							HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_467_contentAdd)
-HXLINE( 467)							return (addM->mid == m->mid);
+            							HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_471_contentAdd)
+HXLINE( 471)							return (addM->mid == m->mid);
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-            						HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_467_contentAdd)
-HXLINE( 467)						::String _hx_tmp = ( (::String)(::Reflect_obj::field(m->contentElement(false)->attr,HX_("senders",1e,f7,a9,a8))) );
-HXDLIN( 467)						return (_hx_tmp != ( (::String)(::Reflect_obj::field(( ( ::borogove::calls::Media)(::Lambda_obj::find(addThis->media, ::Dynamic(new _hx_Closure_1(m)))) )->contentElement(false)->attr,HX_("senders",1e,f7,a9,a8))) ));
+            						HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_471_contentAdd)
+HXLINE( 471)						::String _hx_tmp = m->contentElement(false)->attr->get_string(HX_("senders",1e,f7,a9,a8));
+HXDLIN( 471)						return ::hx::IsNotEq( _hx_tmp,( ( ::borogove::calls::Media)(::Lambda_obj::find(addThis->media, ::Dynamic(new _hx_Closure_1(m)))) )->contentElement(false)->attr->get(HX_("senders",1e,f7,a9,a8)) );
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-            					HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_466_contentAdd)
-HXLINE( 466)					if (::hx::IsNotNull( ::Lambda_obj::find(gonnaAccept->media, ::Dynamic(new _hx_Closure_2(addThis))) )) {
-HXLINE( 469)						if (::hx::IsNull( _gthis->counterpart )) {
-HXLINE( 469)							HX_STACK_DO_THROW(HX_("no counterpart?",af,8b,69,9d));
-            						}
-HXLINE( 470)						::String modify = _gthis->get_sid();
-HXDLIN( 470)						 ::borogove::Stanza modify1 = gonnaAccept->toStanza(HX_("content-modify",4e,70,8f,a8),modify,_gthis->initiator);
-HXLINE( 471)						{
-HXLINE( 471)							 ::Dynamic this1 = modify1->attr;
-HXDLIN( 471)							::Reflect_obj::setField(this1,HX_("to",7b,65,00,00),_gthis->counterpart->asString());
+            					HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_470_contentAdd)
+HXLINE( 470)					if (::hx::IsNotNull( ::Lambda_obj::find(gonnaAccept->media, ::Dynamic(new _hx_Closure_2(addThis))) )) {
+HXLINE( 473)						if (::hx::IsNull( _gthis->counterpart )) {
+HXLINE( 473)							HX_STACK_DO_THROW(HX_("no counterpart?",af,8b,69,9d));
             						}
-HXLINE( 472)						{
-HXLINE( 472)							 ::Dynamic this2 = modify1->attr;
-HXDLIN( 472)							::Reflect_obj::setField(this2,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7());
-            						}
-HXLINE( 473)						_gthis->client->sendStanza(modify1);
+HXLINE( 474)						::String modify = _gthis->get_sid();
+HXDLIN( 474)						 ::borogove::Stanza modify1 = gonnaAccept->toStanza(HX_("content-modify",4e,70,8f,a8),modify,_gthis->initiator);
+HXLINE( 475)						 ::haxe::ds::StringMap modify2 = modify1->attr;
+HXDLIN( 475)						modify2->set(HX_("to",7b,65,00,00),_gthis->counterpart->asString());
+HXLINE( 476)						 ::haxe::ds::StringMap modify3 = modify1->attr;
+HXDLIN( 476)						modify3->set(HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7());
+HXLINE( 477)						_gthis->client->sendStanza(modify1);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_460_contentAdd)
-HXLINE( 461)				 ::borogove::calls::InitiatedSession _gthis1 = _gthis;
-HXLINE( 463)				::Array< ::Dynamic> _this = addThis->media;
-HXDLIN( 463)				::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 463)				{
-HXLINE( 463)					int _g = 0;
-HXDLIN( 463)					int _g1 = _this->length;
-HXDLIN( 463)					while((_g < _g1)){
-HXLINE( 463)						_g = (_g + 1);
-HXDLIN( 463)						int i = (_g - 1);
-HXDLIN( 463)						{
-HXLINE( 463)							::String inValue = ( ( ::borogove::calls::Media)(_hx_array_unsafe_get(_this,i)) )->mid;
-HXDLIN( 463)							result->__unsafe_set(i,inValue);
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_464_contentAdd)
+HXLINE( 465)				 ::borogove::calls::InitiatedSession _gthis1 = _gthis;
+HXLINE( 467)				::Array< ::Dynamic> _this = addThis->media;
+HXDLIN( 467)				::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 467)				{
+HXLINE( 467)					int _g = 0;
+HXDLIN( 467)					int _g1 = _this->length;
+HXDLIN( 467)					while((_g < _g1)){
+HXLINE( 467)						_g = (_g + 1);
+HXDLIN( 467)						int i = (_g - 1);
+HXDLIN( 467)						{
+HXLINE( 467)							::String inValue = ( ( ::borogove::calls::Media)(_hx_array_unsafe_get(_this,i)) )->mid;
+HXDLIN( 467)							result->__unsafe_set(i,inValue);
             						}
             					}
             				}
-HXLINE( 461)				_gthis1->setupLocalDescription(HX_("content-accept",dc,ee,cb,f2),result,false, ::Dynamic(new _hx_Closure_3(_gthis,addThis)));
-HXLINE( 477)				_gthis->afterMedia = null();
+HXLINE( 465)				_gthis1->setupLocalDescription(HX_("content-accept",dc,ee,cb,f2),result,false, ::Dynamic(new _hx_Closure_3(_gthis,addThis)));
+HXLINE( 481)				_gthis->afterMedia = null();
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_459_contentAdd)
-HXLINE( 460)			_gthis->afterMedia =  ::Dynamic(new _hx_Closure_4(_gthis,addThis));
-HXLINE( 479)			return _gthis->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
+            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_463_contentAdd)
+HXLINE( 464)			_gthis->afterMedia =  ::Dynamic(new _hx_Closure_4(_gthis,addThis));
+HXLINE( 483)			return _gthis->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("session",56,17,98,93),_gthis)
             				->setFixed(1,HX_("audio",d6,78,80,27),audio->__get(0))
             				->setFixed(2,HX_("video",7b,14,fc,36),video->__get(0))));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_444_contentAdd)
-HXDLIN( 444)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 445)		if (::hx::IsNull( this->remoteDescription )) {
-HXLINE( 445)			HX_STACK_DO_THROW(HX_("Got content-add before session-accept",59,44,5e,1c));
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_448_contentAdd)
+HXDLIN( 448)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 449)		if (::hx::IsNull( this->remoteDescription )) {
+HXLINE( 449)			HX_STACK_DO_THROW(HX_("Got content-add before session-accept",59,44,5e,1c));
             		}
-HXLINE( 447)		 ::borogove::calls::SessionDescription addThis = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,this->initiator,this->remoteDescription);
-HXLINE( 448)		::Array< bool > video = ::Array_obj< bool >::fromData( _hx_array_data_ac07c4f1_21,1);
-HXLINE( 449)		::Array< bool > audio = ::Array_obj< bool >::fromData( _hx_array_data_ac07c4f1_22,1);
-HXLINE( 450)		{
-HXLINE( 450)			int _g = 0;
-HXDLIN( 450)			::Array< ::Dynamic> _g1 = addThis->media;
-HXDLIN( 450)			while((_g < _g1->length)){
+HXLINE( 451)		 ::borogove::calls::SessionDescription addThis = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,this->initiator,this->remoteDescription);
+HXLINE( 452)		::Array< bool > video = ::Array_obj< bool >::fromData( _hx_array_data_ac07c4f1_21,1);
+HXLINE( 453)		::Array< bool > audio = ::Array_obj< bool >::fromData( _hx_array_data_ac07c4f1_22,1);
+HXLINE( 454)		{
+HXLINE( 454)			int _g = 0;
+HXDLIN( 454)			::Array< ::Dynamic> _g1 = addThis->media;
+HXDLIN( 454)			while((_g < _g1->length)){
             				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             				bool _hx_run( ::borogove::calls::Attribute attr){
-            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_451_contentAdd)
-HXLINE( 451)					if ((attr->key != HX_("sendrecv",6e,1e,9c,f4))) {
-HXLINE( 451)						return (attr->key == HX_("sendonly",b4,56,a7,f2));
+            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_455_contentAdd)
+HXLINE( 455)					if ((attr->key != HX_("sendrecv",6e,1e,9c,f4))) {
+HXLINE( 455)						return (attr->key == HX_("sendonly",b4,56,a7,f2));
             					}
             					else {
-HXLINE( 451)						return true;
+HXLINE( 455)						return true;
             					}
-HXDLIN( 451)					return false;
+HXDLIN( 455)					return false;
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 450)				 ::borogove::calls::Media m = _g1->__get(_g).StaticCast<  ::borogove::calls::Media >();
-HXDLIN( 450)				_g = (_g + 1);
-HXLINE( 451)				if (::Lambda_obj::exists(m->attributes, ::Dynamic(new _hx_Closure_0()))) {
-HXLINE( 452)					if ((m->media == HX_("video",7b,14,fc,36))) {
-HXLINE( 452)						video[0] = true;
+HXLINE( 454)				 ::borogove::calls::Media m = _g1->__get(_g).StaticCast<  ::borogove::calls::Media >();
+HXDLIN( 454)				_g = (_g + 1);
+HXLINE( 455)				if (::Lambda_obj::exists(m->attributes, ::Dynamic(new _hx_Closure_0()))) {
+HXLINE( 456)					if ((m->media == HX_("video",7b,14,fc,36))) {
+HXLINE( 456)						video[0] = true;
             					}
-HXLINE( 453)					if ((m->media == HX_("audio",d6,78,80,27))) {
-HXLINE( 453)						audio[0] = true;
+HXLINE( 457)					if ((m->media == HX_("audio",d6,78,80,27))) {
+HXLINE( 457)						audio[0] = true;
             					}
             				}
-HXLINE( 455)				m->attributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("setup",7d,ae,2f,7a),this->peerDtlsSetup));
+HXLINE( 459)				m->attributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("setup",7d,ae,2f,7a),this->peerDtlsSetup));
             			}
             		}
-HXLINE( 457)		this->remoteDescription = this->remoteDescription->addContent(addThis);
-HXLINE( 459)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
-HXDLIN( 459)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 461)		this->remoteDescription = this->remoteDescription->addContent(addThis);
+HXLINE( 463)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
+HXDLIN( 463)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("sdp",bf,9a,57,00),this->remoteDescription->toSdp())
             			->setFixed(1,HX_("type",ba,f2,08,4d),cpp::Struct(rtc::Description::Type::Offer)))), ::Dynamic(new _hx_Closure_5(video,_gthis,addThis,audio)),null());
             	}
@@ -522,23 +515,23 @@ HXDLIN( 459)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDe
 HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,contentAdd,(void))
 
 void InitiatedSession_obj::contentAccept( ::borogove::Stanza stanza){
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_484_contentAccept)
-HXLINE( 485)		if (::hx::IsNull( this->remoteDescription )) {
-HXLINE( 485)			HX_STACK_DO_THROW(HX_("Got content-accept before session-accept",10,3c,4f,73));
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_488_contentAccept)
+HXLINE( 489)		if (::hx::IsNull( this->remoteDescription )) {
+HXLINE( 489)			HX_STACK_DO_THROW(HX_("Got content-accept before session-accept",10,3c,4f,73));
             		}
-HXLINE( 488)		 ::borogove::calls::SessionDescription addThis = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,!(this->initiator),this->remoteDescription);
-HXLINE( 489)		{
-HXLINE( 489)			int _g = 0;
-HXDLIN( 489)			::Array< ::Dynamic> _g1 = addThis->media;
-HXDLIN( 489)			while((_g < _g1->length)){
-HXLINE( 489)				 ::borogove::calls::Media m = _g1->__get(_g).StaticCast<  ::borogove::calls::Media >();
-HXDLIN( 489)				_g = (_g + 1);
-HXLINE( 490)				m->attributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("setup",7d,ae,2f,7a),this->peerDtlsSetup));
+HXLINE( 492)		 ::borogove::calls::SessionDescription addThis = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,!(this->initiator),this->remoteDescription);
+HXLINE( 493)		{
+HXLINE( 493)			int _g = 0;
+HXDLIN( 493)			::Array< ::Dynamic> _g1 = addThis->media;
+HXDLIN( 493)			while((_g < _g1->length)){
+HXLINE( 493)				 ::borogove::calls::Media m = _g1->__get(_g).StaticCast<  ::borogove::calls::Media >();
+HXDLIN( 493)				_g = (_g + 1);
+HXLINE( 494)				m->attributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("setup",7d,ae,2f,7a),this->peerDtlsSetup));
             			}
             		}
-HXLINE( 492)		this->remoteDescription = this->remoteDescription->addContent(addThis);
-HXLINE( 493)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
-HXDLIN( 493)		_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 496)		this->remoteDescription = this->remoteDescription->addContent(addThis);
+HXLINE( 497)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
+HXDLIN( 497)		_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("sdp",bf,9a,57,00),this->remoteDescription->toSdp())
             			->setFixed(1,HX_("type",ba,f2,08,4d),cpp::Struct(rtc::Description::Type::Answer))));
             	}
@@ -549,249 +542,249 @@ HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,contentAccept,(void))
 ::Dynamic InitiatedSession_obj::transportInfo( ::borogove::Stanza stanza){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		void _hx_run(::cpp::VirtualArray _){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_511_transportInfo)
-HXLINE( 511)			return;
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_515_transportInfo)
+HXLINE( 515)			return;
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_497_transportInfo)
-HXDLIN( 497)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 498)		bool _hx_tmp;
-HXDLIN( 498)		if (::hx::IsNotNull( this->pc )) {
-HXLINE( 498)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_501_transportInfo)
+HXDLIN( 501)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 502)		bool _hx_tmp;
+HXDLIN( 502)		if (::hx::IsNotNull( this->pc )) {
+HXLINE( 502)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
             		}
             		else {
-HXLINE( 498)			_hx_tmp = true;
+HXLINE( 502)			_hx_tmp = true;
             		}
-HXDLIN( 498)		if (_hx_tmp) {
-HXLINE( 499)			this->queuedInboundTransportInfo->push(stanza);
-HXLINE( 500)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXDLIN( 502)		if (_hx_tmp) {
+HXLINE( 503)			this->queuedInboundTransportInfo->push(stanza);
+HXLINE( 504)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
-HXLINE( 503)		::Array< ::Dynamic> _this = ::borogove::calls::IceCandidate_obj::fromStanza(stanza);
-HXDLIN( 503)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 503)		{
-HXLINE( 503)			int _g = 0;
-HXDLIN( 503)			int _g1 = _this->length;
-HXDLIN( 503)			while((_g < _g1)){
-HXLINE( 503)				_g = (_g + 1);
-HXDLIN( 503)				int i = (_g - 1);
-HXDLIN( 503)				{
-HXLINE( 503)					 ::borogove::calls::IceCandidate candidate = ( ( ::borogove::calls::IceCandidate)(_hx_array_unsafe_get(_this,i)) );
-HXLINE( 504)					int index = _gthis->remoteDescription->identificationTags->indexOf(candidate->sdpMid,null());
-HXLINE( 505)					 ::borogove::calls::PeerConnection _gthis1 = _gthis->pc;
-HXLINE( 506)					::String inValue = candidate->toSdp();
-HXLINE( 508)					 ::Dynamic inValue1;
-HXDLIN( 508)					if ((index < 0)) {
-HXLINE( 508)						inValue1 = null();
+HXLINE( 507)		::Array< ::Dynamic> _this = ::borogove::calls::IceCandidate_obj::fromStanza(stanza);
+HXDLIN( 507)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 507)		{
+HXLINE( 507)			int _g = 0;
+HXDLIN( 507)			int _g1 = _this->length;
+HXDLIN( 507)			while((_g < _g1)){
+HXLINE( 507)				_g = (_g + 1);
+HXDLIN( 507)				int i = (_g - 1);
+HXDLIN( 507)				{
+HXLINE( 507)					 ::borogove::calls::IceCandidate candidate = ( ( ::borogove::calls::IceCandidate)(_hx_array_unsafe_get(_this,i)) );
+HXLINE( 508)					int index = _gthis->remoteDescription->identificationTags->indexOf(candidate->sdpMid,null());
+HXLINE( 509)					 ::borogove::calls::PeerConnection _gthis1 = _gthis->pc;
+HXLINE( 510)					::String inValue = candidate->toSdp();
+HXLINE( 512)					 ::Dynamic inValue1;
+HXDLIN( 512)					if ((index < 0)) {
+HXLINE( 512)						inValue1 = null();
             					}
             					else {
-HXLINE( 508)						inValue1 = index;
+HXLINE( 512)						inValue1 = index;
             					}
-HXLINE( 503)					::Dynamic inValue2 = _gthis1->addIceCandidate( ::Dynamic(::hx::Anon_obj::Create(4)
+HXLINE( 507)					::Dynamic inValue2 = _gthis1->addIceCandidate( ::Dynamic(::hx::Anon_obj::Create(4)
             						->setFixed(0,HX_("usernameFragment",06,a8,37,89),candidate->ufrag)
             						->setFixed(1,HX_("candidate",43,34,d8,d0),inValue)
             						->setFixed(2,HX_("sdpMid",09,30,5f,d9),candidate->sdpMid)
             						->setFixed(3,HX_("sdpMLineIndex",f0,ab,d6,e2),inValue1)));
-HXDLIN( 503)					result->__unsafe_set(i,inValue2);
+HXDLIN( 507)					result->__unsafe_set(i,inValue2);
             				}
             			}
             		}
-HXDLIN( 503)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_0()),null());
+HXDLIN( 507)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,transportInfo,return )
 
 void InitiatedSession_obj::addMedia(::Array< ::Dynamic> streams){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_515_addMedia)
-HXLINE( 516)		if (::hx::IsNull( this->pc )) {
-HXLINE( 516)			HX_STACK_DO_THROW(HX_("tried to add media before PeerConnection exists",25,49,19,b2));
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_519_addMedia)
+HXLINE( 520)		if (::hx::IsNull( this->pc )) {
+HXLINE( 520)			HX_STACK_DO_THROW(HX_("tried to add media before PeerConnection exists",25,49,19,b2));
             		}
-HXLINE( 518)		::Array< ::Dynamic> _this = this->localDescription->media;
-HXDLIN( 518)		::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 518)		{
-HXLINE( 518)			int _g = 0;
-HXDLIN( 518)			int _g1 = _this->length;
-HXDLIN( 518)			while((_g < _g1)){
-HXLINE( 518)				_g = (_g + 1);
-HXDLIN( 518)				int i = (_g - 1);
-HXDLIN( 518)				{
-HXLINE( 518)					::String inValue = ( ( ::borogove::calls::Media)(_hx_array_unsafe_get(_this,i)) )->mid;
-HXDLIN( 518)					result->__unsafe_set(i,inValue);
+HXLINE( 522)		::Array< ::Dynamic> _this = this->localDescription->media;
+HXDLIN( 522)		::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 522)		{
+HXLINE( 522)			int _g = 0;
+HXDLIN( 522)			int _g1 = _this->length;
+HXDLIN( 522)			while((_g < _g1)){
+HXLINE( 522)				_g = (_g + 1);
+HXDLIN( 522)				int i = (_g - 1);
+HXDLIN( 522)				{
+HXLINE( 522)					::String inValue = ( ( ::borogove::calls::Media)(_hx_array_unsafe_get(_this,i)) )->mid;
+HXDLIN( 522)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXLINE( 519)		{
-HXLINE( 519)			int _g2 = 0;
-HXDLIN( 519)			while((_g2 < streams->length)){
-HXLINE( 519)				 ::borogove::calls::MediaStream stream = streams->__get(_g2).StaticCast<  ::borogove::calls::MediaStream >();
-HXDLIN( 519)				_g2 = (_g2 + 1);
-HXLINE( 520)				{
-HXLINE( 520)					int _g3 = 0;
-HXDLIN( 520)					::Array< ::Dynamic> _g4 = stream->getTracks();
-HXDLIN( 520)					while((_g3 < _g4->length)){
-HXLINE( 520)						 ::borogove::calls::MediaStreamTrack track = _g4->__get(_g3).StaticCast<  ::borogove::calls::MediaStreamTrack >();
-HXDLIN( 520)						_g3 = (_g3 + 1);
-HXLINE( 521)						this->pc->addTrack(track,stream);
+HXLINE( 523)		{
+HXLINE( 523)			int _g2 = 0;
+HXDLIN( 523)			while((_g2 < streams->length)){
+HXLINE( 523)				 ::borogove::calls::MediaStream stream = streams->__get(_g2).StaticCast<  ::borogove::calls::MediaStream >();
+HXDLIN( 523)				_g2 = (_g2 + 1);
+HXLINE( 524)				{
+HXLINE( 524)					int _g3 = 0;
+HXDLIN( 524)					::Array< ::Dynamic> _g4 = stream->getTracks();
+HXDLIN( 524)					while((_g3 < _g4->length)){
+HXLINE( 524)						 ::borogove::calls::MediaStreamTrack track = _g4->__get(_g3).StaticCast<  ::borogove::calls::MediaStreamTrack >();
+HXDLIN( 524)						_g3 = (_g3 + 1);
+HXLINE( 525)						this->pc->addTrack(track,stream);
             					}
             				}
             			}
             		}
-HXLINE( 525)		this->setupLocalDescription(HX_("content-add",cd,a9,a1,10),result,true,null());
+HXLINE( 529)		this->setupLocalDescription(HX_("content-add",cd,a9,a1,10),result,true,null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,addMedia,(void))
 
 int InitiatedSession_obj::callStatus(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_530_callStatus)
-HXDLIN( 530)		bool _hx_tmp;
-HXDLIN( 530)		bool _hx_tmp1;
-HXDLIN( 530)		if (::hx::IsNotNull( this->pc )) {
-HXDLIN( 530)			_hx_tmp1 = (this->pc->get_connectionState() == HX_("connecting",38,9f,12,f5));
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_534_callStatus)
+HXDLIN( 534)		bool _hx_tmp;
+HXDLIN( 534)		bool _hx_tmp1;
+HXDLIN( 534)		if (::hx::IsNotNull( this->pc )) {
+HXDLIN( 534)			_hx_tmp1 = (this->pc->get_connectionState() == HX_("connecting",38,9f,12,f5));
             		}
             		else {
-HXDLIN( 530)			_hx_tmp1 = true;
+HXDLIN( 534)			_hx_tmp1 = true;
             		}
-HXDLIN( 530)		if (!(_hx_tmp1)) {
-HXDLIN( 530)			_hx_tmp = (this->pc->get_connectionState() == HX_("new",60,d0,53,00));
+HXDLIN( 534)		if (!(_hx_tmp1)) {
+HXDLIN( 534)			_hx_tmp = (this->pc->get_connectionState() == HX_("new",60,d0,53,00));
             		}
             		else {
-HXDLIN( 530)			_hx_tmp = true;
+HXDLIN( 534)			_hx_tmp = true;
             		}
-HXDLIN( 530)		if (_hx_tmp) {
-HXLINE( 531)			return 3;
+HXDLIN( 534)		if (_hx_tmp) {
+HXLINE( 535)			return 3;
             		}
             		else {
-HXLINE( 532)			bool _hx_tmp2;
-HXDLIN( 532)			if ((this->pc->get_connectionState() != HX_("failed",bd,c5,fe,e7))) {
-HXLINE( 532)				_hx_tmp2 = (this->pc->get_connectionState() == HX_("closed",ac,a9,51,0e));
+HXLINE( 536)			bool _hx_tmp2;
+HXDLIN( 536)			if ((this->pc->get_connectionState() != HX_("failed",bd,c5,fe,e7))) {
+HXLINE( 536)				_hx_tmp2 = (this->pc->get_connectionState() == HX_("closed",ac,a9,51,0e));
             			}
             			else {
-HXLINE( 532)				_hx_tmp2 = true;
+HXLINE( 536)				_hx_tmp2 = true;
             			}
-HXDLIN( 532)			if (_hx_tmp2) {
-HXLINE( 533)				return 5;
+HXDLIN( 536)			if (_hx_tmp2) {
+HXLINE( 537)				return 5;
             			}
             			else {
-HXLINE( 535)				return 4;
+HXLINE( 539)				return 4;
             			}
             		}
-HXLINE( 530)		return null();
+HXLINE( 534)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,callStatus,return )
 
 ::Array< ::Dynamic> InitiatedSession_obj::audioTracks(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_540_audioTracks)
-HXLINE( 541)		if (::hx::IsNull( this->pc )) {
-HXLINE( 541)			return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_544_audioTracks)
+HXLINE( 545)		if (::hx::IsNull( this->pc )) {
+HXLINE( 545)			return ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXLINE( 542)		::Array< ::Dynamic> _this = this->pc->getTransceivers();
-HXDLIN( 542)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 542)		{
-HXLINE( 542)			int _g1 = 0;
-HXDLIN( 542)			while((_g1 < _this->length)){
-HXLINE( 542)				 ::Dynamic v = _this->__get(_g1);
-HXDLIN( 542)				_g1 = (_g1 + 1);
-HXLINE( 543)				bool _hx_tmp;
-HXDLIN( 543)				bool _hx_tmp1;
-HXDLIN( 543)				bool _hx_tmp2;
-HXDLIN( 543)				if (::hx::IsNotNull( v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic) )) {
-HXLINE( 543)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
+HXLINE( 546)		::Array< ::Dynamic> _this = this->pc->getTransceivers();
+HXDLIN( 546)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 546)		{
+HXLINE( 546)			int _g1 = 0;
+HXDLIN( 546)			while((_g1 < _this->length)){
+HXLINE( 546)				 ::Dynamic v = _this->__get(_g1);
+HXDLIN( 546)				_g1 = (_g1 + 1);
+HXLINE( 547)				bool _hx_tmp;
+HXDLIN( 547)				bool _hx_tmp1;
+HXDLIN( 547)				bool _hx_tmp2;
+HXDLIN( 547)				if (::hx::IsNotNull( v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic) )) {
+HXLINE( 547)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
             				}
             				else {
-HXLINE( 543)					_hx_tmp2 = false;
+HXLINE( 547)					_hx_tmp2 = false;
             				}
-HXDLIN( 543)				if (_hx_tmp2) {
-HXLINE( 543)					_hx_tmp1 = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("audio",d6,78,80,27));
+HXDLIN( 547)				if (_hx_tmp2) {
+HXLINE( 547)					_hx_tmp1 = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("audio",d6,78,80,27));
             				}
             				else {
-HXLINE( 543)					_hx_tmp1 = false;
+HXLINE( 547)					_hx_tmp1 = false;
             				}
-HXDLIN( 543)				if (_hx_tmp1) {
-HXLINE( 543)					_hx_tmp = !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
+HXDLIN( 547)				if (_hx_tmp1) {
+HXLINE( 547)					_hx_tmp = !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
             				}
             				else {
-HXLINE( 543)					_hx_tmp = false;
+HXLINE( 547)					_hx_tmp = false;
             				}
-HXLINE( 542)				if (_hx_tmp) {
-HXLINE( 542)					_g->push(v);
+HXLINE( 546)				if (_hx_tmp) {
+HXLINE( 546)					_g->push(v);
             				}
             			}
             		}
-HXDLIN( 542)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
-HXDLIN( 542)		{
-HXLINE( 542)			int _g2 = 0;
-HXDLIN( 542)			int _g3 = _g->length;
-HXDLIN( 542)			while((_g2 < _g3)){
-HXLINE( 542)				_g2 = (_g2 + 1);
-HXDLIN( 542)				int i = (_g2 - 1);
-HXDLIN( 542)				{
-HXLINE( 542)					 ::borogove::calls::MediaStreamTrack inValue = ( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(_hx_array_unsafe_get(_g,i)->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) );
-HXDLIN( 542)					result->__unsafe_set(i,inValue);
+HXDLIN( 546)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
+HXDLIN( 546)		{
+HXLINE( 546)			int _g2 = 0;
+HXDLIN( 546)			int _g3 = _g->length;
+HXDLIN( 546)			while((_g2 < _g3)){
+HXLINE( 546)				_g2 = (_g2 + 1);
+HXDLIN( 546)				int i = (_g2 - 1);
+HXDLIN( 546)				{
+HXLINE( 546)					 ::borogove::calls::MediaStreamTrack inValue = ( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(_hx_array_unsafe_get(_g,i)->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) );
+HXDLIN( 546)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 542)		return result;
+HXDLIN( 546)		return result;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,audioTracks,return )
 
 ::Array< ::Dynamic> InitiatedSession_obj::videoTracks(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_548_videoTracks)
-HXLINE( 549)		if (::hx::IsNull( this->pc )) {
-HXLINE( 549)			return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_552_videoTracks)
+HXLINE( 553)		if (::hx::IsNull( this->pc )) {
+HXLINE( 553)			return ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXLINE( 550)		::Array< ::Dynamic> _this = this->pc->getTransceivers();
-HXDLIN( 550)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 550)		{
-HXLINE( 550)			int _g1 = 0;
-HXDLIN( 550)			while((_g1 < _this->length)){
-HXLINE( 550)				 ::Dynamic v = _this->__get(_g1);
-HXDLIN( 550)				_g1 = (_g1 + 1);
-HXLINE( 551)				bool _hx_tmp;
-HXDLIN( 551)				bool _hx_tmp1;
-HXDLIN( 551)				bool _hx_tmp2;
-HXDLIN( 551)				if (::hx::IsNotNull( v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic) )) {
-HXLINE( 551)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
+HXLINE( 554)		::Array< ::Dynamic> _this = this->pc->getTransceivers();
+HXDLIN( 554)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 554)		{
+HXLINE( 554)			int _g1 = 0;
+HXDLIN( 554)			while((_g1 < _this->length)){
+HXLINE( 554)				 ::Dynamic v = _this->__get(_g1);
+HXDLIN( 554)				_g1 = (_g1 + 1);
+HXLINE( 555)				bool _hx_tmp;
+HXDLIN( 555)				bool _hx_tmp1;
+HXDLIN( 555)				bool _hx_tmp2;
+HXDLIN( 555)				if (::hx::IsNotNull( v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic) )) {
+HXLINE( 555)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
             				}
             				else {
-HXLINE( 551)					_hx_tmp2 = false;
+HXLINE( 555)					_hx_tmp2 = false;
             				}
-HXDLIN( 551)				if (_hx_tmp2) {
-HXLINE( 551)					_hx_tmp1 = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("video",7b,14,fc,36));
+HXDLIN( 555)				if (_hx_tmp2) {
+HXLINE( 555)					_hx_tmp1 = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("video",7b,14,fc,36));
             				}
             				else {
-HXLINE( 551)					_hx_tmp1 = false;
+HXLINE( 555)					_hx_tmp1 = false;
             				}
-HXDLIN( 551)				if (_hx_tmp1) {
-HXLINE( 551)					_hx_tmp = !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
+HXDLIN( 555)				if (_hx_tmp1) {
+HXLINE( 555)					_hx_tmp = !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
             				}
             				else {
-HXLINE( 551)					_hx_tmp = false;
+HXLINE( 555)					_hx_tmp = false;
             				}
-HXLINE( 550)				if (_hx_tmp) {
-HXLINE( 550)					_g->push(v);
+HXLINE( 554)				if (_hx_tmp) {
+HXLINE( 554)					_g->push(v);
             				}
             			}
             		}
-HXDLIN( 550)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
-HXDLIN( 550)		{
-HXLINE( 550)			int _g2 = 0;
-HXDLIN( 550)			int _g3 = _g->length;
-HXDLIN( 550)			while((_g2 < _g3)){
-HXLINE( 550)				_g2 = (_g2 + 1);
-HXDLIN( 550)				int i = (_g2 - 1);
-HXDLIN( 550)				{
-HXLINE( 550)					 ::borogove::calls::MediaStreamTrack inValue = ( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(_hx_array_unsafe_get(_g,i)->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) );
-HXDLIN( 550)					result->__unsafe_set(i,inValue);
+HXDLIN( 554)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
+HXDLIN( 554)		{
+HXLINE( 554)			int _g2 = 0;
+HXDLIN( 554)			int _g3 = _g->length;
+HXDLIN( 554)			while((_g2 < _g3)){
+HXLINE( 554)				_g2 = (_g2 + 1);
+HXDLIN( 554)				int i = (_g2 - 1);
+HXDLIN( 554)				{
+HXLINE( 554)					 ::borogove::calls::MediaStreamTrack inValue = ( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(_hx_array_unsafe_get(_g,i)->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) );
+HXDLIN( 554)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 550)		return result;
+HXDLIN( 554)		return result;
             	}
 
 
@@ -800,40 +793,40 @@ HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,videoTracks,return )
  ::borogove::calls::DTMFSender InitiatedSession_obj::dtmf(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::Dynamic t){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_558_dtmf)
-HXLINE( 558)			bool transceiver;
-HXDLIN( 558)			bool transceiver1;
-HXDLIN( 558)			if (::hx::IsNotNull( t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic) )) {
-HXLINE( 558)				transceiver1 = ::hx::IsNotNull(  ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_562_dtmf)
+HXLINE( 562)			bool transceiver;
+HXDLIN( 562)			bool transceiver1;
+HXDLIN( 562)			if (::hx::IsNotNull( t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic) )) {
+HXLINE( 562)				transceiver1 = ::hx::IsNotNull(  ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
             			}
             			else {
-HXLINE( 558)				transceiver1 = false;
+HXLINE( 562)				transceiver1 = false;
             			}
-HXDLIN( 558)			if (transceiver1) {
-HXLINE( 558)				transceiver = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("audio",d6,78,80,27));
+HXDLIN( 562)			if (transceiver1) {
+HXLINE( 562)				transceiver = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("audio",d6,78,80,27));
             			}
             			else {
-HXLINE( 558)				transceiver = false;
+HXLINE( 562)				transceiver = false;
             			}
-HXDLIN( 558)			if (transceiver) {
-HXLINE( 558)				return !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
+HXDLIN( 562)			if (transceiver) {
+HXLINE( 562)				return !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
             			}
             			else {
-HXLINE( 558)				return false;
+HXLINE( 562)				return false;
             			}
-HXDLIN( 558)			return false;
+HXDLIN( 562)			return false;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_556_dtmf)
-HXLINE( 557)		if (::hx::IsNull( this->pc )) {
-HXLINE( 557)			return null();
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_560_dtmf)
+HXLINE( 561)		if (::hx::IsNull( this->pc )) {
+HXLINE( 561)			return null();
             		}
-HXLINE( 558)		 ::Dynamic transceiver = ::Lambda_obj::find(this->pc->getTransceivers(), ::Dynamic(new _hx_Closure_0()));
-HXLINE( 559)		if (::hx::IsNull( transceiver )) {
-HXLINE( 559)			return null();
+HXLINE( 562)		 ::Dynamic transceiver = ::Lambda_obj::find(this->pc->getTransceivers(), ::Dynamic(new _hx_Closure_0()));
+HXLINE( 563)		if (::hx::IsNull( transceiver )) {
+HXLINE( 563)			return null();
             		}
-HXLINE( 560)		return ( ( ::borogove::calls::DTMFSender)( ::Dynamic(transceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("dtmf",e9,ba,71,42),::hx::paccDynamic)) );
+HXLINE( 564)		return ( ( ::borogove::calls::DTMFSender)( ::Dynamic(transceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("dtmf",e9,ba,71,42),::hx::paccDynamic)) );
             	}
 
 
@@ -842,77 +835,73 @@ HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,dtmf,return )
 void InitiatedSession_obj::sendIceCandidate( ::Dynamic candidate){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,candidate) HXARGC(1)
             		bool _hx_run( ::borogove::calls::Media media){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_573_sendIceCandidate)
-HXLINE( 573)			return ::hx::IsEq( media->mid,candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic) );
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_577_sendIceCandidate)
+HXLINE( 577)			return ::hx::IsEq( media->mid,candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic) );
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run( ::borogove::calls::Attribute attr){
-            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_585_sendIceCandidate)
-HXLINE( 585)			return (attr->key == HX_("ice-pwd",3b,03,2f,e9));
+            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_589_sendIceCandidate)
+HXLINE( 589)			return (attr->key == HX_("ice-pwd",3b,03,2f,e9));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_563_sendIceCandidate)
-HXLINE( 564)		bool _hx_tmp;
-HXDLIN( 564)		if (::hx::IsNotNull( candidate )) {
-HXLINE( 564)			_hx_tmp = ::hx::IsEq( candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic),HX_("",00,00,00,00) );
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_567_sendIceCandidate)
+HXLINE( 568)		bool _hx_tmp;
+HXDLIN( 568)		if (::hx::IsNotNull( candidate )) {
+HXLINE( 568)			_hx_tmp = ::hx::IsEq( candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic),HX_("",00,00,00,00) );
             		}
             		else {
-HXLINE( 564)			_hx_tmp = true;
+HXLINE( 568)			_hx_tmp = true;
             		}
-HXDLIN( 564)		if (_hx_tmp) {
-HXLINE( 565)			if (::hx::IsNotNull( this->candidatesDone )) {
-HXLINE( 565)				this->candidatesDone();
+HXDLIN( 568)		if (_hx_tmp) {
+HXLINE( 569)			if (::hx::IsNotNull( this->candidatesDone )) {
+HXLINE( 569)				this->candidatesDone();
             			}
-HXLINE( 566)			return;
+HXLINE( 570)			return;
             		}
-HXLINE( 568)		if (::hx::IsNotNull( this->candidatesDone )) {
-HXLINE( 568)			return;
+HXLINE( 572)		if (::hx::IsNotNull( this->candidatesDone )) {
+HXLINE( 572)			return;
             		}
-HXLINE( 569)		if (::hx::IsNull( this->localDescription )) {
-HXLINE( 570)			this->queuedOutboundCandidate->push(candidate);
-HXLINE( 571)			return;
+HXLINE( 573)		if (::hx::IsNull( this->localDescription )) {
+HXLINE( 574)			this->queuedOutboundCandidate->push(candidate);
+HXLINE( 575)			return;
             		}
-HXLINE( 573)		 ::borogove::calls::Media media = ( ( ::borogove::calls::Media)(::Lambda_obj::find(this->localDescription->media, ::Dynamic(new _hx_Closure_0(candidate)))) );
-HXLINE( 574)		if (::hx::IsNull( media )) {
-HXLINE( 574)			HX_STACK_DO_THROW( ::Dynamic((HX_("Unknown media: ",d4,41,45,83) + candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic))));
+HXLINE( 577)		 ::borogove::calls::Media media = ( ( ::borogove::calls::Media)(::Lambda_obj::find(this->localDescription->media, ::Dynamic(new _hx_Closure_0(candidate)))) );
+HXLINE( 578)		if (::hx::IsNull( media )) {
+HXLINE( 578)			HX_STACK_DO_THROW( ::Dynamic((HX_("Unknown media: ",d4,41,45,83) + candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic))));
             		}
-HXLINE( 577)		::String media1 = media->mid;
-HXLINE( 578)		::String media2 = media->media;
-HXLINE( 579)		::String media3 = media->connectionData;
-HXLINE( 580)		::String media4 = media->port;
-HXLINE( 581)		::String media5 = media->protocol;
-HXLINE( 583)		 ::borogove::calls::Attribute transportInfo = ::borogove::calls::Attribute_obj::parse(( (::String)(candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic)) ));
-HXLINE( 584)		 ::borogove::calls::Attribute transportInfo1 =  ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("ice-ufrag",65,c2,31,ab),( (::String)(candidate->__Field(HX_("usernameFragment",06,a8,37,89),::hx::paccDynamic)) ));
-HXLINE( 585)		 ::borogove::calls::Attribute tmp = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(media->attributes, ::Dynamic(new _hx_Closure_1()))) );
-HXDLIN( 585)		 ::borogove::calls::Attribute transportInfo2;
-HXDLIN( 585)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 585)			transportInfo2 = tmp;
+HXLINE( 581)		::String media1 = media->mid;
+HXLINE( 582)		::String media2 = media->media;
+HXLINE( 583)		::String media3 = media->connectionData;
+HXLINE( 584)		::String media4 = media->port;
+HXLINE( 585)		::String media5 = media->protocol;
+HXLINE( 587)		 ::borogove::calls::Attribute transportInfo = ::borogove::calls::Attribute_obj::parse(( (::String)(candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic)) ));
+HXLINE( 588)		 ::borogove::calls::Attribute transportInfo1 =  ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("ice-ufrag",65,c2,31,ab),( (::String)(candidate->__Field(HX_("usernameFragment",06,a8,37,89),::hx::paccDynamic)) ));
+HXLINE( 589)		 ::borogove::calls::Attribute tmp = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(media->attributes, ::Dynamic(new _hx_Closure_1()))) );
+HXDLIN( 589)		 ::borogove::calls::Attribute transportInfo2;
+HXDLIN( 589)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 589)			transportInfo2 = tmp;
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             			bool _hx_run( ::borogove::calls::Attribute attr){
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_586_sendIceCandidate)
-HXLINE( 586)				return (attr->key == HX_("ice-pwd",3b,03,2f,e9));
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_590_sendIceCandidate)
+HXLINE( 590)				return (attr->key == HX_("ice-pwd",3b,03,2f,e9));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 585)			transportInfo2 = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(this->localDescription->attributes, ::Dynamic(new _hx_Closure_2()))) );
-            		}
-HXLINE( 576)		 ::borogove::calls::Media transportInfo3 =  ::borogove::calls::Media_obj::__alloc( HX_CTX ,media1,media2,media3,media4,media5,::Array_obj< ::Dynamic>::__new(3)->init(0,transportInfo)->init(1,transportInfo1)->init(2,transportInfo2),media->formats);
-HXLINE( 590)		::String transportInfo4 = this->get_sid();
-HXLINE( 575)		 ::borogove::Stanza transportInfo5 =  ::borogove::calls::TransportInfo_obj::__alloc( HX_CTX ,transportInfo3,transportInfo4)->toStanza(this->initiator);
-HXLINE( 592)		{
-HXLINE( 592)			 ::Dynamic this1 = transportInfo5->attr;
-HXDLIN( 592)			::Reflect_obj::setField(this1,HX_("to",7b,65,00,00),this->counterpart->asString());
+HXLINE( 589)			transportInfo2 = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(this->localDescription->attributes, ::Dynamic(new _hx_Closure_2()))) );
             		}
-HXLINE( 593)		{
-HXLINE( 593)			 ::Dynamic this2 = transportInfo5->attr;
-HXDLIN( 593)			::Reflect_obj::setField(this2,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7());
-            		}
-HXLINE( 594)		this->client->sendStanza(transportInfo5);
+HXLINE( 580)		 ::borogove::calls::Media transportInfo3 =  ::borogove::calls::Media_obj::__alloc( HX_CTX ,media1,media2,media3,media4,media5,::Array_obj< ::Dynamic>::__new(3)->init(0,transportInfo)->init(1,transportInfo1)->init(2,transportInfo2),media->formats);
+HXLINE( 594)		::String transportInfo4 = this->get_sid();
+HXLINE( 579)		 ::borogove::Stanza transportInfo5 =  ::borogove::calls::TransportInfo_obj::__alloc( HX_CTX ,transportInfo3,transportInfo4)->toStanza(this->initiator);
+HXLINE( 596)		 ::haxe::ds::StringMap transportInfo6 = transportInfo5->attr;
+HXDLIN( 596)		transportInfo6->set(HX_("to",7b,65,00,00),this->counterpart->asString());
+HXLINE( 597)		 ::haxe::ds::StringMap transportInfo7 = transportInfo5->attr;
+HXDLIN( 597)		transportInfo7->set(HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7());
+HXLINE( 598)		this->client->sendStanza(transportInfo5);
             	}
 
 
@@ -921,56 +910,56 @@ HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,sendIceCandidate,(void))
 void InitiatedSession_obj::supplyMedia(::Array< ::Dynamic> streams){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::calls::InitiatedSession,_gthis,::Array< ::Dynamic>,streams) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_598_supplyMedia)
-HXLINE( 599)			{
-HXLINE( 599)				int _g = 0;
-HXDLIN( 599)				while((_g < streams->length)){
-HXLINE( 599)					 ::borogove::calls::MediaStream stream = streams->__get(_g).StaticCast<  ::borogove::calls::MediaStream >();
-HXDLIN( 599)					_g = (_g + 1);
-HXLINE( 600)					{
-HXLINE( 600)						int _g1 = 0;
-HXDLIN( 600)						::Array< ::Dynamic> _g2 = stream->getTracks();
-HXDLIN( 600)						while((_g1 < _g2->length)){
-HXLINE( 600)							 ::borogove::calls::MediaStreamTrack track = _g2->__get(_g1).StaticCast<  ::borogove::calls::MediaStreamTrack >();
-HXDLIN( 600)							_g1 = (_g1 + 1);
-HXLINE( 601)							_gthis->pc->addTrack(track,stream);
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_602_supplyMedia)
+HXLINE( 603)			{
+HXLINE( 603)				int _g = 0;
+HXDLIN( 603)				while((_g < streams->length)){
+HXLINE( 603)					 ::borogove::calls::MediaStream stream = streams->__get(_g).StaticCast<  ::borogove::calls::MediaStream >();
+HXDLIN( 603)					_g = (_g + 1);
+HXLINE( 604)					{
+HXLINE( 604)						int _g1 = 0;
+HXDLIN( 604)						::Array< ::Dynamic> _g2 = stream->getTracks();
+HXDLIN( 604)						while((_g1 < _g2->length)){
+HXLINE( 604)							 ::borogove::calls::MediaStreamTrack track = _g2->__get(_g1).StaticCast<  ::borogove::calls::MediaStreamTrack >();
+HXDLIN( 604)							_g1 = (_g1 + 1);
+HXLINE( 605)							_gthis->pc->addTrack(track,stream);
             						}
             					}
             				}
             			}
-HXLINE( 605)			if (::hx::IsNull( _gthis->afterMedia )) {
+HXLINE( 609)			if (::hx::IsNull( _gthis->afterMedia )) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             				void _hx_run( ::Dynamic e){
-            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_606_supplyMedia)
-HXLINE( 607)					 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 607)					::String _hx_tmp1;
-HXDLIN( 607)					if (::hx::IsNull( e )) {
-HXLINE( 607)						_hx_tmp1 = HX_("null",87,9e,0e,49);
+            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_610_supplyMedia)
+HXLINE( 611)					 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 611)					::String _hx_tmp1;
+HXDLIN( 611)					if (::hx::IsNull( e )) {
+HXLINE( 611)						_hx_tmp1 = HX_("null",87,9e,0e,49);
             					}
             					else {
-HXLINE( 607)						_hx_tmp1 = ::Std_obj::string(e);
+HXLINE( 611)						_hx_tmp1 = ::Std_obj::string(e);
             					}
-HXDLIN( 607)					_hx_tmp(HX_("supplyMedia error",9d,f9,a0,33), ::Dynamic(::hx::Anon_obj::Create(5)
+HXDLIN( 611)					_hx_tmp(HX_("supplyMedia error",9d,f9,a0,33), ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.InitiatedSession",f1,c4,07,ac))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_hx_tmp1))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("supplyMedia",35,0c,c9,9a))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),607)));
-HXLINE( 608)					_gthis->pc->close();
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),611)));
+HXLINE( 612)					_gthis->pc->close();
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 606)				::thenshim::PromiseTools_obj::catch_(_gthis->onPeerConnection(), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 610)				::thenshim::PromiseTools_obj::catch_(_gthis->onPeerConnection(), ::Dynamic(new _hx_Closure_0(_gthis)));
             			}
             			else {
-HXLINE( 611)				_gthis->afterMedia();
+HXLINE( 615)				_gthis->afterMedia();
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_597_supplyMedia)
-HXDLIN( 597)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 598)		this->setupPeerConnection( ::Dynamic(new _hx_Closure_1(_gthis,streams)));
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_601_supplyMedia)
+HXDLIN( 601)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 602)		this->setupPeerConnection( ::Dynamic(new _hx_Closure_1(_gthis,streams)));
             	}
 
 
@@ -1000,8 +989,8 @@ void InitiatedSession_obj::setupPeerConnection( ::Dynamic callback){
             		void _hx_run(::Array< ::Dynamic> servers){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             			void _hx_run( ::Dynamic event){
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_624_setupPeerConnection)
-HXLINE( 624)				_gthis->client->trigger(HX_("call/track",1a,e7,80,d7), ::Dynamic(::hx::Anon_obj::Create(3)
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_628_setupPeerConnection)
+HXLINE( 628)				_gthis->client->trigger(HX_("call/track",1a,e7,80,d7), ::Dynamic(::hx::Anon_obj::Create(3)
             					->setFixed(0,HX_("session",56,17,98,93),_gthis)
             					->setFixed(1,HX_("streams",f3,db,44,f6), ::Dynamic(event->__Field(HX_("streams",f3,db,44,f6),::hx::paccDynamic)))
             					->setFixed(2,HX_("track",8b,8e,1f,16), ::Dynamic(event->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)))));
@@ -1010,76 +999,76 @@ HXLINE( 624)				_gthis->client->trigger(HX_("call/track",1a,e7,80,d7), ::Dynamic
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             			void _hx_run( ::Dynamic event){
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_626_setupPeerConnection)
-HXLINE( 626)				::haxe::Log_obj::trace(HX_("renegotiate",2b,b9,fb,a1), ::Dynamic(::hx::Anon_obj::Create(5)
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_630_setupPeerConnection)
+HXLINE( 630)				::haxe::Log_obj::trace(HX_("renegotiate",2b,b9,fb,a1), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.InitiatedSession",f1,c4,07,ac))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,event))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("setupPeerConnection",bd,67,52,ae))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),626)));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),630)));
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             			void _hx_run( ::Dynamic event){
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_628_setupPeerConnection)
-HXLINE( 628)				_gthis->sendIceCandidate(event->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic));
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_632_setupPeerConnection)
+HXLINE( 632)				_gthis->sendIceCandidate(event->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic));
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             			void _hx_run( ::Dynamic event){
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_630_setupPeerConnection)
-HXLINE( 631)				if (::hx::IsNotNull( _gthis->pc )) {
-HXLINE( 631)					_gthis->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_634_setupPeerConnection)
+HXLINE( 635)				if (::hx::IsNotNull( _gthis->pc )) {
+HXLINE( 635)					_gthis->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("session",56,17,98,93),_gthis)));
             				}
-HXLINE( 632)				bool _hx_tmp;
-HXDLIN( 632)				if (::hx::IsNotNull( _gthis->pc )) {
-HXLINE( 632)					if ((_gthis->pc->get_connectionState() != HX_("closed",ac,a9,51,0e))) {
-HXLINE( 632)						_hx_tmp = (_gthis->pc->get_connectionState() == HX_("failed",bd,c5,fe,e7));
+HXLINE( 636)				bool _hx_tmp;
+HXDLIN( 636)				if (::hx::IsNotNull( _gthis->pc )) {
+HXLINE( 636)					if ((_gthis->pc->get_connectionState() != HX_("closed",ac,a9,51,0e))) {
+HXLINE( 636)						_hx_tmp = (_gthis->pc->get_connectionState() == HX_("failed",bd,c5,fe,e7));
             					}
             					else {
-HXLINE( 632)						_hx_tmp = true;
+HXLINE( 636)						_hx_tmp = true;
             					}
             				}
             				else {
-HXLINE( 632)					_hx_tmp = false;
+HXLINE( 636)					_hx_tmp = false;
             				}
-HXDLIN( 632)				if (_hx_tmp) {
-HXLINE( 633)					 ::borogove::Client _gthis1 = _gthis->client;
-HXLINE( 634)					::String _hx_tmp1 = _gthis->counterpart->asString();
-HXDLIN( 634)					 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN( 636)				if (_hx_tmp) {
+HXLINE( 637)					 ::borogove::Client _gthis1 = _gthis->client;
+HXLINE( 638)					::String _hx_tmp1 = _gthis->counterpart->asString();
+HXDLIN( 638)					 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7())
             						->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp1)
-            						->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))));
-HXLINE( 633)					_gthis1->sendStanza(_hx_tmp2->tag(HX_("jingle",31,27,eb,1f), ::Dynamic(::hx::Anon_obj::Create(3)
+            						->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null());
+HXLINE( 637)					_gthis1->sendStanza(_hx_tmp2->tag(HX_("jingle",31,27,eb,1f), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("sid",0e,9f,57,00),_gthis->get_sid())
             						->setFixed(1,HX_("action",b6,3b,46,16),HX_("session-terminate",6a,23,dc,12))
-            						->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:1",44,c4,fe,f7))))->tag(HX_("reason",c4,0f,9d,fc),null())->tag(HX_("connectivity-error",f2,07,09,18),null())->up()->up()->up());
-HXLINE( 639)					_gthis->terminate();
+            						->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:1",44,c4,fe,f7))),null())->tag(HX_("reason",c4,0f,9d,fc),null(),null())->tag(HX_("connectivity-error",f2,07,09,18),null(),null())->up()->up()->up());
+HXLINE( 643)					_gthis->terminate();
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_621_setupPeerConnection)
-HXLINE( 622)			_gthis->pc =  ::borogove::calls::PeerConnection_obj::__alloc( HX_CTX , ::Dynamic(::hx::Anon_obj::Create(1)
+            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_625_setupPeerConnection)
+HXLINE( 626)			_gthis->pc =  ::borogove::calls::PeerConnection_obj::__alloc( HX_CTX , ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("iceServers",45,14,49,d2),servers)),null());
-HXLINE( 623)			_gthis->pc->addEventListener(HX_("track",8b,8e,1f,16), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 626)			_gthis->pc->addEventListener(HX_("negotiationneeded",d6,4d,d0,53), ::Dynamic(new _hx_Closure_1()));
-HXLINE( 627)			_gthis->pc->addEventListener(HX_("icecandidate",98,ef,c0,7b), ::Dynamic(new _hx_Closure_2(_gthis)));
-HXLINE( 630)			_gthis->pc->addEventListener(HX_("connectionstatechange",e3,a2,87,36), ::Dynamic(new _hx_Closure_3(_gthis)));
-HXLINE( 642)			callback();
+HXLINE( 627)			_gthis->pc->addEventListener(HX_("track",8b,8e,1f,16), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 630)			_gthis->pc->addEventListener(HX_("negotiationneeded",d6,4d,d0,53), ::Dynamic(new _hx_Closure_1()));
+HXLINE( 631)			_gthis->pc->addEventListener(HX_("icecandidate",98,ef,c0,7b), ::Dynamic(new _hx_Closure_2(_gthis)));
+HXLINE( 634)			_gthis->pc->addEventListener(HX_("connectionstatechange",e3,a2,87,36), ::Dynamic(new _hx_Closure_3(_gthis)));
+HXLINE( 646)			callback();
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_616_setupPeerConnection)
-HXDLIN( 616)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 617)		if (::hx::IsNotNull( this->pc )) {
-HXLINE( 618)			callback();
-HXLINE( 619)			return;
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_620_setupPeerConnection)
+HXDLIN( 620)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 621)		if (::hx::IsNotNull( this->pc )) {
+HXLINE( 622)			callback();
+HXLINE( 623)			return;
             		}
-HXLINE( 621)		this->client->getIceServers( ::Dynamic(new _hx_Closure_4(_gthis,callback)));
+HXLINE( 625)		this->client->getIceServers( ::Dynamic(new _hx_Closure_4(_gthis,callback)));
             	}
 
 
@@ -1088,116 +1077,112 @@ HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,setupPeerConnection,(void))
 ::Dynamic InitiatedSession_obj::setupLocalDescription(::String type,::Array< ::String > filterMedia, ::Dynamic __o_filterOut, ::Dynamic beforeSend){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_4, ::borogove::calls::InitiatedSession,_gthis,::String,type) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_647_setupLocalDescription)
-HXLINE( 648)			 ::borogove::Client _gthis1 = _gthis->client;
-HXDLIN( 648)			::String caps = _gthis->counterpart->asBare()->asString();
-HXDLIN( 648)			 ::borogove::Caps caps1 = _gthis1->getDirectChat(caps,null())->getResourceCaps(_gthis->counterpart->resource);
-HXLINE( 649)			bool _hx_tmp;
-HXDLIN( 649)			bool _hx_tmp1;
-HXDLIN( 649)			if ((type != HX_("session-initiate",70,2d,30,f7))) {
-HXLINE( 649)				_hx_tmp1 = (type == HX_("session-accept",5f,92,e7,a8));
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_651_setupLocalDescription)
+HXLINE( 652)			 ::borogove::Client _gthis1 = _gthis->client;
+HXDLIN( 652)			::String caps = _gthis->counterpart->asBare()->asString();
+HXDLIN( 652)			 ::borogove::Caps caps1 = _gthis1->getDirectChat(caps,null())->getResourceCaps(_gthis->counterpart->resource);
+HXLINE( 653)			bool _hx_tmp;
+HXDLIN( 653)			bool _hx_tmp1;
+HXDLIN( 653)			if ((type != HX_("session-initiate",70,2d,30,f7))) {
+HXLINE( 653)				_hx_tmp1 = (type == HX_("session-accept",5f,92,e7,a8));
             			}
             			else {
-HXLINE( 649)				_hx_tmp1 = true;
+HXLINE( 653)				_hx_tmp1 = true;
             			}
-HXDLIN( 649)			if (_hx_tmp1) {
-HXLINE( 649)				_hx_tmp = caps1->features->contains(HX_("urn:ietf:rfc:3264",2b,35,57,2c));
+HXDLIN( 653)			if (_hx_tmp1) {
+HXLINE( 653)				_hx_tmp = caps1->features->contains(HX_("urn:ietf:rfc:3264",2b,35,57,2c));
             			}
             			else {
-HXLINE( 649)				_hx_tmp = false;
+HXLINE( 653)				_hx_tmp = false;
             			}
-HXDLIN( 649)			if (_hx_tmp) {
+HXDLIN( 653)			if (_hx_tmp) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::calls::InitiatedSession,_gthis) HXARGC(2)
             				void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::calls::InitiatedSession,_gthis, ::Dynamic,resolve) HXARGC(0)
             					void _hx_run(){
             						HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(0)
             						void _hx_run(){
-            							HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_652_setupLocalDescription)
+            							HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_656_setupLocalDescription)
             						}
             						HX_END_LOCAL_FUNC0((void))
 
-            						HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_651_setupLocalDescription)
-HXLINE( 652)						_gthis->candidatesDone =  ::Dynamic(new _hx_Closure_0());
-HXLINE( 653)						resolve(false);
+            						HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_655_setupLocalDescription)
+HXLINE( 656)						_gthis->candidatesDone =  ::Dynamic(new _hx_Closure_0());
+HXLINE( 657)						resolve(false);
             					}
             					HX_END_LOCAL_FUNC0((void))
 
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::Dynamic,resolve, ::haxe::Timer,timeout) HXARGC(0)
             					void _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_655_setupLocalDescription)
-HXLINE( 656)						timeout->stop();
-HXLINE( 657)						resolve(true);
+            						HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_659_setupLocalDescription)
+HXLINE( 660)						timeout->stop();
+HXLINE( 661)						resolve(true);
             					}
             					HX_END_LOCAL_FUNC0((void))
 
-            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_650_setupLocalDescription)
-HXLINE( 651)					 ::haxe::Timer timeout = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis,resolve)),3000);
-HXLINE( 655)					_gthis->candidatesDone =  ::Dynamic(new _hx_Closure_2(resolve,timeout));
+            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_654_setupLocalDescription)
+HXLINE( 655)					 ::haxe::Timer timeout = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis,resolve)),3000);
+HXLINE( 659)					_gthis->candidatesDone =  ::Dynamic(new _hx_Closure_2(resolve,timeout));
             				}
             				HX_END_LOCAL_FUNC2((void))
 
-HXLINE( 650)				return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_3(_gthis)));
+HXLINE( 654)				return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_3(_gthis)));
             			}
             			else {
-HXLINE( 661)				return null();
+HXLINE( 665)				return null();
             			}
-HXLINE( 649)			return null();
+HXLINE( 653)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_5, ::borogove::calls::InitiatedSession,_gthis,::String,type, ::Dynamic,beforeSend, ::Dynamic,filterOut,::Array< ::String >,filterMedia) HXARGC(1)
             		void _hx_run(bool _){
-            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_663_setupLocalDescription)
-HXLINE( 664)			_gthis->localDescription = ::borogove::calls::SessionDescription_obj::parse(( (::String)(_gthis->pc->get_localDescription()->__Field(HX_("sdp",bf,9a,57,00),::hx::paccDynamic)) ));
-HXLINE( 665)			 ::borogove::calls::SessionDescription descriptionToSend = _gthis->localDescription;
-HXLINE( 666)			if (::hx::IsNotNull( filterMedia )) {
-HXLINE( 668)				int descriptionToSend1 = descriptionToSend->version;
-HXLINE( 669)				::String descriptionToSend2 = descriptionToSend->name;
-HXLINE( 670)				::Array< ::Dynamic> _this = descriptionToSend->media;
-HXDLIN( 670)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 670)				{
-HXLINE( 670)					int _g1 = 0;
-HXDLIN( 670)					while((_g1 < _this->length)){
-HXLINE( 670)						 ::borogove::calls::Media v = _this->__get(_g1).StaticCast<  ::borogove::calls::Media >();
-HXDLIN( 670)						_g1 = (_g1 + 1);
-HXDLIN( 670)						bool descriptionToSend3;
-HXDLIN( 670)						if (( (bool)(filterOut) )) {
-HXLINE( 670)							descriptionToSend3 = !(filterMedia->contains(v->mid));
+            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_667_setupLocalDescription)
+HXLINE( 668)			_gthis->localDescription = ::borogove::calls::SessionDescription_obj::parse(( (::String)(_gthis->pc->get_localDescription()->__Field(HX_("sdp",bf,9a,57,00),::hx::paccDynamic)) ));
+HXLINE( 669)			 ::borogove::calls::SessionDescription descriptionToSend = _gthis->localDescription;
+HXLINE( 670)			if (::hx::IsNotNull( filterMedia )) {
+HXLINE( 672)				int descriptionToSend1 = descriptionToSend->version;
+HXLINE( 673)				::String descriptionToSend2 = descriptionToSend->name;
+HXLINE( 674)				::Array< ::Dynamic> _this = descriptionToSend->media;
+HXDLIN( 674)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 674)				{
+HXLINE( 674)					int _g1 = 0;
+HXDLIN( 674)					while((_g1 < _this->length)){
+HXLINE( 674)						 ::borogove::calls::Media v = _this->__get(_g1).StaticCast<  ::borogove::calls::Media >();
+HXDLIN( 674)						_g1 = (_g1 + 1);
+HXDLIN( 674)						bool descriptionToSend3;
+HXDLIN( 674)						if (( (bool)(filterOut) )) {
+HXLINE( 674)							descriptionToSend3 = !(filterMedia->contains(v->mid));
             						}
             						else {
-HXLINE( 670)							descriptionToSend3 = filterMedia->contains(v->mid);
+HXLINE( 674)							descriptionToSend3 = filterMedia->contains(v->mid);
             						}
-HXDLIN( 670)						if (descriptionToSend3) {
-HXLINE( 670)							_g->push(v);
+HXDLIN( 674)						if (descriptionToSend3) {
+HXLINE( 674)							_g->push(v);
             						}
             					}
             				}
-HXLINE( 667)				descriptionToSend =  ::borogove::calls::SessionDescription_obj::__alloc( HX_CTX ,descriptionToSend1,descriptionToSend2,_g,descriptionToSend->attributes,descriptionToSend->identificationTags);
-            			}
-HXLINE( 675)			if (::hx::IsNotNull( beforeSend )) {
-HXLINE( 675)				beforeSend(descriptionToSend);
-            			}
-HXLINE( 676)			::String type1 = type;
-HXDLIN( 676)			::String sessionAccept = _gthis->get_sid();
-HXDLIN( 676)			 ::borogove::Stanza sessionAccept1 = descriptionToSend->toStanza(type1,sessionAccept,_gthis->initiator);
-HXLINE( 677)			{
-HXLINE( 677)				 ::Dynamic this1 = sessionAccept1->attr;
-HXDLIN( 677)				::Reflect_obj::setField(this1,HX_("to",7b,65,00,00),_gthis->counterpart->asString());
+HXLINE( 671)				descriptionToSend =  ::borogove::calls::SessionDescription_obj::__alloc( HX_CTX ,descriptionToSend1,descriptionToSend2,_g,descriptionToSend->attributes,descriptionToSend->identificationTags);
             			}
-HXLINE( 678)			{
-HXLINE( 678)				 ::Dynamic this2 = sessionAccept1->attr;
-HXDLIN( 678)				::Reflect_obj::setField(this2,HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7());
+HXLINE( 679)			if (::hx::IsNotNull( beforeSend )) {
+HXLINE( 679)				beforeSend(descriptionToSend);
             			}
-HXLINE( 679)			_gthis->client->sendStanza(sessionAccept1);
-HXLINE( 681)			::Array< ::Dynamic> outboundCandidate = _gthis->queuedOutboundCandidate->copy();
-HXLINE( 682)			_gthis->queuedOutboundCandidate->resize(0);
-HXLINE( 683)			{
-HXLINE( 683)				int _g2 = 0;
-HXDLIN( 683)				while((_g2 < outboundCandidate->length)){
-HXLINE( 683)					 ::Dynamic candidate = outboundCandidate->__get(_g2);
-HXDLIN( 683)					_g2 = (_g2 + 1);
-HXLINE( 684)					_gthis->sendIceCandidate(candidate);
+HXLINE( 680)			::String type1 = type;
+HXDLIN( 680)			::String sessionAccept = _gthis->get_sid();
+HXDLIN( 680)			 ::borogove::Stanza sessionAccept1 = descriptionToSend->toStanza(type1,sessionAccept,_gthis->initiator);
+HXLINE( 681)			 ::haxe::ds::StringMap sessionAccept2 = sessionAccept1->attr;
+HXDLIN( 681)			sessionAccept2->set(HX_("to",7b,65,00,00),_gthis->counterpart->asString());
+HXLINE( 682)			 ::haxe::ds::StringMap sessionAccept3 = sessionAccept1->attr;
+HXDLIN( 682)			sessionAccept3->set(HX_("id",db,5b,00,00),::_UUIDv7::UUIDv7_Fields__obj::uuidv7());
+HXLINE( 683)			_gthis->client->sendStanza(sessionAccept1);
+HXLINE( 685)			::Array< ::Dynamic> outboundCandidate = _gthis->queuedOutboundCandidate->copy();
+HXLINE( 686)			_gthis->queuedOutboundCandidate->resize(0);
+HXLINE( 687)			{
+HXLINE( 687)				int _g2 = 0;
+HXDLIN( 687)				while((_g2 < outboundCandidate->length)){
+HXLINE( 687)					 ::Dynamic candidate = outboundCandidate->__get(_g2);
+HXDLIN( 687)					_g2 = (_g2 + 1);
+HXLINE( 688)					_gthis->sendIceCandidate(candidate);
             				}
             			}
             		}
@@ -1205,9 +1190,9 @@ HXLINE( 684)					_gthis->sendIceCandidate(candidate);
 
             		 ::Dynamic filterOut = __o_filterOut;
             		if (::hx::IsNull(__o_filterOut)) filterOut = false;
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_646_setupLocalDescription)
-HXDLIN( 646)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 647)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->pc->setLocalDescription(null()), ::Dynamic(new _hx_Closure_4(_gthis,type)),null()), ::Dynamic(new _hx_Closure_5(_gthis,type,beforeSend,filterOut,filterMedia)),null());
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_650_setupLocalDescription)
+HXDLIN( 650)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 651)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->pc->setLocalDescription(null()), ::Dynamic(new _hx_Closure_4(_gthis,type)),null()), ::Dynamic(new _hx_Closure_5(_gthis,type,beforeSend,filterOut,filterMedia)),null());
             	}
 
 
@@ -1216,52 +1201,52 @@ HX_DEFINE_DYNAMIC_FUNC4(InitiatedSession_obj,setupLocalDescription,return )
 ::Dynamic InitiatedSession_obj::onPeerConnection(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_691_onPeerConnection)
-HXLINE( 692)			::Array< ::Dynamic> inboundTransportInfo = _gthis->queuedInboundTransportInfo->copy();
-HXLINE( 693)			_gthis->queuedInboundTransportInfo->resize(0);
-HXLINE( 694)			 ::Dynamic f = _gthis->transportInfo_dyn();
-HXDLIN( 694)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(inboundTransportInfo->length);
-HXDLIN( 694)			{
-HXLINE( 694)				int _g = 0;
-HXDLIN( 694)				int _g1 = inboundTransportInfo->length;
-HXDLIN( 694)				while((_g < _g1)){
-HXLINE( 694)					_g = (_g + 1);
-HXDLIN( 694)					int i = (_g - 1);
-HXDLIN( 694)					{
-HXLINE( 694)						::Dynamic inValue = f(_hx_array_unsafe_get(inboundTransportInfo,i));
-HXDLIN( 694)						result->__unsafe_set(i,inValue);
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_695_onPeerConnection)
+HXLINE( 696)			::Array< ::Dynamic> inboundTransportInfo = _gthis->queuedInboundTransportInfo->copy();
+HXLINE( 697)			_gthis->queuedInboundTransportInfo->resize(0);
+HXLINE( 698)			 ::Dynamic f = _gthis->transportInfo_dyn();
+HXDLIN( 698)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(inboundTransportInfo->length);
+HXDLIN( 698)			{
+HXLINE( 698)				int _g = 0;
+HXDLIN( 698)				int _g1 = inboundTransportInfo->length;
+HXDLIN( 698)				while((_g < _g1)){
+HXLINE( 698)					_g = (_g + 1);
+HXDLIN( 698)					int i = (_g - 1);
+HXDLIN( 698)					{
+HXLINE( 698)						::Dynamic inValue = f(_hx_array_unsafe_get(inboundTransportInfo,i));
+HXDLIN( 698)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 694)			return result;
+HXDLIN( 698)			return result;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> _){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_697_onPeerConnection)
-HXLINE( 697)			return _gthis->setupLocalDescription(HX_("session-accept",5f,92,e7,a8),null(),null(),null());
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_701_onPeerConnection)
+HXLINE( 701)			return _gthis->setupLocalDescription(HX_("session-accept",5f,92,e7,a8),null(),null(),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             		::String _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_698_onPeerConnection)
-HXLINE( 699)			::String _hx_tmp;
-HXDLIN( 699)			if ((_gthis->localDescription->getDtlsSetup() == HX_("active",c6,41,46,16))) {
-HXLINE( 699)				_hx_tmp = HX_("passive",a7,47,6a,7d);
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_702_onPeerConnection)
+HXLINE( 703)			::String _hx_tmp;
+HXDLIN( 703)			if ((_gthis->localDescription->getDtlsSetup() == HX_("active",c6,41,46,16))) {
+HXLINE( 703)				_hx_tmp = HX_("passive",a7,47,6a,7d);
             			}
             			else {
-HXLINE( 699)				_hx_tmp = HX_("active",c6,41,46,16);
+HXLINE( 703)				_hx_tmp = HX_("active",c6,41,46,16);
             			}
-HXLINE( 698)			return (_gthis->peerDtlsSetup = _hx_tmp);
+HXLINE( 702)			return (_gthis->peerDtlsSetup = _hx_tmp);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_689_onPeerConnection)
-HXDLIN( 689)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 690)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
-HXDLIN( 690)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_693_onPeerConnection)
+HXDLIN( 693)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 694)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
+HXDLIN( 694)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("sdp",bf,9a,57,00),this->remoteDescription->toSdp())
             			->setFixed(1,HX_("type",ba,f2,08,4d),cpp::Struct(rtc::Description::Type::Offer)))), ::Dynamic(new _hx_Closure_0(_gthis)),null()), ::Dynamic(new _hx_Closure_1(_gthis)),null()), ::Dynamic(new _hx_Closure_2(_gthis)),null());
             	}
@@ -1270,13 +1255,13 @@ HXDLIN( 690)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,onPeerConnection,return )
 
  ::borogove::calls::InitiatedSession InitiatedSession_obj::fromSessionInitiate( ::borogove::Client client, ::borogove::Stanza stanza){
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_360_fromSessionInitiate)
-HXLINE( 361)		 ::borogove::Stanza jingle = stanza->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
-HXLINE( 364)		 ::borogove::JID session = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 365)		::String session1 = ( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) );
-HXLINE( 362)		 ::borogove::calls::InitiatedSession session2 =  ::borogove::calls::InitiatedSession_obj::__alloc( HX_CTX ,client,session,session1,::borogove::calls::SessionDescription_obj::fromStanza(stanza,false,null()));
-HXLINE( 368)		session2->transportInfo(stanza);
-HXLINE( 369)		return session2;
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_364_fromSessionInitiate)
+HXLINE( 365)		 ::borogove::Stanza jingle = stanza->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
+HXLINE( 368)		 ::borogove::JID session = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)));
+HXLINE( 369)		::String session1 = jingle->attr->get_string(HX_("sid",0e,9f,57,00));
+HXLINE( 366)		 ::borogove::calls::InitiatedSession session2 =  ::borogove::calls::InitiatedSession_obj::__alloc( HX_CTX ,client,session,session1,::borogove::calls::SessionDescription_obj::fromStanza(stanza,false,null()));
+HXLINE( 372)		session2->transportInfo(stanza);
+HXLINE( 373)		return session2;
             	}
 
 
@@ -1590,8 +1575,8 @@ void InitiatedSession_obj::__register()
 void InitiatedSession_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_331_boot)
-HXDLIN( 331)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_335_boot)
+HXDLIN( 335)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(11)
             				->setFixed(0,HX_("supplyMedia",35,0c,c9,9a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
diff --git a/Sources/c_borogove/src/borogove/calls/Media.cpp b/Sources/c_borogove/src/borogove/calls/Media.cpp
index fde294c..f049b1a 100644
--- a/Sources/c_borogove/src/borogove/calls/Media.cpp
+++ b/Sources/c_borogove/src/borogove/calls/Media.cpp
@@ -160,7 +160,7 @@ HXDLIN( 374)					::Reflect_obj::setField(attrs,HX_("senders",1e,f7,a9,a8),value1
             				}
             			}
             		}
-HXLINE( 376)		return  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("content",39,8d,77,19),attrs);
+HXLINE( 376)		return  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("content",39,8d,77,19),attrs,null());
             	}
 
 
@@ -171,9 +171,9 @@ HX_DEFINE_DYNAMIC_FUNC1(Media_obj,contentElement,return )
             		int _hx_run( ::borogove::Stanza a, ::borogove::Stanza b){
             			HX_GC_STACKFRAME(&_hx_pos_47b42bb0bd2f262c_442_toElement)
 HXLINE( 442)			::Array< int > _gthis1 = _gthis->formats;
-HXDLIN( 442)			int _hx_tmp = _gthis1->indexOf(::Std_obj::parseInt(( (::String)(::Reflect_obj::field(a->attr,HX_("id",db,5b,00,00))) )),null());
+HXDLIN( 442)			int _hx_tmp = _gthis1->indexOf(::Std_obj::parseInt(a->attr->get_string(HX_("id",db,5b,00,00))),null());
 HXDLIN( 442)			::Array< int > _gthis2 = _gthis->formats;
-HXDLIN( 442)			return (_hx_tmp - _gthis2->indexOf(::Std_obj::parseInt(( (::String)(::Reflect_obj::field(b->attr,HX_("id",db,5b,00,00))) )),null()));
+HXDLIN( 442)			return (_hx_tmp - _gthis2->indexOf(::Std_obj::parseInt(b->attr->get_string(HX_("id",db,5b,00,00))),null()));
             		}
             		HX_END_LOCAL_FUNC2(return)
 
@@ -203,7 +203,7 @@ HXDLIN( 379)		 ::borogove::calls::Media _gthis = ::hx::ObjectPtr<OBJ_>(this);
 HXLINE( 380)		 ::borogove::Stanza content = this->contentElement(initiator);
 HXLINE( 381)		 ::borogove::Stanza description = content->tag(HX_("description",fc,08,1d,5f), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("media",e4,04,bc,05),this->media)
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c))));
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c))),null());
 HXLINE( 382)		::Array< ::Dynamic> _this = this->attributes;
 HXDLIN( 382)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
 HXDLIN( 382)		{
@@ -230,7 +230,7 @@ HXDLIN( 384)					 ::borogove::Stanza inValue;
 HXDLIN( 384)					if ((segments->__get(1) == HX_("trr-int",16,ba,25,2e))) {
 HXLINE( 384)						inValue =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("rtcp-fb-trr-int",a3,02,fa,8c), ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("value",71,7f,b8,31),segments->__get(2))
-            							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:rtcp-fb:0",09,5f,fc,2a))));
+            							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:rtcp-fb:0",09,5f,fc,2a))),null());
             					}
             					else {
 HXLINE( 387)						 ::Dynamic fbattrs =  ::Dynamic(::hx::Anon_obj::Create(2)
@@ -239,7 +239,7 @@ HXLINE( 387)						 ::Dynamic fbattrs =  ::Dynamic(::hx::Anon_obj::Create(2)
 HXLINE( 388)						if ((segments->length >= 3)) {
 HXLINE( 388)							::Reflect_obj::setField(fbattrs,HX_("subtype",3a,5c,33,30),segments->__get(2));
             						}
-HXLINE( 384)						inValue =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("rtcp-fb",1a,8f,ca,30),fbattrs);
+HXLINE( 384)						inValue =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("rtcp-fb",1a,8f,ca,30),fbattrs,null());
             					}
 HXLINE( 382)					result->__unsafe_set(i, ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("el",67,58,00,00),inValue)
@@ -286,7 +286,8 @@ HXLINE( 401)									if ((eqPos > 0)) {
 HXLINE( 401)										::String value = param.substr(0,eqPos);
 HXDLIN( 401)										::Reflect_obj::setField(attrs1,HX_("name",4b,72,ff,48),value);
             									}
-HXLINE( 398)									result1->__unsafe_set(i1, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("parameter",a9,35,b0,48),attrs1));
+HXLINE( 398)									 ::borogove::Stanza inValue1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("parameter",a9,35,b0,48),attrs1,null());
+HXDLIN( 398)									result1->__unsafe_set(i1,inValue1);
             								}
             							}
             						}
@@ -318,7 +319,8 @@ HXLINE( 412)						if ((colonPos > 0)) {
 HXLINE( 412)							::String value1 = param1.substr((colonPos + 1),null());
 HXDLIN( 412)							::Reflect_obj::setField(attrs3,HX_("value",71,7f,b8,31),value1);
             						}
-HXLINE( 413)						( (::Array< ::Dynamic>)(ssrc->get(id)) )->push( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("parameter",a9,35,b0,48),attrs3));
+HXLINE( 413)						::Array< ::Dynamic> _hx_tmp = ( (::Array< ::Dynamic>)(ssrc->get(id)) );
+HXDLIN( 413)						_hx_tmp->push( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("parameter",a9,35,b0,48),attrs3,null()));
             					}
             					else {
 HXLINE( 414)						if ((attr->key == HX_("extmap",9b,d8,20,c7))) {
@@ -326,11 +328,11 @@ HXLINE( 415)							int pos2 = attr->value.indexOf(HX_(" ",20,00,00,00),null());
 HXLINE( 416)							if ((pos2 < 0)) {
 HXLINE( 416)								continue;
             							}
-HXLINE( 417)							::String _hx_tmp = attr->value.substr(0,pos2);
+HXLINE( 417)							::String _hx_tmp1 = attr->value.substr(0,pos2);
 HXDLIN( 417)							description->tag(HX_("rtp-hdrext",aa,ab,bb,00), ::Dynamic(::hx::Anon_obj::Create(3)
-            								->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp)
+            								->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp1)
             								->setFixed(1,HX_("uri",6c,2b,59,00),attr->value.substr((pos2 + 1),null()))
-            								->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:rtp-hdrext:0",c7,33,ab,6d))))->up();
+            								->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:rtp-hdrext:0",c7,33,ab,6d))),null())->up();
             						}
             						else {
 HXLINE( 418)							if ((attr->key == HX_("ssrc-group",03,b3,2d,49))) {
@@ -340,7 +342,7 @@ HXLINE( 420)									continue;
             								}
 HXLINE( 421)								 ::borogove::Stanza group = description->tag(HX_("ssrc-group",03,b3,2d,49), ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:ssma:0",51,23,31,6f))
-            									->setFixed(1,HX_("semantics",ad,54,ab,73),segments2->__get(0))));
+            									->setFixed(1,HX_("semantics",ad,54,ab,73),segments2->__get(0))),null());
 HXLINE( 422)								{
 HXLINE( 422)									int _g8 = 0;
 HXDLIN( 422)									::Array< ::String > _g9 = segments2->slice(1,null());
@@ -348,7 +350,7 @@ HXDLIN( 422)									while((_g8 < _g9->length)){
 HXLINE( 422)										::String seg = _g9->__get(_g8);
 HXDLIN( 422)										_g8 = (_g8 + 1);
 HXLINE( 423)										group->tag(HX_("source",db,b0,31,32), ::Dynamic(::hx::Anon_obj::Create(1)
-            											->setFixed(0,HX_("ssrc",51,30,5b,4c),seg)))->up();
+            											->setFixed(0,HX_("ssrc",51,30,5b,4c),seg)),null())->up();
             									}
             								}
 HXLINE( 425)								group->up();
@@ -377,8 +379,8 @@ HXDLIN( 428)			while((_g12 < _g13)){
 HXLINE( 428)				_g12 = (_g12 + 1);
 HXDLIN( 428)				int i2 = (_g12 - 1);
 HXDLIN( 428)				{
-HXLINE( 428)					 ::borogove::Stanza inValue1 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_g10,i2)->__Field(HX_("el",67,58,00,00),::hx::paccDynamic)) );
-HXDLIN( 428)					result2->__unsafe_set(i2,inValue1);
+HXLINE( 428)					 ::borogove::Stanza inValue2 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_g10,i2)->__Field(HX_("el",67,58,00,00),::hx::paccDynamic)) );
+HXDLIN( 428)					result2->__unsafe_set(i2,inValue2);
             				}
             			}
             		}
@@ -418,24 +420,24 @@ HXLINE( 435)						::Reflect_obj::setField(attrs4,HX_("name",4b,72,ff,48),segment
 HXLINE( 436)					if ((segments3->length > 1)) {
 HXLINE( 436)						::Reflect_obj::setField(attrs4,HX_("clockrate",ae,5b,4b,39),segments3->__get(1));
             					}
-HXLINE( 437)					bool _hx_tmp1;
-HXDLIN( 437)					bool _hx_tmp2;
+HXLINE( 437)					bool _hx_tmp2;
+HXDLIN( 437)					bool _hx_tmp3;
 HXDLIN( 437)					if ((segments3->length > 2)) {
-HXLINE( 437)						_hx_tmp2 = (segments3->__get(2) != HX_("",00,00,00,00));
+HXLINE( 437)						_hx_tmp3 = (segments3->__get(2) != HX_("",00,00,00,00));
             					}
             					else {
-HXLINE( 437)						_hx_tmp2 = false;
+HXLINE( 437)						_hx_tmp3 = false;
             					}
-HXDLIN( 437)					if (_hx_tmp2) {
-HXLINE( 437)						_hx_tmp1 = (segments3->__get(2) != HX_("1",31,00,00,00));
+HXDLIN( 437)					if (_hx_tmp3) {
+HXLINE( 437)						_hx_tmp2 = (segments3->__get(2) != HX_("1",31,00,00,00));
             					}
             					else {
-HXLINE( 437)						_hx_tmp1 = false;
+HXLINE( 437)						_hx_tmp2 = false;
             					}
-HXDLIN( 437)					if (_hx_tmp1) {
+HXDLIN( 437)					if (_hx_tmp2) {
 HXLINE( 437)						::Reflect_obj::setField(attrs4,HX_("channels",50,aa,ee,6a),segments3->__get(2));
             					}
-HXLINE( 438)					 ::borogove::Stanza inValue2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("payload-type",19,2b,54,39),attrs4);
+HXLINE( 438)					 ::borogove::Stanza inValue3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("payload-type",19,2b,54,39),attrs4,null());
 HXLINE( 439)					::Array< ::Dynamic> _g18 = ::Array_obj< ::Dynamic>::__new(0);
 HXDLIN( 439)					{
 HXLINE( 439)						int _g19 = 0;
@@ -455,27 +457,27 @@ HXDLIN( 439)						while((_g20 < _g21)){
 HXLINE( 439)							_g20 = (_g20 + 1);
 HXDLIN( 439)							int i4 = (_g20 - 1);
 HXDLIN( 439)							{
-HXLINE( 439)								 ::borogove::Stanza inValue3 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_g18,i4)->__Field(HX_("el",67,58,00,00),::hx::paccDynamic)) );
-HXDLIN( 439)								result4->__unsafe_set(i4,inValue3);
+HXLINE( 439)								 ::borogove::Stanza inValue4 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_g18,i4)->__Field(HX_("el",67,58,00,00),::hx::paccDynamic)) );
+HXDLIN( 439)								result4->__unsafe_set(i4,inValue4);
             							}
             						}
             					}
-HXLINE( 438)					 ::borogove::Stanza inValue4 = inValue2->addChildren(result4);
-HXLINE( 440)					 ::Dynamic inValue5;
+HXLINE( 438)					 ::borogove::Stanza inValue5 = inValue3->addChildren(result4);
+HXLINE( 440)					 ::Dynamic inValue6;
 HXDLIN( 440)					if (::hx::IsNull( ( (::Array< ::Dynamic>)(fmtp->get(id1)) ) )) {
-HXLINE( 440)						inValue5 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 440)						inValue6 = ::Array_obj< ::Dynamic>::__new(0);
             					}
             					else {
-HXLINE( 440)						inValue5 = ( (::Array< ::Dynamic>)(fmtp->get(id1)) );
+HXLINE( 440)						inValue6 = ( (::Array< ::Dynamic>)(fmtp->get(id1)) );
             					}
-HXLINE( 429)					 ::borogove::Stanza inValue6 = inValue4->addChildren(inValue5);
-HXDLIN( 429)					result3->__unsafe_set(i3,inValue6);
+HXLINE( 429)					 ::borogove::Stanza inValue7 = inValue5->addChildren(inValue6);
+HXDLIN( 429)					result3->__unsafe_set(i3,inValue7);
             				}
             			}
             		}
 HXLINE( 442)		result3->sort( ::Dynamic(new _hx_Closure_0(_gthis)));
 HXLINE( 443)		description->addChildren(result3);
-HXLINE( 444)		bool _hx_tmp3;
+HXLINE( 444)		bool _hx_tmp4;
 HXDLIN( 444)		if (!(::Lambda_obj::exists(this->attributes, ::Dynamic(new _hx_Closure_1())))) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             			bool _hx_run( ::borogove::calls::Attribute attr){
@@ -484,14 +486,14 @@ HXLINE( 444)				return (attr->key == HX_("extmap-allow-mixed",05,91,99,44));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 444)			_hx_tmp3 = ::Lambda_obj::exists(sessionAttributes, ::Dynamic(new _hx_Closure_2()));
+HXLINE( 444)			_hx_tmp4 = ::Lambda_obj::exists(sessionAttributes, ::Dynamic(new _hx_Closure_2()));
             		}
             		else {
-HXLINE( 444)			_hx_tmp3 = true;
+HXLINE( 444)			_hx_tmp4 = true;
             		}
-HXDLIN( 444)		if (_hx_tmp3) {
+HXDLIN( 444)		if (_hx_tmp4) {
 HXLINE( 445)			description->tag(HX_("extmap-allow-mixed",05,91,99,44), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:rtp-hdrext:0",c7,33,ab,6d))))->up();
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:rtp-hdrext:0",c7,33,ab,6d))),null())->up();
             		}
 HXLINE( 447)		{
 HXLINE( 447)			::Dynamic map = ssrc;
@@ -507,35 +509,35 @@ HXLINE( 448)					return (attr->key == HX_("msid",c1,e0,63,48));
 HXLINE( 447)				::String key1 = ( (::String)(entry_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
 HXDLIN( 447)				::Array< ::Dynamic> entry_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(map,key1)) );
 HXLINE( 448)				 ::borogove::calls::Attribute msid = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(this->attributes, ::Dynamic(new _hx_Closure_3()))) );
-HXLINE( 453)				bool _hx_tmp4;
+HXLINE( 453)				bool _hx_tmp5;
 HXDLIN( 453)				if (::hx::IsNotNull( msid )) {
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
             					bool _hx_run( ::borogove::Stanza param){
             						HX_GC_STACKFRAME(&_hx_pos_47b42bb0bd2f262c_453_toElement)
-HXLINE( 453)						return (( (::String)(::Reflect_obj::field(param->attr,HX_("name",4b,72,ff,48))) ) == HX_("msid",c1,e0,63,48));
+HXLINE( 453)						return ::hx::IsEq( param->attr->get(HX_("name",4b,72,ff,48)),HX_("msid",c1,e0,63,48) );
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 453)					_hx_tmp4 = !(::Lambda_obj::exists(entry_value, ::Dynamic(new _hx_Closure_4())));
+HXLINE( 453)					_hx_tmp5 = !(::Lambda_obj::exists(entry_value, ::Dynamic(new _hx_Closure_4())));
             				}
             				else {
-HXLINE( 453)					_hx_tmp4 = false;
+HXLINE( 453)					_hx_tmp5 = false;
             				}
-HXDLIN( 453)				if (_hx_tmp4) {
+HXDLIN( 453)				if (_hx_tmp5) {
 HXLINE( 454)					entry_value->push( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("parameter",a9,35,b0,48), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("value",71,7f,b8,31),msid->value)
-            						->setFixed(1,HX_("name",4b,72,ff,48),HX_("msid",c1,e0,63,48)))));
+            						->setFixed(1,HX_("name",4b,72,ff,48),HX_("msid",c1,e0,63,48))),null()));
             				}
 HXLINE( 456)				description->tag(HX_("source",db,b0,31,32), ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("ssrc",51,30,5b,4c),key1)
-            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:ssma:0",51,23,31,6f))))->addChildren(entry_value)->up();
+            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:ssma:0",51,23,31,6f))),null())->addChildren(entry_value)->up();
             			}
             		}
 HXLINE( 459)		if (::Lambda_obj::exists(this->attributes, ::Dynamic(new _hx_Closure_5()))) {
-HXLINE( 460)			description->tag(HX_("rtcp-mux",72,08,78,80),null())->up();
+HXLINE( 460)			description->tag(HX_("rtcp-mux",72,08,78,80),null(),null())->up();
             		}
 HXLINE( 462)		if (::Lambda_obj::exists(this->attributes, ::Dynamic(new _hx_Closure_6()))) {
-HXLINE( 463)			description->tag(HX_("ice-lite",b0,64,44,1d),null())->up();
+HXLINE( 463)			description->tag(HX_("ice-lite",b0,64,44,1d),null(),null())->up();
             		}
 HXLINE( 465)		description->up();
 HXLINE( 466)		content->addChild(this->toTransportElement(sessionAttributes))->up();
@@ -610,7 +612,7 @@ HXLINE( 479)		 ::Dynamic transportAttr =  ::Dynamic(::hx::Anon_obj::Create(1)
 HXLINE( 480)		 ::Dynamic ufragPwd = this->getUfragPwd(sessionAttributes);
 HXLINE( 481)		::Reflect_obj::setField(transportAttr,HX_("ufrag",27,78,a4,a1), ::Dynamic(ufragPwd->__Field(HX_("ufrag",27,78,a4,a1),::hx::paccDynamic)));
 HXLINE( 482)		::Reflect_obj::setField(transportAttr,HX_("pwd",7d,64,55,00), ::Dynamic(ufragPwd->__Field(HX_("pwd",7d,64,55,00),::hx::paccDynamic)));
-HXLINE( 483)		 ::borogove::Stanza transport =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("transport",a9,4f,2f,4c),transportAttr);
+HXLINE( 483)		 ::borogove::Stanza transport =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("transport",a9,4f,2f,4c),transportAttr,null());
 HXLINE( 484)		 ::borogove::calls::Attribute fingerprint = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(this->attributes->concat(sessionAttributes), ::Dynamic(new _hx_Closure_0()))) );
 HXLINE( 485)		 ::borogove::calls::Attribute setup = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(this->attributes->concat(sessionAttributes), ::Dynamic(new _hx_Closure_1()))) );
 HXLINE( 486)		bool _hx_tmp;
@@ -634,7 +636,7 @@ HXDLIN( 488)			::String _hx_tmp3 = fingerprint->value.substr(0,pos);
 HXDLIN( 488)			transport->textTag(HX_("fingerprint",e4,43,63,a3),_hx_tmp2, ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("hash",ce,2f,08,45),_hx_tmp3)
             				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:dtls:0",a8,cb,02,66))
-            				->setFixed(2,HX_("setup",7d,ae,2f,7a),setup->value)));
+            				->setFixed(2,HX_("setup",7d,ae,2f,7a),setup->value)),null());
             		}
 HXLINE( 490)		::Array< ::Dynamic> _this = this->attributes;
 HXDLIN( 490)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
@@ -674,13 +676,13 @@ HX_DEFINE_DYNAMIC_FUNC1(Media_obj,toTransportElement,return )
             	HX_GC_STACKFRAME(&_hx_pos_47b42bb0bd2f262c_236_fromElement)
 HXLINE( 237)		::Array< ::Dynamic> mediaAttributes = ::Array_obj< ::Dynamic>::__new(0);
 HXLINE( 238)		::Array< int > mediaFormats = ::Array_obj< int >::__new(0);
-HXLINE( 239)		::String mid = ( (::String)(::Reflect_obj::field(content->attr,HX_("name",4b,72,ff,48))) );
+HXLINE( 239)		::String mid = content->attr->get_string(HX_("name",4b,72,ff,48));
 HXLINE( 240)		 ::borogove::Stanza transport = content->getChild(HX_("transport",a9,4f,2f,4c),HX_("urn:xmpp:jingle:transports:ice-udp:1",f3,67,4f,53));
 HXLINE( 241)		if (::hx::IsNull( transport )) {
 HXLINE( 241)			HX_STACK_DO_THROW(HX_("ice-udp transport is missing",08,38,e1,ee));
             		}
-HXLINE( 243)		::String ufrag = ( (::String)(::Reflect_obj::field(transport->attr,HX_("ufrag",27,78,a4,a1))) );
-HXLINE( 244)		::String pwd = ( (::String)(::Reflect_obj::field(transport->attr,HX_("pwd",7d,64,55,00))) );
+HXLINE( 243)		::String ufrag = transport->attr->get_string(HX_("ufrag",27,78,a4,a1));
+HXLINE( 244)		::String pwd = transport->attr->get_string(HX_("pwd",7d,64,55,00));
 HXLINE( 245)		bool _hx_tmp;
 HXDLIN( 245)		bool _hx_tmp1;
 HXDLIN( 245)		if (::hx::IsNotNull( ufrag )) {
@@ -716,10 +718,10 @@ HXLINE( 260)				mediaAttributes->push(existingDescription->getFingerprint());
             			}
             		}
             		else {
-HXLINE( 263)			::String _hx_tmp2 = (( (::String)(::Reflect_obj::field(fingerprint->attr,HX_("hash",ce,2f,08,45))) ) + HX_(" ",20,00,00,00));
+HXLINE( 263)			::String _hx_tmp2 = (fingerprint->attr->get(HX_("hash",ce,2f,08,45)) + HX_(" ",20,00,00,00));
 HXDLIN( 263)			mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("fingerprint",e4,43,63,a3),(_hx_tmp2 + fingerprint->getText())));
-HXLINE( 264)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(fingerprint->attr,HX_("setup",7d,ae,2f,7a))) ) )) {
-HXLINE( 265)				mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("setup",7d,ae,2f,7a),( (::String)(::Reflect_obj::field(fingerprint->attr,HX_("setup",7d,ae,2f,7a))) )));
+HXLINE( 264)			if (::hx::IsNotNull( fingerprint->attr->get(HX_("setup",7d,ae,2f,7a)) )) {
+HXLINE( 265)				mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("setup",7d,ae,2f,7a),fingerprint->attr->get_string(HX_("setup",7d,ae,2f,7a))));
             			}
             		}
 HXLINE( 269)		 ::borogove::Stanza description = content->getChild(HX_("description",fc,08,1d,5f),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c));
@@ -729,14 +731,14 @@ HXDLIN( 270)			::Array< ::Dynamic> _g1 = description->allTags(HX_("payload-type"
 HXDLIN( 270)			while((_g < _g1->length)){
 HXLINE( 270)				 ::borogove::Stanza payloadType = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
 HXDLIN( 270)				_g = (_g + 1);
-HXLINE( 271)				 ::Dynamic id = ::Std_obj::parseInt(( (::String)(::Reflect_obj::field(payloadType->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 272)				if (::hx::IsNull( ( (::String)(::Reflect_obj::field(payloadType->attr,HX_("id",db,5b,00,00))) ) )) {
+HXLINE( 271)				 ::Dynamic id = ::Std_obj::parseInt(payloadType->attr->get_string(HX_("id",db,5b,00,00)));
+HXLINE( 272)				if (::hx::IsNull( payloadType->attr->get(HX_("id",db,5b,00,00)) )) {
 HXLINE( 272)					HX_STACK_DO_THROW(HX_("payload-type missing or invalid id",c0,c4,e7,d7));
             				}
 HXLINE( 273)				mediaFormats->push(id);
-HXLINE( 274)				 ::Dynamic clockRate = ::Std_obj::parseInt(( (::String)(::Reflect_obj::field(payloadType->attr,HX_("clockrate",ae,5b,4b,39))) ));
-HXLINE( 275)				 ::Dynamic channels = ::Std_obj::parseInt(( (::String)(::Reflect_obj::field(payloadType->attr,HX_("channels",50,aa,ee,6a))) ));
-HXLINE( 276)				::String _hx_tmp3 = (((id + HX_(" ",20,00,00,00)) + ( (::String)(::Reflect_obj::field(payloadType->attr,HX_("name",4b,72,ff,48))) )) + HX_("/",2f,00,00,00));
+HXLINE( 274)				 ::Dynamic clockRate = ::Std_obj::parseInt(payloadType->attr->get_string(HX_("clockrate",ae,5b,4b,39)));
+HXLINE( 275)				 ::Dynamic channels = ::Std_obj::parseInt(payloadType->attr->get_string(HX_("channels",50,aa,ee,6a)));
+HXLINE( 276)				::String _hx_tmp3 = (((id + HX_(" ",20,00,00,00)) + payloadType->attr->get(HX_("name",4b,72,ff,48))) + HX_("/",2f,00,00,00));
 HXDLIN( 276)				 ::Dynamic _hx_tmp4;
 HXDLIN( 276)				if (::hx::IsNull( clockRate )) {
 HXLINE( 276)					_hx_tmp4 = 0;
@@ -770,13 +772,13 @@ HXDLIN( 278)						int i = (_g2 - 1);
 HXDLIN( 278)						{
 HXLINE( 278)							 ::borogove::Stanza el = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) );
 HXDLIN( 278)							::String inValue;
-HXDLIN( 278)							if (::hx::IsNull( ( (::String)(::Reflect_obj::field(el->attr,HX_("name",4b,72,ff,48))) ) )) {
+HXDLIN( 278)							if (::hx::IsNull( el->attr->get(HX_("name",4b,72,ff,48)) )) {
 HXLINE( 278)								inValue = HX_("",00,00,00,00);
             							}
             							else {
-HXLINE( 278)								inValue = (( (::String)(::Reflect_obj::field(el->attr,HX_("name",4b,72,ff,48))) ) + HX_("=",3d,00,00,00));
+HXLINE( 278)								inValue = (el->attr->get(HX_("name",4b,72,ff,48)) + HX_("=",3d,00,00,00));
             							}
-HXDLIN( 278)							::String inValue1 = (inValue + ( (::String)(::Reflect_obj::field(el->attr,HX_("value",71,7f,b8,31))) ));
+HXDLIN( 278)							::String inValue1 = (inValue + el->attr->get(HX_("value",71,7f,b8,31)));
 HXDLIN( 278)							result->__unsafe_set(i,inValue1);
             						}
             					}
@@ -790,8 +792,8 @@ HXDLIN( 283)					::Array< ::Dynamic> _g5 = payloadType->allTags(HX_("rtcp-fb",1a
 HXDLIN( 283)					while((_g4 < _g5->length)){
 HXLINE( 283)						 ::borogove::Stanza feedbackNegotiation = _g5->__get(_g4).StaticCast<  ::borogove::Stanza >();
 HXDLIN( 283)						_g4 = (_g4 + 1);
-HXLINE( 284)						::String subtype = ( (::String)(::Reflect_obj::field(feedbackNegotiation->attr,HX_("subtype",3a,5c,33,30))) );
-HXLINE( 285)						::String _hx_tmp7 = ((id + HX_(" ",20,00,00,00)) + ( (::String)(::Reflect_obj::field(feedbackNegotiation->attr,HX_("type",ba,f2,08,4d))) ));
+HXLINE( 284)						::String subtype = feedbackNegotiation->attr->get_string(HX_("subtype",3a,5c,33,30));
+HXLINE( 285)						::String _hx_tmp7 = ((id + HX_(" ",20,00,00,00)) + feedbackNegotiation->attr->get(HX_("type",ba,f2,08,4d)));
 HXDLIN( 285)						::String _hx_tmp8;
 HXDLIN( 285)						bool _hx_tmp9;
 HXDLIN( 285)						if (::hx::IsNotNull( subtype )) {
@@ -815,7 +817,7 @@ HXDLIN( 288)					::Array< ::Dynamic> _g7 = payloadType->allTags(HX_("rtcp-fb-trr
 HXDLIN( 288)					while((_g6 < _g7->length)){
 HXLINE( 288)						 ::borogove::Stanza trrInt = _g7->__get(_g6).StaticCast<  ::borogove::Stanza >();
 HXDLIN( 288)						_g6 = (_g6 + 1);
-HXLINE( 289)						mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("rtcp-fb",1a,8f,ca,30),((id + HX_(" trr-int ",6a,39,0a,91)) + ( (::String)(::Reflect_obj::field(trrInt->attr,HX_("value",71,7f,b8,31))) ))));
+HXLINE( 289)						mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("rtcp-fb",1a,8f,ca,30),((id + HX_(" trr-int ",6a,39,0a,91)) + trrInt->attr->get(HX_("value",71,7f,b8,31)))));
             					}
             				}
             			}
@@ -826,8 +828,8 @@ HXDLIN( 293)			::Array< ::Dynamic> _g9 = description->allTags(HX_("rtcp-fb",1a,8
 HXDLIN( 293)			while((_g8 < _g9->length)){
 HXLINE( 293)				 ::borogove::Stanza feedbackNegotiation1 = _g9->__get(_g8).StaticCast<  ::borogove::Stanza >();
 HXDLIN( 293)				_g8 = (_g8 + 1);
-HXLINE( 294)				::String subtype1 = ( (::String)(::Reflect_obj::field(feedbackNegotiation1->attr,HX_("subtype",3a,5c,33,30))) );
-HXLINE( 295)				::String _hx_tmp10 = (HX_("* ",b6,24,00,00) + ( (::String)(::Reflect_obj::field(feedbackNegotiation1->attr,HX_("type",ba,f2,08,4d))) ));
+HXLINE( 294)				::String subtype1 = feedbackNegotiation1->attr->get_string(HX_("subtype",3a,5c,33,30));
+HXLINE( 295)				::String _hx_tmp10 = (HX_("* ",b6,24,00,00) + feedbackNegotiation1->attr->get(HX_("type",ba,f2,08,4d)));
 HXDLIN( 295)				::String _hx_tmp11;
 HXDLIN( 295)				bool _hx_tmp12;
 HXDLIN( 295)				if (::hx::IsNotNull( subtype1 )) {
@@ -851,7 +853,7 @@ HXDLIN( 298)			::Array< ::Dynamic> _g11 = description->allTags(HX_("rtcp-fb-trr-
 HXDLIN( 298)			while((_g10 < _g11->length)){
 HXLINE( 298)				 ::borogove::Stanza trrInt1 = _g11->__get(_g10).StaticCast<  ::borogove::Stanza >();
 HXDLIN( 298)				_g10 = (_g10 + 1);
-HXLINE( 299)				mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("rtcp-fb",1a,8f,ca,30),(HX_("* trr-int ",00,e4,41,1d) + ( (::String)(::Reflect_obj::field(trrInt1->attr,HX_("value",71,7f,b8,31))) ))));
+HXLINE( 299)				mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("rtcp-fb",1a,8f,ca,30),(HX_("* trr-int ",00,e4,41,1d) + trrInt1->attr->get(HX_("value",71,7f,b8,31)))));
             			}
             		}
 HXLINE( 302)		{
@@ -860,8 +862,8 @@ HXDLIN( 302)			::Array< ::Dynamic> _g13 = description->allTags(HX_("rtp-hdrext",
 HXDLIN( 302)			while((_g12 < _g13->length)){
 HXLINE( 302)				 ::borogove::Stanza headerExtension = _g13->__get(_g12).StaticCast<  ::borogove::Stanza >();
 HXDLIN( 302)				_g12 = (_g12 + 1);
-HXLINE( 303)				::String _hx_tmp13 = (( (::String)(::Reflect_obj::field(headerExtension->attr,HX_("id",db,5b,00,00))) ) + HX_(" ",20,00,00,00));
-HXDLIN( 303)				mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("extmap",9b,d8,20,c7),(_hx_tmp13 + ( (::String)(::Reflect_obj::field(headerExtension->attr,HX_("uri",6c,2b,59,00))) ))));
+HXLINE( 303)				::String _hx_tmp13 = (headerExtension->attr->get(HX_("id",db,5b,00,00)) + HX_(" ",20,00,00,00));
+HXDLIN( 303)				mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("extmap",9b,d8,20,c7),(_hx_tmp13 + headerExtension->attr->get(HX_("uri",6c,2b,59,00)))));
             			}
             		}
 HXLINE( 306)		if (::hx::IsNotNull( description->getChild(HX_("extmap-allow-mixed",05,91,99,44),HX_("urn:xmpp:jingle:apps:rtp:rtp-hdrext:0",c7,33,ab,6d)) )) {
@@ -873,7 +875,7 @@ HXDLIN( 310)			::Array< ::Dynamic> _g15 = description->allTags(HX_("ssrc-group",
 HXDLIN( 310)			while((_g14 < _g15->length)){
 HXLINE( 310)				 ::borogove::Stanza sourceGroup = _g15->__get(_g14).StaticCast<  ::borogove::Stanza >();
 HXDLIN( 310)				_g14 = (_g14 + 1);
-HXLINE( 311)				::String _hx_tmp14 = (( (::String)(::Reflect_obj::field(sourceGroup->attr,HX_("semantics",ad,54,ab,73))) ) + HX_(" ",20,00,00,00));
+HXLINE( 311)				::String _hx_tmp14 = (sourceGroup->attr->get(HX_("semantics",ad,54,ab,73)) + HX_(" ",20,00,00,00));
 HXDLIN( 311)				::Array< ::Dynamic> _this1 = sourceGroup->allTags(HX_("source",db,b0,31,32),null());
 HXDLIN( 311)				::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
 HXDLIN( 311)				{
@@ -883,7 +885,7 @@ HXDLIN( 311)					while((_g16 < _g17)){
 HXLINE( 311)						_g16 = (_g16 + 1);
 HXDLIN( 311)						int i1 = (_g16 - 1);
 HXDLIN( 311)						{
-HXLINE( 311)							::String inValue2 = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this1,i1)) )->attr,HX_("ssrc",51,30,5b,4c))) );
+HXLINE( 311)							::String inValue2 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this1,i1)) )->attr->get_string(HX_("ssrc",51,30,5b,4c));
 HXDLIN( 311)							result1->__unsafe_set(i1,inValue2);
             						}
             					}
@@ -903,16 +905,16 @@ HXDLIN( 315)					::Array< ::Dynamic> _g21 = source->allTags(HX_("parameter",a9,3
 HXDLIN( 315)					while((_g20 < _g21->length)){
 HXLINE( 315)						 ::borogove::Stanza parameter = _g21->__get(_g20).StaticCast<  ::borogove::Stanza >();
 HXDLIN( 315)						_g20 = (_g20 + 1);
-HXLINE( 316)						::String _hx_tmp15 = (( (::String)(::Reflect_obj::field(source->attr,HX_("ssrc",51,30,5b,4c))) ) + HX_(" ",20,00,00,00));
-HXDLIN( 316)						::String _hx_tmp16 = ((_hx_tmp15 + ( (::String)(::Reflect_obj::field(parameter->attr,HX_("name",4b,72,ff,48))) )) + HX_(":",3a,00,00,00));
-HXDLIN( 316)						mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("ssrc",51,30,5b,4c),(_hx_tmp16 + ( (::String)(::Reflect_obj::field(parameter->attr,HX_("value",71,7f,b8,31))) ))));
+HXLINE( 316)						::String _hx_tmp15 = (source->attr->get(HX_("ssrc",51,30,5b,4c)) + HX_(" ",20,00,00,00));
+HXDLIN( 316)						::String _hx_tmp16 = ((_hx_tmp15 + parameter->attr->get(HX_("name",4b,72,ff,48))) + HX_(":",3a,00,00,00));
+HXDLIN( 316)						mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("ssrc",51,30,5b,4c),(_hx_tmp16 + parameter->attr->get(HX_("value",71,7f,b8,31)))));
             					}
             				}
             			}
             		}
 HXLINE( 320)		mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("mid",88,11,53,00),mid));
 HXLINE( 322)		{
-HXLINE( 322)			::String _g22 = ( (::String)(::Reflect_obj::field(content->attr,HX_("senders",1e,f7,a9,a8))) );
+HXLINE( 322)			::String _g22 = content->attr->get_string(HX_("senders",1e,f7,a9,a8));
 HXDLIN( 322)			if (::hx::IsNull( _g22 )) {
 HXLINE( 338)				mediaAttributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("sendrecv",6e,1e,9c,f4),HX_("",00,00,00,00)));
             			}
@@ -965,7 +967,7 @@ HXDLIN( 351)		if (::hx::IsNull( description )) {
 HXLINE( 351)			_hx_tmp18 = HX_("",00,00,00,00);
             		}
             		else {
-HXLINE( 351)			_hx_tmp18 = ( (::String)(::Reflect_obj::field(description->attr,HX_("media",e4,04,bc,05))) );
+HXLINE( 351)			_hx_tmp18 = description->attr->get_string(HX_("media",e4,04,bc,05));
             		}
 HXLINE( 349)		return  ::borogove::calls::Media_obj::__alloc( HX_CTX ,mid,_hx_tmp18,HX_("IN IP4 0.0.0.0",08,75,43,c4),HX_("9",39,00,00,00),HX_("UDP/TLS/RTP/SAVPF",1b,15,d1,42),mediaAttributes,mediaFormats);
             	}
diff --git a/Sources/c_borogove/src/borogove/calls/OutgoingProposedSession.cpp b/Sources/c_borogove/src/borogove/calls/OutgoingProposedSession.cpp
index eea39f2..84ba349 100644
--- a/Sources/c_borogove/src/borogove/calls/OutgoingProposedSession.cpp
+++ b/Sources/c_borogove/src/borogove/calls/OutgoingProposedSession.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
@@ -71,36 +68,36 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_d2a3c174e5a36893_196_new,"borogove.calls.OutgoingProposedSession","new",0xf8b58fb0,"borogove.calls.OutgoingProposedSession.new","borogove/calls/Session.hx",196,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_224_propose,"borogove.calls.OutgoingProposedSession","propose",0xcfa5a64e,"borogove.calls.OutgoingProposedSession.propose","borogove/calls/Session.hx",224,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_213_propose,"borogove.calls.OutgoingProposedSession","propose",0xcfa5a64e,"borogove.calls.OutgoingProposedSession.propose","borogove/calls/Session.hx",213,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_237_hangup,"borogove.calls.OutgoingProposedSession","hangup",0xe6e084fd,"borogove.calls.OutgoingProposedSession.hangup","borogove/calls/Session.hx",237,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_234_hangup,"borogove.calls.OutgoingProposedSession","hangup",0xe6e084fd,"borogove.calls.OutgoingProposedSession.hangup","borogove/calls/Session.hx",234,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_252_retract,"borogove.calls.OutgoingProposedSession","retract",0xd2758951,"borogove.calls.OutgoingProposedSession.retract","borogove/calls/Session.hx",252,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_257_terminate,"borogove.calls.OutgoingProposedSession","terminate",0x77424db1,"borogove.calls.OutgoingProposedSession.terminate","borogove/calls/Session.hx",257,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_262_contentAdd,"borogove.calls.OutgoingProposedSession","contentAdd",0x0c853118,"borogove.calls.OutgoingProposedSession.contentAdd","borogove/calls/Session.hx",262,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_267_contentAccept,"borogove.calls.OutgoingProposedSession","contentAccept",0xb429c871,"borogove.calls.OutgoingProposedSession.contentAccept","borogove/calls/Session.hx",267,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_271_transportInfo,"borogove.calls.OutgoingProposedSession","transportInfo",0x89f74007,"borogove.calls.OutgoingProposedSession.transportInfo","borogove/calls/Session.hx",271,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_278_accept,"borogove.calls.OutgoingProposedSession","accept",0x39e745b8,"borogove.calls.OutgoingProposedSession.accept","borogove/calls/Session.hx",278,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_282_initiate,"borogove.calls.OutgoingProposedSession","initiate",0x8e062909,"borogove.calls.OutgoingProposedSession.initiate","borogove/calls/Session.hx",282,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_295_addMedia,"borogove.calls.OutgoingProposedSession","addMedia",0xad8fe9b3,"borogove.calls.OutgoingProposedSession.addMedia","borogove/calls/Session.hx",295,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_299_callStatus,"borogove.calls.OutgoingProposedSession","callStatus",0xf9d38920,"borogove.calls.OutgoingProposedSession.callStatus","borogove/calls/Session.hx",299,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_304_audioTracks,"borogove.calls.OutgoingProposedSession","audioTracks",0xde56ec4e,"borogove.calls.OutgoingProposedSession.audioTracks","borogove/calls/Session.hx",304,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_309_videoTracks,"borogove.calls.OutgoingProposedSession","videoTracks",0x884e51b3,"borogove.calls.OutgoingProposedSession.videoTracks","borogove/calls/Session.hx",309,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_314_dtmf,"borogove.calls.OutgoingProposedSession","dtmf",0x9f976199,"borogove.calls.OutgoingProposedSession.dtmf","borogove/calls/Session.hx",314,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_318_get_sid,"borogove.calls.OutgoingProposedSession","get_sid",0xfc880ef5,"borogove.calls.OutgoingProposedSession.get_sid","borogove/calls/Session.hx",318,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_322_get_chatId,"borogove.calls.OutgoingProposedSession","get_chatId",0x70a63f4c,"borogove.calls.OutgoingProposedSession.get_chatId","borogove/calls/Session.hx",322,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_196_boot,"borogove.calls.OutgoingProposedSession","boot",0x9e412ae2,"borogove.calls.OutgoingProposedSession.boot","borogove/calls/Session.hx",196,0x33a79030)
+HX_DEFINE_STACK_FRAME(_hx_pos_d2a3c174e5a36893_200_new,"borogove.calls.OutgoingProposedSession","new",0xf8b58fb0,"borogove.calls.OutgoingProposedSession.new","borogove/calls/Session.hx",200,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_228_propose,"borogove.calls.OutgoingProposedSession","propose",0xcfa5a64e,"borogove.calls.OutgoingProposedSession.propose","borogove/calls/Session.hx",228,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_217_propose,"borogove.calls.OutgoingProposedSession","propose",0xcfa5a64e,"borogove.calls.OutgoingProposedSession.propose","borogove/calls/Session.hx",217,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_241_hangup,"borogove.calls.OutgoingProposedSession","hangup",0xe6e084fd,"borogove.calls.OutgoingProposedSession.hangup","borogove/calls/Session.hx",241,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_238_hangup,"borogove.calls.OutgoingProposedSession","hangup",0xe6e084fd,"borogove.calls.OutgoingProposedSession.hangup","borogove/calls/Session.hx",238,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_256_retract,"borogove.calls.OutgoingProposedSession","retract",0xd2758951,"borogove.calls.OutgoingProposedSession.retract","borogove/calls/Session.hx",256,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_261_terminate,"borogove.calls.OutgoingProposedSession","terminate",0x77424db1,"borogove.calls.OutgoingProposedSession.terminate","borogove/calls/Session.hx",261,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_266_contentAdd,"borogove.calls.OutgoingProposedSession","contentAdd",0x0c853118,"borogove.calls.OutgoingProposedSession.contentAdd","borogove/calls/Session.hx",266,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_271_contentAccept,"borogove.calls.OutgoingProposedSession","contentAccept",0xb429c871,"borogove.calls.OutgoingProposedSession.contentAccept","borogove/calls/Session.hx",271,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_275_transportInfo,"borogove.calls.OutgoingProposedSession","transportInfo",0x89f74007,"borogove.calls.OutgoingProposedSession.transportInfo","borogove/calls/Session.hx",275,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_282_accept,"borogove.calls.OutgoingProposedSession","accept",0x39e745b8,"borogove.calls.OutgoingProposedSession.accept","borogove/calls/Session.hx",282,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_286_initiate,"borogove.calls.OutgoingProposedSession","initiate",0x8e062909,"borogove.calls.OutgoingProposedSession.initiate","borogove/calls/Session.hx",286,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_299_addMedia,"borogove.calls.OutgoingProposedSession","addMedia",0xad8fe9b3,"borogove.calls.OutgoingProposedSession.addMedia","borogove/calls/Session.hx",299,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_303_callStatus,"borogove.calls.OutgoingProposedSession","callStatus",0xf9d38920,"borogove.calls.OutgoingProposedSession.callStatus","borogove/calls/Session.hx",303,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_308_audioTracks,"borogove.calls.OutgoingProposedSession","audioTracks",0xde56ec4e,"borogove.calls.OutgoingProposedSession.audioTracks","borogove/calls/Session.hx",308,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_313_videoTracks,"borogove.calls.OutgoingProposedSession","videoTracks",0x884e51b3,"borogove.calls.OutgoingProposedSession.videoTracks","borogove/calls/Session.hx",313,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_318_dtmf,"borogove.calls.OutgoingProposedSession","dtmf",0x9f976199,"borogove.calls.OutgoingProposedSession.dtmf","borogove/calls/Session.hx",318,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_322_get_sid,"borogove.calls.OutgoingProposedSession","get_sid",0xfc880ef5,"borogove.calls.OutgoingProposedSession.get_sid","borogove/calls/Session.hx",322,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_326_get_chatId,"borogove.calls.OutgoingProposedSession","get_chatId",0x70a63f4c,"borogove.calls.OutgoingProposedSession.get_chatId","borogove/calls/Session.hx",326,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_200_boot,"borogove.calls.OutgoingProposedSession","boot",0x9e412ae2,"borogove.calls.OutgoingProposedSession.boot","borogove/calls/Session.hx",200,0x33a79030)
 namespace borogove{
 namespace calls{
 
 void OutgoingProposedSession_obj::__construct( ::borogove::Client client, ::borogove::JID to){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_196_new)
-HXLINE( 203)		this->video = false;
-HXLINE( 202)		this->audio = false;
-HXLINE( 207)		this->client = client;
-HXLINE( 208)		this->to = to;
-HXLINE( 209)		this->_sid = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_200_new)
+HXLINE( 207)		this->video = false;
+HXLINE( 206)		this->audio = false;
+HXLINE( 211)		this->client = client;
+HXLINE( 212)		this->to = to;
+HXLINE( 213)		this->_sid = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
             	}
 
 Dynamic OutgoingProposedSession_obj::__CreateEmpty() { return new OutgoingProposedSession_obj; }
@@ -153,38 +150,38 @@ void *OutgoingProposedSession_obj::_hx_getInterface(int inHash) {
 void OutgoingProposedSession_obj::propose(bool audio,bool video){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::OutgoingProposedSession,_gthis, ::borogove::Stanza,event, ::borogove::ChatMessage,msg) HXARGC(1)
             		 ::borogove::EventResult _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_224_propose)
-HXLINE( 225)			::String stanza = _gthis->to->asString();
-HXDLIN( 225)			 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+            			HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_228_propose)
+HXLINE( 229)			::String stanza = _gthis->to->asString();
+HXDLIN( 229)			 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),msg->localId)
             				->setFixed(1,HX_("to",7b,65,00,00),stanza)
-            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hints",70,b3,d6,fe))));
-HXLINE( 228)			_gthis->client->sendStanza(stanza1);
-HXLINE( 229)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),0);
-HXLINE( 230)			return _gthis->client->trigger(HX_("call/ringing",81,75,54,f9),_gthis);
+            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))),null())->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hints",70,b3,d6,fe))),null());
+HXLINE( 232)			_gthis->client->sendStanza(stanza1);
+HXLINE( 233)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),0);
+HXLINE( 234)			return _gthis->client->trigger(HX_("call/ringing",81,75,54,f9),_gthis);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_213_propose)
-HXDLIN( 213)		 ::borogove::calls::OutgoingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 214)		this->audio = audio;
-HXLINE( 215)		this->video = video;
-HXLINE( 216)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("propose",fe,fe,e9,f9), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_217_propose)
+HXDLIN( 217)		 ::borogove::calls::OutgoingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 218)		this->audio = audio;
+HXLINE( 219)		this->video = video;
+HXLINE( 220)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("propose",fe,fe,e9,f9), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE( 217)		if (audio) {
-HXLINE( 218)			event->tag(HX_("description",fc,08,1d,5f), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))),null());
+HXLINE( 221)		if (audio) {
+HXLINE( 222)			event->tag(HX_("description",fc,08,1d,5f), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("media",e4,04,bc,05),HX_("audio",d6,78,80,27))
-            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c))))->up();
+            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c))),null())->up();
             		}
-HXLINE( 220)		if (video) {
-HXLINE( 221)			event->tag(HX_("description",fc,08,1d,5f), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 224)		if (video) {
+HXLINE( 225)			event->tag(HX_("description",fc,08,1d,5f), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("media",e4,04,bc,05),HX_("video",7b,14,fc,36))
-            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c))))->up();
+            				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c))),null())->up();
             		}
-HXLINE( 223)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->to,this->client,event);
-HXLINE( 224)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
+HXLINE( 227)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->to,this->client,event);
+HXLINE( 228)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
             	}
 
 
@@ -193,36 +190,36 @@ HX_DEFINE_DYNAMIC_FUNC2(OutgoingProposedSession_obj,propose,(void))
 void OutgoingProposedSession_obj::hangup(){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::OutgoingProposedSession,_gthis, ::borogove::Stanza,event, ::borogove::ChatMessage,msg) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_237_hangup)
-HXLINE( 238)			 ::borogove::Client _gthis1 = _gthis->client;
-HXLINE( 239)			::String _hx_tmp = _gthis->to->asString();
-HXLINE( 238)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+            			HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_241_hangup)
+HXLINE( 242)			 ::borogove::Client _gthis1 = _gthis->client;
+HXLINE( 243)			::String _hx_tmp = _gthis->to->asString();
+HXLINE( 242)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),msg->versions->__get(0).StaticCast<  ::borogove::ChatMessage >()->localId)
             				->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp)
-            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hints",70,b3,d6,fe)))));
-HXLINE( 243)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+            				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))),null())->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hints",70,b3,d6,fe))),null()));
+HXLINE( 247)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_234_hangup)
-HXDLIN( 234)		 ::borogove::calls::OutgoingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 235)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("retract",01,e2,b9,fc), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_238_hangup)
+HXDLIN( 238)		 ::borogove::calls::OutgoingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 239)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("retract",01,e2,b9,fc), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE( 236)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->to,this->client,event);
-HXLINE( 237)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
-HXLINE( 245)		{
-HXLINE( 245)			 ::borogove::Client tmp = this->client;
-HXDLIN( 245)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
-HXDLIN( 245)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 245)				::Dynamic this1 = tmp1->jingleSessions;
-HXDLIN( 245)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))),null());
+HXLINE( 240)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->to,this->client,event);
+HXLINE( 241)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
+HXLINE( 249)		{
+HXLINE( 249)			 ::borogove::Client tmp = this->client;
+HXDLIN( 249)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
+HXDLIN( 249)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 249)				::Dynamic this1 = tmp1->jingleSessions;
+HXDLIN( 249)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
             			}
             		}
-HXLINE( 246)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 246)		::String _hx_tmp1 = this->get_chatId();
-HXDLIN( 246)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 250)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 250)		::String _hx_tmp1 = this->get_chatId();
+HXDLIN( 250)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
             			->setFixed(1,HX_("sid",0e,9f,57,00),this->get_sid())));
             	}
@@ -231,10 +228,10 @@ HXDLIN( 246)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,hangup,(void))
 
 void OutgoingProposedSession_obj::retract(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_252_retract)
-HXDLIN( 252)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 252)		::String _hx_tmp1 = this->get_chatId();
-HXDLIN( 252)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_256_retract)
+HXDLIN( 256)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 256)		::String _hx_tmp1 = this->get_chatId();
+HXDLIN( 256)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
             			->setFixed(1,HX_("sid",0e,9f,57,00),this->get_sid())));
             	}
@@ -243,160 +240,160 @@ HXDLIN( 252)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,retract,(void))
 
 void OutgoingProposedSession_obj::terminate(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_257_terminate)
-HXDLIN( 257)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 257)		::String _hx_tmp1 = (HX_("Tried to terminate before session-initiate: ",a9,d4,f3,a4) + this->get_sid());
-HXDLIN( 257)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_261_terminate)
+HXDLIN( 261)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 261)		::String _hx_tmp1 = (HX_("Tried to terminate before session-initiate: ",a9,d4,f3,a4) + this->get_sid());
+HXDLIN( 261)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.OutgoingProposedSession",be,37,f0,b1))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("terminate",61,32,d2,fd))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),257)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),261)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,terminate,(void))
 
 void OutgoingProposedSession_obj::contentAdd( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_262_contentAdd)
-HXDLIN( 262)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 262)		::String _hx_tmp1 = (HX_("Got content-add before session-initiate: ",10,d3,fa,8a) + this->get_sid());
-HXDLIN( 262)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_266_contentAdd)
+HXDLIN( 266)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 266)		::String _hx_tmp1 = (HX_("Got content-add before session-initiate: ",10,d3,fa,8a) + this->get_sid());
+HXDLIN( 266)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.OutgoingProposedSession",be,37,f0,b1))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("contentAdd",68,66,dd,43))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),262)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),266)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(OutgoingProposedSession_obj,contentAdd,(void))
 
 void OutgoingProposedSession_obj::contentAccept( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_267_contentAccept)
-HXDLIN( 267)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 267)		::String _hx_tmp1 = (HX_("Got content-accept before session-initiate: ",47,72,87,71) + this->get_sid());
-HXDLIN( 267)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_271_contentAccept)
+HXDLIN( 271)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 271)		::String _hx_tmp1 = (HX_("Got content-accept before session-initiate: ",47,72,87,71) + this->get_sid());
+HXDLIN( 271)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.OutgoingProposedSession",be,37,f0,b1))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("contentAccept",21,c5,01,e1))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),267)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),271)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(OutgoingProposedSession_obj,contentAccept,(void))
 
 ::Dynamic OutgoingProposedSession_obj::transportInfo( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_271_transportInfo)
-HXLINE( 272)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 272)		::String _hx_tmp1 = (HX_("Got transport-info before session-initiate: ",bd,bd,9d,08) + this->get_sid());
-HXDLIN( 272)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_275_transportInfo)
+HXLINE( 276)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 276)		::String _hx_tmp1 = (HX_("Got transport-info before session-initiate: ",bd,bd,9d,08) + this->get_sid());
+HXDLIN( 276)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.OutgoingProposedSession",be,37,f0,b1))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("transportInfo",b7,3c,cf,b6))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),272)));
-HXLINE( 273)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),276)));
+HXLINE( 277)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(OutgoingProposedSession_obj,transportInfo,return )
 
 void OutgoingProposedSession_obj::accept(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_278_accept)
-HXDLIN( 278)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 278)		::String _hx_tmp1 = (HX_("Tried to accept before initiate: ",77,4a,a0,ec) + this->get_sid());
-HXDLIN( 278)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_282_accept)
+HXDLIN( 282)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 282)		::String _hx_tmp1 = (HX_("Tried to accept before initiate: ",77,4a,a0,ec) + this->get_sid());
+HXDLIN( 282)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.OutgoingProposedSession",be,37,f0,b1))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("accept",08,93,06,0b))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),278)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),282)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,accept,(void))
 
  ::borogove::calls::OutgoingSession OutgoingProposedSession_obj::initiate( ::borogove::Stanza stanza){
-            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_282_initiate)
-HXLINE( 283)		 ::borogove::Stanza jmi = stanza->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 284)		if (::hx::IsNull( jmi )) {
-HXLINE( 284)			HX_STACK_DO_THROW((HX_("no jmi: ",4d,b1,bc,b7) + ::Std_obj::string(stanza)));
+            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_286_initiate)
+HXLINE( 287)		 ::borogove::Stanza jmi = stanza->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 288)		if (::hx::IsNull( jmi )) {
+HXLINE( 288)			HX_STACK_DO_THROW((HX_("no jmi: ",4d,b1,bc,b7) + ::Std_obj::string(stanza)));
             		}
-HXLINE( 285)		::String _hx_tmp = ( (::String)(::Reflect_obj::field(jmi->attr,HX_("id",db,5b,00,00))) );
-HXDLIN( 285)		if ((_hx_tmp != this->get_sid())) {
-HXLINE( 285)			::String _hx_tmp1 = ((HX_("sid doesn't match: ",3b,d7,99,76) + ( (::String)(::Reflect_obj::field(jmi->attr,HX_("id",db,5b,00,00))) )) + HX_(" vs ",23,c2,80,15));
-HXDLIN( 285)			HX_STACK_DO_THROW((_hx_tmp1 + this->get_sid()));
+HXLINE( 289)		::String _hx_tmp = jmi->attr->get_string(HX_("id",db,5b,00,00));
+HXDLIN( 289)		if ((_hx_tmp != this->get_sid())) {
+HXLINE( 289)			::String _hx_tmp1 = ((HX_("sid doesn't match: ",3b,d7,99,76) + jmi->attr->get(HX_("id",db,5b,00,00))) + HX_(" vs ",23,c2,80,15));
+HXDLIN( 289)			HX_STACK_DO_THROW((_hx_tmp1 + this->get_sid()));
             		}
-HXLINE( 286)		 ::borogove::Client _hx_tmp2 = this->client;
-HXDLIN( 286)		_hx_tmp2->sendPresence(this->to->asString(),null());
-HXLINE( 287)		 ::borogove::Client session = this->client;
-HXDLIN( 287)		 ::borogove::JID session1 = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXDLIN( 287)		 ::borogove::calls::OutgoingSession session2 =  ::borogove::calls::OutgoingSession_obj::__alloc( HX_CTX ,session,session1,this->get_sid());
-HXLINE( 288)		this->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 290)		 ::borogove::Client _hx_tmp2 = this->client;
+HXDLIN( 290)		_hx_tmp2->sendPresence(this->to->asString(),null());
+HXLINE( 291)		 ::borogove::Client session = this->client;
+HXDLIN( 291)		 ::borogove::JID session1 = ::borogove::JID_obj::parse(stanza->attr->get_string(HX_("from",6a,a5,c2,43)));
+HXDLIN( 291)		 ::borogove::calls::OutgoingSession session2 =  ::borogove::calls::OutgoingSession_obj::__alloc( HX_CTX ,session,session1,this->get_sid());
+HXLINE( 292)		this->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("session",56,17,98,93),session2)
             			->setFixed(1,HX_("audio",d6,78,80,27),this->audio)
             			->setFixed(2,HX_("video",7b,14,fc,36),this->video)));
-HXLINE( 289)		this->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 293)		this->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("session",56,17,98,93),session2)));
-HXLINE( 290)		return session2;
+HXLINE( 294)		return session2;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(OutgoingProposedSession_obj,initiate,return )
 
 void OutgoingProposedSession_obj::addMedia(::Array< ::Dynamic> _){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_295_addMedia)
-HXDLIN( 295)		HX_STACK_DO_THROW(HX_("Cannot add media before call starts",aa,0a,79,d5));
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_299_addMedia)
+HXDLIN( 299)		HX_STACK_DO_THROW(HX_("Cannot add media before call starts",aa,0a,79,d5));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(OutgoingProposedSession_obj,addMedia,(void))
 
 int OutgoingProposedSession_obj::callStatus(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_299_callStatus)
-HXDLIN( 299)		return 2;
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_303_callStatus)
+HXDLIN( 303)		return 2;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,callStatus,return )
 
 ::Array< ::Dynamic> OutgoingProposedSession_obj::audioTracks(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_304_audioTracks)
-HXDLIN( 304)		return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_308_audioTracks)
+HXDLIN( 308)		return ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,audioTracks,return )
 
 ::Array< ::Dynamic> OutgoingProposedSession_obj::videoTracks(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_309_videoTracks)
-HXDLIN( 309)		return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_313_videoTracks)
+HXDLIN( 313)		return ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,videoTracks,return )
 
  ::borogove::calls::DTMFSender OutgoingProposedSession_obj::dtmf(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_314_dtmf)
-HXDLIN( 314)		return null();
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_318_dtmf)
+HXDLIN( 318)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,dtmf,return )
 
 ::String OutgoingProposedSession_obj::get_sid(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_318_get_sid)
-HXDLIN( 318)		return this->_sid;
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_322_get_sid)
+HXDLIN( 322)		return this->_sid;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,get_sid,return )
 
 ::String OutgoingProposedSession_obj::get_chatId(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_322_get_chatId)
-HXDLIN( 322)		return this->to->asBare()->asString();
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_326_get_chatId)
+HXDLIN( 326)		return this->to->asBare()->asString();
             	}
 
 
@@ -598,8 +595,8 @@ void OutgoingProposedSession_obj::__register()
 void OutgoingProposedSession_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_196_boot)
-HXDLIN( 196)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_200_boot)
+HXDLIN( 200)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(5)
             				->setFixed(0,HX_("videoTracks",63,c2,24,be), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
diff --git a/Sources/c_borogove/src/borogove/calls/OutgoingSession.cpp b/Sources/c_borogove/src/borogove/calls/OutgoingSession.cpp
index 433cef5..f266652 100644
--- a/Sources/c_borogove/src/borogove/calls/OutgoingSession.cpp
+++ b/Sources/c_borogove/src/borogove/calls/OutgoingSession.cpp
@@ -35,17 +35,17 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_1c185be5f9e73669_706_new,"borogove.calls.OutgoingSession","new",0x9e6d83b6,"borogove.calls.OutgoingSession.new","borogove/calls/Session.hx",706,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_710_onPeerConnection,"borogove.calls.OutgoingSession","onPeerConnection",0x5a3e20c9,"borogove.calls.OutgoingSession.onPeerConnection","borogove/calls/Session.hx",710,0x33a79030)
+HX_DEFINE_STACK_FRAME(_hx_pos_1c185be5f9e73669_710_new,"borogove.calls.OutgoingSession","new",0x9e6d83b6,"borogove.calls.OutgoingSession.new","borogove/calls/Session.hx",710,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_714_onPeerConnection,"borogove.calls.OutgoingSession","onPeerConnection",0x5a3e20c9,"borogove.calls.OutgoingSession.onPeerConnection","borogove/calls/Session.hx",714,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_721_initiate,"borogove.calls.OutgoingSession","initiate",0x4b1ddf43,"borogove.calls.OutgoingSession.initiate","borogove/calls/Session.hx",721,0x33a79030)
 HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_717_initiate,"borogove.calls.OutgoingSession","initiate",0x4b1ddf43,"borogove.calls.OutgoingSession.initiate","borogove/calls/Session.hx",717,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_713_initiate,"borogove.calls.OutgoingSession","initiate",0x4b1ddf43,"borogove.calls.OutgoingSession.initiate","borogove/calls/Session.hx",713,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_722_callStatus,"borogove.calls.OutgoingSession","callStatus",0xf4f0c1da,"borogove.calls.OutgoingSession.callStatus","borogove/calls/Session.hx",722,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_726_callStatus,"borogove.calls.OutgoingSession","callStatus",0xf4f0c1da,"borogove.calls.OutgoingSession.callStatus","borogove/calls/Session.hx",726,0x33a79030)
 namespace borogove{
 namespace calls{
 
 void OutgoingSession_obj::__construct( ::borogove::Client client, ::borogove::JID counterpart,::String sid){
-            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_706_new)
-HXDLIN( 706)		super::__construct(client,counterpart,sid,null());
+            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_710_new)
+HXDLIN( 710)		super::__construct(client,counterpart,sid,null());
             	}
 
 Dynamic OutgoingSession_obj::__CreateEmpty() { return new OutgoingSession_obj; }
@@ -68,47 +68,47 @@ bool OutgoingSession_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::Dynamic OutgoingSession_obj::onPeerConnection(){
-            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_710_onPeerConnection)
-HXDLIN( 710)		return this->setupLocalDescription(HX_("session-initiate",70,2d,30,f7),null(),null(),null());
+            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_714_onPeerConnection)
+HXDLIN( 714)		return this->setupLocalDescription(HX_("session-initiate",70,2d,30,f7),null(),null(),null());
             	}
 
 
  ::borogove::calls::OutgoingSession OutgoingSession_obj::initiate( ::borogove::Stanza stanza){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::OutgoingSession,_gthis, ::borogove::Stanza,stanza) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_717_initiate)
-HXLINE( 717)			return _gthis->transportInfo(stanza);
+            			HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_721_initiate)
+HXLINE( 721)			return _gthis->transportInfo(stanza);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_713_initiate)
-HXDLIN( 713)		 ::borogove::calls::OutgoingSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 714)		this->remoteDescription = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,true,null());
-HXLINE( 715)		this->peerDtlsSetup = this->remoteDescription->getDtlsSetup();
-HXLINE( 716)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
-HXDLIN( 716)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_717_initiate)
+HXDLIN( 717)		 ::borogove::calls::OutgoingSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 718)		this->remoteDescription = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,true,null());
+HXLINE( 719)		this->peerDtlsSetup = this->remoteDescription->getDtlsSetup();
+HXLINE( 720)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
+HXDLIN( 720)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("sdp",bf,9a,57,00),this->remoteDescription->toSdp())
             			->setFixed(1,HX_("type",ba,f2,08,4d),cpp::Struct(rtc::Description::Type::Answer)))), ::Dynamic(new _hx_Closure_0(_gthis,stanza)),null());
-HXLINE( 718)		return ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 722)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
 int OutgoingSession_obj::callStatus(){
-            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_722_callStatus)
-HXDLIN( 722)		bool _hx_tmp;
-HXDLIN( 722)		if (::hx::IsNotNull( this->pc )) {
-HXDLIN( 722)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
+            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_726_callStatus)
+HXDLIN( 726)		bool _hx_tmp;
+HXDLIN( 726)		if (::hx::IsNotNull( this->pc )) {
+HXDLIN( 726)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
             		}
             		else {
-HXDLIN( 722)			_hx_tmp = true;
+HXDLIN( 726)			_hx_tmp = true;
             		}
-HXDLIN( 722)		if (_hx_tmp) {
-HXLINE( 723)			return 2;
+HXDLIN( 726)		if (_hx_tmp) {
+HXLINE( 727)			return 2;
             		}
             		else {
-HXLINE( 725)			return this->super::callStatus();
+HXLINE( 729)			return this->super::callStatus();
             		}
-HXLINE( 722)		return null();
+HXLINE( 726)		return null();
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/calls/SessionDescription.cpp b/Sources/c_borogove/src/borogove/calls/SessionDescription.cpp
index 2caa479..9c15730 100644
--- a/Sources/c_borogove/src/borogove/calls/SessionDescription.cpp
+++ b/Sources/c_borogove/src/borogove/calls/SessionDescription.cpp
@@ -22,6 +22,12 @@
 #ifndef INCLUDED_borogove_calls_SessionDescription
 #include <borogove/calls/SessionDescription.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_eabdb73125e41d9c_13_new,"borogove.calls.SessionDescription","new",0x8d2477fe,"borogove.calls.SessionDescription.new","borogove/calls/SessionDescription.hx",13,0xd9f63730)
 HX_LOCAL_STACK_FRAME(_hx_pos_eabdb73125e41d9c_118_getUfragPwd,"borogove.calls.SessionDescription","getUfragPwd",0x17bd2eea,"borogove.calls.SessionDescription.getUfragPwd","borogove/calls/SessionDescription.hx",118,0xd9f63730)
@@ -324,11 +330,11 @@ HXLINE( 187)			return (attr->key == HX_("group",3f,b3,f4,99));
 
             	HX_GC_STACKFRAME(&_hx_pos_eabdb73125e41d9c_184_toStanza)
 HXLINE( 185)		 ::borogove::Stanza iq =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))));
+            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null());
 HXLINE( 186)		 ::borogove::Stanza jingle = iq->tag(HX_("jingle",31,27,eb,1f), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("sid",0e,9f,57,00),sid)
             			->setFixed(1,HX_("action",b6,3b,46,16),action)
-            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:1",44,c4,fe,f7))));
+            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:1",44,c4,fe,f7))),null());
 HXLINE( 187)		 ::borogove::calls::Attribute group = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(this->attributes, ::Dynamic(new _hx_Closure_0()))) );
 HXLINE( 188)		if (::hx::IsNotNull( group )) {
 HXLINE( 189)			jingle->addChild(::borogove::calls::Group_obj::parse(group->value)->toElement());
diff --git a/Sources/c_borogove/src/borogove/calls/TransportInfo.cpp b/Sources/c_borogove/src/borogove/calls/TransportInfo.cpp
index bfc00d5..09db568 100644
--- a/Sources/c_borogove/src/borogove/calls/TransportInfo.cpp
+++ b/Sources/c_borogove/src/borogove/calls/TransportInfo.cpp
@@ -13,6 +13,12 @@
 #ifndef INCLUDED_borogove_calls_TransportInfo
 #include <borogove/calls/TransportInfo.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_0546eaa51ac16424_203_new,"borogove.calls.TransportInfo","new",0xf55f7c23,"borogove.calls.TransportInfo.new","borogove/calls/SessionDescription.hx",203,0xd9f63730)
 HX_LOCAL_STACK_FRAME(_hx_pos_0546eaa51ac16424_208_toStanza,"borogove.calls.TransportInfo","toStanza",0x0e95d72d,"borogove.calls.TransportInfo.toStanza","borogove/calls/SessionDescription.hx",208,0xd9f63730)
@@ -43,11 +49,11 @@ bool TransportInfo_obj::_hx_isInstanceOf(int inClassId) {
  ::borogove::Stanza TransportInfo_obj::toStanza(bool initiator){
             	HX_GC_STACKFRAME(&_hx_pos_0546eaa51ac16424_208_toStanza)
 HXLINE( 209)		 ::borogove::Stanza iq =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))));
+            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null());
 HXLINE( 210)		 ::borogove::Stanza jingle = iq->tag(HX_("jingle",31,27,eb,1f), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("sid",0e,9f,57,00),this->sid)
             			->setFixed(1,HX_("action",b6,3b,46,16),HX_("transport-info",d2,9e,05,1c))
-            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:1",44,c4,fe,f7))));
+            			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:1",44,c4,fe,f7))),null());
 HXLINE( 211)		 ::borogove::Stanza _hx_tmp = this->media->contentElement(initiator);
 HXDLIN( 211)		jingle->addChild(_hx_tmp->addChild(this->media->toTransportElement(::Array_obj< ::Dynamic>::__new(0)))->up());
 HXLINE( 212)		jingle->up();
diff --git a/Sources/c_borogove/src/borogove/calls/_Session/Session_Fields_.cpp b/Sources/c_borogove/src/borogove/calls/_Session/Session_Fields_.cpp
index 67ff62c..c16a01d 100644
--- a/Sources/c_borogove/src/borogove/calls/_Session/Session_Fields_.cpp
+++ b/Sources/c_borogove/src/borogove/calls/_Session/Session_Fields_.cpp
@@ -1,12 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Date
-#include <Date.h>
-#endif
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED__UUIDv7_UUIDv7_Fields_
 #include <_UUIDv7/UUIDv7_Fields_.h>
 #endif
@@ -19,9 +13,6 @@
 #ifndef INCLUDED_borogove_Client
 #include <borogove/Client.h>
 #endif
-#ifndef INCLUDED_borogove_Date
-#include <borogove/Date.h>
-#endif
 #ifndef INCLUDED_borogove_EventEmitter
 #include <borogove/EventEmitter.h>
 #endif
@@ -37,6 +28,12 @@
 #ifndef INCLUDED_borogove_calls__Session_Session_Fields_
 #include <borogove/calls/_Session/Session_Fields_.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_d89d9de038d31b1d_54_mkCallMessage,"borogove.calls._Session.Session_Fields_","mkCallMessage",0x0fc9b2e9,"borogove.calls._Session.Session_Fields_.mkCallMessage","borogove/calls/Session.hx",54,0x33a79030)
 namespace borogove{
@@ -71,15 +68,21 @@ HXLINE(  60)		m->sender = m->from->asBare();
 HXLINE(  61)		m->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,m->sender);
 HXLINE(  62)		m->direction = 1;
 HXLINE(  63)		m->setBody(::borogove::Html_obj::text((HX_("call ",c2,71,1b,41) + event->name)));
-HXLINE(  64)		m->timestamp = ::borogove::Date_obj::format(::Date_obj::now());
-HXLINE(  65)		m->payloads->push(event);
-HXLINE(  66)		m->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
-HXLINE(  67)		if ((event->name != HX_("propose",fe,fe,e9,f9))) {
-HXLINE(  68)			m->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,m->build());
+HXLINE(  64)		m->payloads->push(event);
+HXLINE(  65)		m->localId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXLINE(  66)		if ((event->name != HX_("propose",fe,fe,e9,f9))) {
+HXLINE(  67)			m->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,m->build());
             		}
-HXLINE(  70)		m->localId = ( (::String)(::Reflect_obj::field(event->attr,HX_("id",db,5b,00,00))) );
+HXLINE(  69)		m->localId = event->attr->get_string(HX_("id",db,5b,00,00));
+HXLINE(  70)		::String lower = client->sortId;
 HXLINE(  71)		m->sortId = client->nextSortId();
-HXLINE(  72)		return m->build();
+HXLINE(  72)		m->debug =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("sortId",d9,7a,37,30), ::Dynamic(::hx::Anon_obj::Create(3)
+            				->setFixed(0,HX_("upper",62,19,3f,a8),null())
+            				->setFixed(1,HX_("method",e1,f6,5a,09),HX_("between",c8,91,b3,66))
+            				->setFixed(2,HX_("lower",01,fa,ff,78),lower)))
+            			->setFixed(1,HX_("source",db,b0,31,32),HX_("call",9e,18,ba,41)));
+HXLINE(  76)		return m->build();
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/persistence/Dummy.cpp b/Sources/c_borogove/src/borogove/persistence/Dummy.cpp
index 1a20cf8..0bd3b27 100644
--- a/Sources/c_borogove/src/borogove/persistence/Dummy.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/Dummy.cpp
@@ -13,6 +13,9 @@
 #ifndef INCLUDED_borogove_EventEmitter
 #include <borogove/EventEmitter.h>
 #endif
+#ifndef INCLUDED_borogove_Hash
+#include <borogove/Hash.h>
+#endif
 #ifndef INCLUDED_borogove_Member
 #include <borogove/Member.h>
 #endif
@@ -37,6 +40,9 @@
 #ifndef INCLUDED_thenshim__Promise_Promise_Impl_
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
+#ifndef INCLUDED_tink_streams_StreamObject
+#include <tink/streams/StreamObject.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_30_new,"borogove.persistence.Dummy","new",0x6443be1e,"borogove.persistence.Dummy.new","borogove/persistence/Dummy.hx",30,0x240ebe94)
 HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_34_syncPoint,"borogove.persistence.Dummy","syncPoint",0x55a2d033,"borogove.persistence.Dummy.syncPoint","borogove/persistence/Dummy.hx",34,0x240ebe94)
@@ -47,28 +53,31 @@ HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_52_storeMemberUpdates,"borogove.pe
 HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_57_clearMemberPresence,"borogove.persistence.Dummy","clearMemberPresence",0x022b66e0,"borogove.persistence.Dummy.clearMemberPresence","borogove/persistence/Dummy.hx",57,0x240ebe94)
 HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_62_getMembers,"borogove.persistence.Dummy","getMembers",0x18da18e5,"borogove.persistence.Dummy.getMembers","borogove/persistence/Dummy.hx",62,0x240ebe94)
 HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_67_getMemberDetails,"borogove.persistence.Dummy","getMemberDetails",0x38b2fe94,"borogove.persistence.Dummy.getMemberDetails","borogove/persistence/Dummy.hx",67,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_72_storeMessages,"borogove.persistence.Dummy","storeMessages",0xbccbb90b,"borogove.persistence.Dummy.storeMessages","borogove/persistence/Dummy.hx",72,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_76_updateMessage,"borogove.persistence.Dummy","updateMessage",0x388d61fc,"borogove.persistence.Dummy.updateMessage","borogove/persistence/Dummy.hx",76,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_81_getMessage,"borogove.persistence.Dummy","getMessage",0x987b21d3,"borogove.persistence.Dummy.getMessage","borogove/persistence/Dummy.hx",81,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_86_getMessagesBefore,"borogove.persistence.Dummy","getMessagesBefore",0x5f1a2fdf,"borogove.persistence.Dummy.getMessagesBefore","borogove/persistence/Dummy.hx",86,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_91_getMessagesAfter,"borogove.persistence.Dummy","getMessagesAfter",0xdd1516bc,"borogove.persistence.Dummy.getMessagesAfter","borogove/persistence/Dummy.hx",91,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_96_getMessagesAround,"borogove.persistence.Dummy","getMessagesAround",0x7aebd3ad,"borogove.persistence.Dummy.getMessagesAround","borogove/persistence/Dummy.hx",96,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_101_getChatsUnreadDetails,"borogove.persistence.Dummy","getChatsUnreadDetails",0x6c7f0a2c,"borogove.persistence.Dummy.getChatsUnreadDetails","borogove/persistence/Dummy.hx",101,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_106_storeReaction,"borogove.persistence.Dummy","storeReaction",0x7e82c7e8,"borogove.persistence.Dummy.storeReaction","borogove/persistence/Dummy.hx",106,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_111_updateMessageStatus,"borogove.persistence.Dummy","updateMessageStatus",0x6bfd624e,"borogove.persistence.Dummy.updateMessageStatus","borogove/persistence/Dummy.hx",111,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_116_hasMedia,"borogove.persistence.Dummy","hasMedia",0x1817d0ac,"borogove.persistence.Dummy.hasMedia","borogove/persistence/Dummy.hx",116,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_121_storeMedia,"borogove.persistence.Dummy","storeMedia",0xf2431745,"borogove.persistence.Dummy.storeMedia","borogove/persistence/Dummy.hx",121,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_126_removeMedia,"borogove.persistence.Dummy","removeMedia",0x7c40bdbe,"borogove.persistence.Dummy.removeMedia","borogove/persistence/Dummy.hx",126,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_130_storeCaps,"borogove.persistence.Dummy","storeCaps",0x5ae530e0,"borogove.persistence.Dummy.storeCaps","borogove/persistence/Dummy.hx",130,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_134_getCaps,"borogove.persistence.Dummy","getCaps",0xf9497095,"borogove.persistence.Dummy.getCaps","borogove/persistence/Dummy.hx",134,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_139_storeLogin,"borogove.persistence.Dummy","storeLogin",0x657aebca,"borogove.persistence.Dummy.storeLogin","borogove/persistence/Dummy.hx",139,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_144_getLogin,"borogove.persistence.Dummy","getLogin",0x5ece6a75,"borogove.persistence.Dummy.getLogin","borogove/persistence/Dummy.hx",144,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_149_removeAccount,"borogove.persistence.Dummy","removeAccount",0x4d222007,"borogove.persistence.Dummy.removeAccount","borogove/persistence/Dummy.hx",149,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_154_listAccounts,"borogove.persistence.Dummy","listAccounts",0xc457ec26,"borogove.persistence.Dummy.listAccounts","borogove/persistence/Dummy.hx",154,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_159_storeStreamManagement,"borogove.persistence.Dummy","storeStreamManagement",0x74dc5262,"borogove.persistence.Dummy.storeStreamManagement","borogove/persistence/Dummy.hx",159,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_164_getStreamManagement,"borogove.persistence.Dummy","getStreamManagement",0xc93bcd97,"borogove.persistence.Dummy.getStreamManagement","borogove/persistence/Dummy.hx",164,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_168_storeService,"borogove.persistence.Dummy","storeService",0x6c6648d6,"borogove.persistence.Dummy.storeService","borogove/persistence/Dummy.hx",168,0x240ebe94)
-HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_172_findServicesWithFeature,"borogove.persistence.Dummy","findServicesWithFeature",0x6b47cf57,"borogove.persistence.Dummy.findServicesWithFeature","borogove/persistence/Dummy.hx",172,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_72_storeVoiceRequest,"borogove.persistence.Dummy","storeVoiceRequest",0x3dcd477c,"borogove.persistence.Dummy.storeVoiceRequest","borogove/persistence/Dummy.hx",72,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_77_listVoiceRequests,"borogove.persistence.Dummy","listVoiceRequests",0x4e64f916,"borogove.persistence.Dummy.listVoiceRequests","borogove/persistence/Dummy.hx",77,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_82_storeMessages,"borogove.persistence.Dummy","storeMessages",0xbccbb90b,"borogove.persistence.Dummy.storeMessages","borogove/persistence/Dummy.hx",82,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_86_updateMessage,"borogove.persistence.Dummy","updateMessage",0x388d61fc,"borogove.persistence.Dummy.updateMessage","borogove/persistence/Dummy.hx",86,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_91_getMessage,"borogove.persistence.Dummy","getMessage",0x987b21d3,"borogove.persistence.Dummy.getMessage","borogove/persistence/Dummy.hx",91,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_96_getMessagesBefore,"borogove.persistence.Dummy","getMessagesBefore",0x5f1a2fdf,"borogove.persistence.Dummy.getMessagesBefore","borogove/persistence/Dummy.hx",96,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_101_getMessagesAfter,"borogove.persistence.Dummy","getMessagesAfter",0xdd1516bc,"borogove.persistence.Dummy.getMessagesAfter","borogove/persistence/Dummy.hx",101,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_106_getMessagesAround,"borogove.persistence.Dummy","getMessagesAround",0x7aebd3ad,"borogove.persistence.Dummy.getMessagesAround","borogove/persistence/Dummy.hx",106,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_111_getMessagesByStatus,"borogove.persistence.Dummy","getMessagesByStatus",0x7aa29fc9,"borogove.persistence.Dummy.getMessagesByStatus","borogove/persistence/Dummy.hx",111,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_116_getChatsUnreadDetails,"borogove.persistence.Dummy","getChatsUnreadDetails",0x6c7f0a2c,"borogove.persistence.Dummy.getChatsUnreadDetails","borogove/persistence/Dummy.hx",116,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_121_storeReaction,"borogove.persistence.Dummy","storeReaction",0x7e82c7e8,"borogove.persistence.Dummy.storeReaction","borogove/persistence/Dummy.hx",121,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_126_updateMessageStatus,"borogove.persistence.Dummy","updateMessageStatus",0x6bfd624e,"borogove.persistence.Dummy.updateMessageStatus","borogove/persistence/Dummy.hx",126,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_131_hasMedia,"borogove.persistence.Dummy","hasMedia",0x1817d0ac,"borogove.persistence.Dummy.hasMedia","borogove/persistence/Dummy.hx",131,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_136_storeMedia,"borogove.persistence.Dummy","storeMedia",0xf2431745,"borogove.persistence.Dummy.storeMedia","borogove/persistence/Dummy.hx",136,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_141_removeMedia,"borogove.persistence.Dummy","removeMedia",0x7c40bdbe,"borogove.persistence.Dummy.removeMedia","borogove/persistence/Dummy.hx",141,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_145_storeCaps,"borogove.persistence.Dummy","storeCaps",0x5ae530e0,"borogove.persistence.Dummy.storeCaps","borogove/persistence/Dummy.hx",145,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_149_getCaps,"borogove.persistence.Dummy","getCaps",0xf9497095,"borogove.persistence.Dummy.getCaps","borogove/persistence/Dummy.hx",149,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_154_storeLogin,"borogove.persistence.Dummy","storeLogin",0x657aebca,"borogove.persistence.Dummy.storeLogin","borogove/persistence/Dummy.hx",154,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_159_getLogin,"borogove.persistence.Dummy","getLogin",0x5ece6a75,"borogove.persistence.Dummy.getLogin","borogove/persistence/Dummy.hx",159,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_164_removeAccount,"borogove.persistence.Dummy","removeAccount",0x4d222007,"borogove.persistence.Dummy.removeAccount","borogove/persistence/Dummy.hx",164,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_169_listAccounts,"borogove.persistence.Dummy","listAccounts",0xc457ec26,"borogove.persistence.Dummy.listAccounts","borogove/persistence/Dummy.hx",169,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_174_storeStreamManagement,"borogove.persistence.Dummy","storeStreamManagement",0x74dc5262,"borogove.persistence.Dummy.storeStreamManagement","borogove/persistence/Dummy.hx",174,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_179_getStreamManagement,"borogove.persistence.Dummy","getStreamManagement",0xc93bcd97,"borogove.persistence.Dummy.getStreamManagement","borogove/persistence/Dummy.hx",179,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_183_storeService,"borogove.persistence.Dummy","storeService",0x6c6648d6,"borogove.persistence.Dummy.storeService","borogove/persistence/Dummy.hx",183,0x240ebe94)
+HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_187_findServicesWithFeature,"borogove.persistence.Dummy","findServicesWithFeature",0x6b47cf57,"borogove.persistence.Dummy.findServicesWithFeature","borogove/persistence/Dummy.hx",187,0x240ebe94)
 HX_LOCAL_STACK_FRAME(_hx_pos_95dfb57bb5df11b7_24_boot,"borogove.persistence.Dummy","boot",0x4f1b9cb4,"borogove.persistence.Dummy.boot","borogove/persistence/Dummy.hx",24,0x240ebe94)
 namespace borogove{
 namespace persistence{
@@ -101,6 +110,8 @@ static ::borogove::Persistence_obj _hx_borogove_persistence_Dummy__hx_borogove_P
 	( ::Dynamic (::hx::Object::*)(::String,::String))&::borogove::persistence::Dummy_obj::clearMemberPresence,
 	( ::Dynamic (::hx::Object::*)(::String, ::borogove::Chat,bool))&::borogove::persistence::Dummy_obj::getMembers,
 	( ::Dynamic (::hx::Object::*)(::String, ::borogove::Chat,::Array< ::String >))&::borogove::persistence::Dummy_obj::getMemberDetails,
+	( ::Dynamic (::hx::Object::*)(::String, ::borogove::Chat,::String,bool))&::borogove::persistence::Dummy_obj::storeVoiceRequest,
+	( ::Dynamic (::hx::Object::*)(::String, ::borogove::Chat))&::borogove::persistence::Dummy_obj::listVoiceRequests,
 	( ::Dynamic (::hx::Object::*)(::String,::Array< ::Dynamic>))&::borogove::persistence::Dummy_obj::getChatsUnreadDetails,
 	( ::Dynamic (::hx::Object::*)(::String, ::borogove::ReactionUpdate))&::borogove::persistence::Dummy_obj::storeReaction,
 	( ::Dynamic (::hx::Object::*)(::String,::Array< ::Dynamic>))&::borogove::persistence::Dummy_obj::storeMessages,
@@ -110,12 +121,13 @@ static ::borogove::Persistence_obj _hx_borogove_persistence_Dummy__hx_borogove_P
 	( ::Dynamic (::hx::Object::*)(::String,::String, ::borogove::ChatMessage))&::borogove::persistence::Dummy_obj::getMessagesBefore,
 	( ::Dynamic (::hx::Object::*)(::String,::String, ::borogove::ChatMessage))&::borogove::persistence::Dummy_obj::getMessagesAfter,
 	( ::Dynamic (::hx::Object::*)(::String, ::borogove::ChatMessage))&::borogove::persistence::Dummy_obj::getMessagesAround,
-	( ::Dynamic (::hx::Object::*)(::String,::Array< unsigned char >))&::borogove::persistence::Dummy_obj::hasMedia,
-	( ::Dynamic (::hx::Object::*)(::String,::Array< unsigned char >))&::borogove::persistence::Dummy_obj::storeMedia,
+	( ::Dynamic (::hx::Object::*)(::String,int))&::borogove::persistence::Dummy_obj::getMessagesByStatus,
+	( ::Dynamic (::hx::Object::*)( ::borogove::Hash))&::borogove::persistence::Dummy_obj::hasMedia,
+	( ::Dynamic (::hx::Object::*)(::String,::Dynamic))&::borogove::persistence::Dummy_obj::storeMedia,
 	( ::Dynamic (::hx::Object::*)(::String,::Array< unsigned char >))&::borogove::persistence::Dummy_obj::removeMedia,
 	( void (::hx::Object::*)( ::borogove::Caps))&::borogove::persistence::Dummy_obj::storeCaps,
 	( ::Dynamic (::hx::Object::*)(::String))&::borogove::persistence::Dummy_obj::getCaps,
-	( ::Dynamic (::hx::Object::*)(::String,::String,::String,::String))&::borogove::persistence::Dummy_obj::storeLogin,
+	( ::Dynamic (::hx::Object::*)(::String,::String,::String,::String,::String))&::borogove::persistence::Dummy_obj::storeLogin,
 	( ::Dynamic (::hx::Object::*)(::String))&::borogove::persistence::Dummy_obj::getLogin,
 	( ::Dynamic (::hx::Object::*)(::String,bool))&::borogove::persistence::Dummy_obj::removeAccount,
 	( ::Dynamic (::hx::Object::*)())&::borogove::persistence::Dummy_obj::listAccounts,
@@ -199,163 +211,188 @@ HXDLIN(  67)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_ob
 
 HX_DEFINE_DYNAMIC_FUNC3(Dummy_obj,getMemberDetails,return )
 
+::Dynamic Dummy_obj::storeVoiceRequest(::String accountId, ::borogove::Chat chat,::String jid,bool requesting){
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_72_storeVoiceRequest)
+HXDLIN(  72)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC4(Dummy_obj,storeVoiceRequest,return )
+
+::Dynamic Dummy_obj::listVoiceRequests(::String accountId, ::borogove::Chat chat){
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_77_listVoiceRequests)
+HXDLIN(  77)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Dummy_obj,listVoiceRequests,return )
+
 ::Dynamic Dummy_obj::storeMessages(::String accountId,::Array< ::Dynamic> messages){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_72_storeMessages)
-HXDLIN(  72)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_82_storeMessages)
+HXDLIN(  82)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Dummy_obj,storeMessages,return )
 
 void Dummy_obj::updateMessage(::String accountId, ::borogove::ChatMessage message){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_76_updateMessage)
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_86_updateMessage)
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Dummy_obj,updateMessage,(void))
 
 ::Dynamic Dummy_obj::getMessage(::String accountId,::String chatId,::String serverId,::String localId){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_81_getMessage)
-HXDLIN(  81)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_91_getMessage)
+HXDLIN(  91)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Dummy_obj,getMessage,return )
 
 ::Dynamic Dummy_obj::getMessagesBefore(::String accountId,::String chatId, ::borogove::ChatMessage before){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_86_getMessagesBefore)
-HXDLIN(  86)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_96_getMessagesBefore)
+HXDLIN(  96)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Dummy_obj,getMessagesBefore,return )
 
 ::Dynamic Dummy_obj::getMessagesAfter(::String accountId,::String chatId, ::borogove::ChatMessage after){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_91_getMessagesAfter)
-HXDLIN(  91)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_101_getMessagesAfter)
+HXDLIN( 101)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Dummy_obj,getMessagesAfter,return )
 
 ::Dynamic Dummy_obj::getMessagesAround(::String accountId, ::borogove::ChatMessage around){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_96_getMessagesAround)
-HXDLIN(  96)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_106_getMessagesAround)
+HXDLIN( 106)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Dummy_obj,getMessagesAround,return )
 
+::Dynamic Dummy_obj::getMessagesByStatus(::String accountId,int status){
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_111_getMessagesByStatus)
+HXDLIN( 111)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Dummy_obj,getMessagesByStatus,return )
+
 ::Dynamic Dummy_obj::getChatsUnreadDetails(::String accountId,::Array< ::Dynamic> chats){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_101_getChatsUnreadDetails)
-HXDLIN( 101)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_116_getChatsUnreadDetails)
+HXDLIN( 116)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Dummy_obj,getChatsUnreadDetails,return )
 
 ::Dynamic Dummy_obj::storeReaction(::String accountId, ::borogove::ReactionUpdate update){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_106_storeReaction)
-HXDLIN( 106)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_121_storeReaction)
+HXDLIN( 121)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Dummy_obj,storeReaction,return )
 
 ::Dynamic Dummy_obj::updateMessageStatus(::String accountId,::String localId,int status,::String statusText){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_111_updateMessageStatus)
-HXDLIN( 111)		return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("Dummy cannot updateMessageStatus",0b,f6,b0,c2));
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_126_updateMessageStatus)
+HXDLIN( 126)		return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("Dummy cannot updateMessageStatus",0b,f6,b0,c2));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Dummy_obj,updateMessageStatus,return )
 
-::Dynamic Dummy_obj::hasMedia(::String hashAlgorithm,::Array< unsigned char > hash){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_116_hasMedia)
-HXDLIN( 116)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
+::Dynamic Dummy_obj::hasMedia( ::borogove::Hash hash){
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_131_hasMedia)
+HXDLIN( 131)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC2(Dummy_obj,hasMedia,return )
+HX_DEFINE_DYNAMIC_FUNC1(Dummy_obj,hasMedia,return )
 
-::Dynamic Dummy_obj::storeMedia(::String mime,::Array< unsigned char > bd){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_121_storeMedia)
-HXDLIN( 121)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
+::Dynamic Dummy_obj::storeMedia(::String mime,::Dynamic source){
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_136_storeMedia)
+HXDLIN( 136)		return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("Dummy cannot storeMedia",28,ef,24,e4));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Dummy_obj,storeMedia,return )
 
 ::Dynamic Dummy_obj::removeMedia(::String hashAlgorithm,::Array< unsigned char > hash){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_126_removeMedia)
-HXDLIN( 126)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_141_removeMedia)
+HXDLIN( 141)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Dummy_obj,removeMedia,return )
 
 void Dummy_obj::storeCaps( ::borogove::Caps caps){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_130_storeCaps)
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_145_storeCaps)
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Dummy_obj,storeCaps,(void))
 
 ::Dynamic Dummy_obj::getCaps(::String ver){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_134_getCaps)
-HXDLIN( 134)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_149_getCaps)
+HXDLIN( 149)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Dummy_obj,getCaps,return )
 
-::Dynamic Dummy_obj::storeLogin(::String login,::String clientId,::String displayName,::String token){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_139_storeLogin)
-HXDLIN( 139)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
+::Dynamic Dummy_obj::storeLogin(::String login,::String clientId,::String displayName,::String rosterVer,::String token){
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_154_storeLogin)
+HXDLIN( 154)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC4(Dummy_obj,storeLogin,return )
+HX_DEFINE_DYNAMIC_FUNC5(Dummy_obj,storeLogin,return )
 
 ::Dynamic Dummy_obj::getLogin(::String login){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_144_getLogin)
-HXDLIN( 144)		return ::thenshim::_Promise::Promise_Impl__obj::resolve( ::Dynamic(::hx::Anon_obj::Create(4)
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_159_getLogin)
+HXDLIN( 159)		return ::thenshim::_Promise::Promise_Impl__obj::resolve( ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("fastCount",93,fc,67,a5),0)
             			->setFixed(1,HX_("token",f9,82,2b,14),null())
             			->setFixed(2,HX_("clientId",06,73,8f,15),null())
-            			->setFixed(3,HX_("displayName",ad,11,f2,30),null())));
+            			->setFixed(3,HX_("displayName",ad,11,f2,30),null())
+            			->setFixed(4,HX_("rosterVer",98,f5,fe,3e),null())));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Dummy_obj,getLogin,return )
 
 ::Dynamic Dummy_obj::removeAccount(::String accountId,bool completely){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_149_removeAccount)
-HXDLIN( 149)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_164_removeAccount)
+HXDLIN( 164)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Dummy_obj,removeAccount,return )
 
 ::Dynamic Dummy_obj::listAccounts(){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_154_listAccounts)
-HXDLIN( 154)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::String >::__new(0));
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_169_listAccounts)
+HXDLIN( 169)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::String >::__new(0));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Dummy_obj,listAccounts,return )
 
 ::Dynamic Dummy_obj::storeStreamManagement(::String accountId,::Array< unsigned char > sm,::String sortId){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_159_storeStreamManagement)
-HXDLIN( 159)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_174_storeStreamManagement)
+HXDLIN( 174)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(false);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Dummy_obj,storeStreamManagement,return )
 
 ::Dynamic Dummy_obj::getStreamManagement(::String accountId){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_164_getStreamManagement)
-HXDLIN( 164)		return ::thenshim::_Promise::Promise_Impl__obj::resolve( ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_179_getStreamManagement)
+HXDLIN( 179)		return ::thenshim::_Promise::Promise_Impl__obj::resolve( ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("sm",9a,64,00,00),null())
             			->setFixed(1,HX_("sortId",d9,7a,37,30),HX_("a ",9f,54,00,00))));
             	}
@@ -364,15 +401,15 @@ HXDLIN( 164)		return ::thenshim::_Promise::Promise_Impl__obj::resolve( ::Dynamic
 HX_DEFINE_DYNAMIC_FUNC1(Dummy_obj,getStreamManagement,return )
 
 void Dummy_obj::storeService(::String accountId,::String serviceId,::String name,::String node, ::borogove::Caps caps){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_168_storeService)
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_183_storeService)
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC5(Dummy_obj,storeService,(void))
 
 ::Dynamic Dummy_obj::findServicesWithFeature(::String accountId,::String feature){
-            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_172_findServicesWithFeature)
-HXDLIN( 172)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+            	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_187_findServicesWithFeature)
+HXDLIN( 187)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
             	}
 
 
@@ -437,6 +474,8 @@ Dummy_obj::Dummy_obj()
 		if (HX_FIELD_EQ(inName,"getMessagesAfter") ) { return ::hx::Val( getMessagesAfter_dyn() ); }
 		break;
 	case 17:
+		if (HX_FIELD_EQ(inName,"storeVoiceRequest") ) { return ::hx::Val( storeVoiceRequest_dyn() ); }
+		if (HX_FIELD_EQ(inName,"listVoiceRequests") ) { return ::hx::Val( listVoiceRequests_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getMessagesBefore") ) { return ::hx::Val( getMessagesBefore_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getMessagesAround") ) { return ::hx::Val( getMessagesAround_dyn() ); }
 		break;
@@ -445,6 +484,7 @@ Dummy_obj::Dummy_obj()
 		break;
 	case 19:
 		if (HX_FIELD_EQ(inName,"clearMemberPresence") ) { return ::hx::Val( clearMemberPresence_dyn() ); }
+		if (HX_FIELD_EQ(inName,"getMessagesByStatus") ) { return ::hx::Val( getMessagesByStatus_dyn() ); }
 		if (HX_FIELD_EQ(inName,"updateMessageStatus") ) { return ::hx::Val( updateMessageStatus_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getStreamManagement") ) { return ::hx::Val( getStreamManagement_dyn() ); }
 		break;
@@ -472,12 +512,15 @@ static ::String Dummy_obj_sMemberFields[] = {
 	HX_("clearMemberPresence",22,9d,db,a5),
 	HX_("getMembers",e3,b2,d1,69),
 	HX_("getMemberDetails",12,2b,2f,b3),
+	HX_("storeVoiceRequest",3e,09,f8,ef),
+	HX_("listVoiceRequests",d8,ba,8f,00),
 	HX_("storeMessages",cd,f1,bd,e9),
 	HX_("updateMessage",be,9a,7f,65),
 	HX_("getMessage",d1,bb,72,e9),
 	HX_("getMessagesBefore",a1,f1,44,11),
 	HX_("getMessagesAfter",3a,43,91,57),
 	HX_("getMessagesAround",6f,95,16,2d),
+	HX_("getMessagesByStatus",0b,d6,52,1e),
 	HX_("getChatsUnreadDetails",ee,d4,5a,85),
 	HX_("storeReaction",aa,00,75,ab),
 	HX_("updateMessageStatus",90,98,ad,0f),
@@ -526,7 +569,7 @@ void Dummy_obj::__boot()
 {
             	HX_STACKFRAME(&_hx_pos_95dfb57bb5df11b7_24_boot)
 HXDLIN(  24)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(30)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(33)
             				->setFixed(0,HX_("storeChats",fa,4a,32,83), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
             				->setFixed(1,HX_("getChatsUnreadDetails",ee,d4,5a,85), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -561,31 +604,37 @@ HXDLIN(  24)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
             				->setFixed(16,HX_("storeMessages",cd,f1,bd,e9), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(17,HX_("listAccounts",a4,81,e8,f5), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(17,HX_("storeVoiceRequest",3e,09,f8,ef), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(18,HX_("listAccounts",a4,81,e8,f5), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(19,HX_("listVoiceRequests",d8,ba,8f,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(20,HX_("removeMedia",00,e2,ef,03), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(18,HX_("removeMedia",00,e2,ef,03), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(21,HX_("updateMessageStatus",90,98,ad,0f), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(19,HX_("updateMessageStatus",90,98,ad,0f), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(22,HX_("getMessagesBefore",a1,f1,44,11), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(20,HX_("getMessagesBefore",a1,f1,44,11), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(23,HX_("getCaps",d7,cb,3c,14), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(21,HX_("getCaps",d7,cb,3c,14), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(24,HX_("getMessagesByStatus",0b,d6,52,1e), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(22,HX_("getMessagesAround",6f,95,16,2d), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(25,HX_("getMessagesAround",6f,95,16,2d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(23,HX_("storeMedia",43,b1,3a,43), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(26,HX_("storeMedia",43,b1,3a,43), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(24,HX_("findServicesWithFeature",99,4e,bd,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(27,HX_("findServicesWithFeature",99,4e,bd,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(25,HX_("getMessagesAfter",3a,43,91,57), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(28,HX_("getMessagesAfter",3a,43,91,57), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(26,HX_("updateMessage",be,9a,7f,65), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(29,HX_("updateMessage",be,9a,7f,65), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(27,HX_("getMembers",e3,b2,d1,69), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(30,HX_("getMembers",e3,b2,d1,69), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(28,HX_("getStreamManagement",d9,03,ec,6c), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(31,HX_("getStreamManagement",d9,03,ec,6c), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(29,HX_("removeAccount",c9,58,14,7a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(32,HX_("removeAccount",c9,58,14,7a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null()))))));
             	}
 }
diff --git a/Sources/c_borogove/src/borogove/persistence/MediaStore.cpp b/Sources/c_borogove/src/borogove/persistence/MediaStore.cpp
index 4965a52..ade067b 100644
--- a/Sources/c_borogove/src/borogove/persistence/MediaStore.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/MediaStore.cpp
@@ -1,6 +1,9 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
+#ifndef INCLUDED_borogove_Hash
+#include <borogove/Hash.h>
+#endif
 #ifndef INCLUDED_borogove_persistence_KeyValueStore
 #include <borogove/persistence/KeyValueStore.h>
 #endif
@@ -10,6 +13,9 @@
 #ifndef INCLUDED_thenshim_Thenable
 #include <thenshim/Thenable.h>
 #endif
+#ifndef INCLUDED_tink_streams_StreamObject
+#include <tink/streams/StreamObject.h>
+#endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_1afb41cf71539cf2_14_boot,"borogove.persistence.MediaStore","boot",0x109ff3e7,"borogove.persistence.MediaStore.boot","borogove/persistence/MediaStore.hx",14,0xf16bbcc3)
 namespace borogove{
diff --git a/Sources/c_borogove/src/borogove/persistence/MediaStoreFS.cpp b/Sources/c_borogove/src/borogove/persistence/MediaStoreFS.cpp
index ab70bff..9fe0074 100644
--- a/Sources/c_borogove/src/borogove/persistence/MediaStoreFS.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/MediaStoreFS.cpp
@@ -4,9 +4,15 @@
 #ifndef INCLUDED__HaxeCBridge_Internal
 #include <_HaxeCBridge/Internal.h>
 #endif
+#ifndef INCLUDED__UUIDv7_UUIDv7_Fields_
+#include <_UUIDv7/UUIDv7_Fields_.h>
+#endif
 #ifndef INCLUDED_borogove_Hash
 #include <borogove/Hash.h>
 #endif
+#ifndef INCLUDED_borogove_IncrementalHash
+#include <borogove/IncrementalHash.h>
+#endif
 #ifndef INCLUDED_borogove_persistence_KeyValueStore
 #include <borogove/persistence/KeyValueStore.h>
 #endif
@@ -25,12 +31,18 @@
 #ifndef INCLUDED_haxe_io_Bytes
 #include <haxe/io/Bytes.h>
 #endif
+#ifndef INCLUDED_haxe_io_Output
+#include <haxe/io/Output.h>
+#endif
 #ifndef INCLUDED_sys_FileSystem
 #include <sys/FileSystem.h>
 #endif
 #ifndef INCLUDED_sys_io_File
 #include <sys/io/File.h>
 #endif
+#ifndef INCLUDED_sys_io_FileOutput
+#include <sys/io/FileOutput.h>
+#endif
 #ifndef INCLUDED_thenshim_PromiseTools
 #include <thenshim/PromiseTools.h>
 #endif
@@ -40,26 +52,56 @@
 #ifndef INCLUDED_thenshim__Promise_Promise_Impl_
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
+#ifndef INCLUDED_tink_chunk_ChunkObject
+#include <tink/chunk/ChunkObject.h>
+#endif
+#ifndef INCLUDED_tink_core_LinkObject
+#include <tink/core/LinkObject.h>
+#endif
+#ifndef INCLUDED_tink_core__Future_FutureObject
+#include <tink/core/_Future/FutureObject.h>
+#endif
+#ifndef INCLUDED_tink_io_PipeResult
+#include <tink/io/PipeResult.h>
+#endif
+#ifndef INCLUDED_tink_io_SinkObject
+#include <tink/io/SinkObject.h>
+#endif
+#ifndef INCLUDED_tink_io__Sink_SinkYielding_Impl_
+#include <tink/io/_Sink/SinkYielding_Impl_.h>
+#endif
+#ifndef INCLUDED_tink_io__Source_Source_Impl_
+#include <tink/io/_Source/Source_Impl_.h>
+#endif
+#ifndef INCLUDED_tink_streams_StreamObject
+#include <tink/streams/StreamObject.h>
+#endif
+#ifndef INCLUDED_tink_streams__Stream_Mapping_Impl_
+#include <tink/streams/_Stream/Mapping_Impl_.h>
+#endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_62805e222ed8ef0e_18_new,"borogove.persistence.MediaStoreFS","new",0x45ebbe58,"borogove.persistence.MediaStoreFS.new","borogove/persistence/MediaStoreFS.hx",18,0xb4eb58d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_33_setKV,"borogove.persistence.MediaStoreFS","setKV",0x4818e5c5,"borogove.persistence.MediaStoreFS.setKV","borogove/persistence/MediaStoreFS.hx",33,0xb4eb58d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_42_getMediaPath,"borogove.persistence.MediaStoreFS","getMediaPath",0xc292883b,"borogove.persistence.MediaStoreFS.getMediaPath","borogove/persistence/MediaStoreFS.hx",42,0xb4eb58d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_52_getMediaPath,"borogove.persistence.MediaStoreFS","getMediaPath",0xc292883b,"borogove.persistence.MediaStoreFS.getMediaPath","borogove/persistence/MediaStoreFS.hx",52,0xb4eb58d6)
+HX_DEFINE_STACK_FRAME(_hx_pos_62805e222ed8ef0e_20_new,"borogove.persistence.MediaStoreFS","new",0x45ebbe58,"borogove.persistence.MediaStoreFS.new","borogove/persistence/MediaStoreFS.hx",20,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_35_setKV,"borogove.persistence.MediaStoreFS","setKV",0x4818e5c5,"borogove.persistence.MediaStoreFS.setKV","borogove/persistence/MediaStoreFS.hx",35,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_44_getMediaPath,"borogove.persistence.MediaStoreFS","getMediaPath",0xc292883b,"borogove.persistence.MediaStoreFS.getMediaPath","borogove/persistence/MediaStoreFS.hx",44,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_54_getMediaPath,"borogove.persistence.MediaStoreFS","getMediaPath",0xc292883b,"borogove.persistence.MediaStoreFS.getMediaPath","borogove/persistence/MediaStoreFS.hx",54,0xb4eb58d6)
 HX_LOCAL_STACK_FRAME(_hx_pos_959a077022e6b8e5_365_getMediaPath__fromC,"borogove.persistence.MediaStoreFS","getMediaPath__fromC",0xffdb359e,"borogove.persistence.MediaStoreFS.getMediaPath__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_66_hasMedia,"borogove.persistence.MediaStoreFS","hasMedia",0x6622be32,"borogove.persistence.MediaStoreFS.hasMedia","borogove/persistence/MediaStoreFS.hx",66,0xb4eb58d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_72_removeMedia,"borogove.persistence.MediaStoreFS","removeMedia",0x109a87f8,"borogove.persistence.MediaStoreFS.removeMedia","borogove/persistence/MediaStoreFS.hx",72,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_67_hasMedia,"borogove.persistence.MediaStoreFS","hasMedia",0x6622be32,"borogove.persistence.MediaStoreFS.hasMedia","borogove/persistence/MediaStoreFS.hx",67,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_73_removeMedia,"borogove.persistence.MediaStoreFS","removeMedia",0x109a87f8,"borogove.persistence.MediaStoreFS.removeMedia","borogove/persistence/MediaStoreFS.hx",73,0xb4eb58d6)
 HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_87_storeMedia,"borogove.persistence.MediaStoreFS","storeMedia",0x0b08f24b,"borogove.persistence.MediaStoreFS.storeMedia","borogove/persistence/MediaStoreFS.hx",87,0xb4eb58d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_79_storeMedia,"borogove.persistence.MediaStoreFS","storeMedia",0x0b08f24b,"borogove.persistence.MediaStoreFS.storeMedia","borogove/persistence/MediaStoreFS.hx",79,0xb4eb58d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_90_set,"borogove.persistence.MediaStoreFS","set",0x45ef899a,"borogove.persistence.MediaStoreFS.set","borogove/persistence/MediaStoreFS.hx",90,0xb4eb58d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_96_get,"borogove.persistence.MediaStoreFS","get",0x45e66e8e,"borogove.persistence.MediaStoreFS.get","borogove/persistence/MediaStoreFS.hx",96,0xb4eb58d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_18_boot,"borogove.persistence.MediaStoreFS","boot",0xe073cf3a,"borogove.persistence.MediaStoreFS.boot","borogove/persistence/MediaStoreFS.hx",18,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_91_storeMedia,"borogove.persistence.MediaStoreFS","storeMedia",0x0b08f24b,"borogove.persistence.MediaStoreFS.storeMedia","borogove/persistence/MediaStoreFS.hx",91,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_105_storeMedia,"borogove.persistence.MediaStoreFS","storeMedia",0x0b08f24b,"borogove.persistence.MediaStoreFS.storeMedia","borogove/persistence/MediaStoreFS.hx",105,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_97_storeMedia,"borogove.persistence.MediaStoreFS","storeMedia",0x0b08f24b,"borogove.persistence.MediaStoreFS.storeMedia","borogove/persistence/MediaStoreFS.hx",97,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_80_storeMedia,"borogove.persistence.MediaStoreFS","storeMedia",0x0b08f24b,"borogove.persistence.MediaStoreFS.storeMedia","borogove/persistence/MediaStoreFS.hx",80,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_109_set,"borogove.persistence.MediaStoreFS","set",0x45ef899a,"borogove.persistence.MediaStoreFS.set","borogove/persistence/MediaStoreFS.hx",109,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_115_get,"borogove.persistence.MediaStoreFS","get",0x45e66e8e,"borogove.persistence.MediaStoreFS.get","borogove/persistence/MediaStoreFS.hx",115,0xb4eb58d6)
+HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_20_boot,"borogove.persistence.MediaStoreFS","boot",0xe073cf3a,"borogove.persistence.MediaStoreFS.boot","borogove/persistence/MediaStoreFS.hx",20,0xb4eb58d6)
 namespace borogove{
 namespace persistence{
 
 void MediaStoreFS_obj::__construct(::String path){
-            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_18_new)
-HXLINE(  20)		this->kv = null();
-HXLINE(  28)		this->blobpath = path;
+            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_20_new)
+HXLINE(  22)		this->kv = null();
+HXLINE(  30)		this->blobpath = path;
             	}
 
 Dynamic MediaStoreFS_obj::__CreateEmpty() { return new MediaStoreFS_obj; }
@@ -78,9 +120,9 @@ bool MediaStoreFS_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 static ::borogove::persistence::MediaStore_obj _hx_borogove_persistence_MediaStoreFS__hx_borogove_persistence_MediaStore= {
-	( ::Dynamic (::hx::Object::*)(::String,::Array< unsigned char >))&::borogove::persistence::MediaStoreFS_obj::hasMedia,
+	( ::Dynamic (::hx::Object::*)( ::borogove::Hash))&::borogove::persistence::MediaStoreFS_obj::hasMedia,
 	( ::Dynamic (::hx::Object::*)(::String,::Array< unsigned char >))&::borogove::persistence::MediaStoreFS_obj::removeMedia,
-	( ::Dynamic (::hx::Object::*)(::String,::Array< unsigned char >))&::borogove::persistence::MediaStoreFS_obj::storeMedia,
+	( ::Dynamic (::hx::Object::*)(::String,::Dynamic))&::borogove::persistence::MediaStoreFS_obj::storeMedia,
 	( void (::hx::Object::*)(::Dynamic))&::borogove::persistence::MediaStoreFS_obj::setKV,
 };
 
@@ -96,52 +138,52 @@ void *MediaStoreFS_obj::_hx_getInterface(int inHash) {
 }
 
 void MediaStoreFS_obj::setKV(::Dynamic kv){
-            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_33_setKV)
-HXDLIN(  33)		this->kv = kv;
+            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_35_setKV)
+HXDLIN(  35)		this->kv = kv;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(MediaStoreFS_obj,setKV,(void))
 
 ::Dynamic MediaStoreFS_obj::getMediaPath(::String uri){
-            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_42_getMediaPath)
-HXDLIN(  42)		 ::borogove::persistence::MediaStoreFS _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  43)		 ::borogove::Hash hash = ::borogove::Hash_obj::fromUri(uri);
-HXLINE(  44)		if ((hash->algorithm == HX_("sha-256",32,dd,04,3b))) {
-HXLINE(  45)			::String path = (this->blobpath + HX_("/f",57,29,00,00));
-HXDLIN(  45)			::String path1 = (path + hash->toHex());
-HXLINE(  46)			if (::sys::FileSystem_obj::exists(path1)) {
-HXLINE(  47)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(::sys::FileSystem_obj::absolutePath(path1));
+            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_44_getMediaPath)
+HXDLIN(  44)		 ::borogove::persistence::MediaStoreFS _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  45)		 ::borogove::Hash hash = ::borogove::Hash_obj::fromUri(uri);
+HXLINE(  46)		if ((hash->algorithm == HX_("sha-256",32,dd,04,3b))) {
+HXLINE(  47)			::String path = (this->blobpath + HX_("/f",57,29,00,00));
+HXDLIN(  47)			::String path1 = (path + hash->toHex());
+HXLINE(  48)			if (::sys::FileSystem_obj::exists(path1)) {
+HXLINE(  49)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(::sys::FileSystem_obj::absolutePath(path1));
             			}
             			else {
-HXLINE(  49)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE(  51)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             			}
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::MediaStoreFS,_gthis) HXARGC(1)
             			::Dynamic _hx_run(::String sha256uri){
-            				HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_52_getMediaPath)
-HXLINE(  53)				 ::borogove::Hash sha256;
-HXDLIN(  53)				if (::hx::IsNull( sha256uri )) {
-HXLINE(  53)					sha256 = null();
+            				HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_54_getMediaPath)
+HXLINE(  55)				 ::borogove::Hash sha256;
+HXDLIN(  55)				if (::hx::IsNull( sha256uri )) {
+HXLINE(  55)					sha256 = null();
             				}
             				else {
-HXLINE(  53)					sha256 = ::borogove::Hash_obj::fromUri(sha256uri);
+HXLINE(  55)					sha256 = ::borogove::Hash_obj::fromUri(sha256uri);
             				}
-HXLINE(  54)				if (::hx::IsNull( sha256 )) {
-HXLINE(  55)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE(  56)				if (::hx::IsNull( sha256 )) {
+HXLINE(  57)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				else {
-HXLINE(  57)					 ::borogove::persistence::MediaStoreFS _gthis1 = _gthis;
-HXDLIN(  57)					return _gthis1->getMediaPath(sha256->toUri());
+HXLINE(  59)					 ::borogove::persistence::MediaStoreFS _gthis1 = _gthis;
+HXDLIN(  59)					return _gthis1->getMediaPath(sha256->toUri());
             				}
-HXLINE(  54)				return null();
+HXLINE(  56)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(  52)			return ::thenshim::_Promise::Promise_Impl__obj::then(this->get(hash->serializeUri()), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+HXLINE(  54)			return ::thenshim::_Promise::Promise_Impl__obj::then(this->get(hash->serializeUri()), ::Dynamic(new _hx_Closure_0(_gthis)),null());
             		}
-HXLINE(  44)		return null();
+HXLINE(  46)		return null();
             	}
 
 
@@ -187,78 +229,120 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMediaPath(
             	}
 
 
-::Dynamic MediaStoreFS_obj::hasMedia(::String hashAlgorithm,::Array< unsigned char > hash){
-            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
-            		bool _hx_run(::String path){
-            			HX_GC_STACKFRAME(&_hx_pos_62805e222ed8ef0e_66_hasMedia)
-HXDLIN(  66)			return ::hx::IsNotNull( path );
-            		}
-            		HX_END_LOCAL_FUNC1(return)
-
-            	HX_GC_STACKFRAME(&_hx_pos_62805e222ed8ef0e_66_hasMedia)
-HXDLIN(  66)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->getMediaPath( ::borogove::Hash_obj::__alloc( HX_CTX ,hashAlgorithm,hash)->toUri()), ::Dynamic(new _hx_Closure_0()),null());
+::Dynamic MediaStoreFS_obj::hasMedia( ::borogove::Hash hash){
+            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_67_hasMedia)
+HXDLIN(  67)		return this->getMediaPath(hash->toUri());
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC2(MediaStoreFS_obj,hasMedia,return )
+HX_DEFINE_DYNAMIC_FUNC1(MediaStoreFS_obj,hasMedia,return )
 
 ::Dynamic MediaStoreFS_obj::removeMedia(::String hashAlgorithm,::Array< unsigned char > hash){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run(::String path){
-            			HX_GC_STACKFRAME(&_hx_pos_62805e222ed8ef0e_72_removeMedia)
-HXLINE(  73)			if (::hx::IsNotNull( path )) {
-HXLINE(  73)				::sys::FileSystem_obj::deleteFile(path);
+            			HX_GC_STACKFRAME(&_hx_pos_62805e222ed8ef0e_73_removeMedia)
+HXLINE(  74)			if (::hx::IsNotNull( path )) {
+HXLINE(  74)				::sys::FileSystem_obj::deleteFile(path);
             			}
-HXLINE(  74)			return true;
+HXLINE(  75)			return true;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_62805e222ed8ef0e_72_removeMedia)
-HXDLIN(  72)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->getMediaPath( ::borogove::Hash_obj::__alloc( HX_CTX ,hashAlgorithm,hash)->toUri()), ::Dynamic(new _hx_Closure_0()),null());
+            	HX_GC_STACKFRAME(&_hx_pos_62805e222ed8ef0e_73_removeMedia)
+HXDLIN(  73)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->getMediaPath( ::borogove::Hash_obj::__alloc( HX_CTX ,hashAlgorithm,hash)->toUri()), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(MediaStoreFS_obj,removeMedia,return )
 
-::Dynamic MediaStoreFS_obj::storeMedia(::String mime,::Array< unsigned char > bd){
-            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
-            		bool _hx_run(::Array< bool > _){
+::Dynamic MediaStoreFS_obj::storeMedia(::String mime,::Dynamic source){
+            		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_2,::Dynamic,source, ::borogove::IncrementalHash,sha1, ::borogove::IncrementalHash,sha256, ::sys::io::FileOutput,tmpFile) HXARGC(2)
+            		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::IncrementalHash,sha1, ::borogove::IncrementalHash,sha256) HXARGC(1)
+            			::Dynamic _hx_run(::Dynamic chunk){
+            				HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_87_storeMedia)
+HXLINE(  88)				 ::borogove::IncrementalHash sha11 = sha1;
+HXDLIN(  88)				sha11->update(::tink::chunk::ChunkObject_obj::toBytes(chunk)->b);
+HXLINE(  89)				 ::borogove::IncrementalHash sha2561 = sha256;
+HXDLIN(  89)				sha2561->update(::tink::chunk::ChunkObject_obj::toBytes(chunk)->b);
+HXLINE(  90)				return chunk;
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+            			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,resolve, ::Dynamic,reject, ::sys::io::FileOutput,tmpFile) HXARGC(1)
+            			void _hx_run( ::tink::io::PipeResult o){
+            				HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_91_storeMedia)
+HXLINE(  91)				if ((o->_hx_getIndex() == 0)) {
+HXLINE(  93)					tmpFile->close();
+HXLINE(  94)					resolve(null());
+            				}
+            				else {
+HXLINE(  95)					reject(o);
+            				}
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
             			HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_87_storeMedia)
-HXLINE(  87)			return true;
+HXLINE(  87)			::Dynamic this1 = ::tink::io::_Source::Source_Impl__obj::chunked(source);
+HXDLIN(  87)			::Dynamic this2 = ::tink::streams::StreamObject_obj::map(this1,::tink::streams::_Stream::Mapping_Impl__obj::ofPlain( ::Dynamic(new _hx_Closure_0(sha1,sha256))));
+HXDLIN(  87)			::tink::io::_Source::Source_Impl__obj::pipeTo(this2,::tink::io::_Sink::SinkYielding_Impl__obj::ofOutput(HX_("tmpPath",1c,2e,ac,1e),tmpFile,null()),null())->handle( ::Dynamic(new _hx_Closure_1(resolve,reject,tmpFile)));
+            		}
+            		HX_END_LOCAL_FUNC2((void))
+
+            		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_4,::String,tmpPath1, ::borogove::persistence::MediaStoreFS,_gthis,::String,mime, ::borogove::IncrementalHash,sha1, ::borogove::IncrementalHash,sha256) HXARGC(1)
+            		::Dynamic _hx_run( ::Dynamic _){
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3,::String,path1) HXARGC(1)
+            			::String _hx_run(::Array< bool > _){
+            				HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_105_storeMedia)
+HXLINE( 105)				return path1;
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+            			HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_97_storeMedia)
+HXLINE(  98)			 ::borogove::Hash sha1h = sha1->digest();
+HXLINE(  99)			 ::borogove::Hash sha256h = sha256->digest();
+HXLINE( 100)			::String path = (_gthis->blobpath + HX_("/f",57,29,00,00));
+HXDLIN( 100)			::String path1 = (path + sha256h->toHex());
+HXLINE( 101)			::sys::FileSystem_obj::rename(tmpPath1,path1);
+HXLINE( 103)			 ::borogove::persistence::MediaStoreFS _gthis1 = _gthis;
+HXDLIN( 103)			::String _hx_tmp = sha1h->serializeUri();
+HXDLIN( 103)			::Dynamic _hx_tmp1 = _gthis1->set(_hx_tmp,sha256h->serializeUri());
+HXLINE( 104)			 ::borogove::persistence::MediaStoreFS _gthis2 = _gthis;
+HXDLIN( 104)			::String _hx_tmp2 = (sha256h->serializeUri() + HX_("#contentType",50,39,a7,27));
+HXLINE( 102)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(::Array_obj< ::Dynamic>::__new(2)->init(0,_hx_tmp1)->init(1,_gthis2->set(_hx_tmp2,mime))), ::Dynamic(new _hx_Closure_3(path1)),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_79_storeMedia)
-HXLINE(  80)		 ::haxe::io::Bytes bytes = ::haxe::io::Bytes_obj::ofData(bd);
-HXLINE(  81)		 ::borogove::Hash sha1 = ::borogove::Hash_obj::sha1(bytes);
-HXLINE(  82)		 ::borogove::Hash sha256 = ::borogove::Hash_obj::sha256(bytes);
-HXLINE(  83)		::String _hx_tmp = (this->blobpath + HX_("/f",57,29,00,00));
-HXDLIN(  83)		::sys::io::File_obj::saveBytes((_hx_tmp + sha256->toHex()),bytes);
-HXLINE(  85)		::String _hx_tmp1 = sha1->serializeUri();
-HXDLIN(  85)		::Dynamic _hx_tmp2 = this->set(_hx_tmp1,sha256->serializeUri());
-HXLINE(  84)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(::Array_obj< ::Dynamic>::__new(2)->init(0,_hx_tmp2)->init(1,this->set((sha256->serializeUri() + HX_("#contentType",50,39,a7,27)),mime))), ::Dynamic(new _hx_Closure_0()),null());
+            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_80_storeMedia)
+HXDLIN(  80)		 ::borogove::persistence::MediaStoreFS _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  81)		 ::borogove::IncrementalHash sha1 = ::borogove::Hash_obj::sha1incr();
+HXLINE(  82)		 ::borogove::IncrementalHash sha256 = ::borogove::Hash_obj::sha256incr();
+HXLINE(  83)		::String tmpPath = (this->blobpath + HX_("/tmp",08,6c,69,1f));
+HXDLIN(  83)		::String tmpPath1 = (tmpPath + ::_UUIDv7::UUIDv7_Fields__obj::uuidv7());
+HXLINE(  84)		 ::sys::io::FileOutput tmpFile = ::sys::io::File_obj::write(tmpPath1,null());
+HXLINE(  86)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(source,sha1,sha256,tmpFile))), ::Dynamic(new _hx_Closure_4(tmpPath1,_gthis,mime,sha1,sha256)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(MediaStoreFS_obj,storeMedia,return )
 
 ::Dynamic MediaStoreFS_obj::set(::String k,::String v){
-            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_90_set)
-HXLINE(  91)		if (::hx::IsNull( this->kv )) {
-HXLINE(  91)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_109_set)
+HXLINE( 110)		if (::hx::IsNull( this->kv )) {
+HXLINE( 110)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
-HXLINE(  93)		return ::borogove::persistence::KeyValueStore_obj::set(this->kv,k,v);
+HXLINE( 112)		return ::borogove::persistence::KeyValueStore_obj::set(this->kv,k,v);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(MediaStoreFS_obj,set,return )
 
 ::Dynamic MediaStoreFS_obj::get(::String k){
-            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_96_get)
-HXLINE(  97)		if (::hx::IsNull( this->kv )) {
-HXLINE(  97)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_115_get)
+HXLINE( 116)		if (::hx::IsNull( this->kv )) {
+HXLINE( 116)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
-HXLINE(  99)		return ::borogove::persistence::KeyValueStore_obj::get(this->kv,k);
+HXLINE( 118)		return ::borogove::persistence::KeyValueStore_obj::get(this->kv,k);
             	}
 
 
@@ -393,8 +477,8 @@ void MediaStoreFS_obj::__register()
 void MediaStoreFS_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_18_boot)
-HXDLIN(  18)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_62805e222ed8ef0e_20_boot)
+HXDLIN(  20)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(5)
             				->setFixed(0,HX_("hasMedia",2a,4f,14,92), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
diff --git a/Sources/c_borogove/src/borogove/persistence/MediaStore__Companion.cpp b/Sources/c_borogove/src/borogove/persistence/MediaStore__Companion.cpp
index 605a300..9ad1d69 100644
--- a/Sources/c_borogove/src/borogove/persistence/MediaStore__Companion.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/MediaStore__Companion.cpp
@@ -1,18 +1,33 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
+#ifndef INCLUDED__HaxeCBridge_Internal
+#include <_HaxeCBridge/Internal.h>
+#endif
+#ifndef INCLUDED_borogove_Hash
+#include <borogove/Hash.h>
+#endif
 #ifndef INCLUDED_borogove_persistence_MediaStore
 #include <borogove/persistence/MediaStore.h>
 #endif
 #ifndef INCLUDED_borogove_persistence_MediaStore__Companion
 #include <borogove/persistence/MediaStore__Companion.h>
 #endif
+#ifndef INCLUDED_cpp_Int64Map
+#include <cpp/Int64Map.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
 #ifndef INCLUDED_thenshim_Thenable
 #include <thenshim/Thenable.h>
 #endif
 #ifndef INCLUDED_thenshim__Promise_Promise_Impl_
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
+#ifndef INCLUDED_tink_streams_StreamObject
+#include <tink/streams/StreamObject.h>
+#endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_c575748a802f6ed4_365_hasMedia__fromC,"borogove.persistence.MediaStore__Companion","hasMedia__fromC",0x97101834,"borogove.persistence.MediaStore__Companion.hasMedia__fromC","HaxeCBridge.hx",365,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_c575748a802f6ed4_365_removeMedia__fromC,"borogove.persistence.MediaStore__Companion","removeMedia__fromC",0x96ebc5f4,"borogove.persistence.MediaStore__Companion.removeMedia__fromC","HaxeCBridge.hx",365,0xa18550d8)
@@ -38,49 +53,42 @@ bool MediaStore__Companion_obj::_hx_isInstanceOf(int inClassId) {
 	return inClassId==(int)0x00000001 || inClassId==(int)0x7855aec5;
 }
 
-void MediaStore__Companion_obj::hasMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context){
+void MediaStore__Companion_obj::hasMedia__fromC(::Dynamic self, ::borogove::Hash hash,::cpp::Function< void  (const char*,void*) > handler,void* handler__context){
             	HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_365_hasMedia__fromC)
 HXDLIN( 365)		if (::hx::IsNull( handler )) {
-HXLINE( 302)			::Array< unsigned char > _hx_tmp;
-HXDLIN( 302)			if (::hx::IsNull( hash )) {
-HXLINE( 302)				_hx_tmp = ::Array_obj< unsigned char >::__new(0);
-            			}
-            			else {
-HXLINE( 302)				::cpp::Pointer< unsigned char > _this = hash->reinterpret();
-HXDLIN( 302)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
-HXDLIN( 302)				::cpp::Pointer< unsigned char > tmp = _this;
-HXDLIN( 302)				result->setUnmanagedData(tmp,( (int)(hash__len) ));
-HXDLIN( 302)				_hx_tmp = result->copy();
-            			}
-HXLINE( 365)			::borogove::persistence::MediaStore_obj::hasMedia(self,hashAlgorithm,_hx_tmp);
+HXDLIN( 365)			::borogove::persistence::MediaStore_obj::hasMedia(self,hash);
             		}
             		else {
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
-            			void _hx_run(bool v){
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::String v){
             				HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_365_hasMedia__fromC)
-HXDLIN( 365)				handler(v,handler__context);
+HXDLIN( 365)				::cpp::Function< void  (const char*,void*) > handler1 = handler;
+HXLINE( 332)				const char* cStrPtr = v.utf8_str();
+HXDLIN( 332)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 332)				{
+HXLINE( 332)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 332)					if (::hx::IsNull( store )) {
+HXLINE( 332)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),v));
+HXDLIN( 332)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            					}
+            					else {
+HXLINE( 332)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 365)				handler1(cStrPtr,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
             				HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_365_hasMedia__fromC)
-HXDLIN( 365)				handler(false,handler__context);
+HXDLIN( 365)				handler(null(),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 302)			::Array< unsigned char > _hx_tmp1;
-HXDLIN( 302)			if (::hx::IsNull( hash )) {
-HXLINE( 302)				_hx_tmp1 = ::Array_obj< unsigned char >::__new(0);
-            			}
-            			else {
-HXLINE( 302)				::cpp::Pointer< unsigned char > _this1 = hash->reinterpret();
-HXDLIN( 302)				::Array< unsigned char > result1 = ::Array_obj< unsigned char >::__new();
-HXDLIN( 302)				::cpp::Pointer< unsigned char > tmp1 = _this1;
-HXDLIN( 302)				result1->setUnmanagedData(tmp1,( (int)(hash__len) ));
-HXDLIN( 302)				_hx_tmp1 = result1->copy();
-            			}
-HXLINE( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::persistence::MediaStore_obj::hasMedia(self,hashAlgorithm,_hx_tmp1), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::persistence::MediaStore_obj::hasMedia(self,hash), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
@@ -132,49 +140,42 @@ HXLINE( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::persist
             	}
 
 
-void MediaStore__Companion_obj::storeMedia__fromC(::Dynamic self,::String mime,::cpp::Pointer< unsigned char > bytes,size_t bytes__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context){
+void MediaStore__Companion_obj::storeMedia__fromC(::Dynamic self,::String mime,::Dynamic source,::cpp::Function< void  (const char*,void*) > handler,void* handler__context){
             	HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_365_storeMedia__fromC)
 HXDLIN( 365)		if (::hx::IsNull( handler )) {
-HXLINE( 302)			::Array< unsigned char > _hx_tmp;
-HXDLIN( 302)			if (::hx::IsNull( bytes )) {
-HXLINE( 302)				_hx_tmp = ::Array_obj< unsigned char >::__new(0);
-            			}
-            			else {
-HXLINE( 302)				::cpp::Pointer< unsigned char > _this = bytes->reinterpret();
-HXDLIN( 302)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
-HXDLIN( 302)				::cpp::Pointer< unsigned char > tmp = _this;
-HXDLIN( 302)				result->setUnmanagedData(tmp,( (int)(bytes__len) ));
-HXDLIN( 302)				_hx_tmp = result->copy();
-            			}
-HXLINE( 365)			::borogove::persistence::MediaStore_obj::storeMedia(self,mime,_hx_tmp);
+HXDLIN( 365)			::borogove::persistence::MediaStore_obj::storeMedia(self,mime,source);
             		}
             		else {
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
-            			void _hx_run(bool v){
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::String v){
             				HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_365_storeMedia__fromC)
-HXDLIN( 365)				handler(v,handler__context);
+HXDLIN( 365)				::cpp::Function< void  (const char*,void*) > handler1 = handler;
+HXLINE( 332)				const char* cStrPtr = v.utf8_str();
+HXDLIN( 332)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 332)				{
+HXLINE( 332)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 332)					if (::hx::IsNull( store )) {
+HXLINE( 332)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),v));
+HXDLIN( 332)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            					}
+            					else {
+HXLINE( 332)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 365)				handler1(cStrPtr,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
             				HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_365_storeMedia__fromC)
-HXDLIN( 365)				handler(false,handler__context);
+HXDLIN( 365)				handler(null(),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 302)			::Array< unsigned char > _hx_tmp1;
-HXDLIN( 302)			if (::hx::IsNull( bytes )) {
-HXLINE( 302)				_hx_tmp1 = ::Array_obj< unsigned char >::__new(0);
-            			}
-            			else {
-HXLINE( 302)				::cpp::Pointer< unsigned char > _this1 = bytes->reinterpret();
-HXDLIN( 302)				::Array< unsigned char > result1 = ::Array_obj< unsigned char >::__new();
-HXDLIN( 302)				::cpp::Pointer< unsigned char > tmp1 = _this1;
-HXDLIN( 302)				result1->setUnmanagedData(tmp1,( (int)(bytes__len) ));
-HXDLIN( 302)				_hx_tmp1 = result1->copy();
-            			}
-HXLINE( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::persistence::MediaStore_obj::storeMedia(self,mime,_hx_tmp1), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::persistence::MediaStore_obj::storeMedia(self,mime,source), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
diff --git a/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp b/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp
index 6f4e526..e422bca 100644
--- a/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp
@@ -49,15 +49,24 @@
 #ifndef INCLUDED_borogove_Chat
 #include <borogove/Chat.h>
 #endif
+#ifndef INCLUDED_borogove_ChatAttachment
+#include <borogove/ChatAttachment.h>
+#endif
 #ifndef INCLUDED_borogove_ChatMessage
 #include <borogove/ChatMessage.h>
 #endif
 #ifndef INCLUDED_borogove_ChatMessageBuilder
 #include <borogove/ChatMessageBuilder.h>
 #endif
+#ifndef INCLUDED_borogove_ChatMessageCombiner
+#include <borogove/ChatMessageCombiner.h>
+#endif
 #ifndef INCLUDED_borogove_CustomEmojiReaction
 #include <borogove/CustomEmojiReaction.h>
 #endif
+#ifndef INCLUDED_borogove_EncryptionInfo
+#include <borogove/EncryptionInfo.h>
+#endif
 #ifndef INCLUDED_borogove_EventEmitter
 #include <borogove/EventEmitter.h>
 #endif
@@ -154,336 +163,418 @@
 #ifndef INCLUDED_thenshim__Promise_Promise_Impl_
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
+#ifndef INCLUDED_tink_streams_StreamObject
+#include <tink/streams/StreamObject.h>
+#endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_87_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",87,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_95_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",95,0x605e3eb4)
 static const ::String _hx_array_data_99390348_2[] = {
 	HX_("CREATE TABLE messages (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tmam_id TEXT NOT NULL,\n\t\t\t\t\t\t\tmam_by TEXT NOT NULL,\n\t\t\t\t\t\t\tstanza_id TEXT NOT NULL,\n\t\t\t\t\t\t\tcorrection_id TEXT NOT NULL,\n\t\t\t\t\t\t\tsync_point INTEGER NOT NULL,\n\t\t\t\t\t\t\tchat_id TEXT NOT NULL,\n\t\t\t\t\t\t\tsender_id TEXT NOT NULL,\n\t\t\t\t\t\t\tcreated_at INTEGER NOT NULL,\n\t\t\t\t\t\t\tstatus INTEGER NOT NULL,\n\t\t\t\t\t\t\tdirection INTEGER NOT NULL,\n\t\t\t\t\t\t\ttype INTEGER NOT NULL,\n\t\t\t\t\t\t\tstanza TEXT NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, mam_id, mam_by, stanza_id)\n\t\t\t\t\t\t) STRICT",83,96,ac,55),HX_("CREATE INDEX messages_created_at ON messages (account_id, chat_id, created_at)",0a,a5,34,74),HX_("CREATE INDEX messages_correction_id ON messages (correction_id)",1d,cc,3a,55),HX_("CREATE TABLE chats (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tchat_id TEXT NOT NULL,\n\t\t\t\t\t\t\ttrusted INTEGER NOT NULL,\n\t\t\t\t\t\t\tavatar_sha1 BLOB,\n\t\t\t\t\t\t\tfn TEXT,\n\t\t\t\t\t\t\tui_state INTEGER NOT NULL,\n\t\t\t\t\t\t\tblocked INTEGER NOT NULL,\n\t\t\t\t\t\t\textensions TEXT,\n\t\t\t\t\t\t\tread_up_to_id TEXT,\n\t\t\t\t\t\t\tread_up_to_by TEXT,\n\t\t\t\t\t\t\tcaps_ver BLOB,\n\t\t\t\t\t\t\tpresence BLOB NOT NULL,\n\t\t\t\t\t\t\tclass TEXT NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, chat_id)\n\t\t\t\t\t\t) STRICT",d7,57,b5,98),HX_("CREATE TABLE keyvaluepairs (\n\t\t\t\t\t\t\tk TEXT NOT NULL PRIMARY KEY,\n\t\t\t\t\t\t\tv TEXT NOT NULL\n\t\t\t\t\t\t) STRICT",7d,57,c4,25),HX_("CREATE TABLE caps (\n\t\t\t\t\t\t\tsha1 BLOB NOT NULL PRIMARY KEY,\n\t\t\t\t\t\t\tcaps BLOB NOT NULL\n\t\t\t\t\t\t) STRICT",82,72,8b,39),HX_("CREATE TABLE services (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tservice_id TEXT NOT NULL,\n\t\t\t\t\t\t\tname TEXT,\n\t\t\t\t\t\t\tnode TEXT,\n\t\t\t\t\t\t\tcaps BLOB NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, service_id)\n\t\t\t\t\t\t) STRICT",e9,e5,5a,93),HX_("CREATE TABLE accounts (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tclient_id TEXT NOT NULL,\n\t\t\t\t\t\t\tdisplay_name TEXT,\n\t\t\t\t\t\t\ttoken TEXT,\n\t\t\t\t\t\t\tfast_count INTEGER NOT NULL DEFAULT 0,\n\t\t\t\t\t\t\tsm_state BLOB,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id)\n\t\t\t\t\t\t) STRICT",e5,e4,e8,18),HX_("CREATE TABLE reactions (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tupdate_id TEXT NOT NULL,\n\t\t\t\t\t\t\tmam_id TEXT,\n\t\t\t\t\t\t\tmam_by TEXT,\n\t\t\t\t\t\t\tstanza_id TEXT,\n\t\t\t\t\t\t\tchat_id TEXT NOT NULL,\n\t\t\t\t\t\t\tsender_id TEXT NOT NULL,\n\t\t\t\t\t\t\tcreated_at INTEGER NOT NULL,\n\t\t\t\t\t\t\treactions BLOB NOT NULL,\n\t\t\t\t\t\t\tkind INTEGER NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, chat_id, sender_id, update_id)\n\t\t\t\t\t\t) STRICT",f2,b7,82,71),HX_("PRAGMA user_version = 1",36,cd,bd,7c),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_164_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",164,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_172_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",172,0x605e3eb4)
 static const ::String _hx_array_data_99390348_4[] = {
 	HX_("ALTER TABLE chats ADD COLUMN notifications_filtered INTEGER",96,4b,fd,cd),HX_("ALTER TABLE chats ADD COLUMN notify_mention INTEGER NOT NULL DEFAULT 0",c9,7b,58,0e),HX_("ALTER TABLE chats ADD COLUMN notify_reply INTEGER NOT NULL DEFAULT 0",89,06,a6,fc),HX_("PRAGMA user_version = 2",37,cd,bd,7c),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_172_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",172,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_180_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",180,0x605e3eb4)
 static const ::String _hx_array_data_99390348_6[] = {
 	HX_("ALTER TABLE messages ADD COLUMN status_text TEXT",26,26,af,2d),HX_("PRAGMA user_version = 3",38,cd,bd,7c),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_178_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",178,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_186_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",186,0x605e3eb4)
 static const ::String _hx_array_data_99390348_8[] = {
 	HX_("CREATE INDEX messages_stanza_id on messages (account_id, stanza_id)",5e,17,3a,20),HX_("PRAGMA user_version = 4",39,cd,bd,7c),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_184_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",184,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_192_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",192,0x605e3eb4)
 static const ::String _hx_array_data_99390348_10[] = {
 	HX_("CREATE INDEX messages_mam_id on messages (account_id, chat_id, mam_id)",ea,dd,5f,aa),HX_("PRAGMA user_version = 5",3a,cd,bd,7c),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_190_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",190,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_198_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",198,0x605e3eb4)
 static const ::String _hx_array_data_99390348_12[] = {
 	HX_("ALTER TABLE chats ADD COLUMN bookmarked INTEGER NOT NULL DEFAULT 0",08,c6,d1,b9),HX_("PRAGMA user_version = 6",3b,cd,bd,7c),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_196_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",196,0x605e3eb4)
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_203_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",203,0x605e3eb4)
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_207_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",207,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_204_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",204,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_211_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",211,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_215_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",215,0x605e3eb4)
 static const ::String _hx_array_data_99390348_16[] = {
 	HX_("SELECT ROWID FROM messages ORDER BY created_at",14,94,7d,7f),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_220_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",220,0x605e3eb4)
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_208_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",208,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_228_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",228,0x605e3eb4)
 HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_216_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",216,0x605e3eb4)
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_222_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",222,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_224_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",224,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_230_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",230,0x605e3eb4)
 static const ::String _hx_array_data_99390348_21[] = {
 	HX_("PRAGMA user_version = 8",3d,cd,bd,7c),
 };
 static const ::String _hx_array_data_99390348_22[] = {
 	HX_("ALTER TABLE messages ADD COLUMN sort_id TEXT NOT NULL DEFAULT 'a '",90,4a,7e,63),HX_("CREATE INDEX messages_sort_id ON messages (account_id, chat_id, sort_id)",92,70,88,c2),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_226_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",226,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_234_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",234,0x605e3eb4)
 static const ::String _hx_array_data_99390348_24[] = {
 	HX_("ALTER TABLE chats ADD COLUMN meta BLOB NOT NULL DEFAULT X'0C'",0c,0c,a1,c8),HX_("PRAGMA user_version = 9",3e,cd,bd,7c),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_233_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",233,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_241_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",241,0x605e3eb4)
 static const ::String _hx_array_data_99390348_26[] = {
 	HX_("ALTER TABLE accounts ADD COLUMN sort_id TEXT NOT NULL DEFAULT 'a '",6a,de,fe,aa),HX_("PRAGMA user_version = 10",3a,c2,55,a9),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_239_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",239,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_247_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",247,0x605e3eb4)
 static const ::String _hx_array_data_99390348_28[] = {
 	HX_("CREATE TABLE members (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tchat_id TEXT NOT NULL,\n\t\t\t\t\t\t\tmember_id TEXT NOT NULL,\n\t\t\t\t\t\t\tdisplay_name TEXT,\n\t\t\t\t\t\t\tphoto_uri TEXT,\n\t\t\t\t\t\t\tis_self INTEGER NOT NULL,\n\t\t\t\t\t\t\tchat TEXT,\n\t\t\t\t\t\t\troles BLOB NOT NULL,\n\t\t\t\t\t\t\tpresence BLOB NOT NULL,\n\t\t\t\t\t\t\tjid TEXT,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, member_id)\n\t\t\t\t\t\t) STRICT",a0,1c,e3,3e),HX_("CREATE INDEX members_chats ON members (account_id, chat_id, is_self, jid)",01,f5,76,e5),HX_("ALTER TABLE chats DROP COLUMN presence",15,e1,b4,ae),HX_("PRAGMA user_version = 11",3b,c2,55,a9),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_259_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",259,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_267_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",267,0x605e3eb4)
 static const ::String _hx_array_data_99390348_30[] = {
 	HX_("CREATE INDEX messages_sync_point ON messages (account_id, mam_by, sort_id DESC) WHERE sync_point",e5,a4,cc,f3),HX_("PRAGMA user_version = 12",3c,c2,55,a9),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_85_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",85,0x605e3eb4)
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_84_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",84,0x605e3eb4)
-static const ::String _hx_array_data_99390348_33[] = {
-	HX_("PRAGMA user_version",c8,0f,11,60),
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_273_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",273,0x605e3eb4)
+static const ::String _hx_array_data_99390348_32[] = {
+	HX_("ALTER TABLE accounts ADD COLUMN roster_ver TEXT",91,5b,c8,da),HX_("PRAGMA user_version = 13",3d,c2,55,a9),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_279_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",279,0x605e3eb4)
+static const ::String _hx_array_data_99390348_34[] = {
+	HX_("CREATE TABLE omemo_identity_keys (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL PRIMARY KEY,\n\t\t\t\t\t\t\tprivate_key BLOB NOT NULL,\n\t\t\t\t\t\t\tpublic_key BLOB NOT NULL\n\t\t\t\t\t\t) STRICT",b3,0e,19,99),HX_("PRAGMA user_version = 14",3e,c2,55,a9),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_289_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",289,0x605e3eb4)
+static const ::String _hx_array_data_99390348_36[] = {
+	HX_("CREATE TABLE omemo_devices (\n\t\t\t\t\t\t\tidentifier TEXT NOT NULL,\n\t\t\t\t\t\t\tdevice_id INTEGER NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (identifier, device_id)\n\t\t\t\t\t\t) STRICT",15,d8,e7,43),HX_("PRAGMA user_version = 15",3f,c2,55,a9),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_299_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",299,0x605e3eb4)
+static const ::String _hx_array_data_99390348_38[] = {
+	HX_("CREATE TABLE omemo_prekeys (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tkey_id INTEGER NOT NULL,\n\t\t\t\t\t\t\tprivate_key BLOB NOT NULL,\n\t\t\t\t\t\t\tpublic_key BLOB NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, key_id)\n\t\t\t\t\t\t) STRICT",01,51,a7,50),HX_("PRAGMA user_version = 16",40,c2,55,a9),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_311_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",311,0x605e3eb4)
+static const ::String _hx_array_data_99390348_40[] = {
+	HX_("CREATE TABLE omemo_signed_prekeys (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tkey_id INTEGER NOT NULL,\n\t\t\t\t\t\t\tprivate_key BLOB NOT NULL,\n\t\t\t\t\t\t\tpublic_key BLOB NOT NULL,\n\t\t\t\t\t\t\tsignature BLOB NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, key_id)\n\t\t\t\t\t\t) STRICT",10,b1,b8,53),HX_("PRAGMA user_version = 17",41,c2,55,a9),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_324_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",324,0x605e3eb4)
+static const ::String _hx_array_data_99390348_42[] = {
+	HX_("CREATE TABLE omemo_contact_identity_keys (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\taddress TEXT NOT NULL,\n\t\t\t\t\t\t\tidentity_key BLOB NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, address)\n\t\t\t\t\t\t) STRICT",4b,4c,7d,3c),HX_("PRAGMA user_version = 18",42,c2,55,a9),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_335_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",335,0x605e3eb4)
+static const ::String _hx_array_data_99390348_44[] = {
+	HX_("CREATE TABLE omemo_sessions (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\taddress TEXT NOT NULL,\n\t\t\t\t\t\t\tsession TEXT NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, address)\n\t\t\t\t\t\t) STRICT",30,35,75,4d),HX_("PRAGMA user_version = 19",43,c2,55,a9),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_346_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",346,0x605e3eb4)
+static const ::String _hx_array_data_99390348_46[] = {
+	HX_("CREATE TABLE omemo_sessions_meta (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\taddress TEXT NOT NULL,\n\t\t\t\t\t\t\treceived_session_message_ok INTEGER NOT NULL,\n\t\t\t\t\t\t\tlast_message_decrypted_ok INTEGER NOT NULL,\n\t\t\t\t\t\t\tsent_key_exchange INTEGER NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, address)\n\t\t\t\t\t\t) STRICT",30,e8,dc,93),HX_("PRAGMA user_version = 20",19,c3,55,a9),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_34_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",34,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_272_get,"borogove.persistence.Sqlite","get",0xf1069870,"borogove.persistence.Sqlite.get","borogove/persistence/Sqlite.hx",272,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_282_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",282,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_283_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",283,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_285_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",285,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_301_syncPoint,"borogove.persistence.Sqlite","syncPoint",0xba3f774f,"borogove.persistence.Sqlite.syncPoint","borogove/persistence/Sqlite.hx",301,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_290_syncPoint,"borogove.persistence.Sqlite","syncPoint",0xba3f774f,"borogove.persistence.Sqlite.syncPoint","borogove/persistence/Sqlite.hx",290,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_317_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",317,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_359_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",359,0x605e3eb4)
+static const ::String _hx_array_data_99390348_48[] = {
+	HX_("ALTER TABLE messages ADD COLUMN encryption BLOB",c7,e9,47,4b),HX_("PRAGMA user_version = 21",1a,c3,55,a9),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_365_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",365,0x605e3eb4)
 static const ::String _hx_array_data_99390348_50[] = {
+	HX_("ALTER TABLE messages ADD COLUMN debug BLOB",bd,29,22,12),HX_("PRAGMA user_version = 22",1b,c3,55,a9),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_371_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",371,0x605e3eb4)
+static const ::String _hx_array_data_99390348_52[] = {
+	HX_("CREATE INDEX messages_status ON messages (account_id, status, created_at)",50,ac,5e,ef),HX_("PRAGMA user_version = 23",1c,c3,55,a9),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_377_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",377,0x605e3eb4)
+static const ::String _hx_array_data_99390348_54[] = {
+	HX_("DROP INDEX messages_created_at",9e,6c,54,c0),HX_("DROP INDEX messages_status",a6,b3,68,ad),HX_("ALTER TABLE messages RENAME COLUMN created_at TO time_sent",3b,4a,6f,59),HX_("ALTER TABLE messages ADD COLUMN time_received INTEGER",be,52,88,b1),HX_("CREATE INDEX messages_time_received ON messages (account_id, chat_id, time_received)",64,f4,ad,37),HX_("CREATE INDEX messages_status ON messages (account_id, status, time_received)",05,65,0f,37),HX_("UPDATE messages SET time_received=time_sent",45,fc,fb,e2),HX_("PRAGMA user_version = 24",1d,c3,55,a9),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_93_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",93,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_92_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",92,0x605e3eb4)
+static const ::String _hx_array_data_99390348_57[] = {
+	HX_("PRAGMA user_version",c8,0f,11,60),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_42_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",42,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_396_get,"borogove.persistence.Sqlite","get",0xf1069870,"borogove.persistence.Sqlite.get","borogove/persistence/Sqlite.hx",396,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_406_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",406,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_407_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",407,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_409_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",409,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_430_syncPoint,"borogove.persistence.Sqlite","syncPoint",0xba3f774f,"borogove.persistence.Sqlite.syncPoint","borogove/persistence/Sqlite.hx",430,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_414_syncPoint,"borogove.persistence.Sqlite","syncPoint",0xba3f774f,"borogove.persistence.Sqlite.syncPoint","borogove/persistence/Sqlite.hx",414,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_446_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",446,0x605e3eb4)
+static const ::String _hx_array_data_99390348_74[] = {
 	HX_("INSERT OR REPLACE INTO chats VALUES ",3b,7d,10,d4),
 };
-static const ::String _hx_array_data_99390348_51[] = {
+static const ::String _hx_array_data_99390348_75[] = {
 	HX_(",",2c,00,00,00),
 };
-static const ::String _hx_array_data_99390348_52[] = {
+static const ::String _hx_array_data_99390348_76[] = {
 	HX_("(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,jsonb(?))",f9,da,31,c1),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_343_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",343,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_308_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",308,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_356_serializePresenceMap,"borogove.persistence.Sqlite","serializePresenceMap",0x1aed0007,"borogove.persistence.Sqlite.serializePresenceMap","borogove/persistence/Sqlite.hx",356,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_367_hydratePresenceMap,"borogove.persistence.Sqlite","hydratePresenceMap",0xdd91e2b4,"borogove.persistence.Sqlite.hydratePresenceMap","borogove/persistence/Sqlite.hx",367,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_379_hydrateStoredMember,"borogove.persistence.Sqlite","hydrateStoredMember",0x227dd92a,"borogove.persistence.Sqlite.hydrateStoredMember","borogove/persistence/Sqlite.hx",379,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_425_chatPresenceAndMembersForName,"borogove.persistence.Sqlite","chatPresenceAndMembersForName",0x57ea40f9,"borogove.persistence.Sqlite.chatPresenceAndMembersForName","borogove/persistence/Sqlite.hx",425,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_446_chatPresenceAndMembersForName,"borogove.persistence.Sqlite","chatPresenceAndMembersForName",0x57ea40f9,"borogove.persistence.Sqlite.chatPresenceAndMembersForName","borogove/persistence/Sqlite.hx",446,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_460_chatPresenceAndMembersForName,"borogove.persistence.Sqlite","chatPresenceAndMembersForName",0x57ea40f9,"borogove.persistence.Sqlite.chatPresenceAndMembersForName","borogove/persistence/Sqlite.hx",460,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_468_chatPresenceAndMembersForName,"borogove.persistence.Sqlite","chatPresenceAndMembersForName",0x57ea40f9,"borogove.persistence.Sqlite.chatPresenceAndMembersForName","borogove/persistence/Sqlite.hx",468,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_407_chatPresenceAndMembersForName,"borogove.persistence.Sqlite","chatPresenceAndMembersForName",0x57ea40f9,"borogove.persistence.Sqlite.chatPresenceAndMembersForName","borogove/persistence/Sqlite.hx",407,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_507_storeMembers,"borogove.persistence.Sqlite","storeMembers",0x5eb10bde,"borogove.persistence.Sqlite.storeMembers","borogove/persistence/Sqlite.hx",507,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_480_storeMembers,"borogove.persistence.Sqlite","storeMembers",0x5eb10bde,"borogove.persistence.Sqlite.storeMembers","borogove/persistence/Sqlite.hx",480,0x605e3eb4)
-static const ::String _hx_array_data_99390348_73[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_472_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",472,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_437_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",437,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_485_serializePresenceMap,"borogove.persistence.Sqlite","serializePresenceMap",0x1aed0007,"borogove.persistence.Sqlite.serializePresenceMap","borogove/persistence/Sqlite.hx",485,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_496_hydratePresenceMap,"borogove.persistence.Sqlite","hydratePresenceMap",0xdd91e2b4,"borogove.persistence.Sqlite.hydratePresenceMap","borogove/persistence/Sqlite.hx",496,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_508_hydrateStoredMember,"borogove.persistence.Sqlite","hydrateStoredMember",0x227dd92a,"borogove.persistence.Sqlite.hydrateStoredMember","borogove/persistence/Sqlite.hx",508,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_554_chatPresenceAndMembersForName,"borogove.persistence.Sqlite","chatPresenceAndMembersForName",0x57ea40f9,"borogove.persistence.Sqlite.chatPresenceAndMembersForName","borogove/persistence/Sqlite.hx",554,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_575_chatPresenceAndMembersForName,"borogove.persistence.Sqlite","chatPresenceAndMembersForName",0x57ea40f9,"borogove.persistence.Sqlite.chatPresenceAndMembersForName","borogove/persistence/Sqlite.hx",575,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_589_chatPresenceAndMembersForName,"borogove.persistence.Sqlite","chatPresenceAndMembersForName",0x57ea40f9,"borogove.persistence.Sqlite.chatPresenceAndMembersForName","borogove/persistence/Sqlite.hx",589,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_597_chatPresenceAndMembersForName,"borogove.persistence.Sqlite","chatPresenceAndMembersForName",0x57ea40f9,"borogove.persistence.Sqlite.chatPresenceAndMembersForName","borogove/persistence/Sqlite.hx",597,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_536_chatPresenceAndMembersForName,"borogove.persistence.Sqlite","chatPresenceAndMembersForName",0x57ea40f9,"borogove.persistence.Sqlite.chatPresenceAndMembersForName","borogove/persistence/Sqlite.hx",536,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_636_storeMembers,"borogove.persistence.Sqlite","storeMembers",0x5eb10bde,"borogove.persistence.Sqlite.storeMembers","borogove/persistence/Sqlite.hx",636,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_609_storeMembers,"borogove.persistence.Sqlite","storeMembers",0x5eb10bde,"borogove.persistence.Sqlite.storeMembers","borogove/persistence/Sqlite.hx",609,0x605e3eb4)
+static const ::String _hx_array_data_99390348_97[] = {
 	HX_("INSERT OR REPLACE INTO members VALUES ",f9,ed,eb,41),
 };
-static const ::String _hx_array_data_99390348_74[] = {
+static const ::String _hx_array_data_99390348_98[] = {
 	HX_(",",2c,00,00,00),
 };
-static const ::String _hx_array_data_99390348_75[] = {
+static const ::String _hx_array_data_99390348_99[] = {
 	HX_("(?,?,?,?,?,?,?,jsonb(?),jsonb(?),?)",cd,39,fd,64),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_537_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",537,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_535_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",535,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_538_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",538,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_546_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",546,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_553_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",553,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_555_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",555,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_511_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",511,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_526_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",526,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_519_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",519,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_528_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",528,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_518_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",518,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_578_clearMemberPresence,"borogove.persistence.Sqlite","clearMemberPresence",0xf21288fc,"borogove.persistence.Sqlite.clearMemberPresence","borogove/persistence/Sqlite.hx",578,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_573_clearMemberPresence,"borogove.persistence.Sqlite","clearMemberPresence",0xf21288fc,"borogove.persistence.Sqlite.clearMemberPresence","borogove/persistence/Sqlite.hx",573,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_600_getMembers,"borogove.persistence.Sqlite","getMembers",0xbd4faa49,"borogove.persistence.Sqlite.getMembers","borogove/persistence/Sqlite.hx",600,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_582_getMembers,"borogove.persistence.Sqlite","getMembers",0xbd4faa49,"borogove.persistence.Sqlite.getMembers","borogove/persistence/Sqlite.hx",582,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_622_getMemberDetails,"borogove.persistence.Sqlite","getMemberDetails",0x098db2f8,"borogove.persistence.Sqlite.getMemberDetails","borogove/persistence/Sqlite.hx",622,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_614_getMemberDetails,"borogove.persistence.Sqlite","getMemberDetails",0x098db2f8,"borogove.persistence.Sqlite.getMemberDetails","borogove/persistence/Sqlite.hx",614,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_640_searchMessages,"borogove.persistence.Sqlite","searchMessages",0x6d157eba,"borogove.persistence.Sqlite.searchMessages","borogove/persistence/Sqlite.hx",640,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_633_searchMessages,"borogove.persistence.Sqlite","searchMessages",0x6d157eba,"borogove.persistence.Sqlite.searchMessages","borogove/persistence/Sqlite.hx",633,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_649_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",649,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_650_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",650,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_648_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",648,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_644_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",644,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_713_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",713,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_715_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",715,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_717_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",717,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_699_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",699,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_672_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",672,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_726_updateMessage,"borogove.persistence.Sqlite","updateMessage",0x2541c718,"borogove.persistence.Sqlite.updateMessage","borogove/persistence/Sqlite.hx",726,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_760_fetchFromStub,"borogove.persistence.Sqlite","fetchFromStub",0x727b8a6c,"borogove.persistence.Sqlite.fetchFromStub","borogove/persistence/Sqlite.hx",760,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_729_fetchFromStub,"borogove.persistence.Sqlite","fetchFromStub",0x727b8a6c,"borogove.persistence.Sqlite.fetchFromStub","borogove/persistence/Sqlite.hx",729,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_787_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",787,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_794_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",794,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_788_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",788,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_793_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",793,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_776_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",776,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_666_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",666,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_664_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",664,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_667_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",667,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_675_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",675,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_682_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",682,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_684_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",684,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_640_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",640,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_655_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",655,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_648_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",648,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_657_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",657,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_647_storeMemberUpdates,"borogove.persistence.Sqlite","storeMemberUpdates",0x3224d7d5,"borogove.persistence.Sqlite.storeMemberUpdates","borogove/persistence/Sqlite.hx",647,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_707_clearMemberPresence,"borogove.persistence.Sqlite","clearMemberPresence",0xf21288fc,"borogove.persistence.Sqlite.clearMemberPresence","borogove/persistence/Sqlite.hx",707,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_702_clearMemberPresence,"borogove.persistence.Sqlite","clearMemberPresence",0xf21288fc,"borogove.persistence.Sqlite.clearMemberPresence","borogove/persistence/Sqlite.hx",702,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_731_getMembers,"borogove.persistence.Sqlite","getMembers",0xbd4faa49,"borogove.persistence.Sqlite.getMembers","borogove/persistence/Sqlite.hx",731,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_711_getMembers,"borogove.persistence.Sqlite","getMembers",0xbd4faa49,"borogove.persistence.Sqlite.getMembers","borogove/persistence/Sqlite.hx",711,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_753_getMemberDetails,"borogove.persistence.Sqlite","getMemberDetails",0x098db2f8,"borogove.persistence.Sqlite.getMemberDetails","borogove/persistence/Sqlite.hx",753,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_745_getMemberDetails,"borogove.persistence.Sqlite","getMemberDetails",0x098db2f8,"borogove.persistence.Sqlite.getMemberDetails","borogove/persistence/Sqlite.hx",745,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_765_storeVoiceRequest,"borogove.persistence.Sqlite","storeVoiceRequest",0x2c506a98,"borogove.persistence.Sqlite.storeVoiceRequest","borogove/persistence/Sqlite.hx",765,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_773_listVoiceRequests,"borogove.persistence.Sqlite","listVoiceRequests",0x3ce81c32,"borogove.persistence.Sqlite.listVoiceRequests","borogove/persistence/Sqlite.hx",773,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_769_listVoiceRequests,"borogove.persistence.Sqlite","listVoiceRequests",0x3ce81c32,"borogove.persistence.Sqlite.listVoiceRequests","borogove/persistence/Sqlite.hx",769,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_796_searchMessages,"borogove.persistence.Sqlite","searchMessages",0x6d157eba,"borogove.persistence.Sqlite.searchMessages","borogove/persistence/Sqlite.hx",796,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_784_searchMessages,"borogove.persistence.Sqlite","searchMessages",0x6d157eba,"borogove.persistence.Sqlite.searchMessages","borogove/persistence/Sqlite.hx",784,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_805_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",805,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_806_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",806,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_804_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",804,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_800_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",800,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_855_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",855,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_862_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",862,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_828_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",828,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_871_updateMessage,"borogove.persistence.Sqlite","updateMessage",0x2541c718,"borogove.persistence.Sqlite.updateMessage","borogove/persistence/Sqlite.hx",871,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_898_fetchFromStub,"borogove.persistence.Sqlite","fetchFromStub",0x727b8a6c,"borogove.persistence.Sqlite.fetchFromStub","borogove/persistence/Sqlite.hx",898,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_874_fetchFromStub,"borogove.persistence.Sqlite","fetchFromStub",0x727b8a6c,"borogove.persistence.Sqlite.fetchFromStub","borogove/persistence/Sqlite.hx",874,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_930_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",930,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_914_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",914,0x605e3eb4)
 HX_LOCAL_STACK_FRAME(_hx_pos_e0e41eef74e41160_365_getMessage__fromC,"borogove.persistence.Sqlite","getMessage__fromC",0x419ea222,"borogove.persistence.Sqlite.getMessage__fromC","HaxeCBridge.hx",365,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_842_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",842,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_865_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",865,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_869_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",869,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_888_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",888,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_899_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",899,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_798_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",798,0x605e3eb4)
-static const ::String _hx_array_data_99390348_147[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_971_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",971,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_999_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",999,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1003_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",1003,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1022_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",1022,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_933_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",933,0x605e3eb4)
+static const ::String _hx_array_data_99390348_163[] = {
 	HX_("WITH page AS (SELECT stanza_id, mam_id FROM messages where account_id=? AND chat_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id) AND type<>?",1a,43,cb,8f),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_904_getMessagesBefore,"borogove.persistence.Sqlite","getMessagesBefore",0x4d9d52fb,"borogove.persistence.Sqlite.getMessagesBefore","borogove/persistence/Sqlite.hx",904,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_909_getMessagesAfter,"borogove.persistence.Sqlite","getMessagesAfter",0xadefcb20,"borogove.persistence.Sqlite.getMessagesAfter","borogove/persistence/Sqlite.hx",909,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_918_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",918,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_913_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",913,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_925_getChatUnreadDetails,"borogove.persistence.Sqlite","getChatUnreadDetails",0x2c7619cb,"borogove.persistence.Sqlite.getChatUnreadDetails","borogove/persistence/Sqlite.hx",925,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_921_getChatUnreadDetails,"borogove.persistence.Sqlite","getChatUnreadDetails",0x2c7619cb,"borogove.persistence.Sqlite.getChatUnreadDetails","borogove/persistence/Sqlite.hx",921,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_933_getChatsUnreadDetails,"borogove.persistence.Sqlite","getChatsUnreadDetails",0x7e07eb48,"borogove.persistence.Sqlite.getChatsUnreadDetails","borogove/persistence/Sqlite.hx",933,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_951_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",951,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_942_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",942,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_962_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",962,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_967_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",967,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_969_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",969,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_958_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",958,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_956_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",956,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_978_hasMedia,"borogove.persistence.Sqlite","hasMedia",0x65758110,"borogove.persistence.Sqlite.hasMedia","borogove/persistence/Sqlite.hx",978,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_983_removeMedia,"borogove.persistence.Sqlite","removeMedia",0xbeaa63da,"borogove.persistence.Sqlite.removeMedia","borogove/persistence/Sqlite.hx",983,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_988_storeMedia,"borogove.persistence.Sqlite","storeMedia",0x96b8a8a9,"borogove.persistence.Sqlite.storeMedia","borogove/persistence/Sqlite.hx",988,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_992_storeCaps,"borogove.persistence.Sqlite","storeCaps",0xbf81d7fc,"borogove.persistence.Sqlite.storeCaps","borogove/persistence/Sqlite.hx",992,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_998_storeCapsSet,"borogove.persistence.Sqlite","storeCapsSet",0xeacfa106,"borogove.persistence.Sqlite.storeCapsSet","borogove/persistence/Sqlite.hx",998,0x605e3eb4)
-static const ::String _hx_array_data_99390348_175[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1032_getMessagesBefore,"borogove.persistence.Sqlite","getMessagesBefore",0x4d9d52fb,"borogove.persistence.Sqlite.getMessagesBefore","borogove/persistence/Sqlite.hx",1032,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1037_getMessagesAfter,"borogove.persistence.Sqlite","getMessagesAfter",0xadefcb20,"borogove.persistence.Sqlite.getMessagesAfter","borogove/persistence/Sqlite.hx",1037,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1046_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",1046,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1041_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",1041,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1060_getMessagesByStatus,"borogove.persistence.Sqlite","getMessagesByStatus",0x6a89c1e5,"borogove.persistence.Sqlite.getMessagesByStatus","borogove/persistence/Sqlite.hx",1060,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1050_getMessagesByStatus,"borogove.persistence.Sqlite","getMessagesByStatus",0x6a89c1e5,"borogove.persistence.Sqlite.getMessagesByStatus","borogove/persistence/Sqlite.hx",1050,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1084_getChatUnreadDetails,"borogove.persistence.Sqlite","getChatUnreadDetails",0x2c7619cb,"borogove.persistence.Sqlite.getChatUnreadDetails","borogove/persistence/Sqlite.hx",1084,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1063_getChatUnreadDetails,"borogove.persistence.Sqlite","getChatUnreadDetails",0x2c7619cb,"borogove.persistence.Sqlite.getChatUnreadDetails","borogove/persistence/Sqlite.hx",1063,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1092_getChatsUnreadDetails,"borogove.persistence.Sqlite","getChatsUnreadDetails",0x7e07eb48,"borogove.persistence.Sqlite.getChatsUnreadDetails","borogove/persistence/Sqlite.hx",1092,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1110_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",1110,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1101_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",1101,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1131_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",1131,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1133_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",1133,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1117_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",1117,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1115_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",1115,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1140_hasMedia,"borogove.persistence.Sqlite","hasMedia",0x65758110,"borogove.persistence.Sqlite.hasMedia","borogove/persistence/Sqlite.hx",1140,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1145_removeMedia,"borogove.persistence.Sqlite","removeMedia",0xbeaa63da,"borogove.persistence.Sqlite.removeMedia","borogove/persistence/Sqlite.hx",1145,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1150_storeMedia,"borogove.persistence.Sqlite","storeMedia",0x96b8a8a9,"borogove.persistence.Sqlite.storeMedia","borogove/persistence/Sqlite.hx",1150,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1154_storeCaps,"borogove.persistence.Sqlite","storeCaps",0xbf81d7fc,"borogove.persistence.Sqlite.storeCaps","borogove/persistence/Sqlite.hx",1154,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1160_storeCapsSet,"borogove.persistence.Sqlite","storeCapsSet",0xeacfa106,"borogove.persistence.Sqlite.storeCapsSet","borogove/persistence/Sqlite.hx",1160,0x605e3eb4)
+static const ::String _hx_array_data_99390348_189[] = {
 	HX_("INSERT OR IGNORE INTO caps VALUES ",27,4b,68,bf),
 };
-static const ::String _hx_array_data_99390348_176[] = {
+static const ::String _hx_array_data_99390348_190[] = {
 	HX_(",",2c,00,00,00),
 };
-static const ::String _hx_array_data_99390348_177[] = {
+static const ::String _hx_array_data_99390348_191[] = {
 	HX_("(?,jsonb(?))",1c,61,06,9e),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1024_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",1024,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1015_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",1015,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1056_storeLogin,"borogove.persistence.Sqlite","storeLogin",0x09f07d2e,"borogove.persistence.Sqlite.storeLogin","borogove/persistence/Sqlite.hx",1056,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1034_storeLogin,"borogove.persistence.Sqlite","storeLogin",0x09f07d2e,"borogove.persistence.Sqlite.storeLogin","borogove/persistence/Sqlite.hx",1034,0x605e3eb4)
-static const ::String _hx_array_data_99390348_183[] = {
-	HX_("INSERT INTO accounts (account_id, client_id, display_name",03,b0,6a,0b),
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1186_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",1186,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1177_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",1177,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1220_storeLogin,"borogove.persistence.Sqlite","storeLogin",0x09f07d2e,"borogove.persistence.Sqlite.storeLogin","borogove/persistence/Sqlite.hx",1220,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1196_storeLogin,"borogove.persistence.Sqlite","storeLogin",0x09f07d2e,"borogove.persistence.Sqlite.storeLogin","borogove/persistence/Sqlite.hx",1196,0x605e3eb4)
+static const ::String _hx_array_data_99390348_197[] = {
+	HX_("INSERT INTO accounts (account_id, client_id, display_name, roster_ver",66,1e,c0,f8),
 };
-static const ::String _hx_array_data_99390348_184[] = {
+static const ::String _hx_array_data_99390348_198[] = {
 	HX_(", token, fast_count",a5,56,e4,ae),
 };
-static const ::String _hx_array_data_99390348_185[] = {
-	HX_(") VALUES (?,?,?",c4,1c,e3,67),
+static const ::String _hx_array_data_99390348_199[] = {
+	HX_(") VALUES (?,?,?,?",57,fc,76,7c),
 };
-static const ::String _hx_array_data_99390348_186[] = {
+static const ::String _hx_array_data_99390348_200[] = {
 	HX_(",?",93,26,00,00),
 };
-static const ::String _hx_array_data_99390348_187[] = {
+static const ::String _hx_array_data_99390348_201[] = {
 	HX_(",0",84,26,00,00),
 };
-static const ::String _hx_array_data_99390348_188[] = {
+static const ::String _hx_array_data_99390348_202[] = {
 	HX_(") ON CONFLICT DO UPDATE SET client_id=?",cd,99,0c,96),
 };
-static const ::String _hx_array_data_99390348_189[] = {
+static const ::String _hx_array_data_99390348_203[] = {
 	HX_(", display_name=?",7e,ad,5b,0f),
 };
-static const ::String _hx_array_data_99390348_190[] = {
+static const ::String _hx_array_data_99390348_204[] = {
+	HX_(", roster_ver=?",05,aa,1f,92),
+};
+static const ::String _hx_array_data_99390348_205[] = {
 	HX_(", token=?",a7,78,19,80),
 };
-static const ::String _hx_array_data_99390348_191[] = {
+static const ::String _hx_array_data_99390348_206[] = {
 	HX_(", fast_count=0",73,a8,4f,82),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1064_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",1064,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1060_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",1060,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1085_removeAccount,"borogove.persistence.Sqlite","removeAccount",0x39d68523,"borogove.persistence.Sqlite.removeAccount","borogove/persistence/Sqlite.hx",1085,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1093_removeAccount,"borogove.persistence.Sqlite","removeAccount",0x39d68523,"borogove.persistence.Sqlite.removeAccount","borogove/persistence/Sqlite.hx",1093,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1084_removeAccount,"borogove.persistence.Sqlite","removeAccount",0x39d68523,"borogove.persistence.Sqlite.removeAccount","borogove/persistence/Sqlite.hx",1084,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1105_listAccounts,"borogove.persistence.Sqlite","listAccounts",0x9e5f9e8a,"borogove.persistence.Sqlite.listAccounts","borogove/persistence/Sqlite.hx",1105,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1104_listAccounts,"borogove.persistence.Sqlite","listAccounts",0x9e5f9e8a,"borogove.persistence.Sqlite.listAccounts","borogove/persistence/Sqlite.hx",1104,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1113_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",1113,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1121_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",1121,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1125_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",1125,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1134_getStreamManagement,"borogove.persistence.Sqlite","getStreamManagement",0xb922efb3,"borogove.persistence.Sqlite.getStreamManagement","borogove/persistence/Sqlite.hx",1134,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1144_storeService,"borogove.persistence.Sqlite","storeService",0x466dfb3a,"borogove.persistence.Sqlite.storeService","borogove/persistence/Sqlite.hx",1144,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1159_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",1159,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1154_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",1154,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1178_hydrateReactions,"borogove.persistence.Sqlite","hydrateReactions",0x7d654d7d,"borogove.persistence.Sqlite.hydrateReactions","borogove/persistence/Sqlite.hx",1178,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1206_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",1206,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1190_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",1190,0x605e3eb4)
-static const ::String _hx_array_data_99390348_226[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1228_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",1228,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1224_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",1224,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1249_removeAccount,"borogove.persistence.Sqlite","removeAccount",0x39d68523,"borogove.persistence.Sqlite.removeAccount","borogove/persistence/Sqlite.hx",1249,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1257_removeAccount,"borogove.persistence.Sqlite","removeAccount",0x39d68523,"borogove.persistence.Sqlite.removeAccount","borogove/persistence/Sqlite.hx",1257,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1248_removeAccount,"borogove.persistence.Sqlite","removeAccount",0x39d68523,"borogove.persistence.Sqlite.removeAccount","borogove/persistence/Sqlite.hx",1248,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1269_listAccounts,"borogove.persistence.Sqlite","listAccounts",0x9e5f9e8a,"borogove.persistence.Sqlite.listAccounts","borogove/persistence/Sqlite.hx",1269,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1268_listAccounts,"borogove.persistence.Sqlite","listAccounts",0x9e5f9e8a,"borogove.persistence.Sqlite.listAccounts","borogove/persistence/Sqlite.hx",1268,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1277_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",1277,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1285_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",1285,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1289_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",1289,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1298_getStreamManagement,"borogove.persistence.Sqlite","getStreamManagement",0xb922efb3,"borogove.persistence.Sqlite.getStreamManagement","borogove/persistence/Sqlite.hx",1298,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1308_storeService,"borogove.persistence.Sqlite","storeService",0x466dfb3a,"borogove.persistence.Sqlite.storeService","borogove/persistence/Sqlite.hx",1308,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1323_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",1323,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1318_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",1318,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1342_hydrateReactions,"borogove.persistence.Sqlite","hydrateReactions",0x7d654d7d,"borogove.persistence.Sqlite.hydrateReactions","borogove/persistence/Sqlite.hx",1342,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1370_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",1370,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1354_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",1354,0x605e3eb4)
+static const ::String _hx_array_data_99390348_241[] = {
 	HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3),
 };
-static const ::String _hx_array_data_99390348_227[] = {
+static const ::String _hx_array_data_99390348_242[] = {
 	HX_(" OR (mam_id=? AND mam_by=?)",0f,bb,c5,e5),
 };
-static const ::String _hx_array_data_99390348_228[] = {
+static const ::String _hx_array_data_99390348_243[] = {
 	HX_(" OR stanza_id=?",6a,1d,f2,5b),
 };
-static const ::String _hx_array_data_99390348_229[] = {
+static const ::String _hx_array_data_99390348_244[] = {
 	HX_(" ORDER BY created_at, ROWID",00,65,8d,0e),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1274_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",1274,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1276_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",1276,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1243_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",1243,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1288_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",1288,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1291_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",1291,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1323_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",1323,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1313_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",1313,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1331_hydrateCaps,"borogove.persistence.Sqlite","hydrateCaps",0x4e204c2e,"borogove.persistence.Sqlite.hydrateCaps","borogove/persistence/Sqlite.hx",1331,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_41_prepare,"borogove.persistence.Sqlite","prepare",0xa1479e61,"borogove.persistence.Sqlite.prepare","borogove/persistence/Sqlite.hx",41,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_34_boot,"borogove.persistence.Sqlite","boot",0xf1784b18,"borogove.persistence.Sqlite.boot","borogove/persistence/Sqlite.hx",34,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1443_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",1443,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1445_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",1445,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1407_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",1407,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1463_hydrateEncryption,"borogove.persistence.Sqlite","hydrateEncryption",0xcefb1450,"borogove.persistence.Sqlite.hydrateEncryption","borogove/persistence/Sqlite.hx",1463,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1496_hydrateMessagesAndLoadMeta,"borogove.persistence.Sqlite","hydrateMessagesAndLoadMeta",0xd81f0329,"borogove.persistence.Sqlite.hydrateMessagesAndLoadMeta","borogove/persistence/Sqlite.hx",1496,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1511_messagesLoadMeta,"borogove.persistence.Sqlite","messagesLoadMeta",0xabfee4dd,"borogove.persistence.Sqlite.messagesLoadMeta","borogove/persistence/Sqlite.hx",1511,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1512_messagesLoadMeta,"borogove.persistence.Sqlite","messagesLoadMeta",0xabfee4dd,"borogove.persistence.Sqlite.messagesLoadMeta","borogove/persistence/Sqlite.hx",1512,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1499_messagesLoadMeta,"borogove.persistence.Sqlite","messagesLoadMeta",0xabfee4dd,"borogove.persistence.Sqlite.messagesLoadMeta","borogove/persistence/Sqlite.hx",1499,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1535_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",1535,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1538_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",1538,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1582_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",1582,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1569_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",1569,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1590_hydrateCaps,"borogove.persistence.Sqlite","hydrateCaps",0x4e204c2e,"borogove.persistence.Sqlite.hydrateCaps","borogove/persistence/Sqlite.hx",1590,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1902_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1902,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1904_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1904,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1911_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1911,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1914_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1914,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1915_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1915,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1898_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1898,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1899_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1899,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1900_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1900,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1901_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1901,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1903_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1903,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1905_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1905,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1906_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1906,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1907_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1907,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1908_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1908,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1909_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1909,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1910_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1910,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1912_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1912,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1913_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1913,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1896_insertMessages,"borogove.persistence.Sqlite","insertMessages",0x81ecdb8b,"borogove.persistence.Sqlite.insertMessages","borogove/persistence/Sqlite.hx",1896,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_49_prepare,"borogove.persistence.Sqlite","prepare",0xa1479e61,"borogove.persistence.Sqlite.prepare","borogove/persistence/Sqlite.hx",49,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1819_col,"borogove.persistence.Sqlite","col",0xf103981a,"borogove.persistence.Sqlite.col","borogove/persistence/Sqlite.hx",1819,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1823_messageColumnsString,"borogove.persistence.Sqlite","messageColumnsString",0xa5c40a2d,"borogove.persistence.Sqlite.messageColumnsString","borogove/persistence/Sqlite.hx",1823,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1827_messageColumns,"borogove.persistence.Sqlite","messageColumns",0xecb5983c,"borogove.persistence.Sqlite.messageColumns","borogove/persistence/Sqlite.hx",1827,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1844_messageColumns,"borogove.persistence.Sqlite","messageColumns",0xecb5983c,"borogove.persistence.Sqlite.messageColumns","borogove/persistence/Sqlite.hx",1844,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1889_insertCol,"borogove.persistence.Sqlite","insertCol",0x3b1975e1,"borogove.persistence.Sqlite.insertCol","borogove/persistence/Sqlite.hx",1889,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_1893_originalMessage,"borogove.persistence.Sqlite","originalMessage",0x21883c50,"borogove.persistence.Sqlite.originalMessage","borogove/persistence/Sqlite.hx",1893,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_42_boot,"borogove.persistence.Sqlite","boot",0xf1784b18,"borogove.persistence.Sqlite.boot","borogove/persistence/Sqlite.hx",42,0x605e3eb4)
 namespace borogove{
 namespace persistence{
 
 void Sqlite_obj::__construct(::String dbfile,::Dynamic media){
-            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_18) HXARGC(1)
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_30) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic exec){
-            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_17, ::Dynamic,exec) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_29, ::Dynamic,exec) HXARGC(1)
             			::Dynamic _hx_run( ::haxe::iterators::ArrayIterator iter){
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::Dynamic _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_87_new)
-HXLINE(  88)					if ((version < 1)) {
-HXLINE(  89)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_2,10));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_95_new)
+HXLINE(  96)					if ((version < 1)) {
+HXLINE(  97)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_2,10));
             					}
-HXLINE( 163)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 171)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_164_new)
-HXLINE( 165)					if ((version < 2)) {
-HXLINE( 166)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_4,4));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_172_new)
+HXLINE( 173)					if ((version < 2)) {
+HXLINE( 174)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_4,4));
             					}
-HXLINE( 171)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 179)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_172_new)
-HXLINE( 173)					if ((version < 3)) {
-HXLINE( 174)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_6,2));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_180_new)
+HXLINE( 181)					if ((version < 3)) {
+HXLINE( 182)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_6,2));
             					}
-HXLINE( 177)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 185)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_178_new)
-HXLINE( 179)					if ((version < 4)) {
-HXLINE( 180)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_8,2));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_186_new)
+HXLINE( 187)					if ((version < 4)) {
+HXLINE( 188)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_8,2));
             					}
-HXLINE( 183)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 191)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_4, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_184_new)
-HXLINE( 185)					if ((version < 5)) {
-HXLINE( 186)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_10,2));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_192_new)
+HXLINE( 193)					if ((version < 5)) {
+HXLINE( 194)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_10,2));
             					}
-HXLINE( 189)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 197)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_5, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_190_new)
-HXLINE( 191)					if ((version < 6)) {
-HXLINE( 192)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_12,2));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_198_new)
+HXLINE( 199)					if ((version < 6)) {
+HXLINE( 200)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_12,2));
             					}
-HXLINE( 195)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 203)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_6, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_196_new)
-HXLINE( 197)					if ((version < 7)) {
-HXLINE( 198)						return exec(::Array_obj< ::String >::__new(3)->init(0,HX_("DELETE FROM messages WHERE rowid IN (SELECT rowid FROM (select rowid, ROW_NUMBER() OVER (PARTITION BY account_id, stanza_id ORDER BY (mam_id <> '') DESC, rowid DESC) AS rn FROM messages WHERE direction=1 AND stanza_id<>'') WHERE rn<>1)",a7,3d,cf,20))->init(1,(HX_("CREATE UNIQUE INDEX messages_stanza_id_sent_unique ON messages (account_id, stanza_id) WHERE stanza_id<>'' AND direction=",9b,b1,a7,f0) + HX_("1",31,00,00,00)))->init(2,HX_("PRAGMA user_version = 7",3c,cd,bd,7c)));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_204_new)
+HXLINE( 205)					if ((version < 7)) {
+HXLINE( 206)						return exec(::Array_obj< ::String >::__new(3)->init(0,HX_("DELETE FROM messages WHERE rowid IN (SELECT rowid FROM (select rowid, ROW_NUMBER() OVER (PARTITION BY account_id, stanza_id ORDER BY (mam_id <> '') DESC, rowid DESC) AS rn FROM messages WHERE direction=1 AND stanza_id<>'') WHERE rn<>1)",a7,3d,cf,20))->init(1,(HX_("CREATE UNIQUE INDEX messages_stanza_id_sent_unique ON messages (account_id, stanza_id) WHERE stanza_id<>'' AND direction=",9b,b1,a7,f0) + HX_("1",31,00,00,00)))->init(2,HX_("PRAGMA user_version = 7",3c,cd,bd,7c)));
             					}
-HXLINE( 202)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 210)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_12, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_203_new)
-HXLINE( 204)					if ((version < 8)) {
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_211_new)
+HXLINE( 212)					if ((version < 8)) {
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::Dynamic,exec) HXARGC(1)
             						::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_207_new)
-HXLINE( 207)							return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_16,1));
+            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_215_new)
+HXLINE( 215)							return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_16,1));
             						}
             						HX_END_LOCAL_FUNC1(return)
 
@@ -491,131 +582,252 @@ HXLINE( 207)							return exec(::Array_obj< ::String >::fromData( _hx_array_data
             						::Dynamic _hx_run( ::haxe::iterators::ArrayIterator rows){
             							HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_9, ::Dynamic,exec,::Array< ::Dynamic>,toInsert) HXARGC(1)
             							::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            								HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_220_new)
-HXLINE( 220)								if ((toInsert->__get(0).StaticCast< ::Array< ::String > >()->length < 1)) {
-HXLINE( 220)									return null();
+            								HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_228_new)
+HXLINE( 228)								if ((toInsert->__get(0).StaticCast< ::Array< ::String > >()->length < 1)) {
+HXLINE( 228)									return null();
             								}
             								else {
-HXLINE( 220)									return exec(toInsert->__get(0).StaticCast< ::Array< ::String > >());
+HXLINE( 228)									return exec(toInsert->__get(0).StaticCast< ::Array< ::String > >());
             								}
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_208_new)
-HXLINE( 209)							::Dynamic promise = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
-HXLINE( 210)							::Array< ::Dynamic> toInsert = ::Array_obj< ::Dynamic>::__new(1)->init(0,::Array_obj< ::String >::__new(0));
-HXLINE( 211)							::String sortId = HX_("a ",9f,54,00,00);
-HXLINE( 212)							while((rows->current < rows->array->get_length())){
-HXLINE( 212)								 ::Dynamic row = rows->array->__get(rows->current++);
-HXLINE( 213)								sortId = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(sortId,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
-HXLINE( 214)								::Array< ::String > toInsert1 = toInsert->__get(0).StaticCast< ::Array< ::String > >();
-HXDLIN( 214)								::String _hx_tmp = ((HX_("UPDATE messages SET sort_id='",6b,00,c7,78) + ::StringTools_obj::replace(sortId,HX_("'",27,00,00,00),HX_("''",20,22,00,00))) + HX_("' WHERE ROWID=",1a,f5,65,79));
-HXDLIN( 214)								toInsert1->push( ::Dynamic((_hx_tmp + row->__Field(HX_("rowid",75,78,67,ed),::hx::paccDynamic))));
-HXLINE( 215)								if ((toInsert->__get(0).StaticCast< ::Array< ::String > >()->length >= 10000)) {
+            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_216_new)
+HXLINE( 217)							::Dynamic promise = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 218)							::Array< ::Dynamic> toInsert = ::Array_obj< ::Dynamic>::__new(1)->init(0,::Array_obj< ::String >::__new(0));
+HXLINE( 219)							::String sortId = HX_("a ",9f,54,00,00);
+HXLINE( 220)							while((rows->current < rows->array->get_length())){
+HXLINE( 220)								 ::Dynamic row = rows->array->__get(rows->current++);
+HXLINE( 221)								sortId = ::_FractionalIndexing::FractionalIndexing_Fields__obj::between(sortId,null(),HX_(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",6f,61,48,0a));
+HXLINE( 222)								::Array< ::String > toInsert1 = toInsert->__get(0).StaticCast< ::Array< ::String > >();
+HXDLIN( 222)								::String _hx_tmp = ((HX_("UPDATE messages SET sort_id='",6b,00,c7,78) + ::StringTools_obj::replace(sortId,HX_("'",27,00,00,00),HX_("''",20,22,00,00))) + HX_("' WHERE ROWID=",1a,f5,65,79));
+HXDLIN( 222)								toInsert1->push( ::Dynamic((_hx_tmp + row->__Field(HX_("rowid",75,78,67,ed),::hx::paccDynamic))));
+HXLINE( 223)								if ((toInsert->__get(0).StaticCast< ::Array< ::String > >()->length >= 10000)) {
             									HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_8, ::Dynamic,exec,::Array< ::Dynamic>,toInsert) HXARGC(1)
             									::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            										HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_216_new)
-HXLINE( 216)										return exec(toInsert->__get(0).StaticCast< ::Array< ::String > >());
+            										HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_224_new)
+HXLINE( 224)										return exec(toInsert->__get(0).StaticCast< ::Array< ::String > >());
             									}
             									HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 216)									promise = ::thenshim::_Promise::Promise_Impl__obj::then(promise, ::Dynamic(new _hx_Closure_8(exec,toInsert)),null());
-HXLINE( 217)									toInsert[0] = ::Array_obj< ::String >::__new(0);
+HXLINE( 224)									promise = ::thenshim::_Promise::Promise_Impl__obj::then(promise, ::Dynamic(new _hx_Closure_8(exec,toInsert)),null());
+HXLINE( 225)									toInsert[0] = ::Array_obj< ::String >::__new(0);
             								}
             							}
-HXLINE( 220)							return ::thenshim::_Promise::Promise_Impl__obj::then(promise, ::Dynamic(new _hx_Closure_9(exec,toInsert)),null());
+HXLINE( 228)							return ::thenshim::_Promise::Promise_Impl__obj::then(promise, ::Dynamic(new _hx_Closure_9(exec,toInsert)),null());
             						}
             						HX_END_LOCAL_FUNC1(return)
 
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_11, ::Dynamic,exec) HXARGC(1)
             						::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_222_new)
-HXLINE( 222)							return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_21,1));
+            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_230_new)
+HXLINE( 230)							return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_21,1));
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 205)						return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_22,2)), ::Dynamic(new _hx_Closure_7(exec)),null()), ::Dynamic(new _hx_Closure_10(exec)),null()), ::Dynamic(new _hx_Closure_11(exec)),null());
+HXLINE( 213)						return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_22,2)), ::Dynamic(new _hx_Closure_7(exec)),null()), ::Dynamic(new _hx_Closure_10(exec)),null()), ::Dynamic(new _hx_Closure_11(exec)),null());
             					}
-HXLINE( 225)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 233)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_13, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_226_new)
-HXLINE( 227)					if ((version < 9)) {
-HXLINE( 229)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_24,2));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_234_new)
+HXLINE( 235)					if ((version < 9)) {
+HXLINE( 237)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_24,2));
             					}
-HXLINE( 232)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 240)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_14, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_233_new)
-HXLINE( 234)					if ((version < 10)) {
-HXLINE( 235)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_26,2));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_241_new)
+HXLINE( 242)					if ((version < 10)) {
+HXLINE( 243)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_26,2));
             					}
-HXLINE( 238)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 246)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_15, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_239_new)
-HXLINE( 240)					if ((version < 11)) {
-HXLINE( 241)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_28,4));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_247_new)
+HXLINE( 248)					if ((version < 11)) {
+HXLINE( 249)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_28,4));
             					}
-HXLINE( 258)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 266)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_16, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_259_new)
-HXLINE( 260)					if ((version < 12)) {
-HXLINE( 261)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_30,2));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_267_new)
+HXLINE( 268)					if ((version < 12)) {
+HXLINE( 269)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_30,2));
+            					}
+HXLINE( 272)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_17, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_273_new)
+HXLINE( 274)					if ((version < 13)) {
+HXLINE( 275)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_32,2));
+            					}
+HXLINE( 278)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_18, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_279_new)
+HXLINE( 280)					if ((version < 14)) {
+HXLINE( 281)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_34,2));
+            					}
+HXLINE( 288)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_19, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_289_new)
+HXLINE( 290)					if ((version < 15)) {
+HXLINE( 291)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_36,2));
+            					}
+HXLINE( 298)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_20, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_299_new)
+HXLINE( 300)					if ((version < 16)) {
+HXLINE( 301)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_38,2));
+            					}
+HXLINE( 310)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_21, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_311_new)
+HXLINE( 312)					if ((version < 17)) {
+HXLINE( 313)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_40,2));
             					}
-HXLINE( 264)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 323)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_85_new)
-HXLINE(  86)				int version;
-HXDLIN(  86)				 ::Dynamic tmp = iter->array->__get(iter->current++);
-HXDLIN(  86)				 ::Dynamic tmp1;
-HXDLIN(  86)				if (::hx::IsNotNull( tmp )) {
-HXLINE(  86)					tmp1 =  ::Dynamic(tmp->__Field(HX_("user_version",e4,95,f3,73),::hx::paccDynamic));
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_22, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_324_new)
+HXLINE( 325)					if ((version < 18)) {
+HXLINE( 326)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_42,2));
+            					}
+HXLINE( 334)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_23, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_335_new)
+HXLINE( 336)					if ((version < 19)) {
+HXLINE( 337)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_44,2));
+            					}
+HXLINE( 345)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_24, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_346_new)
+HXLINE( 347)					if ((version < 20)) {
+HXLINE( 348)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_46,2));
+            					}
+HXLINE( 358)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_25, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_359_new)
+HXLINE( 360)					if ((version < 21)) {
+HXLINE( 361)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_48,2));
+            					}
+HXLINE( 364)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_26, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_365_new)
+HXLINE( 366)					if ((version < 22)) {
+HXLINE( 367)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_50,2));
+            					}
+HXLINE( 370)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_27, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_371_new)
+HXLINE( 372)					if ((version < 23)) {
+HXLINE( 373)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_52,2));
+            					}
+HXLINE( 376)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_28, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_377_new)
+HXLINE( 378)					if ((version < 24)) {
+HXLINE( 379)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_54,8));
+            					}
+HXLINE( 388)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_93_new)
+HXLINE(  94)				int version;
+HXDLIN(  94)				 ::Dynamic tmp = iter->array->__get(iter->current++);
+HXDLIN(  94)				 ::Dynamic tmp1;
+HXDLIN(  94)				if (::hx::IsNotNull( tmp )) {
+HXLINE(  94)					tmp1 =  ::Dynamic(tmp->__Field(HX_("user_version",e4,95,f3,73),::hx::paccDynamic));
             				}
             				else {
-HXLINE(  86)					tmp1 = null();
+HXLINE(  94)					tmp1 = null();
             				}
-HXDLIN(  86)				 ::Dynamic tmp2 = ::Std_obj::parseInt(( (::String)(tmp1) ));
-HXDLIN(  86)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE(  86)					version = ( (int)(tmp2) );
+HXDLIN(  94)				 ::Dynamic tmp2 = ::Std_obj::parseInt(( (::String)(tmp1) ));
+HXDLIN(  94)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE(  94)					version = ( (int)(tmp2) );
             				}
             				else {
-HXLINE(  86)					version = 0;
+HXLINE(  94)					version = 0;
             				}
-HXLINE(  87)				return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::resolve(null()), ::Dynamic(new _hx_Closure_0(exec,version)),null()), ::Dynamic(new _hx_Closure_1(exec,version)),null()), ::Dynamic(new _hx_Closure_2(exec,version)),null()), ::Dynamic(new _hx_Closure_3(exec,version)),null()), ::Dynamic(new _hx_Closure_4(exec,version)),null()), ::Dynamic(new _hx_Closure_5(exec,version)),null()), ::Dynamic(new _hx_Closure_6(exec,version)),null()), ::Dynamic(new _hx_Closure_12(exec,version)),null()), ::Dynamic(new _hx_Closure_13(exec,version)),null()), ::Dynamic(new _hx_Closure_14(exec,version)),null()), ::Dynamic(new _hx_Closure_15(exec,version)),null()), ::Dynamic(new _hx_Closure_16(exec,version)),null());
+HXLINE(  95)				return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::resolve(null()), ::Dynamic(new _hx_Closure_0(exec,version)),null()), ::Dynamic(new _hx_Closure_1(exec,version)),null()), ::Dynamic(new _hx_Closure_2(exec,version)),null()), ::Dynamic(new _hx_Closure_3(exec,version)),null()), ::Dynamic(new _hx_Closure_4(exec,version)),null()), ::Dynamic(new _hx_Closure_5(exec,version)),null()), ::Dynamic(new _hx_Closure_6(exec,version)),null()), ::Dynamic(new _hx_Closure_12(exec,version)),null()), ::Dynamic(new _hx_Closure_13(exec,version)),null()), ::Dynamic(new _hx_Closure_14(exec,version)),null()), ::Dynamic(new _hx_Closure_15(exec,version)),null()), ::Dynamic(new _hx_Closure_16(exec,version)),null()), ::Dynamic(new _hx_Closure_17(exec,version)),null()), ::Dynamic(new _hx_Closure_18(exec,version)),null()), ::Dynamic(new _hx_Closure_19(exec,version)),null()), ::Dynamic(new _hx_Closure_20(exec,version)),null()), ::Dynamic(new _hx_Closure_21(exec,version)),null()), ::Dynamic(new _hx_Closure_22(exec,version)),null()), ::Dynamic(new _hx_Closure_23(exec,version)),null()), ::Dynamic(new _hx_Closure_24(exec,version)),null()), ::Dynamic(new _hx_Closure_25(exec,version)),null()), ::Dynamic(new _hx_Closure_26(exec,version)),null()), ::Dynamic(new _hx_Closure_27(exec,version)),null()), ::Dynamic(new _hx_Closure_28(exec,version)),null());
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_84_new)
-HXLINE(  84)			return ::thenshim::_Promise::Promise_Impl__obj::then(exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_33,1)), ::Dynamic(new _hx_Closure_17(exec)),null());
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_92_new)
+HXLINE(  92)			return ::thenshim::_Promise::Promise_Impl__obj::then(exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_57,1)), ::Dynamic(new _hx_Closure_29(exec)),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_34_new)
-HXLINE(1111)		this->smStoreIdNext = HX_("a ",9f,54,00,00);
-HXLINE(1110)		this->smStoreNext = null();
-HXLINE(1109)		this->smStoreInProgress = false;
-HXLINE( 305)		this->storeChatTimer = null();
-HXLINE( 304)		this->storeChatBuffer =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(  37)		this->storeMessagesSerialized =  ::borogove::AsyncLock_obj::__alloc( HX_CTX );
-HXLINE(  82)		this->media = media;
-HXLINE(  83)		::borogove::persistence::MediaStore_obj::setKV(media,::hx::ObjectPtr<OBJ_>(this));
-HXLINE(  84)		this->db =  ::borogove::persistence::SqliteDriver_obj::__alloc( HX_CTX ,dbfile, ::Dynamic(new _hx_Closure_18()));
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_42_new)
+HXLINE(1851)		this->versionedMessageColumns = HX_("\n\t\tcorrection_id AS stanza_id,\n\t\tjson_group_object(\n\t\t\tCASE\n\t\t\t\tWHEN versions.mam_id IS NULL OR versions.mam_id=''\n\t\t\t\tTHEN versions.stanza_id\n\t\t\t\tELSE versions.mam_id\n\t\t\tEND,\n\t\t\tjson_object(\n\t\t\t\t'time_sent', strftime('%FT%H:%M:%fZ', versions.time_sent / 1000.0, 'unixepoch'),\n\t\t\t\t'time_received', strftime('%FT%H:%M:%fZ', versions.time_received / 1000.0, 'unixepoch'),\n\t\t\t\t'sort_id', versions.sort_id,\n\t\t\t\t'stanza', versions.stanza,\n\t\t\t\t'encryption', json(versions.encryption),\n\t\t\t\t'debug', json(versions.debug)\n\t\t\t)\n\t\t) AS versions,\n\t\tmessages.direction,\n\t\tmessages.type,\n\t\tmessages.status,\n\t\tmessages.status_text,\n\t\tstrftime('%FT%H:%M:%fZ', messages.time_sent / 1000.0, 'unixepoch') AS time_sent,\n\t\tstrftime('%FT%H:%M:%fZ', messages.time_received / 1000.0, 'unixepoch') AS time_received,\n\t\tmessages.sender_id,\n\t\tmessages.mam_id,\n\t\tmessages.mam_by,\n\t\tmessages.sort_id,\n\t\tmessages.sync_point,\n\t\tMAX(versions.time_received),\n\t\tjson(versions.encryption) AS encryption,\n\t\tjson(versions.debug) AS debug,\n\t\tversions.stanza",6d,c6,20,2f);
+HXLINE(1275)		this->smStoreIdNext = HX_("a ",9f,54,00,00);
+HXLINE(1274)		this->smStoreNext = null();
+HXLINE(1273)		this->smStoreInProgress = false;
+HXLINE( 434)		this->storeChatTimer = null();
+HXLINE( 433)		this->storeChatBuffer =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(  45)		this->storeMessagesSerialized =  ::borogove::AsyncLock_obj::__alloc( HX_CTX );
+HXLINE(  90)		this->media = media;
+HXLINE(  91)		::borogove::persistence::MediaStore_obj::setKV(media,::hx::ObjectPtr<OBJ_>(this));
+HXLINE(  92)		this->db =  ::borogove::persistence::SqliteDriver_obj::__alloc( HX_CTX ,dbfile, ::Dynamic(new _hx_Closure_30()));
             	}
 
 Dynamic Sqlite_obj::__CreateEmpty() { return new Sqlite_obj; }
@@ -642,6 +854,8 @@ static ::borogove::Persistence_obj _hx_borogove_persistence_Sqlite__hx_borogove_
 	( ::Dynamic (::hx::Object::*)(::String,::String))&::borogove::persistence::Sqlite_obj::clearMemberPresence,
 	( ::Dynamic (::hx::Object::*)(::String, ::borogove::Chat,bool))&::borogove::persistence::Sqlite_obj::getMembers,
 	( ::Dynamic (::hx::Object::*)(::String, ::borogove::Chat,::Array< ::String >))&::borogove::persistence::Sqlite_obj::getMemberDetails,
+	( ::Dynamic (::hx::Object::*)(::String, ::borogove::Chat,::String,bool))&::borogove::persistence::Sqlite_obj::storeVoiceRequest,
+	( ::Dynamic (::hx::Object::*)(::String, ::borogove::Chat))&::borogove::persistence::Sqlite_obj::listVoiceRequests,
 	( ::Dynamic (::hx::Object::*)(::String,::Array< ::Dynamic>))&::borogove::persistence::Sqlite_obj::getChatsUnreadDetails,
 	( ::Dynamic (::hx::Object::*)(::String, ::borogove::ReactionUpdate))&::borogove::persistence::Sqlite_obj::storeReaction,
 	( ::Dynamic (::hx::Object::*)(::String,::Array< ::Dynamic>))&::borogove::persistence::Sqlite_obj::storeMessages,
@@ -651,12 +865,13 @@ static ::borogove::Persistence_obj _hx_borogove_persistence_Sqlite__hx_borogove_
 	( ::Dynamic (::hx::Object::*)(::String,::String, ::borogove::ChatMessage))&::borogove::persistence::Sqlite_obj::getMessagesBefore,
 	( ::Dynamic (::hx::Object::*)(::String,::String, ::borogove::ChatMessage))&::borogove::persistence::Sqlite_obj::getMessagesAfter,
 	( ::Dynamic (::hx::Object::*)(::String, ::borogove::ChatMessage))&::borogove::persistence::Sqlite_obj::getMessagesAround,
-	( ::Dynamic (::hx::Object::*)(::String,::Array< unsigned char >))&::borogove::persistence::Sqlite_obj::hasMedia,
-	( ::Dynamic (::hx::Object::*)(::String,::Array< unsigned char >))&::borogove::persistence::Sqlite_obj::storeMedia,
+	( ::Dynamic (::hx::Object::*)(::String,int))&::borogove::persistence::Sqlite_obj::getMessagesByStatus,
+	( ::Dynamic (::hx::Object::*)( ::borogove::Hash))&::borogove::persistence::Sqlite_obj::hasMedia,
+	( ::Dynamic (::hx::Object::*)(::String,::Dynamic))&::borogove::persistence::Sqlite_obj::storeMedia,
 	( ::Dynamic (::hx::Object::*)(::String,::Array< unsigned char >))&::borogove::persistence::Sqlite_obj::removeMedia,
 	( void (::hx::Object::*)( ::borogove::Caps))&::borogove::persistence::Sqlite_obj::storeCaps,
 	( ::Dynamic (::hx::Object::*)(::String))&::borogove::persistence::Sqlite_obj::getCaps,
-	( ::Dynamic (::hx::Object::*)(::String,::String,::String,::String))&::borogove::persistence::Sqlite_obj::storeLogin,
+	( ::Dynamic (::hx::Object::*)(::String,::String,::String,::String,::String))&::borogove::persistence::Sqlite_obj::storeLogin,
 	( ::Dynamic (::hx::Object::*)(::String))&::borogove::persistence::Sqlite_obj::getLogin,
 	( ::Dynamic (::hx::Object::*)(::String,bool))&::borogove::persistence::Sqlite_obj::removeAccount,
 	( ::Dynamic (::hx::Object::*)())&::borogove::persistence::Sqlite_obj::listAccounts,
@@ -686,44 +901,44 @@ void *Sqlite_obj::_hx_getInterface(int inHash) {
 ::Dynamic Sqlite_obj::get(::String k){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator iter){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_272_get)
-HXLINE( 273)			while((iter->current < iter->array->get_length())){
-HXLINE( 274)				return  ::Dynamic(iter->array->__get(iter->current++)->__Field(HX_("v",76,00,00,00),::hx::paccDynamic));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_396_get)
+HXLINE( 397)			while((iter->current < iter->array->get_length())){
+HXLINE( 398)				return  ::Dynamic(iter->array->__get(iter->current++)->__Field(HX_("v",76,00,00,00),::hx::paccDynamic));
             			}
-HXLINE( 276)			return null();
+HXLINE( 400)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_272_get)
-HXDLIN( 272)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT v FROM keyvaluepairs WHERE k=? LIMIT 1",5f,f1,14,07),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0()),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_396_get)
+HXDLIN( 396)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT v FROM keyvaluepairs WHERE k=? LIMIT 1",5f,f1,14,07),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,get,return )
 
 ::Dynamic Sqlite_obj::set(::String k,::String v){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_282_set)
-HXDLIN( 282)		if (::hx::IsNull( v )) {
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_406_set)
+HXDLIN( 406)		if (::hx::IsNull( v )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			bool _hx_run( ::haxe::iterators::ArrayIterator _){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_283_set)
-HXLINE( 283)				return true;
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_407_set)
+HXLINE( 407)				return true;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 283)			return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("DELETE FROM keyvaluepairs WHERE k=?",1a,ab,19,78),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE( 407)			return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("DELETE FROM keyvaluepairs WHERE k=?",1a,ab,19,78),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0()),null());
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             			bool _hx_run( ::haxe::iterators::ArrayIterator _){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_285_set)
-HXLINE( 285)				return true;
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_409_set)
+HXLINE( 409)				return true;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 285)			return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("INSERT OR REPLACE INTO keyvaluepairs VALUES (?,?)",18,81,b5,d3),::cpp::VirtualArray_obj::__new(2)->init(0,k)->init(1,v)), ::Dynamic(new _hx_Closure_1()),null());
+HXLINE( 409)			return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("INSERT OR REPLACE INTO keyvaluepairs VALUES (?,?)",18,81,b5,d3),::cpp::VirtualArray_obj::__new(2)->init(0,k)->init(1,v)), ::Dynamic(new _hx_Closure_1()),null());
             		}
-HXLINE( 282)		return null();
+HXLINE( 406)		return null();
             	}
 
 
@@ -732,25 +947,25 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,set,return )
 ::Dynamic Sqlite_obj::syncPoint(::String accountId,::String chatId){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		 ::borogove::ChatMessage _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_301_syncPoint)
-HXLINE( 301)			return _gthis->hydrateMessages(accountId,result)->__get(0).StaticCast<  ::borogove::ChatMessage >();
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_430_syncPoint)
+HXLINE( 430)			return _gthis->hydrateMessages(accountId,result)->__get(0).StaticCast<  ::borogove::ChatMessage >();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_290_syncPoint)
-HXDLIN( 290)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 291)		::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
-HXLINE( 292)		::String q = HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point, sort_id FROM messages WHERE mam_id IS NOT NULL AND mam_id<>'' AND sync_point AND account_id=?",a9,47,05,54);
-HXLINE( 293)		if (::hx::IsNull( chatId )) {
-HXLINE( 294)			q = (HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point, sort_id FROM messages WHERE mam_id IS NOT NULL AND mam_id<>'' AND sync_point AND account_id=?",a9,47,05,54) + HX_(" AND mam_by=?",48,20,9b,c4));
-HXLINE( 295)			params->push(accountId);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_414_syncPoint)
+HXDLIN( 414)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 415)		::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
+HXLINE( 416)		::String q = ((HX_("\n\t\t\tSELECT\n\t\t\t\t",4f,6c,f2,53) + ::borogove::persistence::Sqlite_obj::messageColumnsString(null())) + HX_("\n\t\t\tFROM messages\n\t\t\tWHERE mam_id IS NOT NULL AND mam_id<>'' AND sync_point AND account_id=?\n\t\t",81,9a,e7,72));
+HXLINE( 422)		if (::hx::IsNull( chatId )) {
+HXLINE( 423)			q = (q + HX_(" AND mam_by=?",48,20,9b,c4));
+HXLINE( 424)			params->push(accountId);
             		}
             		else {
-HXLINE( 297)			q = (HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point, sort_id FROM messages WHERE mam_id IS NOT NULL AND mam_id<>'' AND sync_point AND account_id=?",a9,47,05,54) + HX_(" AND mam_by=?",48,20,9b,c4));
-HXLINE( 298)			params->push(chatId);
+HXLINE( 426)			q = (q + HX_(" AND mam_by=?",48,20,9b,c4));
+HXLINE( 427)			params->push(chatId);
             		}
-HXLINE( 300)		q = (q + HX_(" ORDER BY sort_id DESC LIMIT 1",78,bf,6d,71));
-HXLINE( 301)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
+HXLINE( 429)		q = (q + HX_(" ORDER BY sort_id DESC LIMIT 1",78,bf,6d,71));
+HXLINE( 430)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
             	}
 
 
@@ -759,362 +974,362 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,syncPoint,return )
 void Sqlite_obj::storeChats(::String accountId,::Array< ::Dynamic> chats){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_317_storeChats)
-HXLINE( 318)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 319)			{
-HXLINE( 319)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 319)					q->flush();
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_446_storeChats)
+HXLINE( 447)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 448)			{
+HXLINE( 448)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 448)					q->flush();
             				}
-HXDLIN( 319)				if (::hx::IsNull( q->b )) {
-HXLINE( 319)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_50,1);
+HXDLIN( 448)				if (::hx::IsNull( q->b )) {
+HXLINE( 448)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_74,1);
             				}
             				else {
-HXLINE( 319)					q->b->push(HX_("INSERT OR REPLACE INTO chats VALUES ",3b,7d,10,d4));
+HXLINE( 448)					q->b->push(HX_("INSERT OR REPLACE INTO chats VALUES ",3b,7d,10,d4));
             				}
             			}
-HXLINE( 320)			bool first = true;
-HXLINE( 321)			{
-HXLINE( 321)				 ::Dynamic _ = _gthis->storeChatBuffer->iterator();
-HXDLIN( 321)				while(( (bool)(_->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 321)					_->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE( 322)					if (!(first)) {
-HXLINE( 322)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 322)							q->flush();
+HXLINE( 449)			bool first = true;
+HXLINE( 450)			{
+HXLINE( 450)				 ::Dynamic _ = _gthis->storeChatBuffer->iterator();
+HXDLIN( 450)				while(( (bool)(_->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 450)					_->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE( 451)					if (!(first)) {
+HXLINE( 451)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 451)							q->flush();
             						}
-HXDLIN( 322)						if (::hx::IsNull( q->b )) {
-HXLINE( 322)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_51,1);
+HXDLIN( 451)						if (::hx::IsNull( q->b )) {
+HXLINE( 451)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_75,1);
             						}
             						else {
-HXLINE( 322)							q->b->push(HX_(",",2c,00,00,00));
+HXLINE( 451)							q->b->push(HX_(",",2c,00,00,00));
             						}
             					}
-HXLINE( 323)					first = false;
-HXLINE( 324)					{
-HXLINE( 324)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 324)							q->flush();
+HXLINE( 452)					first = false;
+HXLINE( 453)					{
+HXLINE( 453)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 453)							q->flush();
             						}
-HXDLIN( 324)						if (::hx::IsNull( q->b )) {
-HXLINE( 324)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_52,1);
+HXDLIN( 453)						if (::hx::IsNull( q->b )) {
+HXLINE( 453)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_76,1);
             						}
             						else {
-HXLINE( 324)							q->b->push(HX_("(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,jsonb(?))",f9,da,31,c1));
+HXLINE( 453)							q->b->push(HX_("(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,jsonb(?))",f9,da,31,c1));
             						}
             					}
             				}
             			}
-HXLINE( 326)			 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
-HXLINE( 327)			::String _hx_tmp = q->toString();
-HXLINE( 328)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 328)			{
-HXLINE( 328)				 ::Dynamic x = _gthis->storeChatBuffer->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 328)				while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 328)					 ::borogove::Chat x1 = ( ( ::borogove::Chat)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE( 329)					 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(x1,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE( 330)					if (::hx::IsNotNull( channel )) {
-HXLINE( 330)						_gthis->storeCaps(channel->disco);
+HXLINE( 455)			 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
+HXLINE( 456)			::String _hx_tmp = q->toString();
+HXLINE( 457)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 457)			{
+HXLINE( 457)				 ::Dynamic x = _gthis->storeChatBuffer->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 457)				while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 457)					 ::borogove::Chat x1 = ( ( ::borogove::Chat)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 458)					 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(x1,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE( 459)					if (::hx::IsNotNull( channel )) {
+HXLINE( 459)						_gthis->storeCaps(channel->disco);
             					}
-HXLINE( 332)					::String accountId1 = accountId;
-HXDLIN( 332)					::String x2 = x1->chatId;
-HXDLIN( 332)					bool row = x1->isTrusted();
-HXDLIN( 332)					::Array< unsigned char > x3 = x1->avatarSha1;
-HXLINE( 333)					::String row1 = x1->getDisplayName();
-HXDLIN( 333)					int x4 = x1->uiState;
-HXDLIN( 333)					bool x5 = x1->isBlocked;
-HXLINE( 334)					::String row2 = x1->extensions->toString();
-HXDLIN( 334)					::String x6 = x1->readUpToId;
-HXDLIN( 334)					::String x7 = x1->readUpToBy;
-HXLINE( 335)					 ::borogove::Caps tmp;
-HXDLIN( 335)					if (::hx::IsNotNull( channel )) {
-HXLINE( 335)						tmp = channel->disco;
+HXLINE( 461)					::String accountId1 = accountId;
+HXDLIN( 461)					::String x2 = x1->chatId;
+HXDLIN( 461)					bool row = x1->isTrusted();
+HXDLIN( 461)					::Array< unsigned char > x3 = x1->avatarSha1;
+HXLINE( 462)					::String row1 = x1->getDisplayName();
+HXDLIN( 462)					int x4 = x1->uiState;
+HXDLIN( 462)					bool x5 = x1->isBlocked;
+HXLINE( 463)					::String row2 = x1->extensions->toString();
+HXDLIN( 463)					::String x6 = x1->readUpToId;
+HXDLIN( 463)					::String x7 = x1->readUpToBy;
+HXLINE( 464)					 ::borogove::Caps tmp;
+HXDLIN( 464)					if (::hx::IsNotNull( channel )) {
+HXLINE( 464)						tmp = channel->disco;
             					}
             					else {
-HXLINE( 335)						tmp = null();
+HXLINE( 464)						tmp = null();
             					}
-HXDLIN( 335)					::Array< unsigned char > row3;
-HXDLIN( 335)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 335)						row3 = tmp->verRaw()->hash;
+HXDLIN( 464)					::Array< unsigned char > row3;
+HXDLIN( 464)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 464)						row3 = tmp->verRaw()->hash;
             					}
             					else {
-HXLINE( 335)						row3 = null();
+HXLINE( 464)						row3 = null();
             					}
-HXLINE( 336)					::String row4 = ( (::String)(::Type_obj::getClassName(::Type_obj::getClass(x1)).split(HX_(".",2e,00,00,00))->pop()) );
-HXLINE( 337)					bool row5 = x1->notificationsFiltered();
-HXDLIN( 337)					bool row6 = x1->notifyMention();
-HXDLIN( 337)					bool row7 = x1->notifyReply();
-HXLINE( 338)					bool x8 = x1->isBookmarked;
-HXLINE( 339)					 ::Dynamic row8 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 465)					::String row4 = ( (::String)(::Type_obj::getClassName(::Type_obj::getClass(x1)).split(HX_(".",2e,00,00,00))->pop()) );
+HXLINE( 466)					bool row5 = x1->notificationsFiltered();
+HXDLIN( 466)					bool row6 = x1->notifyMention();
+HXDLIN( 466)					bool row7 = x1->notifyReply();
+HXLINE( 467)					bool x8 = x1->isBookmarked;
+HXLINE( 468)					 ::Dynamic row8 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("text",ad,cc,f9,4c),x1->status->text)
             						->setFixed(1,HX_("emoji",86,6f,d9,6f),x1->status->emoji));
-HXLINE( 340)					::String row9;
-HXDLIN( 340)					if (::hx::IsNotNull( channel )) {
-HXLINE( 340)						row9 = channel->mavUntil;
+HXLINE( 469)					::String row9;
+HXDLIN( 469)					if (::hx::IsNotNull( channel )) {
+HXLINE( 469)						row9 = channel->mavUntil;
             					}
             					else {
-HXLINE( 340)						row9 = null();
+HXLINE( 469)						row9 = null();
             					}
-HXLINE( 342)					 ::Dynamic t =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE( 343)					{
+HXLINE( 471)					 ::Dynamic t =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE( 472)					{
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,iter_keys) HXARGC(0)
             						bool _hx_run(){
-            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_343_storeChats)
-HXLINE( 343)							return ( (bool)(iter_keys->__get(0)->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
+            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_472_storeChats)
+HXLINE( 472)							return ( (bool)(iter_keys->__get(0)->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) );
             						}
             						HX_END_LOCAL_FUNC0(return)
 
             						HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::Array< ::Dynamic>,iter_map,::Array< ::Dynamic>,iter_keys) HXARGC(0)
             						 ::Dynamic _hx_run(){
-            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_343_storeChats)
-HXLINE( 343)							::String key = ( (::String)(iter_keys->__get(0)->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 343)							 ::Dynamic v =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_472_storeChats)
+HXLINE( 472)							::String key = ( (::String)(iter_keys->__get(0)->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 472)							 ::Dynamic v =  ::Dynamic(::hx::Anon_obj::Create(2)
             								->setFixed(0,HX_("key",9f,89,51,00),key)
             								->setFixed(1,HX_("value",71,7f,b8,31),( (::String)(::haxe::IMap_obj::get(iter_map->__get(0),key)) )));
-HXDLIN( 343)							if (::hx::IsEq( v->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic),::borogove::_Chat::Chat_Fields__obj::nullSentinel )) {
-HXLINE( 343)								return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 472)							if (::hx::IsEq( v->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic),::borogove::_Chat::Chat_Fields__obj::nullSentinel )) {
+HXLINE( 472)								return  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("key",9f,89,51,00),null())
             									->setFixed(1,HX_("value",71,7f,b8,31), ::Dynamic(v->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic))));
             							}
             							else {
-HXLINE( 343)								return v;
+HXLINE( 472)								return v;
             							}
-HXDLIN( 343)							return null();
+HXDLIN( 472)							return null();
             						}
             						HX_END_LOCAL_FUNC0(return)
 
-HXLINE( 343)						::Array< ::Dynamic> iter_map = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 343)						::Array< ::Dynamic> iter_keys = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 343)						::Dynamic map = x1->threads;
-HXDLIN( 343)						iter_map[0] = map;
-HXDLIN( 343)						iter_keys[0] = ::haxe::IMap_obj::keys(map);
-HXDLIN( 343)						 ::Dynamic _g_hasNext =  ::Dynamic(new _hx_Closure_0(iter_keys));
-HXDLIN( 343)						 ::Dynamic _g_next =  ::Dynamic(new _hx_Closure_1(iter_map,iter_keys));
-HXDLIN( 343)						while(( (bool)(_g_hasNext()) )){
-HXLINE( 343)							 ::Dynamic _g1 = _g_next();
-HXDLIN( 343)							::String id = ( (::String)(_g1->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) );
-HXDLIN( 343)							{
-HXLINE( 343)								::String row10;
-HXDLIN( 343)								if (::hx::IsNotNull( id )) {
-HXLINE( 343)									row10 = id;
+HXLINE( 472)						::Array< ::Dynamic> iter_map = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 472)						::Array< ::Dynamic> iter_keys = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 472)						::Dynamic map = x1->threads;
+HXDLIN( 472)						iter_map[0] = map;
+HXDLIN( 472)						iter_keys[0] = ::haxe::IMap_obj::keys(map);
+HXDLIN( 472)						 ::Dynamic _g_hasNext =  ::Dynamic(new _hx_Closure_0(iter_keys));
+HXDLIN( 472)						 ::Dynamic _g_next =  ::Dynamic(new _hx_Closure_1(iter_map,iter_keys));
+HXDLIN( 472)						while(( (bool)(_g_hasNext()) )){
+HXLINE( 472)							 ::Dynamic _g1 = _g_next();
+HXDLIN( 472)							::String id = ( (::String)(_g1->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) );
+HXDLIN( 472)							{
+HXLINE( 472)								::String row10;
+HXDLIN( 472)								if (::hx::IsNotNull( id )) {
+HXLINE( 472)									row10 = id;
             								}
             								else {
-HXLINE( 343)									row10 = HX_("",00,00,00,00);
+HXLINE( 472)									row10 = HX_("",00,00,00,00);
             								}
-HXDLIN( 343)								::Reflect_obj::setField(t,row10, ::Dynamic(_g1->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)));
+HXDLIN( 472)								::Reflect_obj::setField(t,row10, ::Dynamic(_g1->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)));
             							}
             						}
             					}
-HXLINE( 328)					_g->push(::cpp::VirtualArray_obj::__new(17)->init(0,accountId1)->init(1,x2)->init(2,row)->init(3,x3)->init(4,row1)->init(5,x4)->init(6,x5)->init(7,row2)->init(8,x6)->init(9,x7)->init(10,row3)->init(11,row4)->init(12,row5)->init(13,row6)->init(14,row7)->init(15,x8)->init(16,::borogove::JsonPrinter_obj::print( ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 457)					_g->push(::cpp::VirtualArray_obj::__new(17)->init(0,accountId1)->init(1,x2)->init(2,row)->init(3,x3)->init(4,row1)->init(5,x4)->init(6,x5)->init(7,row2)->init(8,x6)->init(9,x7)->init(10,row3)->init(11,row4)->init(12,row5)->init(13,row6)->init(14,row7)->init(15,x8)->init(16,::borogove::JsonPrinter_obj::print( ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("mavUntil",9c,52,56,84),row9)
             						->setFixed(1,HX_("status",32,e7,fb,05),row8)
             						->setFixed(2,HX_("threads",69,f6,91,53),t)),null(),null())));
             				}
             			}
-HXDLIN( 328)			::cpp::VirtualArray _g2 = ::cpp::VirtualArray_obj::__new(0);
-HXDLIN( 328)			{
-HXLINE( 328)				 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 328)				while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 328)					 ::Dynamic x9 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 328)					while(( (bool)(x9->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 328)						_g2->push(x9->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+HXDLIN( 457)			::cpp::VirtualArray _g2 = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN( 457)			{
+HXLINE( 457)				 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 457)				while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 457)					 ::Dynamic x9 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 457)					while(( (bool)(x9->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 457)						_g2->push(x9->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             					}
             				}
             			}
-HXLINE( 326)			_gthis1->exec(_hx_tmp,_g2);
-HXLINE( 351)			_gthis->storeChatTimer = null();
-HXLINE( 352)			_gthis->storeChatBuffer->clear();
+HXLINE( 455)			_gthis1->exec(_hx_tmp,_g2);
+HXLINE( 480)			_gthis->storeChatTimer = null();
+HXLINE( 481)			_gthis->storeChatBuffer->clear();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_308_storeChats)
-HXDLIN( 308)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 309)		if (::hx::IsNotNull( this->storeChatTimer )) {
-HXLINE( 310)			this->storeChatTimer->stop();
-            		}
-HXLINE( 313)		{
-HXLINE( 313)			int _g = 0;
-HXDLIN( 313)			while((_g < chats->length)){
-HXLINE( 313)				 ::borogove::Chat chat = chats->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN( 313)				_g = (_g + 1);
-HXLINE( 314)				this->storeChatBuffer->set(((accountId + HX_("\n",0a,00,00,00)) + chat->chatId),chat);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_437_storeChats)
+HXDLIN( 437)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 438)		if (::hx::IsNotNull( this->storeChatTimer )) {
+HXLINE( 439)			this->storeChatTimer->stop();
+            		}
+HXLINE( 442)		{
+HXLINE( 442)			int _g = 0;
+HXDLIN( 442)			while((_g < chats->length)){
+HXLINE( 442)				 ::borogove::Chat chat = chats->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN( 442)				_g = (_g + 1);
+HXLINE( 443)				this->storeChatBuffer->set(((accountId + HX_("\n",0a,00,00,00)) + chat->chatId),chat);
             			}
             		}
-HXLINE( 317)		this->storeChatTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_2(_gthis,accountId)),100);
+HXLINE( 446)		this->storeChatTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_2(_gthis,accountId)),100);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeChats,(void))
 
 ::String Sqlite_obj::serializePresenceMap( ::haxe::ds::StringMap presence){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_356_serializePresenceMap)
-HXLINE( 357)		 ::Dynamic storePresence =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE( 358)		if (::hx::IsNull( presence )) {
-HXLINE( 358)			return ::borogove::JsonPrinter_obj::print(storePresence,null(),null());
-            		}
-HXLINE( 360)		{
-HXLINE( 360)			::Dynamic map = presence;
-HXDLIN( 360)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 360)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 360)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE( 361)				{
-HXLINE( 361)					::String value = ( ( ::borogove::Stanza)(::haxe::IMap_obj::get(map,key)) )->toString();
-HXDLIN( 361)					::String _hx_tmp;
-HXDLIN( 361)					if (::hx::IsNotNull( key )) {
-HXLINE( 361)						_hx_tmp = key;
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_485_serializePresenceMap)
+HXLINE( 486)		 ::Dynamic storePresence =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE( 487)		if (::hx::IsNull( presence )) {
+HXLINE( 487)			return ::borogove::JsonPrinter_obj::print(storePresence,null(),null());
+            		}
+HXLINE( 489)		{
+HXLINE( 489)			::Dynamic map = presence;
+HXDLIN( 489)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 489)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 489)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 490)				{
+HXLINE( 490)					::String value = ( ( ::borogove::Stanza)(::haxe::IMap_obj::get(map,key)) )->toString();
+HXDLIN( 490)					::String _hx_tmp;
+HXDLIN( 490)					if (::hx::IsNotNull( key )) {
+HXLINE( 490)						_hx_tmp = key;
             					}
             					else {
-HXLINE( 361)						_hx_tmp = HX_("",00,00,00,00);
+HXLINE( 490)						_hx_tmp = HX_("",00,00,00,00);
             					}
-HXDLIN( 361)					::Reflect_obj::setField(storePresence,_hx_tmp,value);
+HXDLIN( 490)					::Reflect_obj::setField(storePresence,_hx_tmp,value);
             				}
             			}
             		}
-HXLINE( 364)		return ::borogove::JsonPrinter_obj::print(storePresence,null(),null());
+HXLINE( 493)		return ::borogove::JsonPrinter_obj::print(storePresence,null(),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,serializePresenceMap,return )
 
  ::haxe::ds::StringMap Sqlite_obj::hydratePresenceMap(::String raw){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_367_hydratePresenceMap)
-HXLINE( 368)		 ::haxe::ds::StringMap map =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 369)		bool _hx_tmp;
-HXDLIN( 369)		if (::hx::IsNotNull( raw )) {
-HXLINE( 369)			_hx_tmp = (raw == HX_("",00,00,00,00));
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_496_hydratePresenceMap)
+HXLINE( 497)		 ::haxe::ds::StringMap map =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 498)		bool _hx_tmp;
+HXDLIN( 498)		if (::hx::IsNotNull( raw )) {
+HXLINE( 498)			_hx_tmp = (raw == HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 369)			_hx_tmp = true;
-            		}
-HXDLIN( 369)		if (_hx_tmp) {
-HXLINE( 369)			return map;
-            		}
-HXLINE( 371)		 ::Dynamic parsed =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,raw)->doParse();
-HXLINE( 372)		{
-HXLINE( 372)			::Array< ::String > _g_keys = ::Reflect_obj::fields(parsed);
-HXDLIN( 372)			int _g_index = 0;
-HXDLIN( 372)			while((_g_index < _g_keys->length)){
-HXLINE( 372)				_g_index = (_g_index + 1);
-HXDLIN( 372)				::String key = _g_keys->__get((_g_index - 1));
-HXLINE( 373)				{
-HXLINE( 373)					 ::borogove::Stanza v = ::borogove::Stanza_obj::parse(( (::String)(::Reflect_obj::field(parsed,key)) ));
-HXDLIN( 373)					::String _hx_tmp1;
-HXDLIN( 373)					if ((key == HX_("",00,00,00,00))) {
-HXLINE( 373)						_hx_tmp1 = null();
+HXLINE( 498)			_hx_tmp = true;
+            		}
+HXDLIN( 498)		if (_hx_tmp) {
+HXLINE( 498)			return map;
+            		}
+HXLINE( 500)		 ::Dynamic parsed =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,raw)->doParse();
+HXLINE( 501)		{
+HXLINE( 501)			::Array< ::String > _g_keys = ::Reflect_obj::fields(parsed);
+HXDLIN( 501)			int _g_index = 0;
+HXDLIN( 501)			while((_g_index < _g_keys->length)){
+HXLINE( 501)				_g_index = (_g_index + 1);
+HXDLIN( 501)				::String key = _g_keys->__get((_g_index - 1));
+HXLINE( 502)				{
+HXLINE( 502)					 ::borogove::Stanza v = ::borogove::Stanza_obj::parse(( (::String)(::Reflect_obj::field(parsed,key)) ));
+HXDLIN( 502)					::String _hx_tmp1;
+HXDLIN( 502)					if ((key == HX_("",00,00,00,00))) {
+HXLINE( 502)						_hx_tmp1 = null();
             					}
             					else {
-HXLINE( 373)						_hx_tmp1 = key;
+HXLINE( 502)						_hx_tmp1 = key;
             					}
-HXDLIN( 373)					map->set(_hx_tmp1,v);
+HXDLIN( 502)					map->set(_hx_tmp1,v);
             				}
             			}
             		}
-HXLINE( 376)		return map;
+HXLINE( 505)		return map;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,hydratePresenceMap,return )
 
  ::borogove::Member Sqlite_obj::hydrateStoredMember( ::borogove::Chat chat, ::Dynamic row){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_379_hydrateStoredMember)
-HXLINE( 380)		bool _hx_tmp;
-HXDLIN( 380)		bool _hx_tmp1;
-HXDLIN( 380)		bool _hx_tmp2;
-HXDLIN( 380)		bool _hx_tmp3;
-HXDLIN( 380)		bool _hx_tmp4;
-HXDLIN( 380)		bool _hx_tmp5;
-HXDLIN( 380)		if (::hx::IsNotNull( row )) {
-HXLINE( 380)			_hx_tmp5 = ::hx::IsNull( row->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic) );
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_508_hydrateStoredMember)
+HXLINE( 509)		bool _hx_tmp;
+HXDLIN( 509)		bool _hx_tmp1;
+HXDLIN( 509)		bool _hx_tmp2;
+HXDLIN( 509)		bool _hx_tmp3;
+HXDLIN( 509)		bool _hx_tmp4;
+HXDLIN( 509)		bool _hx_tmp5;
+HXDLIN( 509)		if (::hx::IsNotNull( row )) {
+HXLINE( 509)			_hx_tmp5 = ::hx::IsNull( row->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic) );
             		}
             		else {
-HXLINE( 380)			_hx_tmp5 = true;
+HXLINE( 509)			_hx_tmp5 = true;
             		}
-HXDLIN( 380)		if (!(_hx_tmp5)) {
-HXLINE( 380)			_hx_tmp4 = ::hx::IsEq( row->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic),HX_("",00,00,00,00) );
+HXDLIN( 509)		if (!(_hx_tmp5)) {
+HXLINE( 509)			_hx_tmp4 = ::hx::IsEq( row->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic),HX_("",00,00,00,00) );
             		}
             		else {
-HXLINE( 380)			_hx_tmp4 = true;
+HXLINE( 509)			_hx_tmp4 = true;
             		}
-HXDLIN( 380)		if (!(_hx_tmp4)) {
-HXLINE( 380)			_hx_tmp3 = ::hx::IsNull( row->__Field(HX_("display_name",a8,f4,3b,75),::hx::paccDynamic) );
+HXDLIN( 509)		if (!(_hx_tmp4)) {
+HXLINE( 509)			_hx_tmp3 = ::hx::IsNull( row->__Field(HX_("display_name",a8,f4,3b,75),::hx::paccDynamic) );
             		}
             		else {
-HXLINE( 380)			_hx_tmp3 = true;
+HXLINE( 509)			_hx_tmp3 = true;
             		}
-HXDLIN( 380)		if (!(_hx_tmp3)) {
-HXLINE( 380)			_hx_tmp2 = ::hx::IsEq( row->__Field(HX_("display_name",a8,f4,3b,75),::hx::paccDynamic),HX_("",00,00,00,00) );
+HXDLIN( 509)		if (!(_hx_tmp3)) {
+HXLINE( 509)			_hx_tmp2 = ::hx::IsEq( row->__Field(HX_("display_name",a8,f4,3b,75),::hx::paccDynamic),HX_("",00,00,00,00) );
             		}
             		else {
-HXLINE( 380)			_hx_tmp2 = true;
+HXLINE( 509)			_hx_tmp2 = true;
             		}
-HXDLIN( 380)		if (!(_hx_tmp2)) {
-HXLINE( 380)			_hx_tmp1 = ::hx::IsNull( row->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) );
+HXDLIN( 509)		if (!(_hx_tmp2)) {
+HXLINE( 509)			_hx_tmp1 = ::hx::IsNull( row->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) );
             		}
             		else {
-HXLINE( 380)			_hx_tmp1 = true;
+HXLINE( 509)			_hx_tmp1 = true;
             		}
-HXDLIN( 380)		if (!(_hx_tmp1)) {
-HXLINE( 380)			_hx_tmp = ::hx::IsEq( row->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic),HX_("",00,00,00,00) );
+HXDLIN( 509)		if (!(_hx_tmp1)) {
+HXLINE( 509)			_hx_tmp = ::hx::IsEq( row->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic),HX_("",00,00,00,00) );
             		}
             		else {
-HXLINE( 380)			_hx_tmp = true;
+HXLINE( 509)			_hx_tmp = true;
             		}
-HXDLIN( 380)		if (_hx_tmp) {
-HXLINE( 381)			return null();
+HXDLIN( 509)		if (_hx_tmp) {
+HXLINE( 510)			return null();
             		}
-HXLINE( 384)		::cpp::VirtualArray rolesData;
-HXDLIN( 384)		if (::hx::IsNull( row->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic) )) {
-HXLINE( 384)			rolesData = ::cpp::VirtualArray_obj::__new(0);
+HXLINE( 513)		::cpp::VirtualArray rolesData;
+HXDLIN( 513)		if (::hx::IsNull( row->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic) )) {
+HXLINE( 513)			rolesData = ::cpp::VirtualArray_obj::__new(0);
             		}
             		else {
-HXLINE( 384)			rolesData = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic)) ))->doParse()) );
-            		}
-HXLINE( 385)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(rolesData->get_length());
-HXDLIN( 385)		{
-HXLINE( 385)			int _g = 0;
-HXDLIN( 385)			int _g1 = rolesData->get_length();
-HXDLIN( 385)			while((_g < _g1)){
-HXLINE( 385)				_g = (_g + 1);
-HXDLIN( 385)				int i = (_g - 1);
-HXDLIN( 385)				{
-HXLINE( 385)					 ::Dynamic r = _hx_array_unsafe_get(rolesData,i);
-HXDLIN( 385)					result->__unsafe_set(i, ::borogove::Role_obj::__alloc( HX_CTX ,( (::String)(r->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)) ),( (::String)(r->__Field(HX_("title",98,15,3b,10),::hx::paccDynamic)) )));
+HXLINE( 513)			rolesData = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic)) ))->doParse()) );
+            		}
+HXLINE( 514)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(rolesData->get_length());
+HXDLIN( 514)		{
+HXLINE( 514)			int _g = 0;
+HXDLIN( 514)			int _g1 = rolesData->get_length();
+HXDLIN( 514)			while((_g < _g1)){
+HXLINE( 514)				_g = (_g + 1);
+HXDLIN( 514)				int i = (_g - 1);
+HXDLIN( 514)				{
+HXLINE( 514)					 ::Dynamic r = _hx_array_unsafe_get(rolesData,i);
+HXDLIN( 514)					result->__unsafe_set(i, ::borogove::Role_obj::__alloc( HX_CTX ,( (::String)(r->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)) ),( (::String)(r->__Field(HX_("title",98,15,3b,10),::hx::paccDynamic)) )));
             				}
             			}
             		}
-HXLINE( 386)		 ::haxe::ds::StringMap presence = this->hydratePresenceMap(( (::String)(row->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ));
-HXLINE( 387)		::String chatId = ( (::String)(row->__Field(HX_("chat",d8,5e,bf,41),::hx::paccDynamic)) );
-HXLINE( 388)		 ::borogove::AvailableChat availableChat;
-HXDLIN( 388)		bool availableChat1;
-HXDLIN( 388)		if (::hx::IsNotNull( chatId )) {
-HXLINE( 388)			availableChat1 = (chatId == HX_("",00,00,00,00));
+HXLINE( 515)		 ::haxe::ds::StringMap presence = this->hydratePresenceMap(( (::String)(row->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ));
+HXLINE( 516)		::String chatId = ( (::String)(row->__Field(HX_("chat",d8,5e,bf,41),::hx::paccDynamic)) );
+HXLINE( 517)		 ::borogove::AvailableChat availableChat;
+HXDLIN( 517)		bool availableChat1;
+HXDLIN( 517)		if (::hx::IsNotNull( chatId )) {
+HXLINE( 517)			availableChat1 = (chatId == HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 388)			availableChat1 = true;
+HXLINE( 517)			availableChat1 = true;
             		}
-HXDLIN( 388)		if (availableChat1) {
-HXLINE( 388)			availableChat = null();
+HXDLIN( 517)		if (availableChat1) {
+HXLINE( 517)			availableChat = null();
             		}
             		else {
-HXLINE( 390)			 ::Dynamic row1 =  ::Dynamic(row->__Field(HX_("display_name",a8,f4,3b,75),::hx::paccDynamic));
-HXLINE( 391)			::String availableChat2;
-HXDLIN( 391)			if (::hx::IsNull( chat )) {
-HXLINE( 391)				availableChat2 = chatId;
+HXLINE( 519)			 ::Dynamic row1 =  ::Dynamic(row->__Field(HX_("display_name",a8,f4,3b,75),::hx::paccDynamic));
+HXLINE( 520)			::String availableChat2;
+HXDLIN( 520)			if (::hx::IsNull( chat )) {
+HXLINE( 520)				availableChat2 = chatId;
             			}
             			else {
-HXLINE( 391)				availableChat2 = (((chatId + HX_(" (via ",9a,ee,c1,21)) + chat->getDisplayName()) + HX_(")",29,00,00,00));
+HXLINE( 520)				availableChat2 = (((chatId + HX_(" (via ",9a,ee,c1,21)) + chat->getDisplayName()) + HX_(")",29,00,00,00));
             			}
-HXLINE( 388)			availableChat =  ::borogove::AvailableChat_obj::__alloc( HX_CTX ,chatId,( (::String)(row1) ),availableChat2,::borogove::CapsRepo_obj::empty);
+HXLINE( 517)			availableChat =  ::borogove::AvailableChat_obj::__alloc( HX_CTX ,chatId,( (::String)(row1) ),availableChat2,::borogove::CapsRepo_obj::empty,null());
             		}
-HXLINE( 396)		 ::Dynamic row2 =  ::Dynamic(row->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic));
-HXLINE( 397)		 ::Dynamic row3 =  ::Dynamic(row->__Field(HX_("display_name",a8,f4,3b,75),::hx::paccDynamic));
-HXLINE( 398)		 ::Dynamic row4 =  ::Dynamic(row->__Field(HX_("photo_uri",1f,7a,ef,17),::hx::paccDynamic));
-HXLINE( 399)		bool _hx_tmp6 = ::hx::IsNotEq( row->__Field(HX_("is_self",41,db,b9,08),::hx::paccDynamic),0 );
-HXLINE( 401)		 ::borogove::JID _hx_tmp7;
-HXDLIN( 401)		if (::hx::IsNull( row->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) )) {
-HXLINE( 401)			_hx_tmp7 = null();
+HXLINE( 525)		 ::Dynamic row2 =  ::Dynamic(row->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic));
+HXLINE( 526)		 ::Dynamic row3 =  ::Dynamic(row->__Field(HX_("display_name",a8,f4,3b,75),::hx::paccDynamic));
+HXLINE( 527)		 ::Dynamic row4 =  ::Dynamic(row->__Field(HX_("photo_uri",1f,7a,ef,17),::hx::paccDynamic));
+HXLINE( 528)		bool _hx_tmp6 = ::hx::IsNotEq( row->__Field(HX_("is_self",41,db,b9,08),::hx::paccDynamic),0 );
+HXLINE( 530)		 ::borogove::JID _hx_tmp7;
+HXDLIN( 530)		if (::hx::IsNull( row->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) )) {
+HXLINE( 530)			_hx_tmp7 = null();
             		}
             		else {
-HXLINE( 401)			_hx_tmp7 = ::borogove::JID_obj::parse(( (::String)(row->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ));
+HXLINE( 530)			_hx_tmp7 = ::borogove::JID_obj::parse(( (::String)(row->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ));
             		}
-HXLINE( 395)		return  ::borogove::Member_obj::__alloc( HX_CTX ,( (::String)(row2) ),( (::String)(row3) ),( (::String)(row4) ),_hx_tmp6,result,_hx_tmp7,presence,availableChat);
+HXLINE( 524)		return  ::borogove::Member_obj::__alloc( HX_CTX ,( (::String)(row2) ),( (::String)(row3) ),( (::String)(row4) ),_hx_tmp6,result,_hx_tmp7,presence,availableChat);
             	}
 
 
@@ -1123,115 +1338,115 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hydrateStoredMember,return )
 ::Dynamic Sqlite_obj::chatPresenceAndMembersForName(::String accountId,::cpp::VirtualArray rawChats){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::borogove::persistence::Sqlite,_gthis,::cpp::VirtualArray,rawChats) HXARGC(1)
             		 ::haxe::ds::StringMap _hx_run( ::haxe::iterators::ArrayIterator rows){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_425_chatPresenceAndMembersForName)
-HXLINE( 426)			 ::haxe::ds::StringMap result =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 428)			 ::haxe::ds::StringMap chatRows =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 429)			while((rows->current < rows->array->get_length())){
-HXLINE( 429)				 ::Dynamic row = rows->array->__get(rows->current++);
-HXLINE( 430)				if (!(chatRows->exists(( (::String)(row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) )))) {
-HXLINE( 430)					chatRows->set(( (::String)(row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) ),::cpp::VirtualArray_obj::__new(0));
-            				}
-HXLINE( 431)				( (::cpp::VirtualArray)(chatRows->get( ::Dynamic(row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)))) )->push(row);
-            			}
-HXLINE( 434)			{
-HXLINE( 434)				int _g = 0;
-HXDLIN( 434)				while((_g < rawChats->get_length())){
-HXLINE( 434)					 ::Dynamic rawChat = rawChats->__get(_g);
-HXDLIN( 434)					_g = (_g + 1);
-HXLINE( 435)					::String cid = ( (::String)(rawChat->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
-HXLINE( 436)					::cpp::VirtualArray members = ( (::cpp::VirtualArray)(chatRows->get(cid)) );
-HXLINE( 437)					if (::hx::IsNull( members )) {
-HXLINE( 438)						result->set(cid, ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_554_chatPresenceAndMembersForName)
+HXLINE( 555)			 ::haxe::ds::StringMap result =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 557)			 ::haxe::ds::StringMap chatRows =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 558)			while((rows->current < rows->array->get_length())){
+HXLINE( 558)				 ::Dynamic row = rows->array->__get(rows->current++);
+HXLINE( 559)				if (!(chatRows->exists(( (::String)(row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) )))) {
+HXLINE( 559)					chatRows->set(( (::String)(row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) ),::cpp::VirtualArray_obj::__new(0));
+            				}
+HXLINE( 560)				( (::cpp::VirtualArray)(chatRows->get( ::Dynamic(row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)))) )->push(row);
+            			}
+HXLINE( 563)			{
+HXLINE( 563)				int _g = 0;
+HXDLIN( 563)				while((_g < rawChats->get_length())){
+HXLINE( 563)					 ::Dynamic rawChat = rawChats->__get(_g);
+HXDLIN( 563)					_g = (_g + 1);
+HXLINE( 564)					::String cid = ( (::String)(rawChat->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
+HXLINE( 565)					::cpp::VirtualArray members = ( (::cpp::VirtualArray)(chatRows->get(cid)) );
+HXLINE( 566)					if (::hx::IsNull( members )) {
+HXLINE( 567)						result->set(cid, ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("membersForName",1b,56,f2,d2),null())
             							->setFixed(1,HX_("presence",3b,52,d7,66), ::haxe::ds::StringMap_obj::__alloc( HX_CTX ))));
-HXLINE( 439)						continue;
+HXLINE( 568)						continue;
             					}
-HXLINE( 442)					 ::haxe::ds::StringMap presence =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 443)					::Array< ::Dynamic> membersForName = null();
-HXLINE( 445)					if (::hx::IsEq( ::Reflect_obj::field(rawChat,HX_("class",38,78,58,48)),HX_("DirectChat",c1,22,a3,05) )) {
+HXLINE( 571)					 ::haxe::ds::StringMap presence =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 572)					::Array< ::Dynamic> membersForName = null();
+HXLINE( 574)					if (::hx::IsEq( ::Reflect_obj::field(rawChat,HX_("class",38,78,58,48)),HX_("DirectChat",c1,22,a3,05) )) {
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::String,cid) HXARGC(1)
             						bool _hx_run( ::Dynamic r){
-            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_446_chatPresenceAndMembersForName)
-HXLINE( 446)							return ::hx::IsEq( r->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic),cid );
+            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_575_chatPresenceAndMembersForName)
+HXLINE( 575)							return ::hx::IsEq( r->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic),cid );
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 446)						 ::Dynamic selfRow = ::Lambda_obj::find(members, ::Dynamic(new _hx_Closure_0(cid)));
-HXLINE( 447)						if (::hx::IsNotNull( selfRow )) {
-HXLINE( 447)							presence = _gthis->hydratePresenceMap(( (::String)(selfRow->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ));
+HXLINE( 575)						 ::Dynamic selfRow = ::Lambda_obj::find(members, ::Dynamic(new _hx_Closure_0(cid)));
+HXLINE( 576)						if (::hx::IsNotNull( selfRow )) {
+HXLINE( 576)							presence = _gthis->hydratePresenceMap(( (::String)(selfRow->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ));
             						}
             					}
             					else {
-HXLINE( 449)						membersForName = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 451)						{
-HXLINE( 451)							int _g1 = 0;
-HXDLIN( 451)							while((_g1 < members->get_length())){
+HXLINE( 578)						membersForName = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 580)						{
+HXLINE( 580)							int _g1 = 0;
+HXDLIN( 580)							while((_g1 < members->get_length())){
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             								bool _hx_run( ::Dynamic r){
-            									HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_460_chatPresenceAndMembersForName)
-HXLINE( 460)									if (::hx::IsNotEq( r->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic),HX_("none",b8,12,0a,49) )) {
-HXLINE( 460)										return ::hx::IsEq( r->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic),HX_("outcast",4d,1e,c5,db) );
+            									HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_589_chatPresenceAndMembersForName)
+HXLINE( 589)									if (::hx::IsNotEq( r->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic),HX_("none",b8,12,0a,49) )) {
+HXLINE( 589)										return ::hx::IsEq( r->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic),HX_("outcast",4d,1e,c5,db) );
             									}
             									else {
-HXLINE( 460)										return true;
+HXLINE( 589)										return true;
             									}
-HXDLIN( 460)									return false;
+HXDLIN( 589)									return false;
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 451)								 ::Dynamic row1 = members->__get(_g1);
-HXDLIN( 451)								_g1 = (_g1 + 1);
-HXLINE( 452)								if (::hx::IsNotEq( row1->__Field(HX_("is_self",41,db,b9,08),::hx::paccDynamic),0 )) {
-HXLINE( 453)									presence = _gthis->hydratePresenceMap(( (::String)(row1->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ));
-HXLINE( 454)									continue;
+HXLINE( 580)								 ::Dynamic row1 = members->__get(_g1);
+HXDLIN( 580)								_g1 = (_g1 + 1);
+HXLINE( 581)								if (::hx::IsNotEq( row1->__Field(HX_("is_self",41,db,b9,08),::hx::paccDynamic),0 )) {
+HXLINE( 582)									presence = _gthis->hydratePresenceMap(( (::String)(row1->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ));
+HXLINE( 583)									continue;
             								}
-HXLINE( 457)								if (::hx::IsEq( row1->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic),cid )) {
-HXLINE( 457)									continue;
+HXLINE( 586)								if (::hx::IsEq( row1->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic),cid )) {
+HXLINE( 586)									continue;
             								}
-HXLINE( 459)								::cpp::VirtualArray rolesData;
-HXDLIN( 459)								if (::hx::IsNotNull( row1->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic) )) {
-HXLINE( 459)									rolesData = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row1->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic)) ))->doParse()) );
+HXLINE( 588)								::cpp::VirtualArray rolesData;
+HXDLIN( 588)								if (::hx::IsNotNull( row1->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic) )) {
+HXLINE( 588)									rolesData = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row1->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic)) ))->doParse()) );
             								}
             								else {
-HXLINE( 459)									rolesData = ::cpp::VirtualArray_obj::__new(0);
+HXLINE( 588)									rolesData = ::cpp::VirtualArray_obj::__new(0);
             								}
-HXLINE( 460)								if (::Lambda_obj::exists(rolesData, ::Dynamic(new _hx_Closure_1()))) {
-HXLINE( 460)									continue;
+HXLINE( 589)								if (::Lambda_obj::exists(rolesData, ::Dynamic(new _hx_Closure_1()))) {
+HXLINE( 589)									continue;
             								}
-HXLINE( 462)								membersForName->push( ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 591)								membersForName->push( ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("id",db,5b,00,00),( (::String)(row1->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic)) ))
             									->setFixed(1,HX_("displayName",ad,11,f2,30),( (::String)(row1->__Field(HX_("display_name",a8,f4,3b,75),::hx::paccDynamic)) ))));
             							}
             						}
-HXLINE( 465)						if ((membersForName->length > 20)) {
-HXLINE( 466)							membersForName = null();
+HXLINE( 594)						if ((membersForName->length > 20)) {
+HXLINE( 595)							membersForName = null();
             						}
             						else {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(2)
             							int _hx_run( ::Dynamic a, ::Dynamic b){
-            								HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_468_chatPresenceAndMembersForName)
-HXLINE( 468)								return ::Reflect_obj::compare( ::Dynamic(a->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)), ::Dynamic(b->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)));
+            								HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_597_chatPresenceAndMembersForName)
+HXLINE( 597)								return ::Reflect_obj::compare( ::Dynamic(a->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)), ::Dynamic(b->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)));
             							}
             							HX_END_LOCAL_FUNC2(return)
 
-HXLINE( 468)							membersForName->sort( ::Dynamic(new _hx_Closure_2()));
+HXLINE( 597)							membersForName->sort( ::Dynamic(new _hx_Closure_2()));
             						}
             					}
-HXLINE( 472)					result->set(cid, ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 601)					result->set(cid, ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("membersForName",1b,56,f2,d2),membersForName)
             						->setFixed(1,HX_("presence",3b,52,d7,66),presence)));
             				}
             			}
-HXLINE( 475)			return result;
+HXLINE( 604)			return result;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_407_chatPresenceAndMembersForName)
-HXDLIN( 407)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 408)		if ((rawChats->get_length() < 1)) {
-HXLINE( 408)			return ::thenshim::_Promise::Promise_Impl__obj::resolve( ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_536_chatPresenceAndMembersForName)
+HXDLIN( 536)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 537)		if ((rawChats->get_length() < 1)) {
+HXLINE( 537)			return ::thenshim::_Promise::Promise_Impl__obj::resolve( ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
             		}
-HXLINE( 425)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("\n\t\t\tSELECT chat_id, member_id, display_name, is_self, json(roles) AS roles, json(presence) AS presence\n\t\t\tFROM (\n\t\t\t\tSELECT chat_id, member_id, display_name, is_self, roles, presence,\n\t\t\t\t\tCASE WHEN is_self OR member_id=chat_id THEN 0\n\t\t\t\t\t\tELSE ROW_NUMBER() OVER(PARTITION BY chat_id ORDER BY display_name)\n\t\t\t\t\tEND as rn\n\t\t\t\tFROM members\n\t\t\t\tWHERE account_id = ?\n\t\t\t\t\tAND (is_self OR (display_name IS NOT NULL AND display_name<>''))\n\t\t\t) sub\n\t\t\tWHERE rn <= 23\n\t\t\tORDER BY chat_id, display_name\n\t\t",ac,2b,f6,05),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_3(_gthis,rawChats)),null());
+HXLINE( 554)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("\n\t\t\tSELECT chat_id, member_id, display_name, is_self, json(roles) AS roles, json(presence) AS presence\n\t\t\tFROM (\n\t\t\t\tSELECT chat_id, member_id, display_name, is_self, roles, presence,\n\t\t\t\t\tCASE WHEN is_self OR member_id=chat_id THEN 0\n\t\t\t\t\t\tELSE ROW_NUMBER() OVER(PARTITION BY chat_id ORDER BY display_name)\n\t\t\t\t\tEND as rn\n\t\t\t\tFROM members\n\t\t\t\tWHERE account_id = ?\n\t\t\t\t\tAND (is_self OR (display_name IS NOT NULL AND display_name<>''))\n\t\t\t) sub\n\t\t\tWHERE rn <= 23\n\t\t\tORDER BY chat_id, display_name\n\t\t",ac,2b,f6,05),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_3(_gthis,rawChats)),null());
             	}
 
 
@@ -1240,88 +1455,88 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,chatPresenceAndMembersForName,return )
 ::Dynamic Sqlite_obj::storeMembers(::String accountId,::String chatId,::Array< ::Dynamic> membersArg){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::haxe::iterators::ArrayIterator _){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_507_storeMembers)
-HXLINE( 507)			return true;
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_636_storeMembers)
+HXLINE( 636)			return true;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_480_storeMembers)
-HXLINE( 481)		if ((membersArg->length < 1)) {
-HXLINE( 481)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(true);
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_609_storeMembers)
+HXLINE( 610)		if ((membersArg->length < 1)) {
+HXLINE( 610)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(true);
             		}
-HXLINE( 484)		::cpp::VirtualArray members = membersArg;
-HXLINE( 486)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 487)		{
-HXLINE( 487)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 487)				q->flush();
+HXLINE( 613)		::cpp::VirtualArray members = membersArg;
+HXLINE( 615)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 616)		{
+HXLINE( 616)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 616)				q->flush();
             			}
-HXDLIN( 487)			if (::hx::IsNull( q->b )) {
-HXLINE( 487)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_73,1);
+HXDLIN( 616)			if (::hx::IsNull( q->b )) {
+HXLINE( 616)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_97,1);
             			}
             			else {
-HXLINE( 487)				q->b->push(HX_("INSERT OR REPLACE INTO members VALUES ",f9,ed,eb,41));
-            			}
-            		}
-HXLINE( 488)		bool first = true;
-HXLINE( 489)		::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(0);
-HXLINE( 491)		{
-HXLINE( 491)			int _g = 0;
-HXDLIN( 491)			while((_g < members->get_length())){
-HXLINE( 491)				 ::Dynamic member = members->__get(_g);
-HXDLIN( 491)				_g = (_g + 1);
-HXLINE( 492)				if (!(first)) {
-HXLINE( 492)					if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 492)						q->flush();
+HXLINE( 616)				q->b->push(HX_("INSERT OR REPLACE INTO members VALUES ",f9,ed,eb,41));
+            			}
+            		}
+HXLINE( 617)		bool first = true;
+HXLINE( 618)		::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(0);
+HXLINE( 620)		{
+HXLINE( 620)			int _g = 0;
+HXDLIN( 620)			while((_g < members->get_length())){
+HXLINE( 620)				 ::Dynamic member = members->__get(_g);
+HXDLIN( 620)				_g = (_g + 1);
+HXLINE( 621)				if (!(first)) {
+HXLINE( 621)					if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 621)						q->flush();
             					}
-HXDLIN( 492)					if (::hx::IsNull( q->b )) {
-HXLINE( 492)						q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_74,1);
+HXDLIN( 621)					if (::hx::IsNull( q->b )) {
+HXLINE( 621)						q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_98,1);
             					}
             					else {
-HXLINE( 492)						q->b->push(HX_(",",2c,00,00,00));
+HXLINE( 621)						q->b->push(HX_(",",2c,00,00,00));
             					}
             				}
-HXLINE( 493)				first = false;
-HXLINE( 494)				{
-HXLINE( 494)					if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 494)						q->flush();
+HXLINE( 622)				first = false;
+HXLINE( 623)				{
+HXLINE( 623)					if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 623)						q->flush();
             					}
-HXDLIN( 494)					if (::hx::IsNull( q->b )) {
-HXLINE( 494)						q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_75,1);
+HXDLIN( 623)					if (::hx::IsNull( q->b )) {
+HXLINE( 623)						q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_99,1);
             					}
             					else {
-HXLINE( 494)						q->b->push(HX_("(?,?,?,?,?,?,?,jsonb(?),jsonb(?),?)",cd,39,fd,64));
+HXLINE( 623)						q->b->push(HX_("(?,?,?,?,?,?,?,jsonb(?),jsonb(?),?)",cd,39,fd,64));
             					}
             				}
-HXLINE( 495)				params->push(accountId);
-HXLINE( 496)				params->push(chatId);
-HXLINE( 497)				params->push( ::Dynamic(member->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)));
-HXLINE( 498)				params->push( ::Dynamic(member->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)));
-HXLINE( 499)				params->push( ::Dynamic(member->__Field(HX_("photoUri",da,15,82,60),::hx::paccDynamic)));
-HXLINE( 500)				params->push( ::Dynamic(member->__Field(HX_("isSelf",96,50,b7,69),::hx::paccDynamic)));
-HXLINE( 501)				 ::Dynamic tmp =  ::Dynamic(member->__Field(HX_("chat",d8,5e,bf,41),::hx::paccDynamic));
-HXDLIN( 501)				 ::Dynamic _hx_tmp;
-HXDLIN( 501)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 501)					_hx_tmp =  ::Dynamic(tmp->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic));
+HXLINE( 624)				params->push(accountId);
+HXLINE( 625)				params->push(chatId);
+HXLINE( 626)				params->push( ::Dynamic(member->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)));
+HXLINE( 627)				params->push( ::Dynamic(member->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)));
+HXLINE( 628)				params->push( ::Dynamic(member->__Field(HX_("photoUri",da,15,82,60),::hx::paccDynamic)));
+HXLINE( 629)				params->push( ::Dynamic(member->__Field(HX_("isSelf",96,50,b7,69),::hx::paccDynamic)));
+HXLINE( 630)				 ::Dynamic tmp =  ::Dynamic(member->__Field(HX_("chat",d8,5e,bf,41),::hx::paccDynamic));
+HXDLIN( 630)				 ::Dynamic _hx_tmp;
+HXDLIN( 630)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 630)					_hx_tmp =  ::Dynamic(tmp->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic));
             				}
             				else {
-HXLINE( 501)					_hx_tmp = null();
+HXLINE( 630)					_hx_tmp = null();
             				}
-HXDLIN( 501)				params->push(_hx_tmp);
-HXLINE( 502)				params->push(::borogove::JsonPrinter_obj::print( ::Dynamic(member->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic)),null(),null()));
-HXLINE( 503)				params->push(this->serializePresenceMap(( ( ::haxe::ds::StringMap)(member->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) )));
-HXLINE( 504)				 ::Dynamic tmp1 =  ::Dynamic(member->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic));
-HXDLIN( 504)				 ::Dynamic _hx_tmp1;
-HXDLIN( 504)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 504)					_hx_tmp1 = tmp1->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)();
+HXDLIN( 630)				params->push(_hx_tmp);
+HXLINE( 631)				params->push(::borogove::JsonPrinter_obj::print( ::Dynamic(member->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic)),null(),null()));
+HXLINE( 632)				params->push(this->serializePresenceMap(( ( ::haxe::ds::StringMap)(member->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) )));
+HXLINE( 633)				 ::Dynamic tmp1 =  ::Dynamic(member->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic));
+HXDLIN( 633)				 ::Dynamic _hx_tmp1;
+HXDLIN( 633)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 633)					_hx_tmp1 = tmp1->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)();
             				}
             				else {
-HXLINE( 504)					_hx_tmp1 = null();
+HXLINE( 633)					_hx_tmp1 = null();
             				}
-HXDLIN( 504)				params->push(_hx_tmp1);
+HXDLIN( 633)				params->push(_hx_tmp1);
             			}
             		}
-HXLINE( 507)		 ::borogove::persistence::SqliteDriver _hx_tmp2 = this->db;
-HXDLIN( 507)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp2->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE( 636)		 ::borogove::persistence::SqliteDriver _hx_tmp2 = this->db;
+HXDLIN( 636)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp2->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
@@ -1332,259 +1547,259 @@ HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,storeMembers,return )
             		::Dynamic _hx_run(::Array< ::Dynamic> pseudoMembers){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4,::Array< ::Dynamic>,valid) HXARGC(1)
             			::Array< ::Dynamic> _hx_run(bool _){
-            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_537_storeMemberUpdates)
-HXLINE( 537)				return valid;
+            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_666_storeMemberUpdates)
+HXLINE( 666)				return valid;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_535_storeMemberUpdates)
-HXLINE( 536)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 536)			{
-HXLINE( 536)				int _g1 = 0;
-HXDLIN( 536)				while((_g1 < pseudoMembers->length)){
-HXLINE( 536)					 ::Dynamic v = pseudoMembers->__get(_g1);
-HXDLIN( 536)					_g1 = (_g1 + 1);
-HXDLIN( 536)					if (::hx::IsNotNull( v )) {
-HXLINE( 536)						_g->push(v);
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_664_storeMemberUpdates)
+HXLINE( 665)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 665)			{
+HXLINE( 665)				int _g1 = 0;
+HXDLIN( 665)				while((_g1 < pseudoMembers->length)){
+HXLINE( 665)					 ::Dynamic v = pseudoMembers->__get(_g1);
+HXDLIN( 665)					_g1 = (_g1 + 1);
+HXDLIN( 665)					if (::hx::IsNotNull( v )) {
+HXLINE( 665)						_g->push(v);
             					}
             				}
             			}
-HXDLIN( 536)			::Array< ::Dynamic> valid = _g;
-HXLINE( 537)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->storeMembers(accountId,chat->chatId,valid), ::Dynamic(new _hx_Closure_4(valid)),null());
+HXDLIN( 665)			::Array< ::Dynamic> valid = _g;
+HXLINE( 666)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->storeMembers(accountId,chat->chatId,valid), ::Dynamic(new _hx_Closure_4(valid)),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_8,bool,isFullList, ::borogove::persistence::Sqlite,_gthis, ::haxe::ds::StringMap,updatedIds, ::borogove::Chat,chat,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> valid){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_538_storeMemberUpdates)
-HXLINE( 539)			if (!(isFullList)) {
-HXLINE( 539)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(valid);
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_667_storeMemberUpdates)
+HXLINE( 668)			if (!(isFullList)) {
+HXLINE( 668)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(valid);
             			}
-HXLINE( 541)			::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
-HXDLIN( 541)			{
-HXLINE( 541)				::Dynamic map = updatedIds;
-HXDLIN( 541)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 541)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 541)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 541)					::haxe::IMap_obj::get(map,key);
-HXDLIN( 541)					_g->push(key);
+HXLINE( 670)			::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
+HXDLIN( 670)			{
+HXLINE( 670)				::Dynamic map = updatedIds;
+HXDLIN( 670)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 670)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 670)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 670)					::haxe::IMap_obj::get(map,key);
+HXDLIN( 670)					_g->push(key);
             				}
             			}
-HXLINE( 542)			if ((_g->length < 1)) {
+HXLINE( 671)			if ((_g->length < 1)) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_6,::Array< ::Dynamic>,valid) HXARGC(1)
             				::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_546_storeMemberUpdates)
-HXLINE( 546)					return valid;
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_675_storeMemberUpdates)
+HXLINE( 675)					return valid;
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 543)				return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->db->exec(HX_("UPDATE members SET roles=jsonb('[]') WHERE account_id=? AND chat_id=?",22,e9,2f,b9),::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,chat->chatId)), ::Dynamic(new _hx_Closure_6(valid)),null());
+HXLINE( 672)				return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->db->exec(HX_("UPDATE members SET roles=jsonb('[]') WHERE account_id=? AND chat_id=?",22,e9,2f,b9),::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,chat->chatId)), ::Dynamic(new _hx_Closure_6(valid)),null());
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7,::Array< ::Dynamic>,valid) HXARGC(1)
             				::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_553_storeMemberUpdates)
-HXLINE( 553)					return valid;
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_682_storeMemberUpdates)
+HXLINE( 682)					return valid;
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 548)				::Array< ::String > result = ::Array_obj< ::String >::__new(_g->length);
-HXDLIN( 548)				{
-HXLINE( 548)					int _g1 = 0;
-HXDLIN( 548)					int _g2 = _g->length;
-HXDLIN( 548)					while((_g1 < _g2)){
-HXLINE( 548)						_g1 = (_g1 + 1);
-HXDLIN( 548)						int i = (_g1 - 1);
-HXDLIN( 548)						{
-HXLINE( 548)							_hx_array_unsafe_get(_g,i);
-HXDLIN( 548)							result->__unsafe_set(i,HX_("?",3f,00,00,00));
+HXLINE( 677)				::Array< ::String > result = ::Array_obj< ::String >::__new(_g->length);
+HXDLIN( 677)				{
+HXLINE( 677)					int _g1 = 0;
+HXDLIN( 677)					int _g2 = _g->length;
+HXDLIN( 677)					while((_g1 < _g2)){
+HXLINE( 677)						_g1 = (_g1 + 1);
+HXDLIN( 677)						int i = (_g1 - 1);
+HXDLIN( 677)						{
+HXLINE( 677)							_hx_array_unsafe_get(_g,i);
+HXDLIN( 677)							result->__unsafe_set(i,HX_("?",3f,00,00,00));
             						}
             					}
             				}
-HXDLIN( 548)				::String placeholders = result->join(HX_(",",2c,00,00,00));
-HXLINE( 549)				::cpp::VirtualArray params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chat->chatId)->concat(_g);
-HXLINE( 550)				return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->db->exec(((HX_("UPDATE members SET roles=jsonb('[]') WHERE account_id=? AND chat_id=? AND member_id NOT IN (",c1,3c,90,90) + placeholders) + HX_(")",29,00,00,00)),params), ::Dynamic(new _hx_Closure_7(valid)),null());
+HXDLIN( 677)				::String placeholders = result->join(HX_(",",2c,00,00,00));
+HXLINE( 678)				::cpp::VirtualArray params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chat->chatId)->concat(_g);
+HXLINE( 679)				return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->db->exec(((HX_("UPDATE members SET roles=jsonb('[]') WHERE account_id=? AND chat_id=? AND member_id NOT IN (",c1,3c,90,90) + placeholders) + HX_(")",29,00,00,00)),params), ::Dynamic(new _hx_Closure_7(valid)),null());
             			}
-HXLINE( 542)			return null();
+HXLINE( 671)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_9) HXARGC(1)
             		::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> valid){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_555_storeMemberUpdates)
-HXLINE( 556)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 556)			{
-HXLINE( 556)				int _g1 = 0;
-HXDLIN( 556)				while((_g1 < valid->length)){
-HXLINE( 556)					 ::Dynamic v = valid->__get(_g1);
-HXDLIN( 556)					_g1 = (_g1 + 1);
-HXDLIN( 556)					bool _hx_tmp;
-HXDLIN( 556)					bool _hx_tmp1;
-HXDLIN( 556)					bool _hx_tmp2;
-HXDLIN( 556)					::String _hx_tmp3;
-HXDLIN( 556)					if (::hx::IsNotNull( v )) {
-HXLINE( 556)						_hx_tmp3 = ( (::String)(v->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)) );
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_684_storeMemberUpdates)
+HXLINE( 685)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 685)			{
+HXLINE( 685)				int _g1 = 0;
+HXDLIN( 685)				while((_g1 < valid->length)){
+HXLINE( 685)					 ::Dynamic v = valid->__get(_g1);
+HXDLIN( 685)					_g1 = (_g1 + 1);
+HXDLIN( 685)					bool _hx_tmp;
+HXDLIN( 685)					bool _hx_tmp1;
+HXDLIN( 685)					bool _hx_tmp2;
+HXDLIN( 685)					::String _hx_tmp3;
+HXDLIN( 685)					if (::hx::IsNotNull( v )) {
+HXLINE( 685)						_hx_tmp3 = ( (::String)(v->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)) );
             					}
             					else {
-HXLINE( 556)						_hx_tmp3 = null();
+HXLINE( 685)						_hx_tmp3 = null();
             					}
-HXDLIN( 556)					if (::hx::IsNotNull( _hx_tmp3 )) {
-HXLINE( 556)						::String _hx_tmp4;
-HXDLIN( 556)						if (::hx::IsNotNull( v )) {
-HXLINE( 556)							_hx_tmp4 = ( (::String)(v->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)) );
+HXDLIN( 685)					if (::hx::IsNotNull( _hx_tmp3 )) {
+HXLINE( 685)						::String _hx_tmp4;
+HXDLIN( 685)						if (::hx::IsNotNull( v )) {
+HXLINE( 685)							_hx_tmp4 = ( (::String)(v->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)) );
             						}
             						else {
-HXLINE( 556)							_hx_tmp4 = null();
+HXLINE( 685)							_hx_tmp4 = null();
             						}
-HXDLIN( 556)						_hx_tmp2 = ::hx::IsNotNull( _hx_tmp4 );
+HXDLIN( 685)						_hx_tmp2 = ::hx::IsNotNull( _hx_tmp4 );
             					}
             					else {
-HXLINE( 556)						_hx_tmp2 = false;
+HXLINE( 685)						_hx_tmp2 = false;
             					}
-HXDLIN( 556)					if (_hx_tmp2) {
-HXLINE( 556)						_hx_tmp1 = ::hx::IsNotEq( v->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic),HX_("",00,00,00,00) );
+HXDLIN( 685)					if (_hx_tmp2) {
+HXLINE( 685)						_hx_tmp1 = ::hx::IsNotEq( v->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic),HX_("",00,00,00,00) );
             					}
             					else {
-HXLINE( 556)						_hx_tmp1 = false;
+HXLINE( 685)						_hx_tmp1 = false;
             					}
-HXDLIN( 556)					if (_hx_tmp1) {
-HXLINE( 556)						 ::borogove::JID _hx_tmp5;
-HXDLIN( 556)						if (::hx::IsNotNull( v )) {
-HXLINE( 556)							_hx_tmp5 = ( ( ::borogove::JID)(v->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) );
+HXDLIN( 685)					if (_hx_tmp1) {
+HXLINE( 685)						 ::borogove::JID _hx_tmp5;
+HXDLIN( 685)						if (::hx::IsNotNull( v )) {
+HXLINE( 685)							_hx_tmp5 = ( ( ::borogove::JID)(v->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) );
             						}
             						else {
-HXLINE( 556)							_hx_tmp5 = null();
+HXLINE( 685)							_hx_tmp5 = null();
             						}
-HXDLIN( 556)						_hx_tmp = ::hx::IsNotNull( _hx_tmp5 );
+HXDLIN( 685)						_hx_tmp = ::hx::IsNotNull( _hx_tmp5 );
             					}
             					else {
-HXLINE( 556)						_hx_tmp = false;
+HXLINE( 685)						_hx_tmp = false;
             					}
-HXDLIN( 556)					if (_hx_tmp) {
-HXLINE( 556)						_g->push(v);
+HXDLIN( 685)					if (_hx_tmp) {
+HXLINE( 685)						_g->push(v);
             					}
             				}
             			}
-HXDLIN( 556)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
-HXDLIN( 556)			{
-HXLINE( 556)				int _g2 = 0;
-HXDLIN( 556)				int _g3 = _g->length;
-HXDLIN( 556)				while((_g2 < _g3)){
-HXLINE( 556)					_g2 = (_g2 + 1);
-HXDLIN( 556)					int i = (_g2 - 1);
-HXDLIN( 556)					{
-HXLINE( 556)						 ::Dynamic m = _hx_array_unsafe_get(_g,i);
-HXDLIN( 556)						 ::borogove::Member inValue =  ::borogove::Member_obj::__alloc( HX_CTX ,( (::String)(m->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)) ),( (::String)(m->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)) ),( (::String)(m->__Field(HX_("photoUri",da,15,82,60),::hx::paccDynamic)) ),( (bool)(m->__Field(HX_("isSelf",96,50,b7,69),::hx::paccDynamic)) ),( (::Array< ::Dynamic>)(m->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic)) ),( ( ::borogove::JID)(m->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),( ( ::haxe::ds::StringMap)(m->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ),( ( ::borogove::AvailableChat)(m->__Field(HX_("chat",d8,5e,bf,41),::hx::paccDynamic)) ));
-HXDLIN( 556)						result->__unsafe_set(i,inValue);
+HXDLIN( 685)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
+HXDLIN( 685)			{
+HXLINE( 685)				int _g2 = 0;
+HXDLIN( 685)				int _g3 = _g->length;
+HXDLIN( 685)				while((_g2 < _g3)){
+HXLINE( 685)					_g2 = (_g2 + 1);
+HXDLIN( 685)					int i = (_g2 - 1);
+HXDLIN( 685)					{
+HXLINE( 685)						 ::Dynamic m = _hx_array_unsafe_get(_g,i);
+HXDLIN( 685)						 ::borogove::Member inValue =  ::borogove::Member_obj::__alloc( HX_CTX ,( (::String)(m->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)) ),( (::String)(m->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)) ),( (::String)(m->__Field(HX_("photoUri",da,15,82,60),::hx::paccDynamic)) ),( (bool)(m->__Field(HX_("isSelf",96,50,b7,69),::hx::paccDynamic)) ),( (::Array< ::Dynamic>)(m->__Field(HX_("roles",3d,1c,5f,ed),::hx::paccDynamic)) ),( ( ::borogove::JID)(m->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),( ( ::haxe::ds::StringMap)(m->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ),( ( ::borogove::AvailableChat)(m->__Field(HX_("chat",d8,5e,bf,41),::hx::paccDynamic)) ));
+HXDLIN( 685)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 556)			return result;
+HXDLIN( 685)			return result;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_511_storeMemberUpdates)
-HXDLIN( 511)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 512)		 ::haxe::ds::StringMap updatedIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 513)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(updates->length);
-HXDLIN( 513)		{
-HXLINE( 513)			int _g = 0;
-HXDLIN( 513)			int _g1 = updates->length;
-HXDLIN( 513)			while((_g < _g1)){
-HXLINE( 513)				_g = (_g + 1);
-HXDLIN( 513)				int i = (_g - 1);
-HXDLIN( 513)				{
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_640_storeMemberUpdates)
+HXDLIN( 640)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 641)		 ::haxe::ds::StringMap updatedIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 642)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(updates->length);
+HXDLIN( 642)		{
+HXLINE( 642)			int _g = 0;
+HXDLIN( 642)			int _g1 = updates->length;
+HXDLIN( 642)			while((_g < _g1)){
+HXLINE( 642)				_g = (_g + 1);
+HXDLIN( 642)				int i = (_g - 1);
+HXDLIN( 642)				{
             					HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::Sqlite,_gthis, ::borogove::Chat,chat,::String,accountId, ::borogove::MemberUpdate,update) HXARGC(1)
             					::Dynamic _hx_run( ::Dynamic existing){
             						HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             						::Dynamic _hx_run( ::haxe::iterators::ArrayIterator rows){
-            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_526_storeMemberUpdates)
-HXLINE( 526)							if ((rows->current < rows->array->get_length())) {
-HXLINE( 526)								return rows->array->__get(rows->current++);
+            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_655_storeMemberUpdates)
+HXLINE( 655)							if ((rows->current < rows->array->get_length())) {
+HXLINE( 655)								return rows->array->__get(rows->current++);
             							}
             							else {
-HXLINE( 526)								return null();
+HXLINE( 655)								return null();
             							}
-HXDLIN( 526)							return null();
+HXDLIN( 655)							return null();
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-            						HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_519_storeMemberUpdates)
-HXLINE( 520)						bool inValue;
-HXDLIN( 520)						if (::hx::IsNull( existing )) {
-HXLINE( 520)							inValue = ::hx::IsNull( update->jid );
+            						HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_648_storeMemberUpdates)
+HXLINE( 649)						bool inValue;
+HXDLIN( 649)						if (::hx::IsNull( existing )) {
+HXLINE( 649)							inValue = ::hx::IsNull( update->jid );
             						}
             						else {
-HXLINE( 520)							inValue = true;
+HXLINE( 649)							inValue = true;
             						}
-HXDLIN( 520)						if (inValue) {
-HXLINE( 520)							return ::thenshim::_Promise::Promise_Impl__obj::resolve(existing);
+HXDLIN( 649)						if (inValue) {
+HXLINE( 649)							return ::thenshim::_Promise::Promise_Impl__obj::resolve(existing);
             						}
-HXLINE( 522)						 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
-HXLINE( 524)						::String accountId1 = accountId;
-HXDLIN( 524)						::String chat1 = chat->chatId;
-HXLINE( 522)						return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis1->exec(HX_("SELECT member_id, display_name, photo_uri, is_self, chat, json(roles) AS roles, json(presence) AS presence, jid FROM members WHERE account_id=? AND chat_id=? AND jid=? LIMIT 1",b3,21,1d,01),::cpp::VirtualArray_obj::__new(3)->init(0,accountId1)->init(1,chat1)->init(2,update->jid->asString())), ::Dynamic(new _hx_Closure_1()),null());
+HXLINE( 651)						 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
+HXLINE( 653)						::String accountId1 = accountId;
+HXDLIN( 653)						::String chat1 = chat->chatId;
+HXLINE( 651)						return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis1->exec(HX_("SELECT member_id, display_name, photo_uri, is_self, chat, json(roles) AS roles, json(presence) AS presence, jid FROM members WHERE account_id=? AND chat_id=? AND jid=? LIMIT 1",b3,21,1d,01),::cpp::VirtualArray_obj::__new(3)->init(0,accountId1)->init(1,chat1)->init(2,update->jid->asString())), ::Dynamic(new _hx_Closure_1()),null());
             					}
             					HX_END_LOCAL_FUNC1(return)
 
             					HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_3, ::borogove::persistence::Sqlite,_gthis, ::haxe::ds::StringMap,updatedIds, ::borogove::Chat,chat, ::borogove::MemberUpdate,update) HXARGC(1)
             					 ::Dynamic _hx_run( ::Dynamic existing){
-            						HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_528_storeMemberUpdates)
-HXLINE( 529)						 ::borogove::Member member = _gthis->hydrateStoredMember(chat,existing);
-HXLINE( 530)						::String knownId;
-HXDLIN( 530)						::String tmp = update->id;
-HXDLIN( 530)						if (::hx::IsNotNull( tmp )) {
-HXLINE( 530)							knownId = tmp;
+            						HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_657_storeMemberUpdates)
+HXLINE( 658)						 ::borogove::Member member = _gthis->hydrateStoredMember(chat,existing);
+HXLINE( 659)						::String knownId;
+HXDLIN( 659)						::String tmp = update->id;
+HXDLIN( 659)						if (::hx::IsNotNull( tmp )) {
+HXLINE( 659)							knownId = tmp;
             						}
             						else {
-HXLINE( 530)							if (::hx::IsNotNull( existing )) {
-HXLINE( 530)								knownId = ( (::String)(existing->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic)) );
+HXLINE( 659)							if (::hx::IsNotNull( existing )) {
+HXLINE( 659)								knownId = ( (::String)(existing->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic)) );
             							}
             							else {
-HXLINE( 530)								knownId = null();
+HXLINE( 659)								knownId = null();
             							}
             						}
-HXLINE( 531)						bool inValue;
-HXDLIN( 531)						if (::hx::IsNotNull( knownId )) {
-HXLINE( 531)							inValue = (knownId != HX_("",00,00,00,00));
+HXLINE( 660)						bool inValue;
+HXDLIN( 660)						if (::hx::IsNotNull( knownId )) {
+HXLINE( 660)							inValue = (knownId != HX_("",00,00,00,00));
             						}
             						else {
-HXLINE( 531)							inValue = false;
+HXLINE( 660)							inValue = false;
             						}
-HXDLIN( 531)						if (inValue) {
-HXLINE( 531)							updatedIds->set(knownId,true);
+HXDLIN( 660)						if (inValue) {
+HXLINE( 660)							updatedIds->set(knownId,true);
             						}
-HXLINE( 533)						return update->applyTo(member);
+HXLINE( 662)						return update->applyTo(member);
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 513)					 ::borogove::MemberUpdate update = ( ( ::borogove::MemberUpdate)(_hx_array_unsafe_get(updates,i)) );
-HXLINE( 514)					::Dynamic inValue;
-HXDLIN( 514)					if (::hx::IsNull( update->id )) {
-HXLINE( 514)						inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 642)					 ::borogove::MemberUpdate update = ( ( ::borogove::MemberUpdate)(_hx_array_unsafe_get(updates,i)) );
+HXLINE( 643)					::Dynamic inValue;
+HXDLIN( 643)					if (::hx::IsNull( update->id )) {
+HXLINE( 643)						inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             					}
             					else {
             						HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             						::Dynamic _hx_run( ::haxe::iterators::ArrayIterator rows){
-            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_518_storeMemberUpdates)
-HXLINE( 518)							if ((rows->current < rows->array->get_length())) {
-HXLINE( 518)								return rows->array->__get(rows->current++);
+            							HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_647_storeMemberUpdates)
+HXLINE( 647)							if ((rows->current < rows->array->get_length())) {
+HXLINE( 647)								return rows->array->__get(rows->current++);
             							}
             							else {
-HXLINE( 518)								return null();
+HXLINE( 647)								return null();
             							}
-HXDLIN( 518)							return null();
+HXDLIN( 647)							return null();
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 514)						inValue = ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->db->exec(HX_("SELECT member_id, display_name, photo_uri, is_self, chat, json(roles) AS roles, json(presence) AS presence, jid FROM members WHERE account_id=? AND member_id=? LIMIT 1",d3,cf,b4,b6),::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,update->id)), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE( 643)						inValue = ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->db->exec(HX_("SELECT member_id, display_name, photo_uri, is_self, chat, json(roles) AS roles, json(presence) AS presence, jid FROM members WHERE account_id=? AND member_id=? LIMIT 1",d3,cf,b4,b6),::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,update->id)), ::Dynamic(new _hx_Closure_0()),null());
             					}
-HXLINE( 513)					::Dynamic inValue1 = ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(inValue, ::Dynamic(new _hx_Closure_2(_gthis,chat,accountId,update)),null()), ::Dynamic(new _hx_Closure_3(_gthis,updatedIds,chat,update)),null());
-HXDLIN( 513)					result->__unsafe_set(i,inValue1);
+HXLINE( 642)					::Dynamic inValue1 = ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(inValue, ::Dynamic(new _hx_Closure_2(_gthis,chat,accountId,update)),null()), ::Dynamic(new _hx_Closure_3(_gthis,updatedIds,chat,update)),null());
+HXDLIN( 642)					result->__unsafe_set(i,inValue1);
             				}
             			}
             		}
-HXDLIN( 513)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_5(_gthis,chat,accountId)),null()), ::Dynamic(new _hx_Closure_8(isFullList,_gthis,updatedIds,chat,accountId)),null()), ::Dynamic(new _hx_Closure_9()),null());
+HXDLIN( 642)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_5(_gthis,chat,accountId)),null()), ::Dynamic(new _hx_Closure_8(isFullList,_gthis,updatedIds,chat,accountId)),null()), ::Dynamic(new _hx_Closure_9()),null());
             	}
 
 
@@ -1593,27 +1808,27 @@ HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,storeMemberUpdates,return )
 ::Dynamic Sqlite_obj::clearMemberPresence(::String accountId,::String chatId){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::haxe::iterators::ArrayIterator _){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_578_clearMemberPresence)
-HXLINE( 578)			return true;
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_707_clearMemberPresence)
+HXLINE( 707)			return true;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_573_clearMemberPresence)
-HXLINE( 574)		::String _hx_tmp;
-HXDLIN( 574)		if (::hx::IsNull( chatId )) {
-HXLINE( 574)			_hx_tmp = HX_("UPDATE members SET presence=jsonb('{}') WHERE account_id=?",f1,87,fc,6b);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_702_clearMemberPresence)
+HXLINE( 703)		::String _hx_tmp;
+HXDLIN( 703)		if (::hx::IsNull( chatId )) {
+HXLINE( 703)			_hx_tmp = HX_("UPDATE members SET presence=jsonb('{}') WHERE account_id=?",f1,87,fc,6b);
             		}
             		else {
-HXLINE( 574)			_hx_tmp = HX_("UPDATE members SET presence=jsonb('{}') WHERE account_id=? AND chat_id=?",ec,c0,03,23);
+HXLINE( 703)			_hx_tmp = HX_("UPDATE members SET presence=jsonb('{}') WHERE account_id=? AND chat_id=?",ec,c0,03,23);
             		}
-HXLINE( 577)		::cpp::VirtualArray _hx_tmp1;
-HXDLIN( 577)		if (::hx::IsNull( chatId )) {
-HXLINE( 577)			_hx_tmp1 = ::cpp::VirtualArray_obj::__new(1)->init(0,accountId);
+HXLINE( 706)		::cpp::VirtualArray _hx_tmp1;
+HXDLIN( 706)		if (::hx::IsNull( chatId )) {
+HXLINE( 706)			_hx_tmp1 = ::cpp::VirtualArray_obj::__new(1)->init(0,accountId);
             		}
             		else {
-HXLINE( 577)			_hx_tmp1 = ::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,chatId);
+HXLINE( 706)			_hx_tmp1 = ::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,chatId);
             		}
-HXLINE( 573)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(_hx_tmp,_hx_tmp1), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE( 702)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(_hx_tmp,_hx_tmp1), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
@@ -1622,50 +1837,50 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,clearMemberPresence,return )
 ::Dynamic Sqlite_obj::getMembers(::String accountId, ::borogove::Chat chat,bool forModerator){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis, ::borogove::Chat,chat,bool,forModerator) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator rows){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_600_getMembers)
-HXLINE( 601)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 602)			while((rows->current < rows->array->get_length())){
-HXLINE( 603)				 ::borogove::Member member = _gthis->hydrateStoredMember(chat,rows->array->__get(rows->current++));
-HXLINE( 604)				if (::hx::IsNull( member )) {
-HXLINE( 604)					continue;
-            				}
-HXLINE( 606)				result->push(member);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_731_getMembers)
+HXLINE( 732)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 733)			while((rows->current < rows->array->get_length())){
+HXLINE( 734)				 ::borogove::Member member = _gthis->hydrateStoredMember(chat,rows->array->__get(rows->current++));
+HXLINE( 735)				if (::hx::IsNull( member )) {
+HXLINE( 735)					continue;
+            				}
+HXLINE( 737)				result->push(member);
             			}
-HXLINE( 608)			bool _hx_tmp;
-HXDLIN( 608)			if ((result->length > 1000)) {
-HXLINE( 608)				_hx_tmp = !(forModerator);
+HXLINE( 739)			bool _hx_tmp;
+HXDLIN( 739)			if ((result->length > 1000)) {
+HXLINE( 739)				_hx_tmp = !(forModerator);
             			}
             			else {
-HXLINE( 608)				_hx_tmp = false;
-            			}
-HXDLIN( 608)			if (_hx_tmp) {
-HXLINE( 608)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 608)				{
-HXLINE( 608)					int _g1 = 0;
-HXDLIN( 608)					while((_g1 < result->length)){
-HXLINE( 608)						 ::borogove::Member v = result->__get(_g1).StaticCast<  ::borogove::Member >();
-HXDLIN( 608)						_g1 = (_g1 + 1);
-HXDLIN( 608)						if ((v->showPresence != 4)) {
-HXLINE( 608)							_g->push(v);
+HXLINE( 739)				_hx_tmp = false;
+            			}
+HXDLIN( 739)			if (_hx_tmp) {
+HXLINE( 739)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 739)				{
+HXLINE( 739)					int _g1 = 0;
+HXDLIN( 739)					while((_g1 < result->length)){
+HXLINE( 739)						 ::borogove::Member v = result->__get(_g1).StaticCast<  ::borogove::Member >();
+HXDLIN( 739)						_g1 = (_g1 + 1);
+HXDLIN( 739)						if ((v->showPresence != 4)) {
+HXLINE( 739)							_g->push(v);
             						}
             					}
             				}
-HXDLIN( 608)				return _g;
+HXDLIN( 739)				return _g;
             			}
-HXLINE( 609)			return result;
+HXLINE( 740)			return result;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_582_getMembers)
-HXDLIN( 582)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 598)		int _hx_tmp;
-HXDLIN( 598)		if (forModerator) {
-HXLINE( 598)			_hx_tmp = 20000;
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_711_getMembers)
+HXDLIN( 711)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 729)		int _hx_tmp;
+HXDLIN( 729)		if (forModerator) {
+HXLINE( 729)			_hx_tmp = 20000;
             		}
             		else {
-HXLINE( 598)			_hx_tmp = 2000;
+HXLINE( 729)			_hx_tmp = 2000;
             		}
-HXLINE( 583)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec((HX_("SELECT\n\t\t\t\tmember_id, display_name, photo_uri, is_self, chat,\n\t\t\t\tjson(roles) AS roles, json(presence) AS presence, jid,\n\t\t\t\tCOALESCE(\n\t\t\t\t\t(SELECT MAX(CASE value->>'$.id' WHEN 'owner' THEN 4 WHEN 'admin' THEN 3 WHEN 'none' THEN 1 WHEN 'outcast' THEN 0 ELSE 2 END) FROM json_each(roles)),\n\t\t\t\t\t2\n\t\t\t\t) AS role_rank,\n\t\t\t\tCASE WHEN json(presence) NOT LIKE '% type=\\\"unavailable\\\"%' THEN 1 ELSE 0 END AS is_online\n\t\t\tFROM members\n\t\t\tWHERE\n\t\t\t\taccount_id=? AND chat_id=?\n\t\t\t\tAND (? OR NOT EXISTS (SELECT 1 FROM json_each(roles) WHERE value->>'$.id' = 'outcast'))\n\t\t\t\tAND NOT (EXISTS (SELECT 1 FROM json_each(roles) WHERE value->>'$.id' = 'none') AND NOT is_online)\n\t\t\tORDER BY role_rank DESC, is_online DESC, LOWER(display_name) ASC\n\t\t\tLIMIT ",d2,99,b7,60) + _hx_tmp),::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,chat->chatId)->init(2,forModerator)), ::Dynamic(new _hx_Closure_0(_gthis,chat,forModerator)),null());
+HXLINE( 712)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec((HX_("SELECT\n\t\t\t\tmember_id, display_name, photo_uri, is_self, chat,\n\t\t\t\tjson(roles) AS roles, json(presence) AS presence, jid,\n\t\t\t\tCOALESCE(\n\t\t\t\t\t(SELECT MAX(CASE value->>'$.id' WHEN 'owner' THEN 4 WHEN 'admin' THEN 3 WHEN 'none' THEN 1 WHEN 'outcast' THEN 0 ELSE 2 END) FROM json_each(roles)),\n\t\t\t\t\t2\n\t\t\t\t) AS role_rank,\n\t\t\t\tCASE WHEN EXISTS (SELECT 1 FROM json_each(presence))\n\t\t\t\t\tAND json(presence) NOT LIKE '% type=\\\"unavailable\\\"%'\n\t\t\t\t\tTHEN 1 ELSE 0 END AS is_online\n\t\t\tFROM members\n\t\t\tWHERE\n\t\t\t\taccount_id=? AND chat_id=?\n\t\t\t\tAND (? OR NOT EXISTS (SELECT 1 FROM json_each(roles) WHERE value->>'$.id' = 'outcast'))\n\t\t\t\tAND NOT (EXISTS (SELECT 1 FROM json_each(roles) WHERE value->>'$.id' = 'none') AND NOT is_online)\n\t\t\tORDER BY role_rank DESC, is_online DESC, LOWER(display_name) ASC\n\t\t\tLIMIT ",a1,e4,c1,3e) + _hx_tmp),::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,chat->chatId)->init(2,forModerator)), ::Dynamic(new _hx_Closure_0(_gthis,chat,forModerator)),null());
             	}
 
 
@@ -1674,75 +1889,120 @@ HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,getMembers,return )
 ::Dynamic Sqlite_obj::getMemberDetails(::String accountId, ::borogove::Chat chat,::Array< ::String > ids){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis, ::borogove::Chat,chat,::Array< ::String >,ids) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator rows){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_622_getMemberDetails)
-HXLINE( 623)			 ::haxe::ds::StringMap lookup =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 624)			while((rows->current < rows->array->get_length())){
-HXLINE( 624)				 ::Dynamic row = rows->array->__get(rows->current++);
-HXLINE( 625)				{
-HXLINE( 625)					::String key = ( (::String)(row->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic)) );
-HXDLIN( 625)					lookup->set(key,_gthis->hydrateStoredMember(chat,row));
-            				}
-            			}
-HXLINE( 628)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(ids->length);
-HXDLIN( 628)			{
-HXLINE( 628)				int _g = 0;
-HXDLIN( 628)				int _g1 = ids->length;
-HXDLIN( 628)				while((_g < _g1)){
-HXLINE( 628)					_g = (_g + 1);
-HXDLIN( 628)					int i = (_g - 1);
-HXDLIN( 628)					{
-HXLINE( 628)						 ::borogove::Member inValue = ( ( ::borogove::Member)(lookup->get(_hx_array_unsafe_get(ids,i))) );
-HXDLIN( 628)						result->__unsafe_set(i,inValue);
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_753_getMemberDetails)
+HXLINE( 754)			 ::haxe::ds::StringMap lookup =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 755)			while((rows->current < rows->array->get_length())){
+HXLINE( 755)				 ::Dynamic row = rows->array->__get(rows->current++);
+HXLINE( 756)				{
+HXLINE( 756)					::String key = ( (::String)(row->__Field(HX_("member_id",e0,03,69,b8),::hx::paccDynamic)) );
+HXDLIN( 756)					lookup->set(key,_gthis->hydrateStoredMember(chat,row));
+            				}
+            			}
+HXLINE( 759)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(ids->length);
+HXDLIN( 759)			{
+HXLINE( 759)				int _g = 0;
+HXDLIN( 759)				int _g1 = ids->length;
+HXDLIN( 759)				while((_g < _g1)){
+HXLINE( 759)					_g = (_g + 1);
+HXDLIN( 759)					int i = (_g - 1);
+HXDLIN( 759)					{
+HXLINE( 759)						 ::borogove::Member inValue = ( ( ::borogove::Member)(lookup->get(_hx_array_unsafe_get(ids,i))) );
+HXDLIN( 759)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 628)			return result;
+HXDLIN( 759)			return result;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_614_getMemberDetails)
-HXDLIN( 614)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 615)		if ((ids->length == 0)) {
-HXLINE( 615)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
-            		}
-HXLINE( 617)		::Array< ::String > result = ::Array_obj< ::String >::__new(ids->length);
-HXDLIN( 617)		{
-HXLINE( 617)			int _g = 0;
-HXDLIN( 617)			int _g1 = ids->length;
-HXDLIN( 617)			while((_g < _g1)){
-HXLINE( 617)				_g = (_g + 1);
-HXDLIN( 617)				int i = (_g - 1);
-HXDLIN( 617)				{
-HXLINE( 617)					_hx_array_unsafe_get(ids,i);
-HXDLIN( 617)					result->__unsafe_set(i,HX_("?",3f,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_745_getMemberDetails)
+HXDLIN( 745)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 746)		if ((ids->length == 0)) {
+HXLINE( 746)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+            		}
+HXLINE( 748)		::Array< ::String > result = ::Array_obj< ::String >::__new(ids->length);
+HXDLIN( 748)		{
+HXLINE( 748)			int _g = 0;
+HXDLIN( 748)			int _g1 = ids->length;
+HXDLIN( 748)			while((_g < _g1)){
+HXLINE( 748)				_g = (_g + 1);
+HXDLIN( 748)				int i = (_g - 1);
+HXDLIN( 748)				{
+HXLINE( 748)					_hx_array_unsafe_get(ids,i);
+HXDLIN( 748)					result->__unsafe_set(i,HX_("?",3f,00,00,00));
             				}
             			}
             		}
-HXDLIN( 617)		::String placeholders = result->join(HX_(", ",74,26,00,00));
-HXLINE( 620)		::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId)->concat(ids);
-HXLINE( 622)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(((HX_("SELECT member_id, display_name, photo_uri, is_self, chat, json(roles) AS roles, json(presence) AS presence, jid FROM members WHERE account_id = ? AND member_id IN (",ee,1d,8e,8d) + placeholders) + HX_(")",29,00,00,00)),params), ::Dynamic(new _hx_Closure_0(_gthis,chat,ids)),null());
+HXDLIN( 748)		::String placeholders = result->join(HX_(", ",74,26,00,00));
+HXLINE( 751)		::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId)->concat(ids);
+HXLINE( 753)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(((HX_("SELECT member_id, display_name, photo_uri, is_self, chat, json(roles) AS roles, json(presence) AS presence, jid FROM members WHERE account_id = ? AND member_id IN (",ee,1d,8e,8d) + placeholders) + HX_(")",29,00,00,00)),params), ::Dynamic(new _hx_Closure_0(_gthis,chat,ids)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,getMemberDetails,return )
 
+::Dynamic Sqlite_obj::storeVoiceRequest(::String accountId, ::borogove::Chat chat,::String jid,bool requesting){
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            		bool _hx_run(bool _){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_765_storeVoiceRequest)
+HXDLIN( 765)			return true;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_765_storeVoiceRequest)
+HXDLIN( 765)		::String _hx_tmp;
+HXDLIN( 765)		if (requesting) {
+HXDLIN( 765)			_hx_tmp = HX_("1",31,00,00,00);
+            		}
+            		else {
+HXDLIN( 765)			_hx_tmp = null();
+            		}
+HXDLIN( 765)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->set((((((HX_("voiceRequest:",dd,69,6f,a3) + accountId) + HX_("\n",0a,00,00,00)) + chat->chatId) + HX_("\n",0a,00,00,00)) + jid),_hx_tmp), ::Dynamic(new _hx_Closure_0()),null());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,storeVoiceRequest,return )
+
+::Dynamic Sqlite_obj::listVoiceRequests(::String accountId, ::borogove::Chat chat){
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis, ::borogove::Chat,chat) HXARGC(1)
+            		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator rows){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_773_listVoiceRequests)
+HXLINE( 774)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 775)			while((rows->current < rows->array->get_length())){
+HXLINE( 776)				 ::borogove::Member member = _gthis->hydrateStoredMember(chat,rows->array->__get(rows->current++));
+HXLINE( 777)				if (::hx::IsNotNull( member )) {
+HXLINE( 777)					result->push(member);
+            				}
+            			}
+HXLINE( 779)			return result;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_769_listVoiceRequests)
+HXDLIN( 769)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 770)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT member_id, display_name, photo_uri, is_self, chat, json(roles) AS roles, json(presence) AS presence, jid FROM members INNER JOIN keyvaluepairs ON keyvaluepairs.k='voiceRequest:' || account_id || char(10) || chat_id || char(10) || jid WHERE account_id=? AND chat_id=?",1d,99,41,61),::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,chat->chatId)), ::Dynamic(new _hx_Closure_0(_gthis,chat)),null());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,listVoiceRequests,return )
+
 ::Dynamic Sqlite_obj::searchMessages(::String accountId,::String chatId,::String q){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
-            		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_640_searchMessages)
-HXLINE( 640)			return _gthis->hydrateMessages(accountId,result);
+            		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_796_searchMessages)
+HXLINE( 796)			return _gthis->hydrateMessagesAndLoadMeta(accountId,result);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_633_searchMessages)
-HXDLIN( 633)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 634)		::String sql = HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sort_id, sync_point FROM messages WHERE account_id=? AND stanza LIKE ?",c2,96,a8,85);
-HXLINE( 635)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,((HX_("%",25,00,00,00) + q) + HX_("%",25,00,00,00)));
-HXLINE( 636)		if (::hx::IsNotNull( chatId )) {
-HXLINE( 637)			sql = (HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sort_id, sync_point FROM messages WHERE account_id=? AND stanza LIKE ?",c2,96,a8,85) + HX_(" AND chat_id=?",3b,95,e7,43));
-HXLINE( 638)			params->push(chatId);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_784_searchMessages)
+HXDLIN( 784)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 785)		::String sql = ((HX_("\n\t\t\tSELECT\n\t\t\t\t",4f,6c,f2,53) + ::borogove::persistence::Sqlite_obj::messageColumnsString(null())) + HX_("\n\t\t\tFROM messages\n\t\t\tWHERE account_id=? AND stanza LIKE ?\n\t\t",88,4d,dc,33));
+HXLINE( 791)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,((HX_("%",25,00,00,00) + q) + HX_("%",25,00,00,00)));
+HXLINE( 792)		if (::hx::IsNotNull( chatId )) {
+HXLINE( 793)			sql = (sql + HX_(" AND chat_id=?",3b,95,e7,43));
+HXLINE( 794)			params->push(chatId);
             		}
-HXLINE( 640)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(sql,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
+HXLINE( 796)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(sql,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
             	}
 
 
@@ -1753,371 +2013,280 @@ HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,searchMessages,return )
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::iterators::ArrayIterator,result) HXARGC(0)
             			 ::haxe::iterators::ArrayIterator _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_649_getChats)
-HXLINE( 649)				return result;
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_805_getChats)
+HXLINE( 805)				return result;
             			}
             			HX_END_LOCAL_FUNC0(return)
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::Array< ::Dynamic>,rows) HXARGC(1)
             			::Array< ::Dynamic> _hx_run( ::haxe::ds::StringMap chatData){
-            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_650_getChats)
-HXLINE( 651)				::Array< ::Dynamic> chats = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 652)				{
-HXLINE( 652)					int _g = 0;
-HXDLIN( 652)					while((_g < rows->length)){
-HXLINE( 652)						 ::Dynamic row = rows->__get(_g);
-HXDLIN( 652)						_g = (_g + 1);
-HXLINE( 653)						 ::Dynamic capsJson;
-HXDLIN( 653)						if (::hx::IsNull( row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
-HXLINE( 653)							capsJson = null();
+            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_806_getChats)
+HXLINE( 807)				::Array< ::Dynamic> chats = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 808)				{
+HXLINE( 808)					int _g = 0;
+HXDLIN( 808)					while((_g < rows->length)){
+HXLINE( 808)						 ::Dynamic row = rows->__get(_g);
+HXDLIN( 808)						_g = (_g + 1);
+HXLINE( 809)						 ::Dynamic capsJson;
+HXDLIN( 809)						if (::hx::IsNull( row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
+HXLINE( 809)							capsJson = null();
             						}
             						else {
-HXLINE( 653)							capsJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
+HXLINE( 809)							capsJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
             						}
-HXLINE( 654)						 ::borogove::Caps _hx_tmp;
-HXDLIN( 654)						if (::hx::IsNull( capsJson )) {
-HXLINE( 654)							_hx_tmp = null();
+HXLINE( 810)						 ::borogove::Caps _hx_tmp;
+HXDLIN( 810)						if (::hx::IsNull( capsJson )) {
+HXLINE( 810)							_hx_tmp = null();
             						}
             						else {
-HXLINE( 654)							_hx_tmp = _gthis->hydrateCaps(capsJson,( (::Array< unsigned char >)(row->__Field(HX_("caps_ver",05,68,56,1e),::hx::paccDynamic)) ));
+HXLINE( 810)							_hx_tmp = _gthis->hydrateCaps(capsJson,( (::Array< unsigned char >)(row->__Field(HX_("caps_ver",05,68,56,1e),::hx::paccDynamic)) ));
             						}
-HXDLIN( 654)						row->__SetField(HX_("capsObj",56,b6,8b,a6),_hx_tmp,::hx::paccDynamic);
-HXLINE( 656)						 ::Dynamic metaJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("meta",c5,4a,59,48),::hx::paccDynamic)) ))->doParse();
-HXLINE( 657)						 ::haxe::ds::StringMap threadsMap =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 658)						{
-HXLINE( 658)							 ::Dynamic this1;
-HXDLIN( 658)							 ::Dynamic tmp =  ::Dynamic(metaJson->__Field(HX_("threads",69,f6,91,53),::hx::paccDynamic));
-HXDLIN( 658)							if (::hx::IsNotNull( tmp )) {
-HXLINE( 658)								this1 = tmp;
+HXDLIN( 810)						row->__SetField(HX_("capsObj",56,b6,8b,a6),_hx_tmp,::hx::paccDynamic);
+HXLINE( 812)						 ::Dynamic metaJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("meta",c5,4a,59,48),::hx::paccDynamic)) ))->doParse();
+HXLINE( 813)						 ::haxe::ds::StringMap threadsMap =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 814)						{
+HXLINE( 814)							 ::Dynamic this1;
+HXDLIN( 814)							 ::Dynamic tmp =  ::Dynamic(metaJson->__Field(HX_("threads",69,f6,91,53),::hx::paccDynamic));
+HXDLIN( 814)							if (::hx::IsNotNull( tmp )) {
+HXLINE( 814)								this1 = tmp;
             							}
             							else {
-HXLINE( 658)								this1 =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE( 814)								this1 =  ::Dynamic(::hx::Anon_obj::Create(0));
             							}
-HXDLIN( 658)							 ::Dynamic access = this1;
-HXDLIN( 658)							::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
-HXDLIN( 658)							int _g_index = 0;
-HXDLIN( 658)							while((_g_index < _g_keys->length)){
-HXLINE( 658)								_g_index = (_g_index + 1);
-HXDLIN( 658)								::String key = _g_keys->__get((_g_index - 1));
-HXDLIN( 658)								::String _g_value = ( (::String)(::Reflect_obj::field(access,key)) );
-HXLINE( 659)								{
-HXLINE( 659)									::String k;
-HXDLIN( 659)									if ((key == HX_("",00,00,00,00))) {
-HXLINE( 659)										k = null();
+HXDLIN( 814)							 ::Dynamic access = this1;
+HXDLIN( 814)							::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
+HXDLIN( 814)							int _g_index = 0;
+HXDLIN( 814)							while((_g_index < _g_keys->length)){
+HXLINE( 814)								_g_index = (_g_index + 1);
+HXDLIN( 814)								::String key = _g_keys->__get((_g_index - 1));
+HXDLIN( 814)								::String _g_value = ( (::String)(::Reflect_obj::field(access,key)) );
+HXLINE( 815)								{
+HXLINE( 815)									::String k;
+HXDLIN( 815)									if ((key == HX_("",00,00,00,00))) {
+HXLINE( 815)										k = null();
             									}
             									else {
-HXLINE( 659)										k = key;
+HXLINE( 815)										k = key;
             									}
-HXDLIN( 659)									::String _hx_tmp1;
-HXDLIN( 659)									if (::hx::IsNull( k )) {
-HXLINE( 659)										_hx_tmp1 = ::borogove::_Chat::Chat_Fields__obj::nullSentinel;
+HXDLIN( 815)									::String _hx_tmp1;
+HXDLIN( 815)									if (::hx::IsNull( k )) {
+HXLINE( 815)										_hx_tmp1 = ::borogove::_Chat::Chat_Fields__obj::nullSentinel;
             									}
             									else {
-HXLINE( 659)										_hx_tmp1 = k;
+HXLINE( 815)										_hx_tmp1 = k;
             									}
-HXDLIN( 659)									threadsMap->set(_hx_tmp1,_g_value);
+HXDLIN( 815)									threadsMap->set(_hx_tmp1,_g_value);
             								}
             							}
             						}
-HXLINE( 663)						 ::Dynamic derived = chatData->get( ::Dynamic(row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)));
-HXLINE( 664)						::String row1 = ( (::String)(row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
-HXDLIN( 664)						bool _hx_tmp2 = ::hx::IsNotEq( row->__Field(HX_("trusted",f7,b7,a6,16),::hx::paccDynamic),0 );
-HXDLIN( 664)						bool _hx_tmp3 = ::hx::IsNotEq( row->__Field(HX_("bookmarked",95,fe,f6,fb),::hx::paccDynamic),0 );
-HXDLIN( 664)						::Array< unsigned char > row2 = ( (::Array< unsigned char >)(row->__Field(HX_("avatar_sha1",ab,69,a3,a4),::hx::paccDynamic)) );
-HXDLIN( 664)						 ::haxe::ds::StringMap _hx_tmp4;
-HXDLIN( 664)						 ::haxe::ds::StringMap tmp1 = ( ( ::haxe::ds::StringMap)(derived->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) );
-HXDLIN( 664)						if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 664)							_hx_tmp4 = tmp1;
+HXLINE( 819)						 ::Dynamic derived = chatData->get( ::Dynamic(row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)));
+HXLINE( 820)						::String row1 = ( (::String)(row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
+HXDLIN( 820)						bool _hx_tmp2 = ::hx::IsNotEq( row->__Field(HX_("trusted",f7,b7,a6,16),::hx::paccDynamic),0 );
+HXDLIN( 820)						bool _hx_tmp3 = ::hx::IsNotEq( row->__Field(HX_("bookmarked",95,fe,f6,fb),::hx::paccDynamic),0 );
+HXDLIN( 820)						::Array< unsigned char > row2 = ( (::Array< unsigned char >)(row->__Field(HX_("avatar_sha1",ab,69,a3,a4),::hx::paccDynamic)) );
+HXDLIN( 820)						 ::haxe::ds::StringMap _hx_tmp4;
+HXDLIN( 820)						 ::haxe::ds::StringMap tmp1 = ( ( ::haxe::ds::StringMap)(derived->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) );
+HXDLIN( 820)						if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 820)							_hx_tmp4 = tmp1;
+            						}
+            						else {
+HXLINE( 820)							_hx_tmp4 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+            						}
+HXDLIN( 820)						::Array< ::Dynamic> _hx_tmp5;
+HXDLIN( 820)						if (::hx::IsNotNull( derived )) {
+HXLINE( 820)							_hx_tmp5 = ( (::Array< ::Dynamic>)(derived->__Field(HX_("membersForName",1b,56,f2,d2),::hx::paccDynamic)) );
             						}
             						else {
-HXLINE( 664)							_hx_tmp4 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 820)							_hx_tmp5 = null();
             						}
-HXDLIN( 664)						::Array< ::Dynamic> _hx_tmp5;
-HXDLIN( 664)						if (::hx::IsNotNull( derived )) {
-HXLINE( 664)							_hx_tmp5 = ( (::Array< ::Dynamic>)(derived->__Field(HX_("membersForName",1b,56,f2,d2),::hx::paccDynamic)) );
+HXDLIN( 820)						::String row3 = ( (::String)(row->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic)) );
+HXDLIN( 820)						 ::Dynamic row4 = row->__Field(HX_("ui_state",a6,9a,4e,b2),::hx::paccDynamic);
+HXDLIN( 820)						bool _hx_tmp6 = ::hx::IsNotEq( row->__Field(HX_("blocked",ec,7a,fe,44),::hx::paccDynamic),0 );
+HXDLIN( 820)						 ::Dynamic tmp2 = metaJson->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic);
+HXDLIN( 820)						::String tmp3;
+HXDLIN( 820)						if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 820)							tmp3 = ( (::String)(tmp2->__Field(HX_("emoji",86,6f,d9,6f),::hx::paccDynamic)) );
             						}
             						else {
-HXLINE( 664)							_hx_tmp5 = null();
+HXLINE( 820)							tmp3 = null();
             						}
-HXDLIN( 664)						::String row3 = ( (::String)(row->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic)) );
-HXDLIN( 664)						 ::Dynamic row4 = row->__Field(HX_("ui_state",a6,9a,4e,b2),::hx::paccDynamic);
-HXDLIN( 664)						bool _hx_tmp6 = ::hx::IsNotEq( row->__Field(HX_("blocked",ec,7a,fe,44),::hx::paccDynamic),0 );
-HXDLIN( 664)						 ::Dynamic tmp2 = metaJson->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic);
-HXDLIN( 664)						::String tmp3;
-HXDLIN( 664)						if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 664)							tmp3 = ( (::String)(tmp2->__Field(HX_("emoji",86,6f,d9,6f),::hx::paccDynamic)) );
+HXDLIN( 820)						::String _hx_tmp7;
+HXDLIN( 820)						if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 820)							_hx_tmp7 = tmp3;
             						}
             						else {
-HXLINE( 664)							tmp3 = null();
+HXLINE( 820)							_hx_tmp7 = HX_("",00,00,00,00);
             						}
-HXDLIN( 664)						::String _hx_tmp7;
-HXDLIN( 664)						if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 664)							_hx_tmp7 = tmp3;
+HXDLIN( 820)						 ::Dynamic tmp4 = metaJson->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic);
+HXDLIN( 820)						::String tmp5;
+HXDLIN( 820)						if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 820)							tmp5 = ( (::String)(tmp4->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) );
             						}
             						else {
-HXLINE( 664)							_hx_tmp7 = HX_("",00,00,00,00);
+HXLINE( 820)							tmp5 = null();
             						}
-HXDLIN( 664)						 ::Dynamic tmp4 = metaJson->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic);
-HXDLIN( 664)						::String tmp5;
-HXDLIN( 664)						if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 664)							tmp5 = ( (::String)(tmp4->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) );
+HXDLIN( 820)						::String _hx_tmp8;
+HXDLIN( 820)						if (::hx::IsNotNull( tmp5 )) {
+HXLINE( 820)							_hx_tmp8 = tmp5;
             						}
             						else {
-HXLINE( 664)							tmp5 = null();
+HXLINE( 820)							_hx_tmp8 = HX_("",00,00,00,00);
             						}
-HXDLIN( 664)						::String _hx_tmp8;
-HXDLIN( 664)						if (::hx::IsNotNull( tmp5 )) {
-HXLINE( 664)							_hx_tmp8 = tmp5;
+HXDLIN( 820)						 ::borogove::Status _hx_tmp9 =  ::borogove::Status_obj::__alloc( HX_CTX ,_hx_tmp7,_hx_tmp8);
+HXDLIN( 820)						 ::borogove::Stanza _hx_tmp10;
+HXDLIN( 820)						if (::hx::IsNull( row->__Field(HX_("extensions",14,7c,70,89),::hx::paccDynamic) )) {
+HXLINE( 820)							_hx_tmp10 = null();
             						}
             						else {
-HXLINE( 664)							_hx_tmp8 = HX_("",00,00,00,00);
+HXLINE( 820)							_hx_tmp10 = ::borogove::Stanza_obj::parse(( (::String)(row->__Field(HX_("extensions",14,7c,70,89),::hx::paccDynamic)) ));
             						}
-HXDLIN( 664)						 ::borogove::Status _hx_tmp9 =  ::borogove::Status_obj::__alloc( HX_CTX ,_hx_tmp7,_hx_tmp8);
-HXDLIN( 664)						::String row5 = ( (::String)(row->__Field(HX_("extensions",14,7c,70,89),::hx::paccDynamic)) );
-HXDLIN( 664)						::String row6 = ( (::String)(row->__Field(HX_("read_up_to_id",84,60,ad,9e),::hx::paccDynamic)) );
-HXDLIN( 664)						::String row7 = ( (::String)(row->__Field(HX_("read_up_to_by",80,5a,ad,9e),::hx::paccDynamic)) );
-HXDLIN( 664)						 ::Dynamic _hx_tmp10;
-HXDLIN( 664)						if (::hx::IsNull( row->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic) )) {
-HXLINE( 664)							_hx_tmp10 = null();
+HXDLIN( 820)						::String row5 = ( (::String)(row->__Field(HX_("read_up_to_id",84,60,ad,9e),::hx::paccDynamic)) );
+HXDLIN( 820)						::String row6 = ( (::String)(row->__Field(HX_("read_up_to_by",80,5a,ad,9e),::hx::paccDynamic)) );
+HXDLIN( 820)						 ::Dynamic _hx_tmp11;
+HXDLIN( 820)						if (::hx::IsNull( row->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic) )) {
+HXLINE( 820)							_hx_tmp11 = null();
             						}
             						else {
-HXLINE( 664)							_hx_tmp10 = ::hx::IsNotEq( row->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic),0 );
+HXLINE( 820)							_hx_tmp11 = ::hx::IsNotEq( row->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic),0 );
             						}
-HXDLIN( 664)						bool _hx_tmp11 = ::hx::IsNotEq( row->__Field(HX_("notify_mention",34,44,26,d0),::hx::paccDynamic),0 );
-HXDLIN( 664)						bool _hx_tmp12 = ::hx::IsNotEq( row->__Field(HX_("notify_reply",f4,e7,df,1b),::hx::paccDynamic),0 );
-HXDLIN( 664)						 ::borogove::Caps row8 = ( ( ::borogove::Caps)(row->__Field(HX_("capsObj",56,b6,8b,a6),::hx::paccDynamic)) );
-HXDLIN( 664)						::String metaJson1 = ( (::String)(metaJson->__Field(HX_("mavUntil",9c,52,56,84),::hx::paccDynamic)) );
-HXDLIN( 664)						chats->push( ::borogove::SerializedChat_obj::__alloc( HX_CTX ,row1,_hx_tmp2,_hx_tmp3,row2,_hx_tmp4,_hx_tmp5,row3,row4,_hx_tmp6,_hx_tmp9,row5,row6,row7,_hx_tmp10,_hx_tmp11,_hx_tmp12,threadsMap,row8,metaJson1,::Array_obj< int >::__new(0),( (::String)(::Reflect_obj::field(row,HX_("class",38,78,58,48))) )));
+HXDLIN( 820)						bool _hx_tmp12 = ::hx::IsNotEq( row->__Field(HX_("notify_mention",34,44,26,d0),::hx::paccDynamic),0 );
+HXDLIN( 820)						bool _hx_tmp13 = ::hx::IsNotEq( row->__Field(HX_("notify_reply",f4,e7,df,1b),::hx::paccDynamic),0 );
+HXDLIN( 820)						 ::borogove::Caps row7 = ( ( ::borogove::Caps)(row->__Field(HX_("capsObj",56,b6,8b,a6),::hx::paccDynamic)) );
+HXDLIN( 820)						::String metaJson1 = ( (::String)(metaJson->__Field(HX_("mavUntil",9c,52,56,84),::hx::paccDynamic)) );
+HXDLIN( 820)						chats->push( ::borogove::SerializedChat_obj::__alloc( HX_CTX ,row1,_hx_tmp2,_hx_tmp3,row2,_hx_tmp4,_hx_tmp5,row3,row4,_hx_tmp6,_hx_tmp9,_hx_tmp10,row5,row6,_hx_tmp11,_hx_tmp12,_hx_tmp13,threadsMap,row7,metaJson1,::Array_obj< int >::__new(0),( (::String)(::Reflect_obj::field(row,HX_("class",38,78,58,48))) )));
             					}
             				}
-HXLINE( 666)				return chats;
+HXLINE( 822)				return chats;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_648_getChats)
-HXLINE( 649)			::Array< ::Dynamic> rows = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_804_getChats)
+HXLINE( 805)			::Array< ::Dynamic> rows = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(result)))));
-HXLINE( 650)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->chatPresenceAndMembersForName(accountId,rows), ::Dynamic(new _hx_Closure_1(_gthis,rows)),null());
+HXLINE( 806)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->chatPresenceAndMembersForName(accountId,rows), ::Dynamic(new _hx_Closure_1(_gthis,rows)),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_644_getChats)
-HXDLIN( 644)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 645)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT chat_id, trusted, bookmarked, avatar_sha1, fn, ui_state, blocked, extensions, read_up_to_id, read_up_to_by, notifications_filtered, notify_mention, notify_reply, json(caps) AS caps, caps_ver, json(meta) AS meta, class FROM chats LEFT JOIN caps ON chats.caps_ver=caps.sha1 WHERE account_id=?",3b,68,96,e9),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_2(_gthis,accountId)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_800_getChats)
+HXDLIN( 800)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 801)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT chat_id, trusted, bookmarked, avatar_sha1, fn, ui_state, blocked, extensions, read_up_to_id, read_up_to_by, notifications_filtered, notify_mention, notify_reply, json(caps) AS caps, caps_ver, json(meta) AS meta, class FROM chats LEFT JOIN caps ON chats.caps_ver=caps.sha1 WHERE account_id=?",3b,68,96,e9),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_2(_gthis,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,getChats,return )
 
 ::Dynamic Sqlite_obj::storeMessages(::String accountId,::Array< ::Dynamic> messages){
-            		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_3,::Array< ::Dynamic>,messages, ::borogove::persistence::Sqlite,_gthis,::Array< ::Dynamic>,replyTos,::String,accountId) HXARGC(0)
+            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_2,::Array< ::Dynamic>,messages, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(0)
             		::Dynamic _hx_run(){
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,messages, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             			::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_713_storeMessages)
-HXLINE( 713)				::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(messages->length);
-HXDLIN( 713)				{
-HXLINE( 713)					int _g = 0;
-HXDLIN( 713)					int _g1 = messages->length;
-HXDLIN( 713)					while((_g < _g1)){
-HXLINE( 713)						_g = (_g + 1);
-HXDLIN( 713)						int i = (_g - 1);
-HXDLIN( 713)						{
-HXLINE( 713)							 ::borogove::ChatMessage m = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
-HXDLIN( 713)							::Dynamic inValue = _gthis->fetchFromStub(accountId,m);
-HXDLIN( 713)							result->__unsafe_set(i,inValue);
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_855_storeMessages)
+HXLINE( 859)				::Array< ::Dynamic> combinedMessages = ::borogove::ChatMessageCombiner_obj::combine(messages);
+HXLINE( 860)				::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(combinedMessages->length);
+HXDLIN( 860)				{
+HXLINE( 860)					int _g = 0;
+HXDLIN( 860)					int _g1 = combinedMessages->length;
+HXDLIN( 860)					while((_g < _g1)){
+HXLINE( 860)						_g = (_g + 1);
+HXDLIN( 860)						int i = (_g - 1);
+HXDLIN( 860)						{
+HXLINE( 860)							 ::borogove::ChatMessage m = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(combinedMessages,i)) );
+HXDLIN( 860)							::Dynamic inValue = _gthis->fetchFromStub(accountId,m);
+HXDLIN( 860)							result->__unsafe_set(i,inValue);
             						}
             					}
             				}
-HXDLIN( 713)				return ::thenshim::PromiseTools_obj::all(result);
+HXDLIN( 860)				return ::thenshim::PromiseTools_obj::all(result);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::Array< ::Dynamic>,replyTos,::String,accountId) HXARGC(1)
-            			::Dynamic _hx_run(::Array< ::Dynamic> ms){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_715_storeMessages)
-HXLINE( 715)				return _gthis->hydrateReplyTo(accountId,ms,replyTos);
-            			}
-            			HX_END_LOCAL_FUNC1(return)
-
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             			::Dynamic _hx_run(::Array< ::Dynamic> ms){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_717_storeMessages)
-HXLINE( 717)				return _gthis->hydrateReactions(accountId,ms);
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_862_storeMessages)
+HXLINE( 862)				return _gthis->messagesLoadMeta(accountId,ms);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_699_storeMessages)
-HXLINE( 699)			 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
-HXLINE( 700)			::Array< ::String > result = ::Array_obj< ::String >::__new(messages->length);
-HXDLIN( 700)			{
-HXLINE( 700)				int _g = 0;
-HXDLIN( 700)				int _g1 = messages->length;
-HXDLIN( 700)				while((_g < _g1)){
-HXLINE( 700)					_g = (_g + 1);
-HXDLIN( 700)					int i = (_g - 1);
-HXDLIN( 700)					{
-HXLINE( 700)						_hx_array_unsafe_get(messages,i);
-HXDLIN( 700)						result->__unsafe_set(i,HX_("(?,?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),?,?,?,?,?,?)",30,21,d1,bd));
-            					}
-            				}
-            			}
-HXDLIN( 700)			::String _hx_tmp = (HX_("INSERT OR REPLACE INTO messages VALUES ",28,32,a2,bc) + result->join(HX_(",",2c,00,00,00)));
-HXLINE( 701)			::Array< ::Dynamic> _g2 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 701)			{
-HXLINE( 701)				int _g_current = 0;
-HXDLIN( 701)				::Array< ::Dynamic> _g_array = messages;
-HXDLIN( 701)				while((_g_current < _g_array->length)){
-HXLINE( 701)					_g_current = (_g_current + 1);
-HXDLIN( 701)					 ::borogove::ChatMessage x = _g_array->__get((_g_current - 1)).StaticCast<  ::borogove::ChatMessage >();
-HXLINE( 703)					 ::borogove::ChatMessage message;
-HXDLIN( 703)					if ((x->versions->length == 1)) {
-HXLINE( 703)						message = x->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
-            					}
-            					else {
-HXLINE( 703)						message = x;
-            					}
-HXLINE( 705)					::String accountId1 = accountId;
-HXDLIN( 705)					::String _hx_tmp1;
-HXDLIN( 705)					::String tmp = message->serverId;
-HXDLIN( 705)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 705)						_hx_tmp1 = tmp;
-            					}
-            					else {
-HXLINE( 705)						_hx_tmp1 = HX_("",00,00,00,00);
-            					}
-HXDLIN( 705)					::String _hx_tmp2;
-HXDLIN( 705)					::String tmp1 = message->serverIdBy;
-HXDLIN( 705)					if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 705)						_hx_tmp2 = tmp1;
-            					}
-            					else {
-HXLINE( 705)						_hx_tmp2 = HX_("",00,00,00,00);
-            					}
-HXLINE( 706)					::String _hx_tmp3;
-HXDLIN( 706)					::String tmp2 = message->localId;
-HXDLIN( 706)					if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 706)						_hx_tmp3 = tmp2;
-            					}
-            					else {
-HXLINE( 706)						_hx_tmp3 = HX_("",00,00,00,00);
-            					}
-HXDLIN( 706)					::String _hx_tmp4;
-HXDLIN( 706)					::String tmp3 = x->callSid();
-HXDLIN( 706)					::String tmp4;
-HXDLIN( 706)					if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 706)						tmp4 = tmp3;
-            					}
-            					else {
-HXLINE( 706)						tmp4 = x->localId;
-            					}
-HXDLIN( 706)					if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 706)						_hx_tmp4 = tmp4;
-            					}
-            					else {
-HXLINE( 706)						_hx_tmp4 = x->serverId;
-            					}
-HXDLIN( 706)					bool correctable = x->syncPoint;
-HXLINE( 707)					::String _hx_tmp5 = x->chatId();
-HXDLIN( 707)					::String correctable1 = x->senderId;
-HXLINE( 708)					::String message1 = message->timestamp;
-HXDLIN( 708)					int message2 = message->status;
-HXDLIN( 708)					int message3 = message->direction;
-HXDLIN( 708)					int message4 = message->type;
-HXLINE( 709)					::String _hx_tmp6 = message->asStanza()->toString();
-HXLINE( 701)					_g2->push(::cpp::VirtualArray_obj::__new(15)->init(0,accountId1)->init(1,_hx_tmp1)->init(2,_hx_tmp2)->init(3,_hx_tmp3)->init(4,_hx_tmp4)->init(5,correctable)->init(6,_hx_tmp5)->init(7,correctable1)->init(8,message1)->init(9,message2)->init(10,message3)->init(11,message4)->init(12,_hx_tmp6)->init(13,message->statusText)->init(14,message->sortId));
-            				}
-            			}
-HXDLIN( 701)			::cpp::VirtualArray _g3 = ::cpp::VirtualArray_obj::__new(0);
-HXDLIN( 701)			{
-HXLINE( 701)				 ::Dynamic e = _g2->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 701)				while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 701)					 ::Dynamic x1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 701)					while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 701)						_g3->push(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
-            					}
-            				}
-            			}
-HXLINE( 699)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_gthis1->exec(_hx_tmp,_g3), ::Dynamic(new _hx_Closure_0(messages,_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_1(_gthis,replyTos,accountId)),null()), ::Dynamic(new _hx_Closure_2(_gthis,accountId)),null());
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_855_storeMessages)
+HXLINE( 855)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_gthis->insertMessages(accountId,messages), ::Dynamic(new _hx_Closure_0(messages,_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
             		}
             		HX_END_LOCAL_FUNC0(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_672_storeMessages)
-HXDLIN( 672)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 673)		if ((messages->length < 1)) {
-HXLINE( 674)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
-            		}
-HXLINE( 677)		::Array< ::String > chatIds = ::Array_obj< ::String >::__new(0);
-HXLINE( 678)		::Array< ::String > localIds = ::Array_obj< ::String >::__new(0);
-HXLINE( 679)		::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 680)		{
-HXLINE( 680)			int _g = 0;
-HXDLIN( 680)			while((_g < messages->length)){
-HXLINE( 680)				 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 680)				_g = (_g + 1);
-HXLINE( 681)				if (::hx::IsNull( message->sortId )) {
-HXLINE( 681)					HX_STACK_DO_THROW(HX_("Cannot store a message with no sortId",d2,b4,dc,b7));
-            				}
-HXLINE( 682)				bool _hx_tmp;
-HXDLIN( 682)				if (::hx::IsNull( message->serverId )) {
-HXLINE( 682)					_hx_tmp = ::hx::IsNull( message->localId );
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_828_storeMessages)
+HXDLIN( 828)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 829)		if ((messages->length < 1)) {
+HXLINE( 830)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+            		}
+HXLINE( 833)		::Array< ::String > chatIds = ::Array_obj< ::String >::__new(0);
+HXLINE( 834)		::Array< ::String > localIds = ::Array_obj< ::String >::__new(0);
+HXLINE( 835)		::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 836)		{
+HXLINE( 836)			int _g = 0;
+HXDLIN( 836)			while((_g < messages->length)){
+HXLINE( 836)				 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 836)				_g = (_g + 1);
+HXLINE( 837)				if (::hx::IsNull( message->sortId )) {
+HXLINE( 837)					HX_STACK_DO_THROW(HX_("Cannot store a message with no sortId",d2,b4,dc,b7));
+            				}
+HXLINE( 838)				bool _hx_tmp;
+HXDLIN( 838)				if (::hx::IsNull( message->serverId )) {
+HXLINE( 838)					_hx_tmp = ::hx::IsNull( message->localId );
             				}
             				else {
-HXLINE( 682)					_hx_tmp = false;
+HXLINE( 838)					_hx_tmp = false;
             				}
-HXDLIN( 682)				if (_hx_tmp) {
-HXLINE( 682)					HX_STACK_DO_THROW(HX_("Cannot store a message with no id",54,e5,b0,de));
+HXDLIN( 838)				if (_hx_tmp) {
+HXLINE( 838)					HX_STACK_DO_THROW(HX_("Cannot store a message with no id",54,e5,b0,de));
             				}
-HXLINE( 683)				bool _hx_tmp1;
-HXDLIN( 683)				if (::hx::IsNull( message->serverId )) {
-HXLINE( 683)					_hx_tmp1 = message->isIncoming();
+HXLINE( 839)				bool _hx_tmp1;
+HXDLIN( 839)				if (::hx::IsNull( message->serverId )) {
+HXLINE( 839)					_hx_tmp1 = message->isIncoming();
             				}
             				else {
-HXLINE( 683)					_hx_tmp1 = false;
+HXLINE( 839)					_hx_tmp1 = false;
             				}
-HXDLIN( 683)				if (_hx_tmp1) {
-HXLINE( 683)					HX_STACK_DO_THROW(HX_("Cannot store an incoming message with no server id",d7,6d,19,fb));
+HXDLIN( 839)				if (_hx_tmp1) {
+HXLINE( 839)					HX_STACK_DO_THROW(HX_("Cannot store an incoming message with no server id",d7,6d,19,fb));
             				}
-HXLINE( 684)				bool _hx_tmp2;
-HXDLIN( 684)				if (::hx::IsNotNull( message->serverId )) {
-HXLINE( 684)					_hx_tmp2 = ::hx::IsNull( message->serverIdBy );
+HXLINE( 840)				bool _hx_tmp2;
+HXDLIN( 840)				if (::hx::IsNotNull( message->serverId )) {
+HXLINE( 840)					_hx_tmp2 = ::hx::IsNull( message->serverIdBy );
             				}
             				else {
-HXLINE( 684)					_hx_tmp2 = false;
+HXLINE( 840)					_hx_tmp2 = false;
             				}
-HXDLIN( 684)				if (_hx_tmp2) {
-HXLINE( 684)					HX_STACK_DO_THROW(HX_("Cannot store a message with a server id and no by",00,9f,b7,38));
+HXDLIN( 840)				if (_hx_tmp2) {
+HXLINE( 840)					HX_STACK_DO_THROW(HX_("Cannot store a message with a server id and no by",00,9f,b7,38));
             				}
-HXLINE( 686)				bool _hx_tmp3;
-HXDLIN( 686)				if (!(message->isIncoming())) {
-HXLINE( 686)					_hx_tmp3 = (message->versions->length < 1);
+HXLINE( 842)				bool _hx_tmp3;
+HXDLIN( 842)				if (!(message->isIncoming())) {
+HXLINE( 842)					_hx_tmp3 = (message->versions->length < 1);
             				}
             				else {
-HXLINE( 686)					_hx_tmp3 = false;
+HXLINE( 842)					_hx_tmp3 = false;
             				}
-HXDLIN( 686)				if (_hx_tmp3) {
-HXLINE( 689)					chatIds->push(message->chatId());
-HXLINE( 690)					localIds->push(message->localId);
+HXDLIN( 842)				if (_hx_tmp3) {
+HXLINE( 845)					chatIds->push(message->chatId());
+HXLINE( 846)					localIds->push(message->localId);
             				}
-HXLINE( 692)				if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 693)					::Array< ::Dynamic> replyTos1 = replyTos;
-HXDLIN( 693)					::String _hx_tmp4 = message->chatId();
-HXDLIN( 693)					replyTos1->push( ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 848)				if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 849)					::String _hx_tmp4 = message->chatId();
+HXDLIN( 849)					replyTos->push( ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp4)
             						->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
             						->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId)));
             				}
             			}
             		}
-HXLINE( 697)		return this->storeMessagesSerialized->run( ::Dynamic(new _hx_Closure_3(messages,_gthis,replyTos,accountId)));
+HXLINE( 853)		return this->storeMessagesSerialized->run( ::Dynamic(new _hx_Closure_2(messages,_gthis,accountId)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeMessages,return )
 
 void Sqlite_obj::updateMessage(::String accountId, ::borogove::ChatMessage message){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_726_updateMessage)
-HXDLIN( 726)		this->storeMessages(accountId,::Array_obj< ::Dynamic>::__new(1)->init(0,message));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_871_updateMessage)
+HXDLIN( 871)		this->storeMessages(accountId,::Array_obj< ::Dynamic>::__new(1)->init(0,message));
             	}
 
 
@@ -2126,44 +2295,44 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,updateMessage,(void))
 ::Dynamic Sqlite_obj::fetchFromStub(::String accountId, ::borogove::ChatMessage stub){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId, ::borogove::ChatMessage,stub) HXARGC(1)
             		 ::borogove::ChatMessage _hx_run( ::haxe::iterators::ArrayIterator results){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_760_fetchFromStub)
-HXLINE( 761)			 ::Dynamic row = results->array->__get(results->current++);
-HXLINE( 762)			if (::hx::IsNull( row )) {
-HXLINE( 762)				return stub;
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_898_fetchFromStub)
+HXLINE( 899)			 ::Dynamic row = results->array->__get(results->current++);
+HXLINE( 900)			if (::hx::IsNull( row )) {
+HXLINE( 900)				return stub;
             			}
-HXLINE( 763)			return _gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::Array_obj< ::Dynamic>::__new(1)->init(0,row)))->__get(0).StaticCast<  ::borogove::ChatMessage >();
+HXLINE( 901)			return _gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::Array_obj< ::Dynamic>::__new(1)->init(0,row)))->__get(0).StaticCast<  ::borogove::ChatMessage >();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_729_fetchFromStub)
-HXDLIN( 729)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 730)		::String q = HX_("SELECT\n\t\t\tcorrection_id AS stanza_id,\n\t\t\tversions.stanza,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, strftime('%FT%H:%M:%fZ', versions.created_at / 1000.0, 'unixepoch')) AS version_times,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, versions.stanza) AS versions,\n\t\t\tmessages.direction,\n\t\t\tmessages.type,\n\t\t\tmessages.status,\n\t\t\tmessages.status_text,\n\t\t\tstrftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp,\n\t\t\tmessages.sender_id,\n\t\t\tmessages.mam_id,\n\t\t\tmessages.mam_by,\n\t\t\tmessages.sort_id,\n\t\t\tmessages.sync_point,\n\t\t\tMAX(versions.created_at)\n\t\t\tFROM messages INNER JOIN messages versions USING (correction_id, sender_id) WHERE messages.account_id=? AND messages.chat_id=? AND (messages.stanza_id IS NULL OR messages.stanza_id='' OR messages.stanza_id=correction_id)",78,38,82,d4);
-HXLINE( 747)		::String accountId1 = accountId;
-HXDLIN( 747)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId1)->init(1,stub->chatId());
-HXLINE( 748)		bool _hx_tmp;
-HXDLIN( 748)		if ((stub->versions->length <= 0)) {
-HXLINE( 748)			_hx_tmp = ::hx::IsNull( stub->serverId );
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_874_fetchFromStub)
+HXDLIN( 874)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 875)		::String q = ((HX_("\n\t\t\tSELECT\n\t\t\t\t",4f,6c,f2,53) + this->versionedMessageColumns) + HX_("\n\t\t\tFROM messages\n\t\t\tINNER JOIN messages versions USING (correction_id, sender_id)\n\t\t\tWHERE\n\t\t\t\tmessages.account_id=?\n\t\t\t\tAND messages.chat_id=?\n\t\t\t\tAND (messages.stanza_id IS NULL OR messages.stanza_id='' OR messages.stanza_id=correction_id)\n\t\t",7f,0c,2a,d3));
+HXLINE( 885)		::String accountId1 = accountId;
+HXDLIN( 885)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId1)->init(1,stub->chatId());
+HXLINE( 886)		bool _hx_tmp;
+HXDLIN( 886)		if ((stub->versions->length <= 0)) {
+HXLINE( 886)			_hx_tmp = ::hx::IsNull( stub->serverId );
             		}
             		else {
-HXLINE( 748)			_hx_tmp = true;
+HXLINE( 886)			_hx_tmp = true;
             		}
-HXDLIN( 748)		if (_hx_tmp) {
-HXLINE( 749)			q = (HX_("SELECT\n\t\t\tcorrection_id AS stanza_id,\n\t\t\tversions.stanza,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, strftime('%FT%H:%M:%fZ', versions.created_at / 1000.0, 'unixepoch')) AS version_times,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, versions.stanza) AS versions,\n\t\t\tmessages.direction,\n\t\t\tmessages.type,\n\t\t\tmessages.status,\n\t\t\tmessages.status_text,\n\t\t\tstrftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp,\n\t\t\tmessages.sender_id,\n\t\t\tmessages.mam_id,\n\t\t\tmessages.mam_by,\n\t\t\tmessages.sort_id,\n\t\t\tmessages.sync_point,\n\t\t\tMAX(versions.created_at)\n\t\t\tFROM messages INNER JOIN messages versions USING (correction_id, sender_id) WHERE messages.account_id=? AND messages.chat_id=? AND (messages.stanza_id IS NULL OR messages.stanza_id='' OR messages.stanza_id=correction_id)",78,38,82,d4) + HX_(" AND correction_id=? AND sender_id=?",f3,c6,24,29));
-HXLINE( 750)			params->push(stub->localId);
-HXLINE( 751)			params->push(stub->senderId);
+HXDLIN( 886)		if (_hx_tmp) {
+HXLINE( 887)			q = (q + HX_(" AND correction_id=? AND sender_id=?",f3,c6,24,29));
+HXLINE( 888)			params->push(stub->localId);
+HXLINE( 889)			params->push(stub->senderId);
             		}
             		else {
-HXLINE( 752)			if (::hx::IsNotNull( stub->serverId )) {
-HXLINE( 753)				q = (HX_("SELECT\n\t\t\tcorrection_id AS stanza_id,\n\t\t\tversions.stanza,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, strftime('%FT%H:%M:%fZ', versions.created_at / 1000.0, 'unixepoch')) AS version_times,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, versions.stanza) AS versions,\n\t\t\tmessages.direction,\n\t\t\tmessages.type,\n\t\t\tmessages.status,\n\t\t\tmessages.status_text,\n\t\t\tstrftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp,\n\t\t\tmessages.sender_id,\n\t\t\tmessages.mam_id,\n\t\t\tmessages.mam_by,\n\t\t\tmessages.sort_id,\n\t\t\tmessages.sync_point,\n\t\t\tMAX(versions.created_at)\n\t\t\tFROM messages INNER JOIN messages versions USING (correction_id, sender_id) WHERE messages.account_id=? AND messages.chat_id=? AND (messages.stanza_id IS NULL OR messages.stanza_id='' OR messages.stanza_id=correction_id)",78,38,82,d4) + HX_(" AND messages.mam_id=? AND messages.mam_by=?",74,6f,fe,39));
-HXLINE( 754)				params->push(stub->serverId);
-HXLINE( 755)				params->push(stub->serverIdBy);
+HXLINE( 890)			if (::hx::IsNotNull( stub->serverId )) {
+HXLINE( 891)				q = (q + HX_(" AND messages.mam_id=? AND messages.mam_by=?",74,6f,fe,39));
+HXLINE( 892)				params->push(stub->serverId);
+HXLINE( 893)				params->push(stub->serverIdBy);
             			}
             			else {
-HXLINE( 757)				HX_STACK_DO_THROW(HX_("No way to look up this message",be,4b,a4,e7));
+HXLINE( 895)				HX_STACK_DO_THROW(HX_("No way to look up this message",be,4b,a4,e7));
             			}
             		}
-HXLINE( 759)		q = (q + HX_(" GROUP BY correction_id, CASE WHEN messages.type=? THEN 'call' ELSE messages.sender_id END",8a,13,81,0f));
-HXLINE( 760)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId,stub)),null());
+HXLINE( 897)		q = (q + HX_(" GROUP BY correction_id, CASE WHEN messages.type=? THEN 'call' ELSE messages.sender_id END",8a,13,81,0f));
+HXLINE( 898)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId,stub)),null());
             	}
 
 
@@ -2171,99 +2340,41 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,fetchFromStub,return )
 
 ::Dynamic Sqlite_obj::getMessage(::String accountId,::String chatId,::String serverId,::String localId){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
-            		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_787_getMessage)
-HXLINE( 787)			return _gthis->hydrateMessages(accountId,result);
+            		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_930_getMessage)
+HXLINE( 930)			return _gthis->hydrateMessagesAndLoadMeta(accountId,result);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_4, ::borogove::persistence::Sqlite,_gthis,::String,chatId,::String,accountId) HXARGC(1)
-            		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
-            			::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> items){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_794_getMessage)
-HXLINE( 794)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 794)				{
-HXLINE( 794)					int _g_current = 0;
-HXDLIN( 794)					while((_g_current < items->length)){
-HXLINE( 794)						_g_current = (_g_current + 1);
-HXDLIN( 794)						{
-HXLINE( 794)							 ::Dynamic x = items->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 794)							while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 794)								_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
-            							}
-            						}
-            					}
-            				}
-HXDLIN( 794)				return _g;
-            			}
-            			HX_END_LOCAL_FUNC1(return)
-
-            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
-            			 ::borogove::ChatMessage _hx_run(::Array< ::Dynamic> items){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_794_getMessage)
-HXLINE( 794)				if ((items->length > 0)) {
-HXLINE( 794)					return items->__get(0).StaticCast<  ::borogove::ChatMessage >();
-            				}
-            				else {
-HXLINE( 794)					return null();
-            				}
-HXDLIN( 794)				return null();
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
+            		 ::borogove::ChatMessage _hx_run(::Array< ::Dynamic> ms){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_930_getMessage)
+HXLINE( 930)			if ((ms->length > 0)) {
+HXLINE( 930)				return ms->__get(0).StaticCast<  ::borogove::ChatMessage >();
             			}
-            			HX_END_LOCAL_FUNC1(return)
-
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_788_getMessage)
-HXLINE( 788)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(messages->length);
-HXDLIN( 788)			{
-HXLINE( 788)				int _g = 0;
-HXDLIN( 788)				int _g1 = messages->length;
-HXDLIN( 788)				while((_g < _g1)){
-HXLINE( 788)					_g = (_g + 1);
-HXDLIN( 788)					int i = (_g - 1);
-HXDLIN( 788)					{
-            						HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
-            						::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            							HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_793_getMessage)
-HXLINE( 793)							return _gthis->hydrateReactions(accountId,messages);
-            						}
-            						HX_END_LOCAL_FUNC1(return)
-
-HXLINE( 789)						 ::borogove::ChatMessage message = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
-HXDLIN( 789)						::Dynamic inValue;
-HXDLIN( 789)						if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 789)							inValue = _gthis->hydrateReplyTo(accountId,::Array_obj< ::Dynamic>::__new(1)->init(0,message),::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
-            								->setFixed(0,HX_("chatId",d3,04,77,b7),chatId)
-            								->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
-            								->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId))));
-            						}
-            						else {
-HXLINE( 789)							inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,message));
-            						}
-HXLINE( 788)						::Dynamic inValue1 = ::thenshim::_Promise::Promise_Impl__obj::then(inValue, ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
-HXDLIN( 788)						result->__unsafe_set(i,inValue1);
-            					}
-            				}
+            			else {
+HXLINE( 930)				return null();
             			}
-HXDLIN( 788)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_2()),null()), ::Dynamic(new _hx_Closure_3()),null());
+HXDLIN( 930)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_776_getMessage)
-HXDLIN( 776)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 777)		::String q = HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sort_id, sync_point FROM messages WHERE account_id=? AND chat_id=?",45,be,36,89);
-HXLINE( 778)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chatId);
-HXLINE( 779)		if (::hx::IsNotNull( serverId )) {
-HXLINE( 780)			q = (HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sort_id, sync_point FROM messages WHERE account_id=? AND chat_id=?",45,be,36,89) + HX_(" AND mam_id=?",4c,af,2b,c9));
-HXLINE( 781)			params->push(serverId);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_914_getMessage)
+HXDLIN( 914)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 915)		::String q = ((HX_("\n\t\t\tSELECT\n\t\t\t\t",4f,6c,f2,53) + ::borogove::persistence::Sqlite_obj::messageColumnsString(null())) + HX_("\n\t\t\tFROM messages\n\t\t\tWHERE account_id=? AND chat_id=?\n\t\t",e5,a9,f2,12));
+HXLINE( 921)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chatId);
+HXLINE( 922)		if (::hx::IsNotNull( serverId )) {
+HXLINE( 923)			q = (q + HX_(" AND mam_id=?",4c,af,2b,c9));
+HXLINE( 924)			params->push(serverId);
             		}
             		else {
-HXLINE( 782)			if (::hx::IsNotNull( localId )) {
-HXLINE( 783)				q = (HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sort_id, sync_point FROM messages WHERE account_id=? AND chat_id=?",45,be,36,89) + HX_(" AND stanza_id=?",be,a8,32,e3));
-HXLINE( 784)				params->push(localId);
+HXLINE( 925)			if (::hx::IsNotNull( localId )) {
+HXLINE( 926)				q = (q + HX_(" AND stanza_id=?",be,a8,32,e3));
+HXLINE( 927)				params->push(localId);
             			}
             		}
-HXLINE( 786)		q = (q + HX_("LIMIT 1",ec,af,c7,0e));
-HXLINE( 787)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_4(_gthis,chatId,accountId)),null());
+HXLINE( 929)		q = (q + HX_("LIMIT 1",ec,af,c7,0e));
+HXLINE( 930)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_1()),null());
             	}
 
 
@@ -2313,289 +2424,260 @@ HXDLIN( 365)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessage(ac
 ::Dynamic Sqlite_obj::getMessages(::String accountId,::String chatId,::String sortId,::String op,::hx::Null< bool >  __o_useTimestamp,::String timestamp){
             		HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_2,::Array< ::String >,q, ::borogove::persistence::Sqlite,_gthis,::String,op,::String,chatId,::String,timestamp,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_842_getMessages)
-HXLINE( 843)			::Array< ::Dynamic> messages = _gthis->hydrateMessages(accountId,result);
-HXLINE( 844)			bool _hx_tmp;
-HXDLIN( 844)			if ((messages->length > 0)) {
-HXLINE( 844)				_hx_tmp = (messages->__get(0).StaticCast<  ::borogove::ChatMessage >()->serverIdBy == chatId);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_971_getMessages)
+HXLINE( 972)			::Array< ::Dynamic> messages = _gthis->hydrateMessages(accountId,result);
+HXLINE( 973)			bool _hx_tmp;
+HXDLIN( 973)			if ((messages->length > 0)) {
+HXLINE( 973)				_hx_tmp = (messages->__get(0).StaticCast<  ::borogove::ChatMessage >()->serverIdBy == chatId);
             			}
             			else {
-HXLINE( 844)				_hx_tmp = false;
+HXLINE( 973)				_hx_tmp = false;
             			}
-HXDLIN( 844)			if (_hx_tmp) {
+HXDLIN( 973)			if (_hx_tmp) {
             				HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_1,::Array< ::Dynamic>,messages, ::borogove::persistence::Sqlite,_gthis,::String,op,::String,boundary,::String,accountId) HXARGC(1)
             				::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator pmResult){
-            					HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_865_getMessages)
-HXLINE( 866)					::Array< ::Dynamic> pms = _gthis->hydrateMessages(accountId,pmResult);
-HXLINE( 867)					{
-HXLINE( 867)						int _g = 0;
-HXDLIN( 867)						while((_g < pms->length)){
-HXLINE( 867)							 ::borogove::ChatMessage pm = pms->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 867)							_g = (_g + 1);
-HXLINE( 868)							bool _hx_tmp;
-HXDLIN( 868)							if ((op != HX_("<",3c,00,00,00))) {
-HXLINE( 868)								_hx_tmp = (op == HX_("<=",81,34,00,00));
+            					HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_999_getMessages)
+HXLINE(1000)					::Array< ::Dynamic> pms = _gthis->hydrateMessages(accountId,pmResult);
+HXLINE(1001)					{
+HXLINE(1001)						int _g = 0;
+HXDLIN(1001)						while((_g < pms->length)){
+HXLINE(1001)							 ::borogove::ChatMessage pm = pms->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1001)							_g = (_g + 1);
+HXLINE(1002)							bool _hx_tmp;
+HXDLIN(1002)							if ((op != HX_("<",3c,00,00,00))) {
+HXLINE(1002)								_hx_tmp = (op == HX_("<=",81,34,00,00));
             							}
             							else {
-HXLINE( 868)								_hx_tmp = true;
+HXLINE(1002)								_hx_tmp = true;
             							}
-HXDLIN( 868)							if (_hx_tmp) {
+HXDLIN(1002)							if (_hx_tmp) {
             								HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::ChatMessage,pm) HXARGC(1)
             								bool _hx_run( ::borogove::ChatMessage m){
-            									HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_869_getMessages)
-HXLINE( 869)									return (m->timestamp <= pm->timestamp);
+            									HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1003_getMessages)
+HXLINE(1003)									return (m->timeReceived <= pm->timeReceived);
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 869)								int idx = ::Lambda_obj::findIndex(messages, ::Dynamic(new _hx_Closure_0(pm)));
-HXLINE( 870)								if ((idx >= 0)) {
-HXLINE( 870)									messages->insert(idx,pm);
+HXLINE(1003)								int idx = ::Lambda_obj::findIndex(messages, ::Dynamic(new _hx_Closure_0(pm)));
+HXLINE(1004)								if ((idx >= 0)) {
+HXLINE(1004)									messages->insert(idx,pm);
             								}
             							}
             							else {
-HXLINE( 872)								int idx1 = (messages->length - 1);
-HXLINE( 873)								while((idx1 >= 0)){
-HXLINE( 874)									if ((messages->__get(idx1).StaticCast<  ::borogove::ChatMessage >()->timestamp < pm->timestamp)) {
-HXLINE( 875)										goto _hx_goto_139;
+HXLINE(1006)								int idx1 = (messages->length - 1);
+HXLINE(1007)								while((idx1 >= 0)){
+HXLINE(1008)									if ((messages->__get(idx1).StaticCast<  ::borogove::ChatMessage >()->timeReceived < pm->timeReceived)) {
+HXLINE(1009)										goto _hx_goto_157;
             									}
-HXLINE( 877)									idx1 = (idx1 - 1);
+HXLINE(1011)									idx1 = (idx1 - 1);
             								}
-            								_hx_goto_139:;
-HXLINE( 879)								if ((idx1 >= 0)) {
-HXLINE( 879)									messages->insert((idx1 + 1),pm);
+            								_hx_goto_157:;
+HXLINE(1013)								if ((idx1 >= 0)) {
+HXLINE(1013)									messages->insert((idx1 + 1),pm);
             								}
-HXLINE( 881)								if ((pm->timestamp > boundary)) {
-HXLINE( 881)									goto _hx_goto_138;
+HXLINE(1015)								if ((pm->timeReceived > boundary)) {
+HXLINE(1015)									goto _hx_goto_156;
             								}
             							}
             						}
-            						_hx_goto_138:;
+            						_hx_goto_156:;
             					}
-HXLINE( 884)					return messages;
+HXLINE(1018)					return messages;
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 845)				::String boundary = messages->__get((messages->length - 1)).StaticCast<  ::borogove::ChatMessage >()->timestamp;
-HXLINE( 846)				::String pmQ = HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sort_id, sync_point FROM messages WHERE account_id=? AND chat_id=? AND type=?",e0,56,0e,f2);
-HXLINE( 847)				::cpp::VirtualArray pmParams = ::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,chatId)->init(2,3);
-HXLINE( 849)				if (::hx::IsNotNull( timestamp )) {
-HXLINE( 850)					pmQ = (HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sort_id, sync_point FROM messages WHERE account_id=? AND chat_id=? AND type=?",e0,56,0e,f2) + ((HX_(" AND messages.created_at ",3d,a0,ae,bb) + op) + HX_(" unixepoch(?, 'subsec') * 1000",87,03,ad,d8)));
-HXLINE( 851)					pmParams->push(timestamp);
+HXLINE( 974)				::String boundary = messages->__get((messages->length - 1)).StaticCast<  ::borogove::ChatMessage >()->timeReceived;
+HXLINE( 975)				::String pmQ = ((HX_("\n\t\t\t\t\tSELECT\n\t\t\t\t\t\t",4f,c4,b3,5b) + ::borogove::persistence::Sqlite_obj::messageColumnsString(null())) + HX_("\n\t\t\t\t\tFROM messages\n\t\t\t\t\tWHERE account_id=? AND chat_id=? AND type=?\n\t\t\t\t",0a,68,4c,67));
+HXLINE( 981)				::cpp::VirtualArray pmParams = ::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,chatId)->init(2,3);
+HXLINE( 983)				if (::hx::IsNotNull( timestamp )) {
+HXLINE( 984)					pmQ = (pmQ + ((HX_(" AND messages.time_received ",c6,ce,93,07) + op) + HX_(" unixepoch(?, 'subsec') * 1000",87,03,ad,d8)));
+HXLINE( 985)					pmParams->push(timestamp);
             				}
-HXLINE( 854)				bool _hx_tmp1;
-HXDLIN( 854)				if ((op != HX_("<",3c,00,00,00))) {
-HXLINE( 854)					_hx_tmp1 = (op == HX_("<=",81,34,00,00));
+HXLINE( 988)				bool _hx_tmp1;
+HXDLIN( 988)				if ((op != HX_("<",3c,00,00,00))) {
+HXLINE( 988)					_hx_tmp1 = (op == HX_("<=",81,34,00,00));
             				}
             				else {
-HXLINE( 854)					_hx_tmp1 = true;
+HXLINE( 988)					_hx_tmp1 = true;
             				}
-HXDLIN( 854)				if (_hx_tmp1) {
-HXLINE( 855)					pmQ = (pmQ + HX_(" AND messages.created_at > unixepoch(?, 'subsec') * 1000",a8,f2,94,01));
-HXLINE( 856)					pmParams->push(boundary);
+HXDLIN( 988)				if (_hx_tmp1) {
+HXLINE( 989)					pmQ = (pmQ + HX_(" AND messages.time_received > unixepoch(?, 'subsec') * 1000",3f,64,e0,66));
+HXLINE( 990)					pmParams->push(boundary);
             				}
-HXLINE( 861)				pmQ = (pmQ + HX_(" ORDER BY messages.created_at",55,af,d5,29));
-HXLINE( 862)				bool _hx_tmp2;
-HXDLIN( 862)				if ((op != HX_("<",3c,00,00,00))) {
-HXLINE( 862)					_hx_tmp2 = (op == HX_("<=",81,34,00,00));
+HXLINE( 995)				pmQ = (pmQ + HX_(" ORDER BY messages.time_received",88,7a,6f,cb));
+HXLINE( 996)				bool _hx_tmp2;
+HXDLIN( 996)				if ((op != HX_("<",3c,00,00,00))) {
+HXLINE( 996)					_hx_tmp2 = (op == HX_("<=",81,34,00,00));
             				}
             				else {
-HXLINE( 862)					_hx_tmp2 = true;
+HXLINE( 996)					_hx_tmp2 = true;
             				}
-HXDLIN( 862)				if (_hx_tmp2) {
-HXLINE( 862)					::Array< ::String > q1 = q;
-HXDLIN( 862)					q1[0] = (q1->__get(0) + HX_(" DESC",71,b6,f9,99));
+HXDLIN( 996)				if (_hx_tmp2) {
+HXLINE( 996)					::Array< ::String > q1 = q;
+HXDLIN( 996)					q1[0] = (q1->__get(0) + HX_(" DESC",71,b6,f9,99));
             				}
-HXLINE( 863)				pmQ = (pmQ + HX_(" LIMIT 50",60,62,1f,3e));
-HXLINE( 865)				return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->db->exec(pmQ,pmParams), ::Dynamic(new _hx_Closure_1(messages,_gthis,op,boundary,accountId)),null());
+HXLINE( 997)				pmQ = (pmQ + HX_(" LIMIT 50",60,62,1f,3e));
+HXLINE( 999)				return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->db->exec(pmQ,pmParams), ::Dynamic(new _hx_Closure_1(messages,_gthis,op,boundary,accountId)),null());
             			}
-HXLINE( 887)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+HXLINE(1021)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_3, ::borogove::persistence::Sqlite,_gthis,::String,op,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_888_getMessages)
-HXLINE( 889)			bool _hx_tmp;
-HXDLIN( 889)			if ((op != HX_("<",3c,00,00,00))) {
-HXLINE( 889)				_hx_tmp = (op == HX_("<=",81,34,00,00));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1022_getMessages)
+HXLINE(1023)			bool _hx_tmp;
+HXDLIN(1023)			if ((op != HX_("<",3c,00,00,00))) {
+HXLINE(1023)				_hx_tmp = (op == HX_("<=",81,34,00,00));
             			}
             			else {
-HXLINE( 889)				_hx_tmp = true;
-            			}
-HXDLIN( 889)			if (_hx_tmp) {
-HXLINE( 890)				messages->reverse();
-            			}
-HXLINE( 892)			::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 893)			{
-HXLINE( 893)				int _g = 0;
-HXDLIN( 893)				while((_g < messages->length)){
-HXLINE( 893)					 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 893)					_g = (_g + 1);
-HXLINE( 894)					bool _hx_tmp1;
-HXDLIN( 894)					if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 894)						_hx_tmp1 = ::hx::IsNull( message->replyToMessage->stanza );
-            					}
-            					else {
-HXLINE( 894)						_hx_tmp1 = false;
-            					}
-HXDLIN( 894)					if (_hx_tmp1) {
-HXLINE( 895)						::String _hx_tmp2 = message->chatId();
-HXDLIN( 895)						replyTos->push( ::Dynamic(::hx::Anon_obj::Create(3)
-            							->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp2)
-            							->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
-            							->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId)));
-            					}
-            				}
+HXLINE(1023)				_hx_tmp = true;
             			}
-HXLINE( 898)			return _gthis->hydrateReplyTo(accountId,messages,replyTos);
-            		}
-            		HX_END_LOCAL_FUNC1(return)
-
-            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_4, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
-            		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_899_getMessages)
-HXLINE( 899)			return _gthis->hydrateReactions(accountId,messages);
+HXDLIN(1023)			if (_hx_tmp) {
+HXLINE(1024)				messages->reverse();
+            			}
+HXLINE(1026)			return _gthis->messagesLoadMeta(accountId,messages);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		bool useTimestamp = __o_useTimestamp.Default(false);
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_798_getMessages)
-HXDLIN( 798)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 799)		bool _hx_tmp;
-HXDLIN( 799)		if (useTimestamp) {
-HXLINE( 799)			_hx_tmp = ::hx::IsNull( timestamp );
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_933_getMessages)
+HXDLIN( 933)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 934)		bool _hx_tmp;
+HXDLIN( 934)		if (useTimestamp) {
+HXLINE( 934)			_hx_tmp = ::hx::IsNull( timestamp );
             		}
             		else {
-HXLINE( 799)			_hx_tmp = false;
+HXLINE( 934)			_hx_tmp = false;
             		}
-HXDLIN( 799)		if (_hx_tmp) {
-HXLINE( 799)			HX_STACK_DO_THROW(HX_("Cannot use timestamp without specifying one",9f,88,b9,0a));
+HXDLIN( 934)		if (_hx_tmp) {
+HXLINE( 934)			HX_STACK_DO_THROW(HX_("Cannot use timestamp without specifying one",9f,88,b9,0a));
             		}
-HXLINE( 801)		::Array< ::String > q = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_147,1);
-HXLINE( 802)		::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,chatId)->init(2,3);
-HXLINE( 803)		if (useTimestamp) {
-HXLINE( 804)			::Array< ::String > q1 = q;
-HXDLIN( 804)			q1[0] = (q1->__get(0) + ((HX_(" AND messages.created_at ",3d,a0,ae,bb) + op) + HX_(" unixepoch(?, 'subsec') * 1000",87,03,ad,d8)));
-HXLINE( 805)			params->push(timestamp);
-HXLINE( 806)			::Array< ::String > q2 = q;
-HXDLIN( 806)			q2[0] = (q2->__get(0) + HX_(" ORDER BY messages.created_at",55,af,d5,29));
+HXLINE( 936)		::Array< ::String > q = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_163,1);
+HXLINE( 937)		::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,chatId)->init(2,3);
+HXLINE( 938)		if (useTimestamp) {
+HXLINE( 939)			::Array< ::String > q1 = q;
+HXDLIN( 939)			q1[0] = (q1->__get(0) + ((HX_(" AND messages.time_received ",c6,ce,93,07) + op) + HX_(" unixepoch(?, 'subsec') * 1000",87,03,ad,d8)));
+HXLINE( 940)			params->push(timestamp);
+HXLINE( 941)			::Array< ::String > q2 = q;
+HXDLIN( 941)			q2[0] = (q2->__get(0) + HX_(" ORDER BY messages.time_received",88,7a,6f,cb));
             		}
             		else {
-HXLINE( 807)			if (::hx::IsNotNull( sortId )) {
-HXLINE( 808)				::Array< ::String > q3 = q;
-HXDLIN( 808)				q3[0] = (q3->__get(0) + ((HX_(" AND messages.sort_id ",5d,bb,ec,0f) + op) + HX_(" ?",1f,1c,00,00)));
-HXLINE( 809)				params->push(sortId);
-HXLINE( 810)				::Array< ::String > q4 = q;
-HXDLIN( 810)				q4[0] = (q4->__get(0) + HX_(" ORDER BY messages.sort_id",51,c7,5c,e5));
+HXLINE( 942)			if (::hx::IsNotNull( sortId )) {
+HXLINE( 943)				::Array< ::String > q3 = q;
+HXDLIN( 943)				q3[0] = (q3->__get(0) + ((HX_(" AND messages.sort_id ",5d,bb,ec,0f) + op) + HX_(" ?",1f,1c,00,00)));
+HXLINE( 944)				params->push(sortId);
+HXLINE( 945)				::Array< ::String > q4 = q;
+HXDLIN( 945)				q4[0] = (q4->__get(0) + HX_(" ORDER BY messages.sort_id",51,c7,5c,e5));
             			}
             			else {
-HXLINE( 812)				::Array< ::String > q5 = q;
-HXDLIN( 812)				q5[0] = (q5->__get(0) + HX_(" ORDER BY messages.sort_id",51,c7,5c,e5));
+HXLINE( 947)				::Array< ::String > q5 = q;
+HXDLIN( 947)				q5[0] = (q5->__get(0) + HX_(" ORDER BY messages.sort_id",51,c7,5c,e5));
             			}
             		}
-HXLINE( 814)		bool _hx_tmp1;
-HXDLIN( 814)		if ((op != HX_("<",3c,00,00,00))) {
-HXLINE( 814)			_hx_tmp1 = (op == HX_("<=",81,34,00,00));
+HXLINE( 949)		bool _hx_tmp1;
+HXDLIN( 949)		if ((op != HX_("<",3c,00,00,00))) {
+HXLINE( 949)			_hx_tmp1 = (op == HX_("<=",81,34,00,00));
             		}
             		else {
-HXLINE( 814)			_hx_tmp1 = true;
-            		}
-HXDLIN( 814)		if (_hx_tmp1) {
-HXLINE( 814)			::Array< ::String > q6 = q;
-HXDLIN( 814)			q6[0] = (q6->__get(0) + HX_(" DESC",71,b6,f9,99));
-            		}
-HXLINE( 815)		::Array< ::String > q7 = q;
-HXDLIN( 815)		q7[0] = (q7->__get(0) + HX_(" LIMIT 50) ",37,de,84,8e));
-HXLINE( 816)		::Array< ::String > q8 = q;
-HXDLIN( 816)		q8[0] = (q8->__get(0) + HX_("SELECT\n\t\t\tcorrection_id AS stanza_id,\n\t\t\tversions.stanza,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, strftime('%FT%H:%M:%fZ', versions.created_at / 1000.0, 'unixepoch')) AS version_times,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, versions.stanza) AS versions,\n\t\t\tmessages.direction,\n\t\t\tmessages.type,\n\t\t\tmessages.status,\n\t\t\tmessages.status_text,\n\t\t\tstrftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp,\n\t\t\tmessages.sender_id,\n\t\t\tmessages.mam_id,\n\t\t\tmessages.mam_by,\n\t\t\tmessages.sort_id,\n\t\t\tmessages.sync_point,\n\t\t\tMAX(versions.created_at)\n\t\t\tFROM messages INNER JOIN messages versions USING (correction_id, sender_id) WHERE (messages.stanza_id, messages.mam_id) IN (SELECT * FROM page) AND messages.account_id=? AND messages.chat_id=? GROUP BY correction_id, CASE WHEN messages.type=? THEN 'call' ELSE messages.sender_id END",e9,6c,a5,c8));
-HXLINE( 833)		::Array< ::String > q9 = q;
-HXDLIN( 833)		q9[0] = (q9->__get(0) + HX_(" ORDER BY messages.sort_id",51,c7,5c,e5));
-HXLINE( 834)		bool _hx_tmp2;
-HXDLIN( 834)		if ((op != HX_("<",3c,00,00,00))) {
-HXLINE( 834)			_hx_tmp2 = (op == HX_("<=",81,34,00,00));
+HXLINE( 949)			_hx_tmp1 = true;
+            		}
+HXDLIN( 949)		if (_hx_tmp1) {
+HXLINE( 949)			::Array< ::String > q6 = q;
+HXDLIN( 949)			q6[0] = (q6->__get(0) + HX_(" DESC",71,b6,f9,99));
+            		}
+HXLINE( 950)		::Array< ::String > q7 = q;
+HXDLIN( 950)		q7[0] = (q7->__get(0) + HX_(" LIMIT 50) ",37,de,84,8e));
+HXLINE( 951)		::Array< ::String > q8 = q;
+HXDLIN( 951)		q8[0] = (q8->__get(0) + ((HX_("\n\t\t\tSELECT\n\t\t\t\t",4f,6c,f2,53) + this->versionedMessageColumns) + HX_("\n\t\t\tFROM messages\n\t\t\tINNER JOIN messages versions USING (correction_id, sender_id)\n\t\t\tWHERE\n\t\t\t\t(messages.stanza_id, messages.mam_id) IN (SELECT * FROM page)\n\t\t\t\tAND messages.account_id=?\n\t\t\t\tAND messages.chat_id=?\n\t\t\t\tGROUP BY correction_id, CASE WHEN messages.type=? THEN 'call' ELSE messages.sender_id END\n\t\t",04,c0,0e,0a)));
+HXLINE( 962)		::Array< ::String > q9 = q;
+HXDLIN( 962)		q9[0] = (q9->__get(0) + HX_(" ORDER BY messages.sort_id",51,c7,5c,e5));
+HXLINE( 963)		bool _hx_tmp2;
+HXDLIN( 963)		if ((op != HX_("<",3c,00,00,00))) {
+HXLINE( 963)			_hx_tmp2 = (op == HX_("<=",81,34,00,00));
             		}
             		else {
-HXLINE( 834)			_hx_tmp2 = true;
+HXLINE( 963)			_hx_tmp2 = true;
             		}
-HXDLIN( 834)		if (_hx_tmp2) {
-HXLINE( 834)			::Array< ::String > q10 = q;
-HXDLIN( 834)			q10[0] = (q10->__get(0) + HX_(" DESC",71,b6,f9,99));
+HXDLIN( 963)		if (_hx_tmp2) {
+HXLINE( 963)			::Array< ::String > q10 = q;
+HXDLIN( 963)			q10[0] = (q10->__get(0) + HX_(" DESC",71,b6,f9,99));
             		}
-HXLINE( 835)		::Array< ::String > q11 = q;
-HXDLIN( 835)		q11[0] = (q11->__get(0) + HX_(", messages.created_at",98,50,44,73));
-HXLINE( 836)		bool _hx_tmp3;
-HXDLIN( 836)		if ((op != HX_("<",3c,00,00,00))) {
-HXLINE( 836)			_hx_tmp3 = (op == HX_("<=",81,34,00,00));
+HXLINE( 964)		::Array< ::String > q11 = q;
+HXDLIN( 964)		q11[0] = (q11->__get(0) + HX_(", messages.time_received",25,c5,64,32));
+HXLINE( 965)		bool _hx_tmp3;
+HXDLIN( 965)		if ((op != HX_("<",3c,00,00,00))) {
+HXLINE( 965)			_hx_tmp3 = (op == HX_("<=",81,34,00,00));
             		}
             		else {
-HXLINE( 836)			_hx_tmp3 = true;
+HXLINE( 965)			_hx_tmp3 = true;
             		}
-HXDLIN( 836)		if (_hx_tmp3) {
-HXLINE( 836)			::Array< ::String > q12 = q;
-HXDLIN( 836)			q12[0] = (q12->__get(0) + HX_(" DESC",71,b6,f9,99));
+HXDLIN( 965)		if (_hx_tmp3) {
+HXLINE( 965)			::Array< ::String > q12 = q;
+HXDLIN( 965)			q12[0] = (q12->__get(0) + HX_(" DESC",71,b6,f9,99));
             		}
-HXLINE( 838)		params->push(accountId);
-HXLINE( 839)		params->push(chatId);
-HXLINE( 840)		params->push(1);
-HXLINE( 842)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q->__get(0),params), ::Dynamic(new _hx_Closure_2(q,_gthis,op,chatId,timestamp,accountId)),null()), ::Dynamic(new _hx_Closure_3(_gthis,op,accountId)),null()), ::Dynamic(new _hx_Closure_4(_gthis,accountId)),null());
+HXLINE( 967)		params->push(accountId);
+HXLINE( 968)		params->push(chatId);
+HXLINE( 969)		params->push(1);
+HXLINE( 971)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q->__get(0),params), ::Dynamic(new _hx_Closure_2(q,_gthis,op,chatId,timestamp,accountId)),null()), ::Dynamic(new _hx_Closure_3(_gthis,op,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC6(Sqlite_obj,getMessages,return )
 
 ::Dynamic Sqlite_obj::getMessagesBefore(::String accountId,::String chatId, ::borogove::ChatMessage before){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_904_getMessagesBefore)
-HXDLIN( 904)		::String _hx_tmp;
-HXDLIN( 904)		if (::hx::IsNotNull( before )) {
-HXDLIN( 904)			_hx_tmp = before->sortId;
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1032_getMessagesBefore)
+HXDLIN(1032)		::String _hx_tmp;
+HXDLIN(1032)		if (::hx::IsNotNull( before )) {
+HXDLIN(1032)			_hx_tmp = before->sortId;
             		}
             		else {
-HXDLIN( 904)			_hx_tmp = null();
+HXDLIN(1032)			_hx_tmp = null();
             		}
-HXDLIN( 904)		 ::Dynamic _hx_tmp1;
-HXDLIN( 904)		if (::hx::IsNotNull( before )) {
-HXDLIN( 904)			_hx_tmp1 = before->type;
+HXDLIN(1032)		 ::Dynamic _hx_tmp1;
+HXDLIN(1032)		if (::hx::IsNotNull( before )) {
+HXDLIN(1032)			_hx_tmp1 = before->type;
             		}
             		else {
-HXDLIN( 904)			_hx_tmp1 = null();
+HXDLIN(1032)			_hx_tmp1 = null();
             		}
-HXDLIN( 904)		::String _hx_tmp2;
-HXDLIN( 904)		if (::hx::IsNotNull( before )) {
-HXDLIN( 904)			_hx_tmp2 = before->timestamp;
+HXDLIN(1032)		::String _hx_tmp2;
+HXDLIN(1032)		if (::hx::IsNotNull( before )) {
+HXDLIN(1032)			_hx_tmp2 = before->timeReceived;
             		}
             		else {
-HXDLIN( 904)			_hx_tmp2 = null();
+HXDLIN(1032)			_hx_tmp2 = null();
             		}
-HXDLIN( 904)		return this->getMessages(accountId,chatId,_hx_tmp,HX_("<",3c,00,00,00),::hx::IsEq( _hx_tmp1,3 ),_hx_tmp2);
+HXDLIN(1032)		return this->getMessages(accountId,chatId,_hx_tmp,HX_("<",3c,00,00,00),::hx::IsEq( _hx_tmp1,3 ),_hx_tmp2);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,getMessagesBefore,return )
 
 ::Dynamic Sqlite_obj::getMessagesAfter(::String accountId,::String chatId, ::borogove::ChatMessage after){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_909_getMessagesAfter)
-HXDLIN( 909)		::String _hx_tmp;
-HXDLIN( 909)		if (::hx::IsNotNull( after )) {
-HXDLIN( 909)			_hx_tmp = after->sortId;
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1037_getMessagesAfter)
+HXDLIN(1037)		::String _hx_tmp;
+HXDLIN(1037)		if (::hx::IsNotNull( after )) {
+HXDLIN(1037)			_hx_tmp = after->sortId;
             		}
             		else {
-HXDLIN( 909)			_hx_tmp = null();
+HXDLIN(1037)			_hx_tmp = null();
             		}
-HXDLIN( 909)		 ::Dynamic _hx_tmp1;
-HXDLIN( 909)		if (::hx::IsNotNull( after )) {
-HXDLIN( 909)			_hx_tmp1 = after->type;
+HXDLIN(1037)		 ::Dynamic _hx_tmp1;
+HXDLIN(1037)		if (::hx::IsNotNull( after )) {
+HXDLIN(1037)			_hx_tmp1 = after->type;
             		}
             		else {
-HXDLIN( 909)			_hx_tmp1 = null();
+HXDLIN(1037)			_hx_tmp1 = null();
             		}
-HXDLIN( 909)		::String _hx_tmp2;
-HXDLIN( 909)		if (::hx::IsNotNull( after )) {
-HXDLIN( 909)			_hx_tmp2 = after->timestamp;
+HXDLIN(1037)		::String _hx_tmp2;
+HXDLIN(1037)		if (::hx::IsNotNull( after )) {
+HXDLIN(1037)			_hx_tmp2 = after->timeReceived;
             		}
             		else {
-HXDLIN( 909)			_hx_tmp2 = null();
+HXDLIN(1037)			_hx_tmp2 = null();
             		}
-HXDLIN( 909)		return this->getMessages(accountId,chatId,_hx_tmp,HX_(">",3e,00,00,00),::hx::IsEq( _hx_tmp1,3 ),_hx_tmp2);
+HXDLIN(1037)		return this->getMessages(accountId,chatId,_hx_tmp,HX_(">",3e,00,00,00),::hx::IsEq( _hx_tmp1,3 ),_hx_tmp2);
             	}
 
 
@@ -2604,114 +2686,134 @@ HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,getMessagesAfter,return )
 ::Dynamic Sqlite_obj::getMessagesAround(::String accountId, ::borogove::ChatMessage around){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> results){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_918_getMessagesAround)
-HXLINE( 918)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 918)			{
-HXLINE( 918)				int _g_current = 0;
-HXDLIN( 918)				while((_g_current < results->length)){
-HXLINE( 918)					_g_current = (_g_current + 1);
-HXDLIN( 918)					{
-HXLINE( 918)						 ::Dynamic x = results->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 918)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 918)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1046_getMessagesAround)
+HXLINE(1046)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(1046)			{
+HXLINE(1046)				int _g_current = 0;
+HXDLIN(1046)				while((_g_current < results->length)){
+HXLINE(1046)					_g_current = (_g_current + 1);
+HXDLIN(1046)					{
+HXLINE(1046)						 ::Dynamic x = results->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN(1046)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1046)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             						}
             					}
             				}
             			}
-HXDLIN( 918)			return _g;
+HXDLIN(1046)			return _g;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_913_getMessagesAround)
-HXLINE( 914)		::String chatId = around->chatId();
-HXLINE( 916)		 ::Dynamic _hx_tmp;
-HXDLIN( 916)		if (::hx::IsNotNull( around )) {
-HXLINE( 916)			_hx_tmp = around->type;
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1041_getMessagesAround)
+HXLINE(1042)		::String chatId = around->chatId();
+HXLINE(1044)		 ::Dynamic _hx_tmp;
+HXDLIN(1044)		if (::hx::IsNotNull( around )) {
+HXLINE(1044)			_hx_tmp = around->type;
             		}
             		else {
-HXLINE( 916)			_hx_tmp = null();
+HXLINE(1044)			_hx_tmp = null();
             		}
-HXDLIN( 916)		::String _hx_tmp1;
-HXDLIN( 916)		if (::hx::IsNotNull( around )) {
-HXLINE( 916)			_hx_tmp1 = around->timestamp;
+HXDLIN(1044)		::String _hx_tmp1;
+HXDLIN(1044)		if (::hx::IsNotNull( around )) {
+HXLINE(1044)			_hx_tmp1 = around->timeReceived;
             		}
             		else {
-HXLINE( 916)			_hx_tmp1 = null();
+HXLINE(1044)			_hx_tmp1 = null();
             		}
-HXDLIN( 916)		::Dynamic _hx_tmp2 = this->getMessages(accountId,chatId,around->sortId,HX_("<",3c,00,00,00),::hx::IsEq( _hx_tmp,3 ),_hx_tmp1);
-HXLINE( 917)		 ::Dynamic _hx_tmp3;
-HXDLIN( 917)		if (::hx::IsNotNull( around )) {
-HXLINE( 917)			_hx_tmp3 = around->type;
+HXDLIN(1044)		::Dynamic _hx_tmp2 = this->getMessages(accountId,chatId,around->sortId,HX_("<",3c,00,00,00),::hx::IsEq( _hx_tmp,3 ),_hx_tmp1);
+HXLINE(1045)		 ::Dynamic _hx_tmp3;
+HXDLIN(1045)		if (::hx::IsNotNull( around )) {
+HXLINE(1045)			_hx_tmp3 = around->type;
             		}
             		else {
-HXLINE( 917)			_hx_tmp3 = null();
+HXLINE(1045)			_hx_tmp3 = null();
             		}
-HXDLIN( 917)		::String _hx_tmp4;
-HXDLIN( 917)		if (::hx::IsNotNull( around )) {
-HXLINE( 917)			_hx_tmp4 = around->timestamp;
+HXDLIN(1045)		::String _hx_tmp4;
+HXDLIN(1045)		if (::hx::IsNotNull( around )) {
+HXLINE(1045)			_hx_tmp4 = around->timeReceived;
             		}
             		else {
-HXLINE( 917)			_hx_tmp4 = null();
+HXLINE(1045)			_hx_tmp4 = null();
             		}
-HXLINE( 915)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(::Array_obj< ::Dynamic>::__new(2)->init(0,_hx_tmp2)->init(1,this->getMessages(accountId,chatId,around->sortId,HX_(">=",3f,36,00,00),::hx::IsEq( _hx_tmp3,3 ),_hx_tmp4))), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE(1043)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(::Array_obj< ::Dynamic>::__new(2)->init(0,_hx_tmp2)->init(1,this->getMessages(accountId,chatId,around->sortId,HX_(">=",3f,36,00,00),::hx::IsEq( _hx_tmp3,3 ),_hx_tmp4))), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,getMessagesAround,return )
 
+::Dynamic Sqlite_obj::getMessagesByStatus(::String accountId,int status){
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
+            		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1060_getMessagesByStatus)
+HXLINE(1060)			return _gthis->hydrateMessagesAndLoadMeta(accountId,result);
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1050_getMessagesByStatus)
+HXDLIN(1050)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1051)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXLINE(1052)		::String _hx_tmp1 = ((HX_("\n\t\t\t\tSELECT\n\t\t\t\t\t",c5,63,82,76) + ::borogove::persistence::Sqlite_obj::messageColumnsString(null())) + HX_("\n\t\t\t\tFROM messages\n\t\t\t\tWHERE account_id=? AND status=?\n\t\t\t\tORDER BY time_received\n\t\t\t",62,8f,4a,1a));
+HXLINE(1051)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(_hx_tmp1,::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,status)), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,getMessagesByStatus,return )
+
 ::Dynamic Sqlite_obj::getChatUnreadDetails(::String accountId, ::borogove::Chat chat){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis, ::borogove::Chat,chat,::String,accountId) HXARGC(1)
             		 ::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_925_getChatUnreadDetails)
-HXLINE( 926)			 ::Dynamic row = result->array->__get(result->current++);
-HXLINE( 927)			::Array< ::Dynamic> lastMessage;
-HXDLIN( 927)			if (::hx::IsNull( row->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic) )) {
-HXLINE( 927)				lastMessage = ::Array_obj< ::Dynamic>::__new(0);
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1084_getChatUnreadDetails)
+HXLINE(1085)			 ::Dynamic row = result->array->__get(result->current++);
+HXLINE(1086)			::Array< ::Dynamic> lastMessage;
+HXDLIN(1086)			if (::hx::IsNull( row->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic) )) {
+HXLINE(1086)				lastMessage = ::Array_obj< ::Dynamic>::__new(0);
             			}
             			else {
-HXLINE( 927)				lastMessage = _gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,row)));
+HXLINE(1086)				lastMessage = _gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,row)));
             			}
-HXLINE( 928)			return  ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE(1087)			return  ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("message",c7,35,11,9a),lastMessage->__get(0).StaticCast<  ::borogove::ChatMessage >())
             				->setFixed(1,HX_("unreadCount",20,18,f1,a0), ::Dynamic(row->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)))
             				->setFixed(2,HX_("chatId",d3,04,77,b7),chat->chatId));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_921_getChatUnreadDetails)
-HXDLIN( 921)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 922)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("WITH subq AS (SELECT ROWID AS row, COALESCE(MAX(sort_id), 'a ') AS sort_id FROM messages where account_id=? AND chat_id=? AND (mam_id=? OR direction=?)) SELECT chat_id AS chatId, stanza, direction, type, status, status_text, sender_id, mam_id, mam_by, MAX(sort_id), sync_point, CASE WHEN (SELECT row FROM subq) IS NULL THEN COUNT(*) ELSE COUNT(*) - 1 END AS unreadCount, strftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp FROM messages WHERE account_id=? AND chat_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id) AND (messages.sort_id >= (SELECT sort_id FROM subq) AND (messages.sort_id <> (SELECT sort_id FROM subq) OR messages.ROWID = (SELECT row FROM subq)))",18,7d,3b,a1),::cpp::VirtualArray_obj::__new(6)->init(0,accountId)->init(1,chat->chatId)->init(2,chat->readUpToId)->init(3,1)->init(4,accountId)->init(5,chat->chatId)), ::Dynamic(new _hx_Closure_0(_gthis,chat,accountId)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1063_getChatUnreadDetails)
+HXDLIN(1063)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1064)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXLINE(1066)		::String _hx_tmp1 = ((HX_("\n\t\t\t\tWITH subq AS (\n\t\t\t\t\tSELECT ROWID AS row, COALESCE(MAX(sort_id), 'a ') AS sort_id\n\t\t\t\t\tFROM messages\n\t\t\t\t\tWHERE account_id=? AND chat_id=? AND type <> ? AND (mam_id=? OR direction=?)\n\t\t\t\t)\n\t\t\t\tSELECT\n\t\t\t\t\tchat_id AS chatId,\n\t\t\t\t\t",99,b0,8d,17) + ::borogove::persistence::Sqlite_obj::messageColumnsString(::Array_obj< ::Dynamic>::__new(1)->init(0,::borogove::persistence::Sqlite_obj::col(HX_("sort_id",5c,b9,64,00),HX_("MAX(sort_id) AS sort_id",7d,fb,65,2d))))) + HX_(",\n\t\t\t\t\tCASE WHEN (SELECT row FROM subq) IS NULL THEN COUNT(*) ELSE COUNT(*) - 1 END AS unreadCount\n\t\t\t\tFROM messages\n\t\t\t\tWHERE\n\t\t\t\t\taccount_id=?\n\t\t\t\t\tAND chat_id=?\n\t\t\t\t\tAND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id)\n\t\t\t\t\tAND (messages.sort_id > (SELECT sort_id FROM subq) OR messages.ROWID = (SELECT row FROM subq))\n\t\t\t\t\tAND type<>?\n\t\t\t",c9,ec,a8,04));
+HXLINE(1064)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(_hx_tmp1,::cpp::VirtualArray_obj::__new(8)->init(0,accountId)->init(1,chat->chatId)->init(2,3)->init(3,chat->readUpToId)->init(4,1)->init(5,accountId)->init(6,chat->chatId)->init(7,3)), ::Dynamic(new _hx_Closure_0(_gthis,chat,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,getChatUnreadDetails,return )
 
 ::Dynamic Sqlite_obj::getChatsUnreadDetails(::String accountId,::Array< ::Dynamic> chats){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_933_getChatsUnreadDetails)
-HXLINE( 934)		bool _hx_tmp;
-HXDLIN( 934)		if (::hx::IsNotNull( chats )) {
-HXLINE( 934)			_hx_tmp = (chats->length < 1);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1092_getChatsUnreadDetails)
+HXLINE(1093)		bool _hx_tmp;
+HXDLIN(1093)		if (::hx::IsNotNull( chats )) {
+HXLINE(1093)			_hx_tmp = (chats->length < 1);
             		}
             		else {
-HXLINE( 934)			_hx_tmp = true;
-            		}
-HXDLIN( 934)		if (_hx_tmp) {
-HXLINE( 935)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
-            		}
-HXLINE( 938)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(chats->length);
-HXDLIN( 938)		{
-HXLINE( 938)			int _g = 0;
-HXDLIN( 938)			int _g1 = chats->length;
-HXDLIN( 938)			while((_g < _g1)){
-HXLINE( 938)				_g = (_g + 1);
-HXDLIN( 938)				int i = (_g - 1);
-HXDLIN( 938)				{
-HXLINE( 938)					::Dynamic inValue = this->getChatUnreadDetails(accountId,( ( ::borogove::Chat)(_hx_array_unsafe_get(chats,i)) ));
-HXDLIN( 938)					result->__unsafe_set(i,inValue);
+HXLINE(1093)			_hx_tmp = true;
+            		}
+HXDLIN(1093)		if (_hx_tmp) {
+HXLINE(1094)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+            		}
+HXLINE(1097)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(chats->length);
+HXDLIN(1097)		{
+HXLINE(1097)			int _g = 0;
+HXDLIN(1097)			int _g1 = chats->length;
+HXDLIN(1097)			while((_g < _g1)){
+HXLINE(1097)				_g = (_g + 1);
+HXDLIN(1097)				int i = (_g - 1);
+HXDLIN(1097)				{
+HXLINE(1097)					::Dynamic inValue = this->getChatUnreadDetails(accountId,( ( ::borogove::Chat)(_hx_array_unsafe_get(chats,i)) ));
+HXDLIN(1097)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 938)		return ::thenshim::PromiseTools_obj::all(result);
+HXDLIN(1097)		return ::thenshim::PromiseTools_obj::all(result);
             	}
 
 
@@ -2720,226 +2822,180 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,getChatsUnreadDetails,return )
 ::Dynamic Sqlite_obj::storeReaction(::String accountId, ::borogove::ReactionUpdate update){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId, ::borogove::ReactionUpdate,update) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_951_storeReaction)
-HXLINE( 951)			return _gthis->getMessage(accountId,update->chatId,update->serverId,update->localId);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1110_storeReaction)
+HXLINE(1110)			return _gthis->getMessage(accountId,update->chatId,update->serverId,update->localId);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_942_storeReaction)
-HXDLIN( 942)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 943)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXLINE( 946)		::String accountId1 = accountId;
-HXDLIN( 946)		::String update1 = update->updateId;
-HXDLIN( 946)		::String update2 = update->serverId;
-HXDLIN( 946)		::String update3 = update->serverIdBy;
-HXLINE( 947)		::String update4 = update->localId;
-HXDLIN( 947)		::String update5 = update->chatId;
-HXDLIN( 947)		::String update6 = update->senderId;
-HXDLIN( 947)		::String update7 = update->timestamp;
-HXLINE( 948)		::String _hx_tmp1 = ::borogove::JsonPrinter_obj::print(update->reactions,null(),null());
-HXLINE( 943)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(HX_("INSERT OR REPLACE INTO reactions VALUES (?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),jsonb(?),?)",e2,55,57,48),::cpp::VirtualArray_obj::__new(10)->init(0,accountId1)->init(1,update1)->init(2,update2)->init(3,update3)->init(4,update4)->init(5,update5)->init(6,update6)->init(7,update7)->init(8,_hx_tmp1)->init(9,update->kind)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,update)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1101_storeReaction)
+HXDLIN(1101)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1102)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXLINE(1105)		::String accountId1 = accountId;
+HXDLIN(1105)		::String update1 = update->updateId;
+HXDLIN(1105)		::String update2 = update->serverId;
+HXDLIN(1105)		::String update3 = update->serverIdBy;
+HXLINE(1106)		::String update4 = update->localId;
+HXDLIN(1106)		::String update5 = update->chatId;
+HXDLIN(1106)		::String update6 = update->senderId;
+HXDLIN(1106)		::String update7 = update->timestamp;
+HXLINE(1107)		::String _hx_tmp1 = ::borogove::JsonPrinter_obj::print(update->reactions,null(),null());
+HXLINE(1102)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(HX_("INSERT OR REPLACE INTO reactions VALUES (?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),jsonb(?),?)",e2,55,57,48),::cpp::VirtualArray_obj::__new(10)->init(0,accountId1)->init(1,update1)->init(2,update2)->init(3,update3)->init(4,update4)->init(5,update5)->init(6,update6)->init(7,update7)->init(8,_hx_tmp1)->init(9,update->kind)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,update)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeReaction,return )
 
 ::Dynamic Sqlite_obj::updateMessageStatus(::String accountId,::String localId,int status,::String statusText){
-            		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_3, ::borogove::persistence::Sqlite,_gthis,::String,localId,::String,statusText,int,status,::String,accountId) HXARGC(0)
+            		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::Sqlite,_gthis,::String,localId,::String,statusText,int,status,::String,accountId) HXARGC(0)
             		::Dynamic _hx_run(){
-            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             			::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_962_updateMessageStatus)
-HXLINE( 962)				::Array< ::Dynamic> _this = _gthis->hydrateMessages(accountId,result);
-HXDLIN( 962)				::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 962)				{
-HXLINE( 962)					int _g = 0;
-HXDLIN( 962)					int _g1 = _this->length;
-HXDLIN( 962)					while((_g < _g1)){
-HXLINE( 962)						_g = (_g + 1);
-HXDLIN( 962)						int i = (_g - 1);
-HXDLIN( 962)						{
-            							HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
-            							::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            								HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_967_updateMessageStatus)
-HXLINE( 967)								return _gthis->hydrateReactions(accountId,messages);
-            							}
-            							HX_END_LOCAL_FUNC1(return)
-
-HXLINE( 962)							 ::borogove::ChatMessage message = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(_this,i)) );
-HXLINE( 963)							::Dynamic inValue;
-HXDLIN( 963)							if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 964)								 ::borogove::persistence::Sqlite _gthis1 = _gthis;
-HXDLIN( 964)								::String accountId1 = accountId;
-HXDLIN( 964)								::String inValue1 = message->chatId();
-HXLINE( 963)								inValue = _gthis1->hydrateReplyTo(accountId1,::Array_obj< ::Dynamic>::__new(1)->init(0,message),::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
-            									->setFixed(0,HX_("chatId",d3,04,77,b7),inValue1)
-            									->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
-            									->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId))));
-            							}
-            							else {
-HXLINE( 963)								inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,message));
-            							}
-HXLINE( 962)							::Dynamic inValue2 = ::thenshim::_Promise::Promise_Impl__obj::then(inValue, ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
-HXDLIN( 962)							result1->__unsafe_set(i,inValue2);
-            						}
-            					}
-            				}
-HXDLIN( 962)				return ::thenshim::PromiseTools_obj::all(result1);
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1131_updateMessageStatus)
+HXLINE(1131)				return _gthis->hydrateMessagesAndLoadMeta(accountId,result);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2,::String,localId) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1,::String,localId) HXARGC(1)
             			::Dynamic _hx_run(::Array< ::Dynamic> hydrated){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_969_updateMessageStatus)
-HXLINE( 970)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 970)				{
-HXLINE( 970)					int _g_current = 0;
-HXDLIN( 970)					while((_g_current < hydrated->length)){
-HXLINE( 970)						_g_current = (_g_current + 1);
-HXDLIN( 970)						{
-HXLINE( 970)							 ::Dynamic x = hydrated->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 970)							while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 970)								_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
-            							}
-            						}
-            					}
-            				}
-HXLINE( 971)				if ((_g->length > 0)) {
-HXLINE( 971)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(_g->__get(0).StaticCast<  ::borogove::ChatMessage >());
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1133_updateMessageStatus)
+HXLINE(1133)				if ((hydrated->length > 0)) {
+HXLINE(1133)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(hydrated->__get(0).StaticCast<  ::borogove::ChatMessage >());
             				}
             				else {
-HXLINE( 971)					return ::thenshim::_Promise::Promise_Impl__obj::reject((HX_("Message not found: ",62,21,15,ae) + localId));
+HXLINE(1133)					return ::thenshim::_Promise::Promise_Impl__obj::reject((HX_("Message not found: ",62,21,15,ae) + localId));
             				}
-HXDLIN( 971)				return null();
+HXDLIN(1133)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_958_updateMessageStatus)
-HXLINE( 958)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_gthis->db->exec(HX_("UPDATE messages SET status=?, status_text=? WHERE account_id=? AND stanza_id=? AND direction=? AND status <> ? AND status <> ? RETURNING stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, correction_id AS stanza_id, sort_id, mam_id, mam_by, sync_point",60,88,80,c5),::cpp::VirtualArray_obj::__new(7)->init(0,status)->init(1,statusText)->init(2,accountId)->init(3,localId)->init(4,1)->init(5,2)->init(6,3)), ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_2(localId)),null());
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1117_updateMessageStatus)
+HXLINE(1117)			 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
+HXLINE(1118)			::String _hx_tmp = ((HX_("\n\t\t\t\t\tUPDATE messages\n\t\t\t\t\tSET status=?, status_text=?\n\t\t\t\t\tWHERE account_id=?\n\t\t\t\t\t\tAND stanza_id=?\n\t\t\t\t\t\tAND direction=?\n\t\t\t\t\t\tAND status <> ?\n\t\t\t\t\t\tAND status <> ?\n\t\t\t\t\tRETURNING\n\t\t\t\t\t\t",ab,02,52,c8) + ::borogove::persistence::Sqlite_obj::messageColumnsString(::Array_obj< ::Dynamic>::__new(1)->init(0,::borogove::persistence::Sqlite_obj::col(HX_("stanza_id",25,7b,7a,e9),HX_("correction_id AS stanza_id",fb,fb,fc,5c))))) + HX_("\n\t\t\t\t",ca,94,fb,c7));
+HXLINE(1117)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_gthis1->exec(_hx_tmp,::cpp::VirtualArray_obj::__new(7)->init(0,status)->init(1,statusText)->init(2,accountId)->init(3,localId)->init(4,1)->init(5,2)->init(6,3)), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_1(localId)),null());
             		}
             		HX_END_LOCAL_FUNC0(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_956_updateMessageStatus)
-HXDLIN( 956)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 957)		return this->storeMessagesSerialized->run( ::Dynamic(new _hx_Closure_3(_gthis,localId,statusText,status,accountId)));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1115_updateMessageStatus)
+HXDLIN(1115)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1116)		return this->storeMessagesSerialized->run( ::Dynamic(new _hx_Closure_2(_gthis,localId,statusText,status,accountId)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,updateMessageStatus,return )
 
-::Dynamic Sqlite_obj::hasMedia(::String hashAlgorithm,::Array< unsigned char > hash){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_978_hasMedia)
-HXDLIN( 978)		return ::borogove::persistence::MediaStore_obj::hasMedia(this->media,hashAlgorithm,hash);
+::Dynamic Sqlite_obj::hasMedia( ::borogove::Hash hash){
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1140_hasMedia)
+HXDLIN(1140)		return ::borogove::persistence::MediaStore_obj::hasMedia(this->media,hash);
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hasMedia,return )
+HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,hasMedia,return )
 
 ::Dynamic Sqlite_obj::removeMedia(::String hashAlgorithm,::Array< unsigned char > hash){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_983_removeMedia)
-HXDLIN( 983)		return ::borogove::persistence::MediaStore_obj::removeMedia(this->media,hashAlgorithm,hash);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1145_removeMedia)
+HXDLIN(1145)		return ::borogove::persistence::MediaStore_obj::removeMedia(this->media,hashAlgorithm,hash);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,removeMedia,return )
 
-::Dynamic Sqlite_obj::storeMedia(::String mime,::Array< unsigned char > bd){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_988_storeMedia)
-HXDLIN( 988)		return ::borogove::persistence::MediaStore_obj::storeMedia(this->media,mime,bd);
+::Dynamic Sqlite_obj::storeMedia(::String mime,::Dynamic source){
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1150_storeMedia)
+HXDLIN(1150)		return ::borogove::persistence::MediaStore_obj::storeMedia(this->media,mime,source);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeMedia,return )
 
 void Sqlite_obj::storeCaps( ::borogove::Caps caps){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_992_storeCaps)
-HXLINE( 993)		 ::haxe::ds::ObjectMap map =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
-HXLINE( 994)		map->set(caps->verRaw()->hash,caps);
-HXLINE( 995)		this->storeCapsSet(map);
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1154_storeCaps)
+HXLINE(1155)		 ::haxe::ds::ObjectMap map =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
+HXLINE(1156)		map->set(caps->verRaw()->hash,caps);
+HXLINE(1157)		this->storeCapsSet(map);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,storeCaps,(void))
 
 void Sqlite_obj::storeCapsSet( ::haxe::ds::ObjectMap capsSet){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_998_storeCapsSet)
-HXLINE( 999)		::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(0);
-HXLINE(1000)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE(1001)		{
-HXLINE(1001)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1001)				q->flush();
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1160_storeCapsSet)
+HXLINE(1161)		::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(0);
+HXLINE(1162)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE(1163)		{
+HXLINE(1163)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1163)				q->flush();
             			}
-HXDLIN(1001)			if (::hx::IsNull( q->b )) {
-HXLINE(1001)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_175,1);
+HXDLIN(1163)			if (::hx::IsNull( q->b )) {
+HXLINE(1163)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_189,1);
             			}
             			else {
-HXLINE(1001)				q->b->push(HX_("INSERT OR IGNORE INTO caps VALUES ",27,4b,68,bf));
-            			}
-            		}
-HXLINE(1002)		bool first = true;
-HXLINE(1003)		{
-HXLINE(1003)			::Dynamic map = capsSet;
-HXDLIN(1003)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN(1003)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1003)				::Array< unsigned char > key = ( (::Array< unsigned char >)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1003)				 ::borogove::Caps _g_value = ( ( ::borogove::Caps)(::haxe::IMap_obj::get(map,key)) );
-HXDLIN(1003)				{
-HXLINE(1004)					if (!(first)) {
-HXLINE(1004)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1004)							q->flush();
+HXLINE(1163)				q->b->push(HX_("INSERT OR IGNORE INTO caps VALUES ",27,4b,68,bf));
+            			}
+            		}
+HXLINE(1164)		bool first = true;
+HXLINE(1165)		{
+HXLINE(1165)			::Dynamic map = capsSet;
+HXDLIN(1165)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN(1165)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1165)				::Array< unsigned char > key = ( (::Array< unsigned char >)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1165)				 ::borogove::Caps _g_value = ( ( ::borogove::Caps)(::haxe::IMap_obj::get(map,key)) );
+HXDLIN(1165)				{
+HXLINE(1166)					if (!(first)) {
+HXLINE(1166)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1166)							q->flush();
             						}
-HXDLIN(1004)						if (::hx::IsNull( q->b )) {
-HXLINE(1004)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_176,1);
+HXDLIN(1166)						if (::hx::IsNull( q->b )) {
+HXLINE(1166)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_190,1);
             						}
             						else {
-HXLINE(1004)							q->b->push(HX_(",",2c,00,00,00));
+HXLINE(1166)							q->b->push(HX_(",",2c,00,00,00));
             						}
             					}
-HXLINE(1005)					{
-HXLINE(1005)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1005)							q->flush();
+HXLINE(1167)					{
+HXLINE(1167)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1167)							q->flush();
             						}
-HXDLIN(1005)						if (::hx::IsNull( q->b )) {
-HXLINE(1005)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_177,1);
+HXDLIN(1167)						if (::hx::IsNull( q->b )) {
+HXLINE(1167)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_191,1);
             						}
             						else {
-HXLINE(1005)							q->b->push(HX_("(?,jsonb(?))",1c,61,06,9e));
+HXLINE(1167)							q->b->push(HX_("(?,jsonb(?))",1c,61,06,9e));
             						}
             					}
-HXLINE(1006)					params->push(key);
-HXLINE(1007)					::String caps = _g_value->node;
-HXDLIN(1007)					::Array< ::Dynamic> caps1 = _g_value->identities;
-HXDLIN(1007)					::Array< ::String > caps2 = _g_value->features;
-HXDLIN(1007)					::Array< ::Dynamic> _this = _g_value->data;
-HXDLIN(1007)					::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN(1007)					{
-HXLINE(1007)						int _g = 0;
-HXDLIN(1007)						int _g1 = _this->length;
-HXDLIN(1007)						while((_g < _g1)){
-HXLINE(1007)							_g = (_g + 1);
-HXDLIN(1007)							int i = (_g - 1);
-HXDLIN(1007)							{
-HXLINE(1007)								::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->toString();
-HXDLIN(1007)								result->__unsafe_set(i,inValue);
+HXLINE(1168)					params->push(key);
+HXLINE(1169)					::String caps = _g_value->node;
+HXDLIN(1169)					::Array< ::Dynamic> caps1 = _g_value->identities;
+HXDLIN(1169)					::Array< ::String > caps2 = _g_value->features;
+HXDLIN(1169)					::Array< ::Dynamic> _this = _g_value->data;
+HXDLIN(1169)					::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN(1169)					{
+HXLINE(1169)						int _g = 0;
+HXDLIN(1169)						int _g1 = _this->length;
+HXDLIN(1169)						while((_g < _g1)){
+HXLINE(1169)							_g = (_g + 1);
+HXDLIN(1169)							int i = (_g - 1);
+HXDLIN(1169)							{
+HXLINE(1169)								::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->toString();
+HXDLIN(1169)								result->__unsafe_set(i,inValue);
             							}
             						}
             					}
-HXDLIN(1007)					 ::Dynamic replacer = null();
-HXDLIN(1007)					::String space = null();
-HXDLIN(1007)					params->push(::haxe::format::JsonPrinter_obj::print( ::Dynamic(::hx::Anon_obj::Create(4)
+HXDLIN(1169)					 ::Dynamic replacer = null();
+HXDLIN(1169)					::String space = null();
+HXDLIN(1169)					params->push(::haxe::format::JsonPrinter_obj::print( ::Dynamic(::hx::Anon_obj::Create(4)
             						->setFixed(0,HX_("identities",1c,c5,6d,d7),caps1)
             						->setFixed(1,HX_("features",fd,6c,d7,12),caps2)
             						->setFixed(2,HX_("data",2a,56,63,42),result)
             						->setFixed(3,HX_("node",02,0a,0a,49),caps)),replacer,space));
-HXLINE(1008)					first = false;
+HXLINE(1170)					first = false;
             				}
             			}
             		}
-HXLINE(1010)		if ((params->get_length() < 1)) {
-HXLINE(1010)			return;
+HXLINE(1172)		if ((params->get_length() < 1)) {
+HXLINE(1172)			return;
             		}
-HXLINE(1011)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN(1011)		_hx_tmp->exec(q->toString(),params);
+HXLINE(1173)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN(1173)		_hx_tmp->exec(q->toString(),params);
             	}
 
 
@@ -2948,184 +3004,197 @@ HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,storeCapsSet,(void))
 ::Dynamic Sqlite_obj::getCaps(::String ver){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::Array< unsigned char >,verData) HXARGC(1)
             		 ::borogove::Caps _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1024_getCaps)
-HXLINE(1025)			while((result->current < result->array->get_length())){
-HXLINE(1026)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(result->array->__get(result->current++)->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
-HXLINE(1027)				return _gthis->hydrateCaps(json,verData);
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1186_getCaps)
+HXLINE(1187)			while((result->current < result->array->get_length())){
+HXLINE(1188)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(result->array->__get(result->current++)->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
+HXLINE(1189)				return _gthis->hydrateCaps(json,verData);
             			}
-HXLINE(1029)			return null();
+HXLINE(1191)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1015_getCaps)
-HXDLIN(1015)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1016)		::Array< unsigned char > verData;
-HXDLIN(1016)		try {
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1177_getCaps)
+HXDLIN(1177)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1178)		::Array< unsigned char > verData;
+HXDLIN(1178)		try {
             			HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE(1016)			verData = ::haxe::crypto::Base64_obj::decode(ver,null())->b;
+HXLINE(1178)			verData = ::haxe::crypto::Base64_obj::decode(ver,null())->b;
             		} catch( ::Dynamic _hx_e) {
             			if (_hx_e.IsClass<  ::Dynamic >() ){
             				HX_STACK_BEGIN_CATCH
             				 ::Dynamic _g = _hx_e;
-HXLINE(1019)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE(1181)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             			}
             			else {
             				HX_STACK_DO_THROW(_hx_e);
             			}
             		}
-HXLINE(1021)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT json(caps) AS caps FROM caps WHERE sha1=? LIMIT 1",5a,98,24,09),::cpp::VirtualArray_obj::__new(1)->init(0,verData)), ::Dynamic(new _hx_Closure_0(_gthis,verData)),null());
+HXLINE(1183)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT json(caps) AS caps FROM caps WHERE sha1=? LIMIT 1",5a,98,24,09),::cpp::VirtualArray_obj::__new(1)->init(0,verData)), ::Dynamic(new _hx_Closure_0(_gthis,verData)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,getCaps,return )
 
-::Dynamic Sqlite_obj::storeLogin(::String accountId,::String clientId,::String displayName,::String token){
+::Dynamic Sqlite_obj::storeLogin(::String accountId,::String clientId,::String displayName,::String rosterVer,::String token){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::haxe::iterators::ArrayIterator _){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1056_storeLogin)
-HXLINE(1056)			return true;
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1220_storeLogin)
+HXLINE(1220)			return true;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1034_storeLogin)
-HXLINE(1035)		::Array< ::String > params = ::Array_obj< ::String >::__new(3)->init(0,accountId)->init(1,clientId)->init(2,displayName);
-HXLINE(1036)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE(1037)		{
-HXLINE(1037)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1037)				q->flush();
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1196_storeLogin)
+HXLINE(1197)		::Array< ::String > params = ::Array_obj< ::String >::__new(4)->init(0,accountId)->init(1,clientId)->init(2,displayName)->init(3,rosterVer);
+HXLINE(1198)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE(1199)		{
+HXLINE(1199)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1199)				q->flush();
             			}
-HXDLIN(1037)			if (::hx::IsNull( q->b )) {
-HXLINE(1037)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_183,1);
+HXDLIN(1199)			if (::hx::IsNull( q->b )) {
+HXLINE(1199)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_197,1);
             			}
             			else {
-HXLINE(1037)				q->b->push(HX_("INSERT INTO accounts (account_id, client_id, display_name",03,b0,6a,0b));
+HXLINE(1199)				q->b->push(HX_("INSERT INTO accounts (account_id, client_id, display_name, roster_ver",66,1e,c0,f8));
             			}
             		}
-HXLINE(1038)		if (::hx::IsNotNull( token )) {
-HXLINE(1039)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1039)				q->flush();
+HXLINE(1200)		if (::hx::IsNotNull( token )) {
+HXLINE(1201)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1201)				q->flush();
             			}
-HXDLIN(1039)			if (::hx::IsNull( q->b )) {
-HXLINE(1039)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_184,1);
+HXDLIN(1201)			if (::hx::IsNull( q->b )) {
+HXLINE(1201)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_198,1);
             			}
             			else {
-HXLINE(1039)				q->b->push(HX_(", token, fast_count",a5,56,e4,ae));
+HXLINE(1201)				q->b->push(HX_(", token, fast_count",a5,56,e4,ae));
             			}
             		}
-HXLINE(1041)		{
-HXLINE(1041)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1041)				q->flush();
+HXLINE(1203)		{
+HXLINE(1203)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1203)				q->flush();
             			}
-HXDLIN(1041)			if (::hx::IsNull( q->b )) {
-HXLINE(1041)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_185,1);
+HXDLIN(1203)			if (::hx::IsNull( q->b )) {
+HXLINE(1203)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_199,1);
             			}
             			else {
-HXLINE(1041)				q->b->push(HX_(") VALUES (?,?,?",c4,1c,e3,67));
+HXLINE(1203)				q->b->push(HX_(") VALUES (?,?,?,?",57,fc,76,7c));
             			}
             		}
-HXLINE(1042)		if (::hx::IsNotNull( token )) {
-HXLINE(1043)			{
-HXLINE(1043)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1043)					q->flush();
+HXLINE(1204)		if (::hx::IsNotNull( token )) {
+HXLINE(1205)			{
+HXLINE(1205)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1205)					q->flush();
             				}
-HXDLIN(1043)				if (::hx::IsNull( q->b )) {
-HXLINE(1043)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_186,1);
+HXDLIN(1205)				if (::hx::IsNull( q->b )) {
+HXLINE(1205)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_200,1);
             				}
             				else {
-HXLINE(1043)					q->b->push(HX_(",?",93,26,00,00));
+HXLINE(1205)					q->b->push(HX_(",?",93,26,00,00));
             				}
             			}
-HXLINE(1044)			params->push(token);
-HXLINE(1045)			{
-HXLINE(1045)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1045)					q->flush();
+HXLINE(1206)			params->push(token);
+HXLINE(1207)			{
+HXLINE(1207)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1207)					q->flush();
             				}
-HXDLIN(1045)				if (::hx::IsNull( q->b )) {
-HXLINE(1045)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_187,1);
+HXDLIN(1207)				if (::hx::IsNull( q->b )) {
+HXLINE(1207)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_201,1);
             				}
             				else {
-HXLINE(1045)					q->b->push(HX_(",0",84,26,00,00));
+HXLINE(1207)					q->b->push(HX_(",0",84,26,00,00));
             				}
             			}
             		}
-HXLINE(1047)		{
-HXLINE(1047)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1047)				q->flush();
+HXLINE(1209)		{
+HXLINE(1209)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1209)				q->flush();
             			}
-HXDLIN(1047)			if (::hx::IsNull( q->b )) {
-HXLINE(1047)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_188,1);
+HXDLIN(1209)			if (::hx::IsNull( q->b )) {
+HXLINE(1209)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_202,1);
             			}
             			else {
-HXLINE(1047)				q->b->push(HX_(") ON CONFLICT DO UPDATE SET client_id=?",cd,99,0c,96));
+HXLINE(1209)				q->b->push(HX_(") ON CONFLICT DO UPDATE SET client_id=?",cd,99,0c,96));
             			}
             		}
-HXLINE(1048)		params->push(clientId);
-HXLINE(1049)		{
-HXLINE(1049)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1049)				q->flush();
+HXLINE(1210)		params->push(clientId);
+HXLINE(1211)		{
+HXLINE(1211)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1211)				q->flush();
             			}
-HXDLIN(1049)			if (::hx::IsNull( q->b )) {
-HXLINE(1049)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_189,1);
+HXDLIN(1211)			if (::hx::IsNull( q->b )) {
+HXLINE(1211)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_203,1);
             			}
             			else {
-HXLINE(1049)				q->b->push(HX_(", display_name=?",7e,ad,5b,0f));
+HXLINE(1211)				q->b->push(HX_(", display_name=?",7e,ad,5b,0f));
             			}
             		}
-HXLINE(1050)		params->push(displayName);
-HXLINE(1051)		if (::hx::IsNotNull( token )) {
-HXLINE(1052)			{
-HXLINE(1052)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1052)					q->flush();
+HXLINE(1212)		params->push(displayName);
+HXLINE(1213)		{
+HXLINE(1213)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1213)				q->flush();
+            			}
+HXDLIN(1213)			if (::hx::IsNull( q->b )) {
+HXLINE(1213)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_204,1);
+            			}
+            			else {
+HXLINE(1213)				q->b->push(HX_(", roster_ver=?",05,aa,1f,92));
+            			}
+            		}
+HXLINE(1214)		params->push(rosterVer);
+HXLINE(1215)		if (::hx::IsNotNull( token )) {
+HXLINE(1216)			{
+HXLINE(1216)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1216)					q->flush();
             				}
-HXDLIN(1052)				if (::hx::IsNull( q->b )) {
-HXLINE(1052)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_190,1);
+HXDLIN(1216)				if (::hx::IsNull( q->b )) {
+HXLINE(1216)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_205,1);
             				}
             				else {
-HXLINE(1052)					q->b->push(HX_(", token=?",a7,78,19,80));
+HXLINE(1216)					q->b->push(HX_(", token=?",a7,78,19,80));
             				}
             			}
-HXLINE(1053)			params->push(token);
-HXLINE(1054)			{
-HXLINE(1054)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1054)					q->flush();
+HXLINE(1217)			params->push(token);
+HXLINE(1218)			{
+HXLINE(1218)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1218)					q->flush();
             				}
-HXDLIN(1054)				if (::hx::IsNull( q->b )) {
-HXLINE(1054)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_191,1);
+HXDLIN(1218)				if (::hx::IsNull( q->b )) {
+HXLINE(1218)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_206,1);
             				}
             				else {
-HXLINE(1054)					q->b->push(HX_(", fast_count=0",73,a8,4f,82));
+HXLINE(1218)					q->b->push(HX_(", fast_count=0",73,a8,4f,82));
             				}
             			}
             		}
-HXLINE(1056)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN(1056)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE(1220)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN(1220)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,storeLogin,return )
+HX_DEFINE_DYNAMIC_FUNC5(Sqlite_obj,storeLogin,return )
 
 ::Dynamic Sqlite_obj::getLogin(::String accountId){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		 ::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1064_getLogin)
-HXLINE(1065)			while((result->current < result->array->get_length())){
-HXLINE(1065)				 ::Dynamic row = result->array->__get(result->current++);
-HXLINE(1067)				if (::hx::IsNotNull( row->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic) )) {
-HXLINE(1068)					_gthis->db->exec(HX_("UPDATE accounts SET fast_count=fast_count+1 WHERE account_id=?",a6,3f,55,2d),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1228_getLogin)
+HXLINE(1229)			while((result->current < result->array->get_length())){
+HXLINE(1229)				 ::Dynamic row = result->array->__get(result->current++);
+HXLINE(1231)				if (::hx::IsNotNull( row->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic) )) {
+HXLINE(1232)					_gthis->db->exec(HX_("UPDATE accounts SET fast_count=fast_count+1 WHERE account_id=?",a6,3f,55,2d),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
             				}
-HXLINE(1070)				return row;
+HXLINE(1234)				return row;
             			}
-HXLINE(1073)			return  ::Dynamic(::hx::Anon_obj::Create(4)
+HXLINE(1237)			return  ::Dynamic(::hx::Anon_obj::Create(5)
             				->setFixed(0,HX_("fastCount",93,fc,67,a5),0)
             				->setFixed(1,HX_("token",f9,82,2b,14),null())
             				->setFixed(2,HX_("clientId",06,73,8f,15),null())
-            				->setFixed(3,HX_("displayName",ad,11,f2,30),null()));
+            				->setFixed(3,HX_("displayName",ad,11,f2,30),null())
+            				->setFixed(4,HX_("rosterVer",98,f5,fe,3e),null()));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1060_getLogin)
-HXDLIN(1060)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1061)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT client_id AS clientId, display_name AS displayName, token, COALESCE(fast_count, 0) AS fastCount FROM accounts WHERE account_id=? LIMIT 1",d8,8f,02,8f),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1224_getLogin)
+HXDLIN(1224)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1225)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT client_id AS clientId, display_name AS displayName, roster_ver AS rosterVer, token, COALESCE(fast_count, 0) AS fastCount FROM accounts WHERE account_id=? LIMIT 1",17,48,36,18),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
             	}
 
 
@@ -3134,11 +3203,11 @@ HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,getLogin,return )
 ::Dynamic Sqlite_obj::removeAccount(::String accountId,bool completely){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,bool,completely,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1085_removeAccount)
-HXLINE(1086)			if (!(completely)) {
-HXLINE(1086)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1249_removeAccount)
+HXLINE(1250)			if (!(completely)) {
+HXLINE(1250)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             			}
-HXLINE(1088)			return _gthis->db->execMany(::Array_obj< ::Dynamic>::__new(3)->init(0, ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1252)			return _gthis->db->execMany(::Array_obj< ::Dynamic>::__new(3)->init(0, ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("params",46,fb,7a,ed),::cpp::VirtualArray_obj::__new(1)->init(0,accountId))
             				->setFixed(1,HX_("sql",0e,a6,57,00),HX_("DELETE FROM messages WHERE account_id=?",bb,0a,07,c2))))->init(1, ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("params",46,fb,7a,ed),::cpp::VirtualArray_obj::__new(1)->init(0,accountId))
@@ -3150,14 +3219,14 @@ HXLINE(1088)			return _gthis->db->execMany(::Array_obj< ::Dynamic>::__new(3)->in
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run( ::haxe::iterators::ArrayIterator _){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1093_removeAccount)
-HXLINE(1093)			return true;
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1257_removeAccount)
+HXLINE(1257)			return true;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1084_removeAccount)
-HXDLIN(1084)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1085)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("DELETE FROM accounts WHERE account_id=?",a1,e8,94,4e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,completely,accountId)),null()), ::Dynamic(new _hx_Closure_1()),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1248_removeAccount)
+HXDLIN(1248)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1249)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("DELETE FROM accounts WHERE account_id=?",a1,e8,94,4e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,completely,accountId)),null()), ::Dynamic(new _hx_Closure_1()),null());
             	}
 
 
@@ -3166,74 +3235,74 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,removeAccount,return )
 ::Dynamic Sqlite_obj::listAccounts(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		::Array< ::String > _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1105_listAccounts)
-HXLINE(1105)			if (::hx::IsNull( result )) {
-HXLINE(1105)				return ::Array_obj< ::String >::__new(0);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1269_listAccounts)
+HXLINE(1269)			if (::hx::IsNull( result )) {
+HXLINE(1269)				return ::Array_obj< ::String >::__new(0);
             			}
             			else {
-HXLINE(1105)				::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
-HXDLIN(1105)				{
+HXLINE(1269)				::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
+HXDLIN(1269)				{
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::iterators::ArrayIterator,result) HXARGC(0)
             					 ::haxe::iterators::ArrayIterator _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1105_listAccounts)
-HXLINE(1105)						return result;
+            						HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1269_listAccounts)
+HXLINE(1269)						return result;
             					}
             					HX_END_LOCAL_FUNC0(return)
 
-HXLINE(1105)					 ::Dynamic x =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1269)					 ::Dynamic x =  ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(result))))->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN(1105)					while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1105)						_g->push( ::Dynamic(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("account_id",6d,df,ad,00),::hx::paccDynamic)));
+HXDLIN(1269)					while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1269)						_g->push( ::Dynamic(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("account_id",6d,df,ad,00),::hx::paccDynamic)));
             					}
             				}
-HXDLIN(1105)				return _g;
+HXDLIN(1269)				return _g;
             			}
-HXDLIN(1105)			return null();
+HXDLIN(1269)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1104_listAccounts)
-HXDLIN(1104)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT account_id FROM accounts",4d,82,81,0c),null()), ::Dynamic(new _hx_Closure_1()),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1268_listAccounts)
+HXDLIN(1268)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT account_id FROM accounts",4d,82,81,0c),null()), ::Dynamic(new _hx_Closure_1()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Sqlite_obj,listAccounts,return )
 
 ::Dynamic Sqlite_obj::storeStreamManagement(::String accountId,::Array< unsigned char > sm,::String sortId){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1113_storeStreamManagement)
-HXDLIN(1113)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1114)		this->smStoreNext = sm;
-HXLINE(1115)		this->smStoreIdNext = sortId;
-HXLINE(1116)		if (!(this->smStoreInProgress)) {
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1277_storeStreamManagement)
+HXDLIN(1277)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1278)		this->smStoreNext = sm;
+HXLINE(1279)		this->smStoreIdNext = sortId;
+HXLINE(1280)		if (!(this->smStoreInProgress)) {
             			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId,::String,sortId,::Array< unsigned char >,sm) HXARGC(1)
             			::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1121_storeStreamManagement)
-HXLINE(1122)				_gthis->smStoreInProgress = false;
-HXLINE(1123)				bool _hx_tmp;
-HXDLIN(1123)				if (::hx::IsPointerEq( _gthis->smStoreNext,sm )) {
-HXLINE(1123)					_hx_tmp = (_gthis->smStoreIdNext != sortId);
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1285_storeStreamManagement)
+HXLINE(1286)				_gthis->smStoreInProgress = false;
+HXLINE(1287)				bool _hx_tmp;
+HXDLIN(1287)				if (::hx::IsPointerEq( _gthis->smStoreNext,sm )) {
+HXLINE(1287)					_hx_tmp = (_gthis->smStoreIdNext != sortId);
             				}
             				else {
-HXLINE(1123)					_hx_tmp = true;
+HXLINE(1287)					_hx_tmp = true;
             				}
-HXDLIN(1123)				if (_hx_tmp) {
-HXLINE(1123)					_gthis->storeStreamManagement(accountId,_gthis->smStoreNext,_gthis->smStoreIdNext);
+HXDLIN(1287)				if (_hx_tmp) {
+HXLINE(1287)					_gthis->storeStreamManagement(accountId,_gthis->smStoreNext,_gthis->smStoreIdNext);
             				}
-HXLINE(1124)				return null();
+HXLINE(1288)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             			::Dynamic _hx_run( ::Dynamic _){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1125_storeStreamManagement)
-HXLINE(1125)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(true);
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1289_storeStreamManagement)
+HXLINE(1289)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(true);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1117)			this->smStoreInProgress = true;
-HXLINE(1118)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("UPDATE accounts SET sm_state=?, sort_id=? WHERE account_id=?",2d,28,1d,d9),::cpp::VirtualArray_obj::__new(3)->init(0,sm)->init(1,sortId)->init(2,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,sortId,sm)),null()), ::Dynamic(new _hx_Closure_1()),null());
+HXLINE(1281)			this->smStoreInProgress = true;
+HXLINE(1282)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("UPDATE accounts SET sm_state=?, sort_id=? WHERE account_id=?",2d,28,1d,d9),::cpp::VirtualArray_obj::__new(3)->init(0,sm)->init(1,sortId)->init(2,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,sortId,sm)),null()), ::Dynamic(new _hx_Closure_1()),null());
             		}
-HXLINE(1129)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(true);
+HXLINE(1293)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(true);
             	}
 
 
@@ -3242,31 +3311,31 @@ HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,storeStreamManagement,return )
 ::Dynamic Sqlite_obj::getStreamManagement(::String accountId){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		 ::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1134_getStreamManagement)
-HXLINE(1135)			while((result->current < result->array->get_length())){
-HXLINE(1135)				 ::Dynamic row = result->array->__get(result->current++);
-HXLINE(1136)				return  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1298_getStreamManagement)
+HXLINE(1299)			while((result->current < result->array->get_length())){
+HXLINE(1299)				 ::Dynamic row = result->array->__get(result->current++);
+HXLINE(1300)				return  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("sm",9a,64,00,00), ::Dynamic(row->__Field(HX_("sm_state",6c,91,3f,e6),::hx::paccDynamic)))
             					->setFixed(1,HX_("sortId",d9,7a,37,30), ::Dynamic(row->__Field(HX_("sort_id",5c,b9,64,00),::hx::paccDynamic))));
             			}
-HXLINE(1139)			return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1303)			return  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("sm",9a,64,00,00),null())
             				->setFixed(1,HX_("sortId",d9,7a,37,30),HX_("a ",9f,54,00,00)));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1134_getStreamManagement)
-HXDLIN(1134)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT sm_state, sort_id FROM accounts  WHERE account_id=?",dc,52,f6,8e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0()),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1298_getStreamManagement)
+HXDLIN(1298)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT sm_state, sort_id FROM accounts  WHERE account_id=?",dc,52,f6,8e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,getStreamManagement,return )
 
 void Sqlite_obj::storeService(::String accountId,::String serviceId,::String name,::String node, ::borogove::Caps caps){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1144_storeService)
-HXLINE(1145)		this->storeCaps(caps);
-HXLINE(1147)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN(1147)		_hx_tmp->exec(HX_("INSERT OR REPLACE INTO services VALUES (?,?,?,?,?)",2c,3a,d9,f8),::cpp::VirtualArray_obj::__new(5)->init(0,accountId)->init(1,serviceId)->init(2,name)->init(3,node)->init(4,caps->verRaw()->hash));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1308_storeService)
+HXLINE(1309)		this->storeCaps(caps);
+HXLINE(1311)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN(1311)		_hx_tmp->exec(HX_("INSERT OR REPLACE INTO services VALUES (?,?,?,?,?)",2c,3a,d9,f8),::cpp::VirtualArray_obj::__new(5)->init(0,accountId)->init(1,serviceId)->init(2,name)->init(3,node)->init(4,caps->verRaw()->hash));
             	}
 
 
@@ -3275,43 +3344,43 @@ HX_DEFINE_DYNAMIC_FUNC5(Sqlite_obj,storeService,(void))
 ::Dynamic Sqlite_obj::findServicesWithFeature(::String accountId,::String feature){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,feature) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1159_findServicesWithFeature)
-HXLINE(1160)			::Array< ::Dynamic> services = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1161)			while((result->current < result->array->get_length())){
-HXLINE(1161)				 ::Dynamic row = result->array->__get(result->current++);
-HXLINE(1162)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
-HXLINE(1163)				::Array< ::String > features;
-HXDLIN(1163)				::Array< ::String > tmp;
-HXDLIN(1163)				if (::hx::IsNotNull( json )) {
-HXLINE(1163)					tmp = ( (::Array< ::String >)(json->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1323_findServicesWithFeature)
+HXLINE(1324)			::Array< ::Dynamic> services = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1325)			while((result->current < result->array->get_length())){
+HXLINE(1325)				 ::Dynamic row = result->array->__get(result->current++);
+HXLINE(1326)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
+HXLINE(1327)				::Array< ::String > features;
+HXDLIN(1327)				::Array< ::String > tmp;
+HXDLIN(1327)				if (::hx::IsNotNull( json )) {
+HXLINE(1327)					tmp = ( (::Array< ::String >)(json->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
             				}
             				else {
-HXLINE(1163)					tmp = null();
+HXLINE(1327)					tmp = null();
             				}
-HXDLIN(1163)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1163)					features = tmp;
+HXDLIN(1327)				if (::hx::IsNotNull( tmp )) {
+HXLINE(1327)					features = tmp;
             				}
             				else {
-HXLINE(1163)					features = ::Array_obj< ::String >::__new(0);
+HXLINE(1327)					features = ::Array_obj< ::String >::__new(0);
             				}
-HXLINE(1164)				if (features->contains(feature)) {
-HXLINE(1166)					::String row1 = ( (::String)(row->__Field(HX_("service_id",e5,24,3d,7d),::hx::paccDynamic)) );
-HXLINE(1167)					::String row2 = ( (::String)(row->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
-HXLINE(1168)					::String row3 = ( (::String)(row->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
-HXLINE(1165)					services->push( ::Dynamic(::hx::Anon_obj::Create(4)
+HXLINE(1328)				if (features->contains(feature)) {
+HXLINE(1330)					::String row1 = ( (::String)(row->__Field(HX_("service_id",e5,24,3d,7d),::hx::paccDynamic)) );
+HXLINE(1331)					::String row2 = ( (::String)(row->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
+HXLINE(1332)					::String row3 = ( (::String)(row->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
+HXLINE(1329)					services->push( ::Dynamic(::hx::Anon_obj::Create(4)
             						->setFixed(0,HX_("serviceId",70,93,d4,bc),row1)
             						->setFixed(1,HX_("caps",21,1c,ba,41),_gthis->hydrateCaps(json,null()))
             						->setFixed(2,HX_("name",4b,72,ff,48),row2)
             						->setFixed(3,HX_("node",02,0a,0a,49),row3)));
             				}
             			}
-HXLINE(1173)			return services;
+HXLINE(1337)			return services;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1154_findServicesWithFeature)
-HXDLIN(1154)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1156)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT service_id, name, node, json(caps.caps) AS caps FROM services INNER JOIN caps ON services.caps=caps.sha1 WHERE account_id=?",fc,fb,5f,40),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,feature)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1318_findServicesWithFeature)
+HXDLIN(1318)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1320)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT service_id, name, node, json(caps.caps) AS caps FROM services INNER JOIN caps ON services.caps=caps.sha1 WHERE account_id=?",fc,fb,5f,40),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,feature)),null());
             	}
 
 
@@ -3320,71 +3389,71 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,findServicesWithFeature,return )
 ::Dynamic Sqlite_obj::hydrateReactions(::String accountId,::Array< ::Dynamic> messages){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,messages) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::ds::StringMap result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1178_hydrateReactions)
-HXLINE(1179)			{
-HXLINE(1179)				::Dynamic map = result;
-HXDLIN(1179)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN(1179)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1179)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1179)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map,key)) );
-HXDLIN(1179)					{
-HXLINE(1180)						 ::borogove::ChatMessage result1 = null();
-HXDLIN(1180)						{
-HXLINE(1180)							int _g = 0;
-HXDLIN(1180)							while((_g < messages->length)){
-HXLINE(1180)								 ::borogove::ChatMessage v = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1180)								_g = (_g + 1);
-HXLINE(1181)								bool m;
-HXDLIN(1181)								::String m1;
-HXDLIN(1181)								if (::hx::IsNull( v->serverId )) {
-HXLINE(1181)									m1 = v->localId;
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1342_hydrateReactions)
+HXLINE(1343)			{
+HXLINE(1343)				::Dynamic map = result;
+HXDLIN(1343)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN(1343)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1343)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1343)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map,key)) );
+HXDLIN(1343)					{
+HXLINE(1344)						 ::borogove::ChatMessage result1 = null();
+HXDLIN(1344)						{
+HXLINE(1344)							int _g = 0;
+HXDLIN(1344)							while((_g < messages->length)){
+HXLINE(1344)								 ::borogove::ChatMessage v = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1344)								_g = (_g + 1);
+HXLINE(1345)								bool m;
+HXDLIN(1345)								::String m1;
+HXDLIN(1345)								if (::hx::IsNull( v->serverId )) {
+HXLINE(1345)									m1 = v->localId;
             								}
             								else {
-HXLINE(1181)									m1 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
+HXLINE(1345)									m1 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
             								}
-HXDLIN(1181)								if ((((m1 + HX_("\n",0a,00,00,00)) + v->chatId()) != key)) {
-HXLINE(1182)									::String m2;
-HXDLIN(1182)									if (::hx::IsNull( v->localId )) {
-HXLINE(1182)										m2 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
+HXDLIN(1345)								if ((((m1 + HX_("\n",0a,00,00,00)) + v->chatId()) != key)) {
+HXLINE(1346)									::String m2;
+HXDLIN(1346)									if (::hx::IsNull( v->localId )) {
+HXLINE(1346)										m2 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
             									}
             									else {
-HXLINE(1182)										m2 = v->localId;
+HXLINE(1346)										m2 = v->localId;
             									}
-HXLINE(1181)									m = (((m2 + HX_("\n",0a,00,00,00)) + v->chatId()) == key);
+HXLINE(1345)									m = (((m2 + HX_("\n",0a,00,00,00)) + v->chatId()) == key);
             								}
             								else {
-HXLINE(1181)									m = true;
+HXLINE(1345)									m = true;
             								}
-HXLINE(1180)								if (m) {
+HXLINE(1344)								if (m) {
 HXLINE(  96)									result1 = v;
-HXLINE(1180)									goto _hx_goto_214;
+HXLINE(1344)									goto _hx_goto_229;
             								}
             							}
-            							_hx_goto_214:;
+            							_hx_goto_229:;
             						}
-HXDLIN(1180)						 ::borogove::ChatMessage m3 = result1;
-HXLINE(1184)						if (::hx::IsNotNull( m3 )) {
-HXLINE(1184)							m3->set_reactions(_g_value);
+HXDLIN(1344)						 ::borogove::ChatMessage m3 = result1;
+HXLINE(1348)						if (::hx::IsNotNull( m3 )) {
+HXLINE(1348)							m3->set_reactions(_g_value);
             						}
             					}
             				}
             			}
-HXLINE(1186)			return messages;
+HXLINE(1350)			return messages;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1178_hydrateReactions)
-HXDLIN(1178)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(messages->length);
-HXDLIN(1178)		{
-HXDLIN(1178)			int _g = 0;
-HXDLIN(1178)			int _g1 = messages->length;
-HXDLIN(1178)			while((_g < _g1)){
-HXDLIN(1178)				_g = (_g + 1);
-HXDLIN(1178)				int i = (_g - 1);
-HXDLIN(1178)				{
-HXDLIN(1178)					 ::borogove::ChatMessage m = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
-HXDLIN(1178)					::String inValue = m->chatId();
-HXDLIN(1178)					result->__unsafe_set(i, ::Dynamic(::hx::Anon_obj::Create(4)
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1342_hydrateReactions)
+HXDLIN(1342)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(messages->length);
+HXDLIN(1342)		{
+HXDLIN(1342)			int _g = 0;
+HXDLIN(1342)			int _g1 = messages->length;
+HXDLIN(1342)			while((_g < _g1)){
+HXDLIN(1342)				_g = (_g + 1);
+HXDLIN(1342)				int i = (_g - 1);
+HXDLIN(1342)				{
+HXDLIN(1342)					 ::borogove::ChatMessage m = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
+HXDLIN(1342)					::String inValue = m->chatId();
+HXDLIN(1342)					result->__unsafe_set(i, ::Dynamic(::hx::Anon_obj::Create(4)
             						->setFixed(0,HX_("chatId",d3,04,77,b7),inValue)
             						->setFixed(1,HX_("serverId",7e,01,b2,e2),m->serverId)
             						->setFixed(2,HX_("localId",26,7a,c6,2d),m->localId)
@@ -3392,7 +3461,7 @@ HXDLIN(1178)					result->__unsafe_set(i, ::Dynamic(::hx::Anon_obj::Create(4)
             				}
             			}
             		}
-HXDLIN(1178)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchReactions(accountId,result), ::Dynamic(new _hx_Closure_0(messages)),null());
+HXDLIN(1342)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchReactions(accountId,result), ::Dynamic(new _hx_Closure_0(messages)),null());
             	}
 
 
@@ -3401,170 +3470,170 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hydrateReactions,return )
 ::Dynamic Sqlite_obj::fetchReactions(::String accountId,::Array< ::Dynamic> ids){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		 ::haxe::ds::StringMap _hx_run( ::haxe::iterators::ArrayIterator rows){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1206_fetchReactions)
-HXLINE(1207)			 ::haxe::ds::StringMap agg =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1208)			while((rows->current < rows->array->get_length())){
-HXLINE(1208)				 ::Dynamic row = rows->array->__get(rows->current++);
-HXLINE(1209)				::cpp::VirtualArray reactions = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) ))->doParse()) );
-HXLINE(1210)				::String mapId;
-HXDLIN(1210)				bool mapId1;
-HXDLIN(1210)				if (::hx::IsNotNull( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) )) {
-HXLINE(1210)					mapId1 = ::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) );
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1370_fetchReactions)
+HXLINE(1371)			 ::haxe::ds::StringMap agg =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1372)			while((rows->current < rows->array->get_length())){
+HXLINE(1372)				 ::Dynamic row = rows->array->__get(rows->current++);
+HXLINE(1373)				::cpp::VirtualArray reactions = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) ))->doParse()) );
+HXLINE(1374)				::String mapId;
+HXDLIN(1374)				bool mapId1;
+HXDLIN(1374)				if (::hx::IsNotNull( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) )) {
+HXLINE(1374)					mapId1 = ::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) );
             				}
             				else {
-HXLINE(1210)					mapId1 = true;
+HXLINE(1374)					mapId1 = true;
             				}
-HXDLIN(1210)				if (mapId1) {
-HXLINE(1210)					mapId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
+HXDLIN(1374)				if (mapId1) {
+HXLINE(1374)					mapId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
             				}
             				else {
-HXLINE(1210)					mapId = ( (::String)(((row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) + HX_("\n",0a,00,00,00)) + row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic))) );
-            				}
-HXDLIN(1210)				::String mapId2 = ( (::String)(((mapId + HX_("\n",0a,00,00,00)) + row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic))) );
-HXLINE(1211)				if (!(agg->exists(mapId2))) {
-HXLINE(1211)					agg->set(mapId2, ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
-            				}
-HXLINE(1212)				 ::haxe::ds::StringMap map = ( ( ::haxe::ds::StringMap)(agg->get(mapId2)) );
-HXLINE(1213)				if (!(map->exists(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) )))) {
-HXLINE(1213)					map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),::cpp::VirtualArray_obj::__new(0));
-            				}
-HXLINE(1214)				if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),1 )) {
-HXLINE(1215)					int _g = 0;
-HXDLIN(1215)					while((_g < reactions->get_length())){
-HXLINE(1215)						 ::Dynamic reaction = reactions->__get(_g);
-HXDLIN(1215)						_g = (_g + 1);
-HXDLIN(1215)						( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) )->push(reaction);
+HXLINE(1374)					mapId = ( (::String)(((row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) + HX_("\n",0a,00,00,00)) + row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic))) );
+            				}
+HXDLIN(1374)				::String mapId2 = ( (::String)(((mapId + HX_("\n",0a,00,00,00)) + row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic))) );
+HXLINE(1375)				if (!(agg->exists(mapId2))) {
+HXLINE(1375)					agg->set(mapId2, ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
+            				}
+HXLINE(1376)				 ::haxe::ds::StringMap map = ( ( ::haxe::ds::StringMap)(agg->get(mapId2)) );
+HXLINE(1377)				if (!(map->exists(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) )))) {
+HXLINE(1377)					map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),::cpp::VirtualArray_obj::__new(0));
+            				}
+HXLINE(1378)				if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),1 )) {
+HXLINE(1379)					int _g = 0;
+HXDLIN(1379)					while((_g < reactions->get_length())){
+HXLINE(1379)						 ::Dynamic reaction = reactions->__get(_g);
+HXDLIN(1379)						_g = (_g + 1);
+HXDLIN(1379)						( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) )->push(reaction);
             					}
             				}
             				else {
-HXLINE(1216)					if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),0 )) {
-HXLINE(1217)						::String k = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
-HXDLIN(1217)						::cpp::VirtualArray _this = ( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) );
-HXDLIN(1217)						::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
-HXDLIN(1217)						{
-HXLINE(1217)							int _g2 = 0;
-HXDLIN(1217)							while((_g2 < _this->get_length())){
-HXLINE(1217)								 ::Dynamic v = _this->__get(_g2);
-HXDLIN(1217)								_g2 = (_g2 + 1);
-HXDLIN(1217)								if (::hx::IsNotNull( v->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
-HXLINE(1217)									_g1->push(v);
+HXLINE(1380)					if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),0 )) {
+HXLINE(1381)						::String k = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
+HXDLIN(1381)						::cpp::VirtualArray _this = ( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) );
+HXDLIN(1381)						::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN(1381)						{
+HXLINE(1381)							int _g2 = 0;
+HXDLIN(1381)							while((_g2 < _this->get_length())){
+HXLINE(1381)								 ::Dynamic v = _this->__get(_g2);
+HXDLIN(1381)								_g2 = (_g2 + 1);
+HXDLIN(1381)								if (::hx::IsNotNull( v->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
+HXLINE(1381)									_g1->push(v);
             								}
             							}
             						}
-HXDLIN(1217)						::cpp::VirtualArray v1 = reactions->concat(_g1);
-HXDLIN(1217)						map->set(k,v1);
+HXDLIN(1381)						::cpp::VirtualArray v1 = reactions->concat(_g1);
+HXDLIN(1381)						map->set(k,v1);
             					}
             					else {
-HXLINE(1218)						if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),2 )) {
-HXLINE(1219)							map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),reactions);
+HXLINE(1382)						if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),2 )) {
+HXLINE(1383)							map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),reactions);
             						}
             					}
             				}
             			}
-HXLINE(1222)			 ::haxe::ds::StringMap result =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1223)			{
-HXLINE(1223)				::Dynamic map1 = agg;
-HXDLIN(1223)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map1);
-HXDLIN(1223)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1223)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1223)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map1,key)) );
-HXDLIN(1223)					{
-HXLINE(1224)						 ::haxe::ds::StringMap map2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1225)						{
-HXLINE(1225)							 ::Dynamic reactionsBySender = _g_value->iterator();
-HXDLIN(1225)							while(( (bool)(reactionsBySender->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1225)								::cpp::VirtualArray reactionsBySender1 = ( (::cpp::VirtualArray)(reactionsBySender->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE(1226)								{
-HXLINE(1226)									int _g3 = 0;
-HXDLIN(1226)									while((_g3 < reactionsBySender1->get_length())){
-HXLINE(1226)										 ::Dynamic reactionD = reactionsBySender1->__get(_g3);
-HXDLIN(1226)										_g3 = (_g3 + 1);
-HXLINE(1227)										 ::borogove::Reaction reaction1;
-HXDLIN(1227)										if (::hx::IsNull( reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
-HXLINE(1227)											reaction1 =  ::borogove::Reaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) ));
+HXLINE(1386)			 ::haxe::ds::StringMap result =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1387)			{
+HXLINE(1387)				::Dynamic map1 = agg;
+HXDLIN(1387)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map1);
+HXDLIN(1387)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1387)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1387)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map1,key)) );
+HXDLIN(1387)					{
+HXLINE(1388)						 ::haxe::ds::StringMap map2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1389)						{
+HXLINE(1389)							 ::Dynamic reactionsBySender = _g_value->iterator();
+HXDLIN(1389)							while(( (bool)(reactionsBySender->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1389)								::cpp::VirtualArray reactionsBySender1 = ( (::cpp::VirtualArray)(reactionsBySender->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE(1390)								{
+HXLINE(1390)									int _g3 = 0;
+HXDLIN(1390)									while((_g3 < reactionsBySender1->get_length())){
+HXLINE(1390)										 ::Dynamic reactionD = reactionsBySender1->__get(_g3);
+HXDLIN(1390)										_g3 = (_g3 + 1);
+HXLINE(1391)										 ::borogove::Reaction reaction1;
+HXDLIN(1391)										if (::hx::IsNull( reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
+HXLINE(1391)											reaction1 =  ::borogove::Reaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) ));
             										}
             										else {
-HXLINE(1227)											reaction1 =  ::borogove::CustomEmojiReaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ));
+HXLINE(1391)											reaction1 =  ::borogove::CustomEmojiReaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ));
             										}
-HXLINE(1233)										if (!(map2->exists(reaction1->key))) {
-HXLINE(1233)											map2->set(reaction1->key,::Array_obj< ::Dynamic>::__new(0));
+HXLINE(1397)										if (!(map2->exists(reaction1->key))) {
+HXLINE(1397)											map2->set(reaction1->key,::Array_obj< ::Dynamic>::__new(0));
             										}
-HXLINE(1234)										( (::Array< ::Dynamic>)(map2->get(reaction1->key)) )->push(reaction1);
+HXLINE(1398)										( (::Array< ::Dynamic>)(map2->get(reaction1->key)) )->push(reaction1);
             									}
             								}
             							}
             						}
-HXLINE(1237)						result->set(key,map2);
+HXLINE(1401)						result->set(key,map2);
             					}
             				}
             			}
-HXLINE(1239)			return result;
+HXLINE(1403)			return result;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1190_fetchReactions)
-HXLINE(1191)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE(1192)		{
-HXLINE(1192)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1192)				q->flush();
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1354_fetchReactions)
+HXLINE(1355)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE(1356)		{
+HXLINE(1356)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1356)				q->flush();
             			}
-HXDLIN(1192)			if (::hx::IsNull( q->b )) {
-HXLINE(1192)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_226,1);
+HXDLIN(1356)			if (::hx::IsNull( q->b )) {
+HXLINE(1356)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_241,1);
             			}
             			else {
-HXLINE(1192)				q->b->push(HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3));
-            			}
-            		}
-HXLINE(1193)		::Array< ::String > params = ::Array_obj< ::String >::__new(0);
-HXLINE(1194)		{
-HXLINE(1194)			int _g = 0;
-HXDLIN(1194)			while((_g < ids->length)){
-HXLINE(1194)				 ::Dynamic item = ids->__get(_g);
-HXDLIN(1194)				_g = (_g + 1);
-HXLINE(1195)				if (::hx::IsNotNull( item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
-HXLINE(1196)					{
-HXLINE(1196)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1196)							q->flush();
+HXLINE(1356)				q->b->push(HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3));
+            			}
+            		}
+HXLINE(1357)		::Array< ::String > params = ::Array_obj< ::String >::__new(0);
+HXLINE(1358)		{
+HXLINE(1358)			int _g = 0;
+HXDLIN(1358)			while((_g < ids->length)){
+HXLINE(1358)				 ::Dynamic item = ids->__get(_g);
+HXDLIN(1358)				_g = (_g + 1);
+HXLINE(1359)				if (::hx::IsNotNull( item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
+HXLINE(1360)					{
+HXLINE(1360)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1360)							q->flush();
             						}
-HXDLIN(1196)						if (::hx::IsNull( q->b )) {
-HXLINE(1196)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_227,1);
+HXDLIN(1360)						if (::hx::IsNull( q->b )) {
+HXLINE(1360)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_242,1);
             						}
             						else {
-HXLINE(1196)							q->b->push(HX_(" OR (mam_id=? AND mam_by=?)",0f,bb,c5,e5));
+HXLINE(1360)							q->b->push(HX_(" OR (mam_id=? AND mam_by=?)",0f,bb,c5,e5));
             						}
             					}
-HXLINE(1197)					params->push( ::Dynamic(item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
-HXLINE(1198)					params->push( ::Dynamic(item->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)));
+HXLINE(1361)					params->push( ::Dynamic(item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
+HXLINE(1362)					params->push( ::Dynamic(item->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)));
             				}
-HXLINE(1200)				if (::hx::IsNotNull( item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic) )) {
-HXLINE(1201)					{
-HXLINE(1201)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1201)							q->flush();
+HXLINE(1364)				if (::hx::IsNotNull( item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic) )) {
+HXLINE(1365)					{
+HXLINE(1365)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1365)							q->flush();
             						}
-HXDLIN(1201)						if (::hx::IsNull( q->b )) {
-HXLINE(1201)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_228,1);
+HXDLIN(1365)						if (::hx::IsNull( q->b )) {
+HXLINE(1365)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_243,1);
             						}
             						else {
-HXLINE(1201)							q->b->push(HX_(" OR stanza_id=?",6a,1d,f2,5b));
+HXLINE(1365)							q->b->push(HX_(" OR stanza_id=?",6a,1d,f2,5b));
             						}
             					}
-HXLINE(1202)					params->push( ::Dynamic(item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
+HXLINE(1366)					params->push( ::Dynamic(item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
             				}
             			}
             		}
-HXLINE(1205)		{
-HXLINE(1205)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE(1205)				q->flush();
+HXLINE(1369)		{
+HXLINE(1369)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE(1369)				q->flush();
             			}
-HXDLIN(1205)			if (::hx::IsNull( q->b )) {
-HXLINE(1205)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_229,1);
+HXDLIN(1369)			if (::hx::IsNull( q->b )) {
+HXLINE(1369)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_244,1);
             			}
             			else {
-HXLINE(1205)				q->b->push(HX_(" ORDER BY created_at, ROWID",00,65,8d,0e));
+HXLINE(1369)				q->b->push(HX_(" ORDER BY created_at, ROWID",00,65,8d,0e));
             			}
             		}
-HXLINE(1206)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN(1206)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE(1370)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN(1370)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
@@ -3573,397 +3642,849 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,fetchReactions,return )
 ::Dynamic Sqlite_obj::hydrateReplyTo(::String accountId,::Array< ::Dynamic> messages,::Array< ::Dynamic> replyTos){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1,::Array< ::Dynamic>,messages, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator iter){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1274_hydrateReplyTo)
-HXLINE(1275)			if (::hx::IsNotNull( iter )) {
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1443_hydrateReplyTo)
+HXLINE(1444)			if (::hx::IsNotNull( iter )) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::iterators::ArrayIterator,iter) HXARGC(0)
             				 ::haxe::iterators::ArrayIterator _hx_run(){
-            					HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1276_hydrateReplyTo)
-HXLINE(1276)					return iter;
+            					HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1445_hydrateReplyTo)
+HXLINE(1445)					return iter;
             				}
             				HX_END_LOCAL_FUNC0(return)
 
-HXLINE(1276)				::Array< ::Dynamic> parents = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1445)				::Array< ::Dynamic> parents = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(iter)))));
-HXLINE(1277)				{
-HXLINE(1277)					int _g = 0;
-HXDLIN(1277)					while((_g < messages->length)){
-HXLINE(1277)						 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1277)						_g = (_g + 1);
-HXLINE(1278)						if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE(1279)							 ::Dynamic result = null();
-HXDLIN(1279)							{
-HXLINE(1279)								int _g1 = 0;
-HXDLIN(1279)								while((_g1 < parents->length)){
-HXLINE(1279)									 ::Dynamic v = parents->__get(_g1);
-HXDLIN(1279)									_g1 = (_g1 + 1);
-HXDLIN(1279)									bool found;
-HXDLIN(1279)									bool found1;
-HXDLIN(1279)									::String v1 = ( (::String)(v->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
-HXDLIN(1279)									if ((v1 == message->chatId())) {
-HXLINE(1279)										if (::hx::IsNotNull( message->replyToMessage->serverId )) {
-HXLINE(1279)											found1 = ::hx::IsEq( v->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),message->replyToMessage->serverId );
+HXLINE(1446)				{
+HXLINE(1446)					int _g = 0;
+HXDLIN(1446)					while((_g < messages->length)){
+HXLINE(1446)						 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1446)						_g = (_g + 1);
+HXLINE(1447)						if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE(1448)							 ::Dynamic result = null();
+HXDLIN(1448)							{
+HXLINE(1448)								int _g1 = 0;
+HXDLIN(1448)								while((_g1 < parents->length)){
+HXLINE(1448)									 ::Dynamic v = parents->__get(_g1);
+HXDLIN(1448)									_g1 = (_g1 + 1);
+HXDLIN(1448)									bool found;
+HXDLIN(1448)									bool found1;
+HXDLIN(1448)									::String v1 = ( (::String)(v->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
+HXDLIN(1448)									if ((v1 == message->chatId())) {
+HXLINE(1448)										if (::hx::IsNotNull( message->replyToMessage->serverId )) {
+HXLINE(1448)											found1 = ::hx::IsEq( v->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),message->replyToMessage->serverId );
             										}
             										else {
-HXLINE(1279)											found1 = true;
+HXLINE(1448)											found1 = true;
             										}
             									}
             									else {
-HXLINE(1279)										found1 = false;
+HXLINE(1448)										found1 = false;
             									}
-HXDLIN(1279)									if (found1) {
-HXLINE(1279)										if (::hx::IsNotNull( message->replyToMessage->localId )) {
-HXLINE(1279)											found = ::hx::IsEq( v->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),message->replyToMessage->localId );
+HXDLIN(1448)									if (found1) {
+HXLINE(1448)										if (::hx::IsNotNull( message->replyToMessage->localId )) {
+HXLINE(1448)											found = ::hx::IsEq( v->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),message->replyToMessage->localId );
             										}
             										else {
-HXLINE(1279)											found = true;
+HXLINE(1448)											found = true;
             										}
             									}
             									else {
-HXLINE(1279)										found = false;
+HXLINE(1448)										found = false;
             									}
-HXDLIN(1279)									if (found) {
-HXLINE(1279)										result = v;
-HXDLIN(1279)										goto _hx_goto_232;
+HXDLIN(1448)									if (found) {
+HXLINE(1448)										result = v;
+HXDLIN(1448)										goto _hx_goto_247;
             									}
             								}
-            								_hx_goto_232:;
+            								_hx_goto_247:;
             							}
-HXDLIN(1279)							 ::Dynamic found2 = result;
-HXLINE(1280)							if (::hx::IsNotNull( found2 )) {
-HXLINE(1280)								message->set_replyToMessage(_gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,found2)))->__get(0).StaticCast<  ::borogove::ChatMessage >());
+HXDLIN(1448)							 ::Dynamic found2 = result;
+HXLINE(1449)							if (::hx::IsNotNull( found2 )) {
+HXLINE(1449)								message->set_replyToMessage(_gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,found2)))->__get(0).StaticCast<  ::borogove::ChatMessage >());
             							}
             						}
             					}
             				}
             			}
-HXLINE(1284)			return messages;
+HXLINE(1453)			return messages;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1243_hydrateReplyTo)
-HXDLIN(1243)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1244)		::Dynamic _hx_tmp;
-HXDLIN(1244)		if ((replyTos->length < 1)) {
-HXLINE(1244)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1407_hydrateReplyTo)
+HXDLIN(1407)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1408)		::Dynamic _hx_tmp;
+HXDLIN(1408)		if ((replyTos->length < 1)) {
+HXLINE(1408)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
             		else {
-HXLINE(1247)			::Array< ::String > mamIds = ::Array_obj< ::String >::__new(0);
-HXLINE(1248)			::Array< ::String > mamIdsS = ::Array_obj< ::String >::__new(0);
-HXLINE(1249)			::Array< ::String > stanzaIds = ::Array_obj< ::String >::__new(0);
-HXLINE(1250)			::Array< ::String > stanzaIdsS = ::Array_obj< ::String >::__new(0);
-HXLINE(1251)			::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
-HXLINE(1253)			{
-HXLINE(1253)				int _g = 0;
-HXDLIN(1253)				while((_g < replyTos->length)){
-HXLINE(1253)					 ::Dynamic parent = replyTos->__get(_g);
-HXDLIN(1253)					_g = (_g + 1);
-HXLINE(1254)					if (::hx::IsNotNull( parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
-HXLINE(1255)						mamIds->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
-HXLINE(1256)						mamIds->push( ::Dynamic(parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
-HXLINE(1257)						mamIdsS->push(HX_("(?,?)",7f,3f,cd,31));
+HXLINE(1411)			::Array< ::String > mamIds = ::Array_obj< ::String >::__new(0);
+HXLINE(1412)			::Array< ::String > mamIdsS = ::Array_obj< ::String >::__new(0);
+HXLINE(1413)			::Array< ::String > stanzaIds = ::Array_obj< ::String >::__new(0);
+HXLINE(1414)			::Array< ::String > stanzaIdsS = ::Array_obj< ::String >::__new(0);
+HXLINE(1415)			::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
+HXLINE(1416)			::String qStart = ((HX_("\n\t\t\t\tSELECT\n\t\t\t\t\t",c5,63,82,76) + ::borogove::persistence::Sqlite_obj::messageColumnsString(::Array_obj< ::Dynamic>::__new(2)->init(0,::borogove::persistence::Sqlite_obj::col(HX_("stanza_id",25,7b,7a,e9),null()))->init(1,::borogove::persistence::Sqlite_obj::col(HX_("chat_id",22,ea,bd,d0),null())))) + HX_("\n\t\t\t\tFROM messages\n\t\t\t\tWHERE account_id=?\n\t\t\t",79,78,98,6f));
+HXLINE(1422)			{
+HXLINE(1422)				int _g = 0;
+HXDLIN(1422)				while((_g < replyTos->length)){
+HXLINE(1422)					 ::Dynamic parent = replyTos->__get(_g);
+HXDLIN(1422)					_g = (_g + 1);
+HXLINE(1423)					if (::hx::IsNotNull( parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
+HXLINE(1424)						mamIds->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
+HXLINE(1425)						mamIds->push( ::Dynamic(parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
+HXLINE(1426)						mamIdsS->push(HX_("(?,?)",7f,3f,cd,31));
             					}
             					else {
-HXLINE(1259)						stanzaIds->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
-HXLINE(1260)						stanzaIds->push( ::Dynamic(parent->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
-HXLINE(1261)						stanzaIdsS->push(HX_("(?,?)",7f,3f,cd,31));
+HXLINE(1428)						stanzaIds->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
+HXLINE(1429)						stanzaIds->push( ::Dynamic(parent->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
+HXLINE(1430)						stanzaIdsS->push(HX_("(?,?)",7f,3f,cd,31));
             					}
             				}
             			}
-HXLINE(1264)			::Array< ::String > q = ::Array_obj< ::String >::__new(0);
-HXLINE(1265)			if ((mamIds->length > 0)) {
-HXLINE(1266)				q->push((((HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sort_id, sync_point FROM messages WHERE account_id=?",4d,a5,ce,57) + HX_(" AND (chat_id, mam_id) IN (",9c,23,d1,7d)) + mamIdsS->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)));
-HXLINE(1267)				params = params->concat(mamIds);
+HXLINE(1433)			::Array< ::String > q = ::Array_obj< ::String >::__new(0);
+HXLINE(1434)			if ((mamIds->length > 0)) {
+HXLINE(1435)				q->push((((qStart + HX_(" AND (chat_id, mam_id) IN (",9c,23,d1,7d)) + mamIdsS->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)));
+HXLINE(1436)				params = params->concat(mamIds);
             			}
-HXLINE(1269)			if ((stanzaIds->length > 0)) {
-HXLINE(1270)				q->push((((HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sort_id, sync_point FROM messages WHERE account_id=?",4d,a5,ce,57) + HX_(" AND (chat_id, stanza_id) IN (",72,6a,27,14)) + stanzaIdsS->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)));
-HXLINE(1271)				params = params->concat(stanzaIds);
+HXLINE(1438)			if ((stanzaIds->length > 0)) {
+HXLINE(1439)				q->push((((qStart + HX_(" AND (chat_id, stanza_id) IN (",72,6a,27,14)) + stanzaIdsS->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)));
+HXLINE(1440)				params = params->concat(stanzaIds);
             			}
-HXLINE(1273)			 ::borogove::persistence::SqliteDriver _hx_tmp1 = this->db;
-HXLINE(1244)			_hx_tmp = _hx_tmp1->exec(q->join(HX_(" UNION ALL ",f0,e4,70,26)),params);
+HXLINE(1442)			 ::borogove::persistence::SqliteDriver _hx_tmp1 = this->db;
+HXLINE(1408)			_hx_tmp = _hx_tmp1->exec(q->join(HX_(" UNION ALL ",f0,e4,70,26)),params);
             		}
-HXDLIN(1244)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_1(messages,_gthis,accountId)),null());
+HXDLIN(1408)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_1(messages,_gthis,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,hydrateReplyTo,return )
 
+ ::borogove::EncryptionInfo Sqlite_obj::hydrateEncryption( ::Dynamic encryption){
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1463_hydrateEncryption)
+HXLINE(1464)		if (::hx::IsNull( encryption )) {
+HXLINE(1464)			return null();
+            		}
+HXLINE(1466)		return  ::borogove::EncryptionInfo_obj::__alloc( HX_CTX ,( (int)(encryption->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic)) ),( (::String)(encryption->__Field(HX_("method",e1,f6,5a,09),::hx::paccDynamic)) ),( (::String)(encryption->__Field(HX_("reason",c4,0f,9d,fc),::hx::paccDynamic)) ),( (::String)(encryption->__Field(HX_("reasonText",91,3a,2d,24),::hx::paccDynamic)) ),( (::String)(encryption->__Field(HX_("methodName",cc,19,0f,12),::hx::paccDynamic)) ));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,hydrateEncryption,return )
+
+::Dynamic Sqlite_obj::hydrateMessagesAndLoadMeta(::String accountId, ::Dynamic rows){
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1496_hydrateMessagesAndLoadMeta)
+HXDLIN(1496)		return this->messagesLoadMeta(accountId,this->hydrateMessages(accountId,rows));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hydrateMessagesAndLoadMeta,return )
+
+::Dynamic Sqlite_obj::messagesLoadMeta(::String accountId,::Array< ::Dynamic> messages){
+            		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,messages, ::borogove::persistence::Sqlite,_gthis,::Array< ::Dynamic>,replyTos,::String,accountId) HXARGC(1)
+            		::Dynamic _hx_run(::Array< ::Dynamic> _){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1511_messagesLoadMeta)
+HXLINE(1511)			return _gthis->hydrateReplyTo(accountId,messages,replyTos);
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
+            		::Dynamic _hx_run(::Array< ::Dynamic> messages){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1512_messagesLoadMeta)
+HXLINE(1512)			return _gthis->hydrateReactions(accountId,messages);
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1499_messagesLoadMeta)
+HXDLIN(1499)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1500)		::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1501)		::Array< ::Dynamic> attachments = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1502)		{
+HXLINE(1502)			int _g = 0;
+HXDLIN(1502)			while((_g < messages->length)){
+HXLINE(1502)				 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1502)				_g = (_g + 1);
+HXLINE(1503)				bool _hx_tmp;
+HXDLIN(1503)				if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE(1503)					_hx_tmp = ::hx::IsNull( message->replyToMessage->stanza );
+            				}
+            				else {
+HXLINE(1503)					_hx_tmp = false;
+            				}
+HXDLIN(1503)				if (_hx_tmp) {
+HXLINE(1504)					::Array< ::Dynamic> replyTos1 = replyTos;
+HXDLIN(1504)					::String _hx_tmp1 = message->chatId();
+HXDLIN(1504)					replyTos1->push( ::Dynamic(::hx::Anon_obj::Create(3)
+            						->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
+            						->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
+            						->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId)));
+            				}
+HXLINE(1506)				{
+HXLINE(1506)					int _g1 = 0;
+HXDLIN(1506)					::Array< ::Dynamic> _g2 = message->attachments;
+HXDLIN(1506)					while((_g1 < _g2->length)){
+HXLINE(1506)						 ::borogove::ChatAttachment attachment = _g2->__get(_g1).StaticCast<  ::borogove::ChatAttachment >();
+HXDLIN(1506)						_g1 = (_g1 + 1);
+HXLINE(1507)						attachments->push(attachment->lookup(::hx::ObjectPtr<OBJ_>(this)));
+            					}
+            				}
+            			}
+            		}
+HXLINE(1510)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(attachments), ::Dynamic(new _hx_Closure_0(messages,_gthis,replyTos,accountId)),null()), ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,messagesLoadMeta,return )
+
 ::Array< ::Dynamic> Sqlite_obj::hydrateMessages(::String accountId, ::Dynamic rows){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1288_hydrateMessages)
-HXLINE(1290)		 ::borogove::JID accountJid = ::borogove::JID_obj::parse(accountId);
-HXLINE(1291)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN(1291)		{
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1535_hydrateMessages)
+HXDLIN(1535)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1537)		 ::borogove::JID accountJid = ::borogove::JID_obj::parse(accountId);
+HXLINE(1538)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(1538)		{
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,rows) HXARGC(0)
             			 ::Dynamic _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1291_hydrateMessages)
-HXLINE(1291)				return rows;
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1538_hydrateMessages)
+HXLINE(1538)				return rows;
             			}
             			HX_END_LOCAL_FUNC0(return)
 
-HXLINE(1291)			 ::Dynamic x =  ::Dynamic(new _hx_Closure_0(rows))();
-HXDLIN(1291)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::borogove::JID,accountJid, ::Dynamic,row) HXARGC(2)
+HXLINE(1538)			 ::Dynamic x =  ::Dynamic(new _hx_Closure_0(rows))();
+HXDLIN(1538)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+            				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_3, ::borogove::JID,accountJid, ::borogove::persistence::Sqlite,_gthis, ::Dynamic,row) HXARGC(2)
             				 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1291_hydrateMessages)
-HXLINE(1292)					builder->syncPoint = ::hx::IsNotEq( row->__Field(HX_("sync_point",2c,6c,7f,80),::hx::paccDynamic),0 );
-HXLINE(1293)					builder->timestamp = ( (::String)(row->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) );
-HXLINE(1294)					builder->type = ( (int)(row->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) );
-HXLINE(1295)					builder->status = ( (int)(row->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic)) );
-HXLINE(1296)					builder->statusText = ( (::String)(row->__Field(HX_("status_text",1a,ac,61,da),::hx::paccDynamic)) );
-HXLINE(1297)					builder->senderId = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
-HXLINE(1298)					::String _hx_tmp;
-HXDLIN(1298)					if (::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
-HXLINE(1298)						_hx_tmp = null();
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1538_hydrateMessages)
+HXLINE(1539)					builder->syncPoint = ::hx::IsNotEq( row->__Field(HX_("sync_point",2c,6c,7f,80),::hx::paccDynamic),0 );
+HXLINE(1540)					builder->timeSent = ( (::String)(row->__Field(HX_("time_sent",0a,0e,25,21),::hx::paccDynamic)) );
+HXLINE(1541)					builder->timeReceived = ( (::String)(row->__Field(HX_("time_received",d3,06,65,79),::hx::paccDynamic)) );
+HXLINE(1542)					builder->type = ( (int)(row->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) );
+HXLINE(1543)					builder->status = ( (int)(row->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic)) );
+HXLINE(1544)					builder->statusText = ( (::String)(row->__Field(HX_("status_text",1a,ac,61,da),::hx::paccDynamic)) );
+HXLINE(1545)					builder->senderId = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
+HXLINE(1546)					::String _hx_tmp;
+HXDLIN(1546)					if (::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
+HXLINE(1546)						_hx_tmp = null();
+            					}
+            					else {
+HXLINE(1546)						_hx_tmp = ( (::String)(row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic)) );
+            					}
+HXDLIN(1546)					builder->serverId = _hx_tmp;
+HXLINE(1547)					::String _hx_tmp1;
+HXDLIN(1547)					if (::hx::IsEq( row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
+HXLINE(1547)						_hx_tmp1 = null();
             					}
             					else {
-HXLINE(1298)						_hx_tmp = ( (::String)(row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic)) );
+HXLINE(1547)						_hx_tmp1 = ( (::String)(row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic)) );
             					}
-HXDLIN(1298)					builder->serverId = _hx_tmp;
-HXLINE(1299)					::String _hx_tmp1;
-HXDLIN(1299)					if (::hx::IsEq( row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
-HXLINE(1299)						_hx_tmp1 = null();
+HXDLIN(1547)					builder->serverIdBy = _hx_tmp1;
+HXLINE(1548)					builder->sortId = ( (::String)(row->__Field(HX_("sort_id",5c,b9,64,00),::hx::paccDynamic)) );
+HXLINE(1549)					 ::Dynamic _hx_tmp2;
+HXDLIN(1549)					if (::hx::IsNull( row->__Field(HX_("debug",53,52,1f,d7),::hx::paccDynamic) )) {
+HXLINE(1549)						_hx_tmp2 = null();
             					}
             					else {
-HXLINE(1299)						_hx_tmp1 = ( (::String)(row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic)) );
+HXLINE(1549)						_hx_tmp2 =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("debug",53,52,1f,d7),::hx::paccDynamic)) ))->doParse();
             					}
-HXDLIN(1299)					builder->serverIdBy = _hx_tmp1;
-HXLINE(1300)					builder->sortId = ( (::String)(row->__Field(HX_("sort_id",5c,b9,64,00),::hx::paccDynamic)) );
-HXLINE(1301)					if (::hx::IsNotEq( builder->direction,row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic) )) {
-HXLINE(1302)						builder->direction = ( (int)(row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic)) );
-HXLINE(1303)						::Array< ::Dynamic> replyTo = builder->replyTo;
-HXLINE(1304)						builder->replyTo = builder->recipients;
-HXLINE(1305)						builder->recipients = replyTo;
+HXDLIN(1549)					builder->debug = _hx_tmp2;
+HXLINE(1550)					if (::hx::IsNotEq( builder->direction,row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic) )) {
+HXLINE(1551)						builder->direction = ( (int)(row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic)) );
+HXLINE(1552)						::Array< ::Dynamic> replyTo = builder->replyTo;
+HXLINE(1553)						builder->replyTo = builder->recipients;
+HXLINE(1554)						builder->recipients = replyTo;
             					}
-HXLINE(1307)					bool _hx_tmp2;
-HXDLIN(1307)					if (::hx::IsNotNull( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic) )) {
-HXLINE(1307)						_hx_tmp2 = ::hx::IsNotEq( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),HX_("",00,00,00,00) );
+HXLINE(1556)					bool _hx_tmp3;
+HXDLIN(1556)					if (::hx::IsNotNull( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic) )) {
+HXLINE(1556)						_hx_tmp3 = ::hx::IsNotEq( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),HX_("",00,00,00,00) );
             					}
             					else {
-HXLINE(1307)						_hx_tmp2 = false;
+HXLINE(1556)						_hx_tmp3 = false;
             					}
-HXDLIN(1307)					if (_hx_tmp2) {
-HXLINE(1307)						builder->localId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
+HXDLIN(1556)					if (_hx_tmp3) {
+HXLINE(1556)						builder->localId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
             					}
-HXLINE(1308)					if (::hx::IsNotNull( row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic) )) {
-HXLINE(1309)						 ::Dynamic versionTimes =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("version_times",1f,50,f9,17),::hx::paccDynamic)) ))->doParse();
-HXLINE(1310)						 ::Dynamic versions =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) ))->doParse();
-HXLINE(1311)						if ((::Reflect_obj::fields(versions)->length > 1)) {
+HXLINE(1557)					if (::hx::IsNotNull( row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic) )) {
+HXLINE(1558)						 ::Dynamic versions =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) ))->doParse();
+HXLINE(1567)						if ((::Reflect_obj::fields(versions)->length > 1)) {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(2)
             							int _hx_run( ::borogove::ChatMessage a, ::borogove::ChatMessage b){
-            								HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1323_hydrateMessages)
-HXLINE(1323)								return ::Reflect_obj::compare(b->timestamp,a->timestamp);
+            								HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1582_hydrateMessages)
+HXLINE(1582)								return ::Reflect_obj::compare(b->timeReceived,a->timeReceived);
             							}
             							HX_END_LOCAL_FUNC2(return)
 
-HXLINE(1312)							{
-HXLINE(1312)								::Array< ::String > _g_keys = ::Reflect_obj::fields(versions);
-HXDLIN(1312)								int _g_index = 0;
-HXDLIN(1312)								while((_g_index < _g_keys->length)){
-HXLINE(1312)									_g_index = (_g_index + 1);
-HXDLIN(1312)									::String key = _g_keys->__get((_g_index - 1));
-HXDLIN(1312)									::String versionId = key;
-HXDLIN(1312)									{
-            										HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,versionTimes,::String,versionId) HXARGC(2)
+HXLINE(1568)							{
+HXLINE(1568)								::Array< ::String > _g_keys = ::Reflect_obj::fields(versions);
+HXDLIN(1568)								int _g_index = 0;
+HXDLIN(1568)								while((_g_index < _g_keys->length)){
+HXLINE(1568)									_g_index = (_g_index + 1);
+HXDLIN(1568)									::String key = _g_keys->__get((_g_index - 1));
+HXDLIN(1568)									::String versionId = key;
+HXDLIN(1568)									 ::Dynamic version = ::Reflect_obj::field(versions,key);
+HXDLIN(1568)									{
+            										HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::String,versionId, ::Dynamic,version) HXARGC(2)
             										 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder toPushB, ::borogove::Stanza _){
-            											HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1313_hydrateMessages)
-HXLINE(1314)											bool versionM;
-HXDLIN(1314)											if (::hx::IsNull( toPushB->serverId )) {
-HXLINE(1314)												versionM = (versionId != toPushB->localId);
+            											HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1569_hydrateMessages)
+HXLINE(1570)											bool versionM;
+HXDLIN(1570)											if (::hx::IsNull( toPushB->serverId )) {
+HXLINE(1570)												versionM = (versionId != toPushB->localId);
             											}
             											else {
-HXLINE(1314)												versionM = false;
+HXLINE(1570)												versionM = false;
             											}
-HXDLIN(1314)											if (versionM) {
-HXLINE(1314)												toPushB->serverId = versionId;
+HXDLIN(1570)											if (versionM) {
+HXLINE(1570)												toPushB->serverId = versionId;
             											}
-HXLINE(1315)											toPushB->timestamp = ( (::String)(::Reflect_obj::field(versionTimes,versionId)) );
-HXLINE(1316)											return toPushB;
+HXLINE(1571)											toPushB->timeSent = ( (::String)(version->__Field(HX_("time_sent",0a,0e,25,21),::hx::paccDynamic)) );
+HXLINE(1572)											toPushB->timeReceived = ( (::String)(version->__Field(HX_("time_received",d3,06,65,79),::hx::paccDynamic)) );
+HXLINE(1573)											toPushB->sortId = ( (::String)(version->__Field(HX_("sort_id",5c,b9,64,00),::hx::paccDynamic)) );
+HXLINE(1574)											toPushB->debug =  ::Dynamic(version->__Field(HX_("debug",53,52,1f,d7),::hx::paccDynamic));
+HXLINE(1575)											return toPushB;
             										}
             										HX_END_LOCAL_FUNC2(return)
 
-HXLINE(1313)										 ::borogove::Stanza versionM = ::borogove::Stanza_obj::parse(( (::String)(::Reflect_obj::field(versions,key)) ));
-HXDLIN(1313)										 ::borogove::ChatMessage versionM1 = ::borogove::ChatMessage_obj::fromStanza(versionM,accountJid, ::Dynamic(new _hx_Closure_1(versionTimes,versionId)));
-HXLINE(1318)										 ::borogove::ChatMessage toPush;
-HXDLIN(1318)										bool toPush1;
-HXDLIN(1318)										if (::hx::IsNotNull( versionM1 )) {
-HXLINE(1318)											toPush1 = (versionM1->versions->length < 1);
+HXLINE(1569)										 ::borogove::Stanza versionM = ::borogove::Stanza_obj::parse(( (::String)(version->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) ));
+HXDLIN(1569)										 ::borogove::JID accountJid1 = accountJid;
+HXDLIN(1569)										 ::borogove::ChatMessage versionM1 = ::borogove::ChatMessage_obj::fromStanza(versionM,accountJid1, ::Dynamic(new _hx_Closure_1(versionId,version)),_gthis->hydrateEncryption(version->__Field(HX_("encryption",83,dc,39,4f),::hx::paccDynamic)));
+HXLINE(1577)										 ::borogove::ChatMessage toPush;
+HXDLIN(1577)										bool toPush1;
+HXDLIN(1577)										if (::hx::IsNotNull( versionM1 )) {
+HXLINE(1577)											toPush1 = (versionM1->versions->length < 1);
             										}
             										else {
-HXLINE(1318)											toPush1 = true;
+HXLINE(1577)											toPush1 = true;
             										}
-HXDLIN(1318)										if (toPush1) {
-HXLINE(1318)											toPush = versionM1;
+HXDLIN(1577)										if (toPush1) {
+HXLINE(1577)											toPush = versionM1;
             										}
             										else {
-HXLINE(1318)											toPush = versionM1->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
+HXLINE(1577)											toPush = versionM1->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
             										}
-HXLINE(1319)										if (::hx::IsNotNull( toPush )) {
-HXLINE(1320)											builder->versions->push(toPush);
+HXLINE(1578)										if (::hx::IsNotNull( toPush )) {
+HXLINE(1579)											builder->versions->push(toPush);
             										}
             									}
             								}
             							}
-HXLINE(1323)							builder->versions->sort( ::Dynamic(new _hx_Closure_2()));
+HXLINE(1582)							builder->versions->sort( ::Dynamic(new _hx_Closure_2()));
             						}
             					}
-HXLINE(1326)					return builder;
+HXLINE(1585)					return builder;
             				}
             				HX_END_LOCAL_FUNC2(return)
 
-HXLINE(1291)				 ::Dynamic row = x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXDLIN(1291)				 ::borogove::Stanza _hx_tmp = ::borogove::Stanza_obj::parse(( (::String)(row->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) ));
-HXDLIN(1291)				_g->push(::borogove::ChatMessage_obj::fromStanza(_hx_tmp,accountJid, ::Dynamic(new _hx_Closure_3(accountJid,row))));
+HXLINE(1538)				 ::Dynamic row = x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN(1538)				 ::borogove::Stanza _hx_tmp = ::borogove::Stanza_obj::parse(( (::String)(row->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) ));
+HXDLIN(1538)				 ::borogove::JID accountJid1 = accountJid;
+HXLINE(1586)				 ::borogove::persistence::Sqlite _gthis1 = _gthis;
+HXDLIN(1586)				 ::Dynamic _hx_tmp1;
+HXDLIN(1586)				if (::hx::IsNull( row->__Field(HX_("encryption",83,dc,39,4f),::hx::paccDynamic) )) {
+HXLINE(1586)					_hx_tmp1 = null();
+            				}
+            				else {
+HXLINE(1586)					_hx_tmp1 =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("encryption",83,dc,39,4f),::hx::paccDynamic)) ))->doParse();
+            				}
+HXLINE(1538)				_g->push(::borogove::ChatMessage_obj::fromStanza(_hx_tmp,accountJid1, ::Dynamic(new _hx_Closure_3(accountJid,_gthis,row)),_gthis1->hydrateEncryption(_hx_tmp1)));
             			}
             		}
-HXDLIN(1291)		return _g;
+HXDLIN(1538)		return _g;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hydrateMessages,return )
 
  ::borogove::Caps Sqlite_obj::hydrateCaps( ::Dynamic o,::Array< unsigned char > ver){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1331_hydrateCaps)
-HXLINE(1332)		::String o1 = ( (::String)(o->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
-HXLINE(1333)		::Array< ::Dynamic> _this;
-HXDLIN(1333)		::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(o->__Field(HX_("identities",1c,c5,6d,d7),::hx::paccDynamic)) );
-HXDLIN(1333)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1333)			_this = tmp;
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1590_hydrateCaps)
+HXLINE(1591)		::String o1 = ( (::String)(o->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
+HXLINE(1592)		::Array< ::Dynamic> _this;
+HXDLIN(1592)		::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(o->__Field(HX_("identities",1c,c5,6d,d7),::hx::paccDynamic)) );
+HXDLIN(1592)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1592)			_this = tmp;
             		}
             		else {
-HXLINE(1333)			_this = ::Array_obj< ::Dynamic>::__new(0);
-            		}
-HXDLIN(1333)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN(1333)		{
-HXLINE(1333)			int _g = 0;
-HXDLIN(1333)			int _g1 = _this->length;
-HXDLIN(1333)			while((_g < _g1)){
-HXLINE(1333)				_g = (_g + 1);
-HXDLIN(1333)				int i = (_g - 1);
-HXDLIN(1333)				{
-HXLINE(1333)					 ::Dynamic i1 = _hx_array_unsafe_get(_this,i);
-HXDLIN(1333)					result->__unsafe_set(i, ::borogove::Identity_obj::__alloc( HX_CTX ,( (::String)(i1->__Field(HX_("category",fe,2a,6c,ad),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) ),null()));
+HXLINE(1592)			_this = ::Array_obj< ::Dynamic>::__new(0);
+            		}
+HXDLIN(1592)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN(1592)		{
+HXLINE(1592)			int _g = 0;
+HXDLIN(1592)			int _g1 = _this->length;
+HXDLIN(1592)			while((_g < _g1)){
+HXLINE(1592)				_g = (_g + 1);
+HXDLIN(1592)				int i = (_g - 1);
+HXDLIN(1592)				{
+HXLINE(1592)					 ::Dynamic i1 = _hx_array_unsafe_get(_this,i);
+HXDLIN(1592)					result->__unsafe_set(i, ::borogove::Identity_obj::__alloc( HX_CTX ,( (::String)(i1->__Field(HX_("category",fe,2a,6c,ad),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) ),null()));
             				}
             			}
             		}
-HXLINE(1334)		::Array< ::String > _hx_tmp;
-HXDLIN(1334)		::Array< ::String > tmp1 = ( (::Array< ::String >)(o->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
-HXDLIN(1334)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1334)			_hx_tmp = tmp1;
+HXLINE(1593)		::Array< ::String > _hx_tmp;
+HXDLIN(1593)		::Array< ::String > tmp1 = ( (::Array< ::String >)(o->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
+HXDLIN(1593)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1593)			_hx_tmp = tmp1;
             		}
             		else {
-HXLINE(1334)			_hx_tmp = ::Array_obj< ::String >::__new(0);
+HXLINE(1593)			_hx_tmp = ::Array_obj< ::String >::__new(0);
             		}
-HXLINE(1335)		::Array< ::String > _this1;
-HXDLIN(1335)		::Array< ::String > tmp2 = ( (::Array< ::String >)(o->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) );
-HXDLIN(1335)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1335)			_this1 = tmp2;
+HXLINE(1594)		::Array< ::String > _this1;
+HXDLIN(1594)		::Array< ::String > tmp2 = ( (::Array< ::String >)(o->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) );
+HXDLIN(1594)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1594)			_this1 = tmp2;
             		}
             		else {
-HXLINE(1335)			_this1 = ::Array_obj< ::String >::__new(0);
-            		}
-HXDLIN(1335)		::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this1->length);
-HXDLIN(1335)		{
-HXLINE(1335)			int _g2 = 0;
-HXDLIN(1335)			int _g3 = _this1->length;
-HXDLIN(1335)			while((_g2 < _g3)){
-HXLINE(1335)				_g2 = (_g2 + 1);
-HXDLIN(1335)				int i2 = (_g2 - 1);
-HXDLIN(1335)				{
-HXLINE(1335)					 ::borogove::Stanza inValue = ::borogove::Stanza_obj::parse(( (::String)(_hx_array_unsafe_get(_this1,i2)) ));
-HXDLIN(1335)					result1->__unsafe_set(i2,inValue);
+HXLINE(1594)			_this1 = ::Array_obj< ::String >::__new(0);
+            		}
+HXDLIN(1594)		::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this1->length);
+HXDLIN(1594)		{
+HXLINE(1594)			int _g2 = 0;
+HXDLIN(1594)			int _g3 = _this1->length;
+HXDLIN(1594)			while((_g2 < _g3)){
+HXLINE(1594)				_g2 = (_g2 + 1);
+HXDLIN(1594)				int i2 = (_g2 - 1);
+HXDLIN(1594)				{
+HXLINE(1594)					 ::borogove::Stanza inValue = ::borogove::Stanza_obj::parse(( (::String)(_hx_array_unsafe_get(_this1,i2)) ));
+HXDLIN(1594)					result1->__unsafe_set(i2,inValue);
             				}
             			}
             		}
-HXLINE(1331)		return  ::borogove::Caps_obj::__alloc( HX_CTX ,o1,result,_hx_tmp,result1,ver);
+HXLINE(1590)		return  ::borogove::Caps_obj::__alloc( HX_CTX ,o1,result,_hx_tmp,result1,ver);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hydrateCaps,return )
 
+::Dynamic Sqlite_obj::insertMessages(::String accountId,::Array< ::Dynamic> messages){
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1902_insertMessages)
+HXLINE(1902)			::String tmp = m->callSid();
+HXDLIN(1902)			::String tmp1;
+HXDLIN(1902)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1902)				tmp1 = tmp;
+            			}
+            			else {
+HXLINE(1902)				tmp1 = m->localId;
+            			}
+HXDLIN(1902)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1902)				return tmp1;
+            			}
+            			else {
+HXLINE(1902)				return m->serverId;
+            			}
+HXDLIN(1902)			return null();
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1904_insertMessages)
+HXLINE(1904)			return m->chatId();
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1911_insertMessages)
+HXLINE(1911)			return ::borogove::persistence::Sqlite_obj::originalMessage(m)->asStanza()->toString();
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1914_insertMessages)
+HXLINE(1914)			if (::hx::IsNull( ::borogove::persistence::Sqlite_obj::originalMessage(m)->debug )) {
+HXLINE(1914)				return null();
+            			}
+            			else {
+HXLINE(1914)				 ::Dynamic replacer = null();
+HXDLIN(1914)				::String space = null();
+HXDLIN(1914)				return ::haxe::format::JsonPrinter_obj::print(::borogove::persistence::Sqlite_obj::originalMessage(m)->debug,replacer,space);
+            			}
+HXDLIN(1914)			return null();
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1915_insertMessages)
+HXLINE(1916)			 ::borogove::ChatMessage message = ::borogove::persistence::Sqlite_obj::originalMessage(m);
+HXLINE(1917)			if (::hx::IsNull( message->encryption )) {
+HXLINE(1917)				return null();
+            			}
+            			else {
+HXLINE(1917)				return ::borogove::JsonPrinter_obj::print(message->encryption,null(),null());
+            			}
+HXDLIN(1917)			return null();
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_5,::String,accountId) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage _){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1898_insertMessages)
+HXLINE(1898)			return accountId;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_6) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1899_insertMessages)
+HXLINE(1899)			::String tmp = ::borogove::persistence::Sqlite_obj::originalMessage(m)->serverId;
+HXDLIN(1899)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1899)				return tmp;
+            			}
+            			else {
+HXLINE(1899)				return HX_("",00,00,00,00);
+            			}
+HXDLIN(1899)			return null();
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_7) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1900_insertMessages)
+HXLINE(1900)			::String tmp = ::borogove::persistence::Sqlite_obj::originalMessage(m)->serverIdBy;
+HXDLIN(1900)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1900)				return tmp;
+            			}
+            			else {
+HXLINE(1900)				return HX_("",00,00,00,00);
+            			}
+HXDLIN(1900)			return null();
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_8) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1901_insertMessages)
+HXLINE(1901)			::String tmp = ::borogove::persistence::Sqlite_obj::originalMessage(m)->localId;
+HXDLIN(1901)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1901)				return tmp;
+            			}
+            			else {
+HXLINE(1901)				return HX_("",00,00,00,00);
+            			}
+HXDLIN(1901)			return null();
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_9) HXARGC(1)
+            		bool _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1903_insertMessages)
+HXLINE(1903)			return m->syncPoint;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_10) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1905_insertMessages)
+HXLINE(1905)			return m->senderId;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_11) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1906_insertMessages)
+HXLINE(1906)			return ::borogove::persistence::Sqlite_obj::originalMessage(m)->timeSent;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_12) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1907_insertMessages)
+HXLINE(1907)			return ::borogove::persistence::Sqlite_obj::originalMessage(m)->timeReceived;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_13) HXARGC(1)
+            		int _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1908_insertMessages)
+HXLINE(1908)			return ::borogove::persistence::Sqlite_obj::originalMessage(m)->status;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_14) HXARGC(1)
+            		int _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1909_insertMessages)
+HXLINE(1909)			return ::borogove::persistence::Sqlite_obj::originalMessage(m)->direction;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_15) HXARGC(1)
+            		int _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1910_insertMessages)
+HXLINE(1910)			return ::borogove::persistence::Sqlite_obj::originalMessage(m)->type;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_16) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1912_insertMessages)
+HXLINE(1912)			return ::borogove::persistence::Sqlite_obj::originalMessage(m)->statusText;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_17) HXARGC(1)
+            		::String _hx_run( ::borogove::ChatMessage m){
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1913_insertMessages)
+HXLINE(1913)			return ::borogove::persistence::Sqlite_obj::originalMessage(m)->sortId;
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1896_insertMessages)
+HXLINE(1902)		 ::Dynamic columns = ::borogove::persistence::Sqlite_obj::insertCol(HX_("correction_id",1c,c5,11,dd), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE(1904)		 ::Dynamic columns1 = ::borogove::persistence::Sqlite_obj::insertCol(HX_("chat_id",22,ea,bd,d0), ::Dynamic(new _hx_Closure_1()),null());
+HXLINE(1911)		 ::Dynamic columns2 = ::borogove::persistence::Sqlite_obj::insertCol(HX_("stanza",f5,5d,f7,05), ::Dynamic(new _hx_Closure_2()),null());
+HXLINE(1914)		 ::Dynamic columns3 = ::borogove::persistence::Sqlite_obj::insertCol(HX_("debug",53,52,1f,d7), ::Dynamic(new _hx_Closure_3()),HX_("jsonb(?)",38,f0,9d,55));
+HXLINE(1915)		 ::Dynamic columns4 = ::borogove::persistence::Sqlite_obj::insertCol(HX_("encryption",83,dc,39,4f), ::Dynamic(new _hx_Closure_4()),HX_("jsonb(?)",38,f0,9d,55));
+HXLINE(1897)		::Array< ::Dynamic> columns5 = ::Array_obj< ::Dynamic>::__new(18)->init(0,::borogove::persistence::Sqlite_obj::insertCol(HX_("account_id",6d,df,ad,00), ::Dynamic(new _hx_Closure_5(accountId)),null()))->init(1,::borogove::persistence::Sqlite_obj::insertCol(HX_("mam_id",01,4d,19,b7), ::Dynamic(new _hx_Closure_6()),null()))->init(2,::borogove::persistence::Sqlite_obj::insertCol(HX_("mam_by",fd,46,19,b7), ::Dynamic(new _hx_Closure_7()),null()))->init(3,::borogove::persistence::Sqlite_obj::insertCol(HX_("stanza_id",25,7b,7a,e9), ::Dynamic(new _hx_Closure_8()),null()))->init(4,columns)->init(5,::borogove::persistence::Sqlite_obj::insertCol(HX_("sync_point",2c,6c,7f,80), ::Dynamic(new _hx_Closure_9()),null()))->init(6,columns1)->init(7,::borogove::persistence::Sqlite_obj::insertCol(HX_("sender_id",65,a9,5d,a0), ::Dynamic(new _hx_Closure_10()),null()))->init(8,::borogove::persistence::Sqlite_obj::insertCol(HX_("time_sent",0a,0e,25,21), ::Dynamic(new _hx_Closure_11()),HX_("CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER)",17,de,5d,f8)))->init(9,::borogove::persistence::Sqlite_obj::insertCol(HX_("time_received",d3,06,65,79), ::Dynamic(new _hx_Closure_12()),HX_("CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER)",17,de,5d,f8)))->init(10,::borogove::persistence::Sqlite_obj::insertCol(HX_("status",32,e7,fb,05), ::Dynamic(new _hx_Closure_13()),null()))->init(11,::borogove::persistence::Sqlite_obj::insertCol(HX_("direction",3f,62,40,10), ::Dynamic(new _hx_Closure_14()),null()))->init(12,::borogove::persistence::Sqlite_obj::insertCol(HX_("type",ba,f2,08,4d), ::Dynamic(new _hx_Closure_15()),null()))->init(13,columns2)->init(14,::borogove::persistence::Sqlite_obj::insertCol(HX_("status_text",1a,ac,61,da), ::Dynamic(new _hx_Closure_16()),null()))->init(15,::borogove::persistence::Sqlite_obj::insertCol(HX_("sort_id",5c,b9,64,00), ::Dynamic(new _hx_Closure_17()),null()))->init(16,columns3)->init(17,columns4);
+HXLINE(1920)		::Array< ::String > result = ::Array_obj< ::String >::__new(messages->length);
+HXDLIN(1920)		{
+HXLINE(1920)			int _g = 0;
+HXDLIN(1920)			int _g1 = messages->length;
+HXDLIN(1920)			while((_g < _g1)){
+HXLINE(1920)				_g = (_g + 1);
+HXDLIN(1920)				int i = (_g - 1);
+HXDLIN(1920)				{
+HXLINE(1920)					_hx_array_unsafe_get(messages,i);
+HXDLIN(1920)					::Array< ::String > result1 = ::Array_obj< ::String >::__new(columns5->length);
+HXDLIN(1920)					{
+HXLINE(1920)						int _g2 = 0;
+HXDLIN(1920)						int _g3 = columns5->length;
+HXDLIN(1920)						while((_g2 < _g3)){
+HXLINE(1920)							_g2 = (_g2 + 1);
+HXDLIN(1920)							int i1 = (_g2 - 1);
+HXDLIN(1920)							{
+HXLINE(1920)								::String inValue = ( (::String)(_hx_array_unsafe_get(columns5,i1)->__Field(HX_("valueSql",1d,5b,51,ee),::hx::paccDynamic)) );
+HXDLIN(1920)								result1->__unsafe_set(i1,inValue);
+            							}
+            						}
+            					}
+HXDLIN(1920)					::String inValue1 = ((HX_("(",28,00,00,00) + result1->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00));
+HXDLIN(1920)					result->__unsafe_set(i,inValue1);
+            				}
+            			}
+            		}
+HXDLIN(1920)		::String values = result->join(HX_(",",2c,00,00,00));
+HXLINE(1922)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXLINE(1924)		::Array< ::String > result2 = ::Array_obj< ::String >::__new(columns5->length);
+HXDLIN(1924)		{
+HXLINE(1924)			int _g4 = 0;
+HXDLIN(1924)			int _g5 = columns5->length;
+HXDLIN(1924)			while((_g4 < _g5)){
+HXLINE(1924)				_g4 = (_g4 + 1);
+HXDLIN(1924)				int i2 = (_g4 - 1);
+HXDLIN(1924)				{
+HXLINE(1924)					::String inValue2 = ( (::String)(_hx_array_unsafe_get(columns5,i2)->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
+HXDLIN(1924)					result2->__unsafe_set(i2,inValue2);
+            				}
+            			}
+            		}
+HXDLIN(1924)		::String _hx_tmp1 = (((HX_("INSERT OR REPLACE INTO messages (",d2,20,89,b3) + result2->join(HX_(", ",74,26,00,00))) + HX_(") VALUES ",07,4b,38,df)) + values);
+HXLINE(1925)		::Array< ::Dynamic> _g6 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(1925)		{
+HXLINE(1925)			int _g_current = 0;
+HXDLIN(1925)			while((_g_current < messages->length)){
+HXLINE(1925)				_g_current = (_g_current + 1);
+HXDLIN(1925)				 ::borogove::ChatMessage x = messages->__get((_g_current - 1)).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1925)				::cpp::VirtualArray result3 = ::cpp::VirtualArray_obj::__new(columns5->length);
+HXDLIN(1925)				{
+HXLINE(1925)					int _g7 = 0;
+HXDLIN(1925)					int _g8 = columns5->length;
+HXDLIN(1925)					while((_g7 < _g8)){
+HXLINE(1925)						_g7 = (_g7 + 1);
+HXDLIN(1925)						int i3 = (_g7 - 1);
+HXDLIN(1925)						{
+HXLINE(1925)							 ::Dynamic inValue3 = _hx_array_unsafe_get(columns5,i3)->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)(x);
+HXDLIN(1925)							result3->__unsafe_set(i3,inValue3);
+            						}
+            					}
+            				}
+HXDLIN(1925)				_g6->push(result3);
+            			}
+            		}
+HXDLIN(1925)		::cpp::VirtualArray _g9 = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN(1925)		{
+HXLINE(1925)			 ::Dynamic e = _g6->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN(1925)			while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1925)				 ::Dynamic x1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN(1925)				while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1925)					_g9->push(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            				}
+            			}
+            		}
+HXLINE(1922)		return _hx_tmp->exec(_hx_tmp1,_g9);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,insertMessages,return )
+
 ::String Sqlite_obj::prepare( ::Dynamic q){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,q) HXARGC(1)
             		::String _hx_run( ::EReg f){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_41_prepare)
-HXLINE(  42)			::cpp::VirtualArray tmp = ( (::cpp::VirtualArray)(q->__Field(HX_("params",46,fb,7a,ed),::hx::paccDynamic)) );
-HXDLIN(  42)			::cpp::VirtualArray p;
-HXDLIN(  42)			if (::hx::IsNotNull( tmp )) {
-HXLINE(  42)				p = tmp;
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_49_prepare)
+HXLINE(  50)			::cpp::VirtualArray tmp = ( (::cpp::VirtualArray)(q->__Field(HX_("params",46,fb,7a,ed),::hx::paccDynamic)) );
+HXDLIN(  50)			::cpp::VirtualArray p;
+HXDLIN(  50)			if (::hx::IsNotNull( tmp )) {
+HXLINE(  50)				p = tmp;
             			}
             			else {
-HXLINE(  42)				p = ::cpp::VirtualArray_obj::__new(0);
+HXLINE(  50)				p = ::cpp::VirtualArray_obj::__new(0);
             			}
-HXDLIN(  42)			 ::Dynamic p1 = p->shift();
-HXLINE(  43)			 ::ValueType _g = ::Type_obj::_hx_typeof(p1);
-HXDLIN(  43)			switch((int)(_g->_hx_getIndex())){
+HXDLIN(  50)			 ::Dynamic p1 = p->shift();
+HXLINE(  51)			 ::ValueType _g = ::Type_obj::_hx_typeof(p1);
+HXDLIN(  51)			switch((int)(_g->_hx_getIndex())){
             				case (int)0: {
-HXLINE(  61)					return HX_("NULL",87,66,cf,33);
+HXLINE(  69)					return HX_("NULL",87,66,cf,33);
             				}
             				break;
             				case (int)1: {
-HXLINE(  59)					return ::Std_obj::string(p1);
+HXLINE(  67)					return ::Std_obj::string(p1);
             				}
             				break;
             				case (int)2: {
-HXLINE(  57)					return ::Std_obj::string(p1);
+HXLINE(  65)					return ::Std_obj::string(p1);
             				}
             				break;
             				case (int)3: {
-HXLINE(  55)					if (::hx::IsEq( p1,true )) {
-HXLINE(  55)						return HX_("1",31,00,00,00);
+HXLINE(  63)					if (::hx::IsEq( p1,true )) {
+HXLINE(  63)						return HX_("1",31,00,00,00);
             					}
             					else {
-HXLINE(  55)						return HX_("0",30,00,00,00);
+HXLINE(  63)						return HX_("0",30,00,00,00);
             					}
             				}
             				break;
             				case (int)6: {
-HXLINE(  65)					::hx::Class _hx_switch_0 = _g->_hx_getObject(0).StaticCast< ::hx::Class >();
+HXLINE(  73)					::hx::Class _hx_switch_0 = _g->_hx_getObject(0).StaticCast< ::hx::Class >();
             					if (  (_hx_switch_0==::hx::ArrayBase::__mClass) ){
-HXLINE(  64)						return ((HX_("X'",cf,4c,00,00) + ::haxe::io::Bytes_obj::ofData(( (::Array< unsigned char >)(p1) ))->toHex()) + HX_("'",27,00,00,00));
-HXDLIN(  64)						goto _hx_goto_246;
+HXLINE(  72)						return ((HX_("X'",cf,4c,00,00) + ::haxe::io::Bytes_obj::ofData(( (::Array< unsigned char >)(p1) ))->toHex()) + HX_("'",27,00,00,00));
+HXDLIN(  72)						goto _hx_goto_294;
             					}
             					if (  (_hx_switch_0==::hx::ClassOf< ::String >()) ){
-HXLINE(  45)						if (::hx::IsGreaterEq( p1->__Field(HX_("indexOf",c9,48,bf,e0),::hx::paccDynamic)(HX_("\x00""",00,00,00,00)),0 )) {
-HXLINE(  46)							::Array< ::String > hexChars = ::Array_obj< ::String >::__new();
-HXLINE(  47)							{
-HXLINE(  47)								int _g1 = 0;
-HXDLIN(  47)								int _g2 = ( (int)(p1->__Field(HX_("length",e6,94,07,9f),::hx::paccDynamic)) );
-HXDLIN(  47)								while((_g1 < _g2)){
-HXLINE(  47)									_g1 = (_g1 + 1);
-HXLINE(  48)									hexChars->push(::StringTools_obj::hex(( (::String)(p1) ).cca((_g1 - 1)),2));
+HXLINE(  53)						if (::hx::IsGreaterEq( p1->__Field(HX_("indexOf",c9,48,bf,e0),::hx::paccDynamic)(HX_("\x00""",00,00,00,00)),0 )) {
+HXLINE(  54)							::Array< ::String > hexChars = ::Array_obj< ::String >::__new();
+HXLINE(  55)							{
+HXLINE(  55)								int _g1 = 0;
+HXDLIN(  55)								int _g2 = ( (int)(p1->__Field(HX_("length",e6,94,07,9f),::hx::paccDynamic)) );
+HXDLIN(  55)								while((_g1 < _g2)){
+HXLINE(  55)									_g1 = (_g1 + 1);
+HXLINE(  56)									hexChars->push(::StringTools_obj::hex(( (::String)(p1) ).cca((_g1 - 1)),2));
             								}
             							}
-HXLINE(  50)							return ((HX_("x'",af,68,00,00) + hexChars->join(HX_("",00,00,00,00))) + HX_("'",27,00,00,00));
+HXLINE(  58)							return ((HX_("x'",af,68,00,00) + hexChars->join(HX_("",00,00,00,00))) + HX_("'",27,00,00,00));
             						}
             						else {
-HXLINE(  52)							return ((HX_("'",27,00,00,00) + ::Std_obj::string(p1->__Field(HX_("split",da,ea,6e,81),::hx::paccDynamic)(HX_("'",27,00,00,00))->__Field(HX_("join",ea,33,65,46),::hx::paccDynamic)(HX_("''",20,22,00,00)))) + HX_("'",27,00,00,00));
+HXLINE(  60)							return ((HX_("'",27,00,00,00) + ::Std_obj::string(p1->__Field(HX_("split",da,ea,6e,81),::hx::paccDynamic)(HX_("'",27,00,00,00))->__Field(HX_("join",ea,33,65,46),::hx::paccDynamic)(HX_("''",20,22,00,00)))) + HX_("'",27,00,00,00));
             						}
-HXLINE(  45)						goto _hx_goto_246;
+HXLINE(  53)						goto _hx_goto_294;
             					}
             					if (  (_hx_switch_0==::hx::ClassOf< ::haxe::io::Bytes >()) ){
-HXLINE(  66)						return ((HX_("X'",cf,4c,00,00) + ::Std_obj::string(p1->__Field(HX_("toHex",20,f4,10,14),::hx::paccDynamic)())) + HX_("'",27,00,00,00));
-HXDLIN(  66)						goto _hx_goto_246;
+HXLINE(  74)						return ((HX_("X'",cf,4c,00,00) + ::Std_obj::string(p1->__Field(HX_("toHex",20,f4,10,14),::hx::paccDynamic)())) + HX_("'",27,00,00,00));
+HXDLIN(  74)						goto _hx_goto_294;
             					}
             					/* default */{
-HXLINE(  68)						HX_STACK_DO_THROW((HX_("UNKNOWN: ",90,58,8b,8c) + ::Std_obj::string(::Type_obj::_hx_typeof(p1))));
+HXLINE(  76)						HX_STACK_DO_THROW((HX_("UNKNOWN: ",90,58,8b,8c) + ::Std_obj::string(::Type_obj::_hx_typeof(p1))));
             					}
-            					_hx_goto_246:;
+            					_hx_goto_294:;
             				}
             				break;
             				default:{
-HXLINE(  68)					HX_STACK_DO_THROW((HX_("UNKNOWN: ",90,58,8b,8c) + ::Std_obj::string(::Type_obj::_hx_typeof(p1))));
+HXLINE(  76)					HX_STACK_DO_THROW((HX_("UNKNOWN: ",90,58,8b,8c) + ::Std_obj::string(::Type_obj::_hx_typeof(p1))));
             				}
             			}
-HXLINE(  43)			return null();
+HXLINE(  51)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_41_prepare)
-HXDLIN(  41)		return  ::EReg_obj::__alloc( HX_CTX ,HX_("\\?",63,50,00,00),HX_("gm",26,5a,00,00))->map(( (::String)(q->__Field(HX_("sql",0e,a6,57,00),::hx::paccDynamic)) ), ::Dynamic(new _hx_Closure_0(q)));
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_49_prepare)
+HXDLIN(  49)		return  ::EReg_obj::__alloc( HX_CTX ,HX_("\\?",63,50,00,00),HX_("gm",26,5a,00,00))->map(( (::String)(q->__Field(HX_("sql",0e,a6,57,00),::hx::paccDynamic)) ), ::Dynamic(new _hx_Closure_0(q)));
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,prepare,return )
 
+ ::Dynamic Sqlite_obj::col(::String name,::String sql){
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1819_col)
+HXDLIN(1819)		::String _hx_tmp;
+HXDLIN(1819)		if (::hx::IsNotNull( sql )) {
+HXDLIN(1819)			_hx_tmp = sql;
+            		}
+            		else {
+HXDLIN(1819)			_hx_tmp = name;
+            		}
+HXDLIN(1819)		return  ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("sql",0e,a6,57,00),_hx_tmp)
+            			->setFixed(1,HX_("name",4b,72,ff,48),name));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,col,return )
+
+::String Sqlite_obj::messageColumnsString(::Array< ::Dynamic> customColumns){
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1823_messageColumnsString)
+HXDLIN(1823)		return ::borogove::persistence::Sqlite_obj::messageColumns(customColumns)->join(HX_(", ",74,26,00,00));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,messageColumnsString,return )
+
+::Array< ::String > Sqlite_obj::messageColumns(::Array< ::Dynamic> customColumns){
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1827_messageColumns)
+HXLINE(1843)		::Array< ::Dynamic> it;
+HXDLIN(1843)		if (::hx::IsNotNull( customColumns )) {
+HXLINE(1843)			it = customColumns;
+            		}
+            		else {
+HXLINE(1843)			it = ::Array_obj< ::Dynamic>::__new(0);
+            		}
+HXLINE(1827)		::Array< ::Dynamic> it1 = ::Array_obj< ::Dynamic>::__new(14)->init(0,::borogove::persistence::Sqlite_obj::col(HX_("stanza",f5,5d,f7,05),null()))->init(1,::borogove::persistence::Sqlite_obj::col(HX_("direction",3f,62,40,10),null()))->init(2,::borogove::persistence::Sqlite_obj::col(HX_("type",ba,f2,08,4d),null()))->init(3,::borogove::persistence::Sqlite_obj::col(HX_("status",32,e7,fb,05),null()))->init(4,::borogove::persistence::Sqlite_obj::col(HX_("status_text",1a,ac,61,da),null()))->init(5,::borogove::persistence::Sqlite_obj::col(HX_("time_sent",0a,0e,25,21),HX_("strftime('%FT%H:%M:%fZ', time_sent / 1000.0, 'unixepoch') AS time_sent",f5,bb,e6,08)))->init(6,::borogove::persistence::Sqlite_obj::col(HX_("time_received",d3,06,65,79),HX_("strftime('%FT%H:%M:%fZ', time_received / 1000.0, 'unixepoch') AS time_received",87,10,b6,eb)))->init(7,::borogove::persistence::Sqlite_obj::col(HX_("sender_id",65,a9,5d,a0),null()))->init(8,::borogove::persistence::Sqlite_obj::col(HX_("mam_id",01,4d,19,b7),null()))->init(9,::borogove::persistence::Sqlite_obj::col(HX_("mam_by",fd,46,19,b7),null()))->init(10,::borogove::persistence::Sqlite_obj::col(HX_("sort_id",5c,b9,64,00),null()))->init(11,::borogove::persistence::Sqlite_obj::col(HX_("sync_point",2c,6c,7f,80),null()))->init(12,::borogove::persistence::Sqlite_obj::col(HX_("encryption",83,dc,39,4f),HX_("json(encryption) AS encryption",97,9c,f1,10)))->init(13,::borogove::persistence::Sqlite_obj::col(HX_("debug",53,52,1f,d7),HX_("json(debug) AS debug",8f,c2,6b,70)))->concat(it);
+HXDLIN(1827)		::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
+HXDLIN(1827)		{
+            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
+            			 ::haxe::ds::StringMap _hx_run( ::Dynamic column, ::haxe::ds::StringMap map){
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1844_messageColumns)
+HXLINE(1845)				map->set(( (::String)(column->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) ),column);
+HXLINE(1846)				return map;
+            			}
+            			HX_END_LOCAL_FUNC2(return)
+
+HXDLIN(1827)			 ::Dynamic x = ::Lambda_obj::fold(it1, ::Dynamic(new _hx_Closure_0()), ::haxe::ds::StringMap_obj::__alloc( HX_CTX ))->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN(1827)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN(1827)				_g->push( ::Dynamic(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("sql",0e,a6,57,00),::hx::paccDynamic)));
+            			}
+            		}
+HXDLIN(1827)		return _g;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,messageColumns,return )
+
+ ::Dynamic Sqlite_obj::insertCol(::String name, ::Dynamic value,::String valueSql){
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1889_insertCol)
+HXDLIN(1889)		::String _hx_tmp;
+HXDLIN(1889)		if (::hx::IsNotNull( valueSql )) {
+HXDLIN(1889)			_hx_tmp = valueSql;
+            		}
+            		else {
+HXDLIN(1889)			_hx_tmp = HX_("?",3f,00,00,00);
+            		}
+HXDLIN(1889)		return  ::Dynamic(::hx::Anon_obj::Create(3)
+            			->setFixed(0,HX_("valueSql",1d,5b,51,ee),_hx_tmp)
+            			->setFixed(1,HX_("value",71,7f,b8,31),value)
+            			->setFixed(2,HX_("name",4b,72,ff,48),name));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,insertCol,return )
+
+ ::borogove::ChatMessage Sqlite_obj::originalMessage( ::borogove::ChatMessage message){
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_1893_originalMessage)
+HXDLIN(1893)		if ((message->versions->length == 1)) {
+HXDLIN(1893)			return message->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
+            		}
+            		else {
+HXDLIN(1893)			return message;
+            		}
+HXDLIN(1893)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,originalMessage,return )
+
 
 ::hx::ObjectPtr< Sqlite_obj > Sqlite_obj::__new(::String dbfile,::Dynamic media) {
 	::hx::ObjectPtr< Sqlite_obj > __this = new Sqlite_obj();
@@ -3993,6 +4514,7 @@ void Sqlite_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(smStoreInProgress,"smStoreInProgress");
 	HX_MARK_MEMBER_NAME(smStoreNext,"smStoreNext");
 	HX_MARK_MEMBER_NAME(smStoreIdNext,"smStoreIdNext");
+	HX_MARK_MEMBER_NAME(versionedMessageColumns,"versionedMessageColumns");
 	HX_MARK_END_CLASS();
 }
 
@@ -4006,6 +4528,7 @@ void Sqlite_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(smStoreInProgress,"smStoreInProgress");
 	HX_VISIT_MEMBER_NAME(smStoreNext,"smStoreNext");
 	HX_VISIT_MEMBER_NAME(smStoreIdNext,"smStoreIdNext");
+	HX_VISIT_MEMBER_NAME(versionedMessageColumns,"versionedMessageColumns");
 }
 
 ::hx::Val Sqlite_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
@@ -4065,6 +4588,7 @@ void Sqlite_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"searchMessages") ) { return ::hx::Val( searchMessages_dyn() ); }
 		if (HX_FIELD_EQ(inName,"fetchReactions") ) { return ::hx::Val( fetchReactions_dyn() ); }
 		if (HX_FIELD_EQ(inName,"hydrateReplyTo") ) { return ::hx::Val( hydrateReplyTo_dyn() ); }
+		if (HX_FIELD_EQ(inName,"insertMessages") ) { return ::hx::Val( insertMessages_dyn() ); }
 		break;
 	case 15:
 		if (HX_FIELD_EQ(inName,"storeChatBuffer") ) { return ::hx::Val( storeChatBuffer ); }
@@ -4074,11 +4598,15 @@ void Sqlite_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"getMemberDetails") ) { return ::hx::Val( getMemberDetails_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getMessagesAfter") ) { return ::hx::Val( getMessagesAfter_dyn() ); }
 		if (HX_FIELD_EQ(inName,"hydrateReactions") ) { return ::hx::Val( hydrateReactions_dyn() ); }
+		if (HX_FIELD_EQ(inName,"messagesLoadMeta") ) { return ::hx::Val( messagesLoadMeta_dyn() ); }
 		break;
 	case 17:
+		if (HX_FIELD_EQ(inName,"storeVoiceRequest") ) { return ::hx::Val( storeVoiceRequest_dyn() ); }
+		if (HX_FIELD_EQ(inName,"listVoiceRequests") ) { return ::hx::Val( listVoiceRequests_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getMessagesBefore") ) { return ::hx::Val( getMessagesBefore_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getMessagesAround") ) { return ::hx::Val( getMessagesAround_dyn() ); }
 		if (HX_FIELD_EQ(inName,"smStoreInProgress") ) { return ::hx::Val( smStoreInProgress ); }
+		if (HX_FIELD_EQ(inName,"hydrateEncryption") ) { return ::hx::Val( hydrateEncryption_dyn() ); }
 		break;
 	case 18:
 		if (HX_FIELD_EQ(inName,"hydratePresenceMap") ) { return ::hx::Val( hydratePresenceMap_dyn() ); }
@@ -4087,6 +4615,7 @@ void Sqlite_obj::__Visit(HX_VISIT_PARAMS)
 	case 19:
 		if (HX_FIELD_EQ(inName,"hydrateStoredMember") ) { return ::hx::Val( hydrateStoredMember_dyn() ); }
 		if (HX_FIELD_EQ(inName,"clearMemberPresence") ) { return ::hx::Val( clearMemberPresence_dyn() ); }
+		if (HX_FIELD_EQ(inName,"getMessagesByStatus") ) { return ::hx::Val( getMessagesByStatus_dyn() ); }
 		if (HX_FIELD_EQ(inName,"updateMessageStatus") ) { return ::hx::Val( updateMessageStatus_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getStreamManagement") ) { return ::hx::Val( getStreamManagement_dyn() ); }
 		break;
@@ -4101,6 +4630,10 @@ void Sqlite_obj::__Visit(HX_VISIT_PARAMS)
 	case 23:
 		if (HX_FIELD_EQ(inName,"storeMessagesSerialized") ) { return ::hx::Val( storeMessagesSerialized ); }
 		if (HX_FIELD_EQ(inName,"findServicesWithFeature") ) { return ::hx::Val( findServicesWithFeature_dyn() ); }
+		if (HX_FIELD_EQ(inName,"versionedMessageColumns") ) { return ::hx::Val( versionedMessageColumns ); }
+		break;
+	case 26:
+		if (HX_FIELD_EQ(inName,"hydrateMessagesAndLoadMeta") ) { return ::hx::Val( hydrateMessagesAndLoadMeta_dyn() ); }
 		break;
 	case 29:
 		if (HX_FIELD_EQ(inName,"chatPresenceAndMembersForName") ) { return ::hx::Val( chatPresenceAndMembersForName_dyn() ); }
@@ -4111,8 +4644,23 @@ void Sqlite_obj::__Visit(HX_VISIT_PARAMS)
 bool Sqlite_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
 {
 	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"col") ) { outValue = col_dyn(); return true; }
+		break;
 	case 7:
 		if (HX_FIELD_EQ(inName,"prepare") ) { outValue = prepare_dyn(); return true; }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"insertCol") ) { outValue = insertCol_dyn(); return true; }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"messageColumns") ) { outValue = messageColumns_dyn(); return true; }
+		break;
+	case 15:
+		if (HX_FIELD_EQ(inName,"originalMessage") ) { outValue = originalMessage_dyn(); return true; }
+		break;
+	case 20:
+		if (HX_FIELD_EQ(inName,"messageColumnsString") ) { outValue = messageColumnsString_dyn(); return true; }
 	}
 	return false;
 }
@@ -4143,6 +4691,7 @@ bool Sqlite_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::Pr
 		break;
 	case 23:
 		if (HX_FIELD_EQ(inName,"storeMessagesSerialized") ) { storeMessagesSerialized=inValue.Cast<  ::borogove::AsyncLock >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"versionedMessageColumns") ) { versionedMessageColumns=inValue.Cast< ::String >(); return inValue; }
 	}
 	return super::__SetField(inName,inValue,inCallProp);
 }
@@ -4157,6 +4706,7 @@ void Sqlite_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("smStoreInProgress",79,f8,70,5d));
 	outFields->push(HX_("smStoreNext",7a,e1,91,0a));
 	outFields->push(HX_("smStoreIdNext",b5,62,eb,8c));
+	outFields->push(HX_("versionedMessageColumns",ad,c1,7c,cd));
 	super::__GetFields(outFields);
 };
 
@@ -4170,6 +4720,7 @@ static ::hx::StorageInfo Sqlite_obj_sMemberStorageInfo[] = {
 	{::hx::fsBool,(int)offsetof(Sqlite_obj,smStoreInProgress),HX_("smStoreInProgress",79,f8,70,5d)},
 	{::hx::fsObject /* ::Array< unsigned char > */ ,(int)offsetof(Sqlite_obj,smStoreNext),HX_("smStoreNext",7a,e1,91,0a)},
 	{::hx::fsString,(int)offsetof(Sqlite_obj,smStoreIdNext),HX_("smStoreIdNext",b5,62,eb,8c)},
+	{::hx::fsString,(int)offsetof(Sqlite_obj,versionedMessageColumns),HX_("versionedMessageColumns",ad,c1,7c,cd)},
 	{ ::hx::fsUnknown, 0, null()}
 };
 static ::hx::StaticInfo *Sqlite_obj_sStaticStorageInfo = 0;
@@ -4194,6 +4745,8 @@ static ::String Sqlite_obj_sMemberFields[] = {
 	HX_("clearMemberPresence",22,9d,db,a5),
 	HX_("getMembers",e3,b2,d1,69),
 	HX_("getMemberDetails",12,2b,2f,b3),
+	HX_("storeVoiceRequest",3e,09,f8,ef),
+	HX_("listVoiceRequests",d8,ba,8f,00),
 	HX_("searchMessages",54,dc,f0,62),
 	HX_("getChats",25,ae,8a,a5),
 	HX_("storeMessages",cd,f1,bd,e9),
@@ -4204,6 +4757,7 @@ static ::String Sqlite_obj_sMemberFields[] = {
 	HX_("getMessagesBefore",a1,f1,44,11),
 	HX_("getMessagesAfter",3a,43,91,57),
 	HX_("getMessagesAround",6f,95,16,2d),
+	HX_("getMessagesByStatus",0b,d6,52,1e),
 	HX_("getChatUnreadDetails",e5,a6,9e,c8),
 	HX_("getChatsUnreadDetails",ee,d4,5a,85),
 	HX_("storeReaction",aa,00,75,ab),
@@ -4228,14 +4782,24 @@ static ::String Sqlite_obj_sMemberFields[] = {
 	HX_("hydrateReactions",97,c5,06,27),
 	HX_("fetchReactions",10,41,6b,5e),
 	HX_("hydrateReplyTo",f2,64,45,9b),
+	HX_("hydrateEncryption",f6,b2,a2,92),
+	HX_("hydrateMessagesAndLoadMeta",c3,5f,dd,8d),
+	HX_("messagesLoadMeta",f7,5c,a0,55),
 	HX_("hydrateMessages",7f,1c,88,4e),
 	HX_("hydrateCaps",54,ca,65,93),
+	HX_("versionedMessageColumns",ad,c1,7c,cd),
+	HX_("insertMessages",25,39,c8,77),
 	::String(null()) };
 
 ::hx::Class Sqlite_obj::__mClass;
 
 static ::String Sqlite_obj_sStaticFields[] = {
 	HX_("prepare",87,91,dd,37),
+	HX_("col",40,80,4b,00),
+	HX_("messageColumnsString",47,97,ec,41),
+	HX_("messageColumns",d6,f5,90,e2),
+	HX_("insertCol",87,fe,6e,19),
+	HX_("originalMessage",76,c5,9e,4b),
 	::String(null())
 };
 
@@ -4265,9 +4829,9 @@ void Sqlite_obj::__register()
 void Sqlite_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_34_boot)
-HXDLIN(  34)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(34)
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_42_boot)
+HXDLIN(  42)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(37)
             				->setFixed(0,HX_("storeChats",fa,4a,32,83), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
             				->setFixed(1,HX_("getChatsUnreadDetails",ee,d4,5a,85), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -4302,39 +4866,45 @@ HXDLIN(  34)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
             				->setFixed(16,HX_("storeMessages",cd,f1,bd,e9), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(17,HX_("listAccounts",a4,81,e8,f5), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(17,HX_("storeVoiceRequest",3e,09,f8,ef), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(18,HX_("get",96,80,4e,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(18,HX_("listAccounts",a4,81,e8,f5), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(19,HX_("set",a2,9b,57,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(19,HX_("get",96,80,4e,00), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(20,HX_("removeMedia",00,e2,ef,03), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(20,HX_("set",a2,9b,57,00), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(21,HX_("getMessage__fromC",c8,40,46,05), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(21,HX_("listVoiceRequests",d8,ba,8f,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(22,HX_("removeMedia",00,e2,ef,03), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(23,HX_("getMessage__fromC",c8,40,46,05), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(22,HX_("updateMessageStatus",90,98,ad,0f), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(24,HX_("updateMessageStatus",90,98,ad,0f), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(25,HX_("getMessagesBefore",a1,f1,44,11), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(23,HX_("getMessagesBefore",a1,f1,44,11), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(26,HX_("getCaps",d7,cb,3c,14), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(24,HX_("getCaps",d7,cb,3c,14), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(27,HX_("getMessagesByStatus",0b,d6,52,1e), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(25,HX_("getMessagesAround",6f,95,16,2d), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(28,HX_("getMessagesAround",6f,95,16,2d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(26,HX_("storeMedia",43,b1,3a,43), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(29,HX_("storeMedia",43,b1,3a,43), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(27,HX_("findServicesWithFeature",99,4e,bd,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(30,HX_("findServicesWithFeature",99,4e,bd,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(28,HX_("getMessagesAfter",3a,43,91,57), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(31,HX_("getMessagesAfter",3a,43,91,57), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(29,HX_("searchMessages",54,dc,f0,62), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(32,HX_("searchMessages",54,dc,f0,62), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(30,HX_("updateMessage",be,9a,7f,65), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(33,HX_("updateMessage",be,9a,7f,65), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(31,HX_("getMembers",e3,b2,d1,69), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(34,HX_("getMembers",e3,b2,d1,69), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(32,HX_("getStreamManagement",d9,03,ec,6c), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(35,HX_("getStreamManagement",d9,03,ec,6c), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(33,HX_("removeAccount",c9,58,14,7a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(36,HX_("removeAccount",c9,58,14,7a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null()))))));
             	}
 }
diff --git a/Sources/c_borogove/src/borogove/persistence/SqliteDriver.cpp b/Sources/c_borogove/src/borogove/persistence/SqliteDriver.cpp
index 5c12090..18726b3 100644
--- a/Sources/c_borogove/src/borogove/persistence/SqliteDriver.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/SqliteDriver.cpp
@@ -25,6 +25,9 @@
 #ifndef INCLUDED_haxe_Exception
 #include <haxe/Exception.h>
 #endif
+#ifndef INCLUDED_haxe_Log
+#include <haxe/Log.h>
+#endif
 #ifndef INCLUDED_haxe_iterators_ArrayIterator
 #include <haxe/iterators/ArrayIterator.h>
 #endif
@@ -56,25 +59,26 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_19_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",19,0xf8c083ec)
-HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_28_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",28,0xf8c083ec)
-HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_29_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",29,0xf8c083ec)
-HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_21_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",21,0xf8c083ec)
+HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_20_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",20,0xf8c083ec)
+HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_38_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",38,0xf8c083ec)
+HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_39_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",39,0xf8c083ec)
+HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_25_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",25,0xf8c083ec)
 HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_8_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",8,0xf8c083ec)
-HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_36_execute,"borogove.persistence.SqliteDriver","execute",0xc8683957,"borogove.persistence.SqliteDriver.execute","borogove/persistence/SqliteDriver.hx",36,0xf8c083ec)
-HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_50_execute,"borogove.persistence.SqliteDriver","execute",0xc8683957,"borogove.persistence.SqliteDriver.execute","borogove/persistence/SqliteDriver.hx",50,0xf8c083ec)
-HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_34_execute,"borogove.persistence.SqliteDriver","execute",0xc8683957,"borogove.persistence.SqliteDriver.execute","borogove/persistence/SqliteDriver.hx",34,0xf8c083ec)
-HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_65_execMany,"borogove.persistence.SqliteDriver","execMany",0x784b076e,"borogove.persistence.SqliteDriver.execMany","borogove/persistence/SqliteDriver.hx",65,0xf8c083ec)
-HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_64_execMany,"borogove.persistence.SqliteDriver","execMany",0x784b076e,"borogove.persistence.SqliteDriver.execMany","borogove/persistence/SqliteDriver.hx",64,0xf8c083ec)
-HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_72_exec,"borogove.persistence.SqliteDriver","exec",0xa63cdb2f,"borogove.persistence.SqliteDriver.exec","borogove/persistence/SqliteDriver.hx",72,0xf8c083ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_46_execute,"borogove.persistence.SqliteDriver","execute",0xc8683957,"borogove.persistence.SqliteDriver.execute","borogove/persistence/SqliteDriver.hx",46,0xf8c083ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_60_execute,"borogove.persistence.SqliteDriver","execute",0xc8683957,"borogove.persistence.SqliteDriver.execute","borogove/persistence/SqliteDriver.hx",60,0xf8c083ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_44_execute,"borogove.persistence.SqliteDriver","execute",0xc8683957,"borogove.persistence.SqliteDriver.execute","borogove/persistence/SqliteDriver.hx",44,0xf8c083ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_75_execMany,"borogove.persistence.SqliteDriver","execMany",0x784b076e,"borogove.persistence.SqliteDriver.execMany","borogove/persistence/SqliteDriver.hx",75,0xf8c083ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_74_execMany,"borogove.persistence.SqliteDriver","execMany",0x784b076e,"borogove.persistence.SqliteDriver.execMany","borogove/persistence/SqliteDriver.hx",74,0xf8c083ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_82_exec,"borogove.persistence.SqliteDriver","exec",0xa63cdb2f,"borogove.persistence.SqliteDriver.exec","borogove/persistence/SqliteDriver.hx",82,0xf8c083ec)
 namespace borogove{
 namespace persistence{
 
 void SqliteDriver_obj::__construct(::String dbfile, ::Dynamic migrate){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::SqliteDriver,_gthis) HXARGC(2)
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
-            			HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_19_new)
-HXLINE(  19)			_gthis->setReady = resolve;
+            			HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_20_new)
+HXLINE(  21)			_gthis->setReady = resolve;
+HXLINE(  22)			_gthis->setFailed = reject;
             		}
             		HX_END_LOCAL_FUNC2((void))
 
@@ -82,63 +86,83 @@ HXLINE(  19)			_gthis->setReady = resolve;
             		void _hx_run(){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::SqliteDriver,_gthis) HXARGC(1)
             			::Dynamic _hx_run(::Array< ::String > sql){
-            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_28_new)
-HXLINE(  28)				 ::borogove::persistence::SqliteDriver _gthis1 = _gthis;
-HXDLIN(  28)				::Dynamic _gthis2 = _gthis->writePool;
-HXDLIN(  28)				::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(sql->length);
-HXDLIN(  28)				{
-HXLINE(  28)					int _g = 0;
-HXDLIN(  28)					int _g1 = sql->length;
-HXDLIN(  28)					while((_g < _g1)){
-HXLINE(  28)						_g = (_g + 1);
-HXDLIN(  28)						int i = (_g - 1);
-HXDLIN(  28)						{
-HXLINE(  28)							 ::Dynamic inValue =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_38_new)
+HXLINE(  38)				 ::borogove::persistence::SqliteDriver _gthis1 = _gthis;
+HXDLIN(  38)				::Dynamic _gthis2 = _gthis->writePool;
+HXDLIN(  38)				::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(sql->length);
+HXDLIN(  38)				{
+HXLINE(  38)					int _g = 0;
+HXDLIN(  38)					int _g1 = sql->length;
+HXDLIN(  38)					while((_g < _g1)){
+HXLINE(  38)						_g = (_g + 1);
+HXDLIN(  38)						int i = (_g - 1);
+HXDLIN(  38)						{
+HXLINE(  38)							 ::Dynamic inValue =  ::Dynamic(::hx::Anon_obj::Create(2)
             								->setFixed(0,HX_("params",46,fb,7a,ed),::cpp::VirtualArray_obj::__new(0))
             								->setFixed(1,HX_("sql",0e,a6,57,00),_hx_array_unsafe_get(sql,i)));
-HXDLIN(  28)							result->__unsafe_set(i,inValue);
+HXDLIN(  38)							result->__unsafe_set(i,inValue);
             						}
             					}
             				}
-HXDLIN(  28)				return _gthis1->execute(_gthis2,result);
+HXDLIN(  38)				return _gthis1->execute(_gthis2,result);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::SqliteDriver,_gthis) HXARGC(1)
             			void _hx_run( ::Dynamic _){
-            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_29_new)
-HXLINE(  29)				_gthis->setReady(true);
+            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_39_new)
+HXLINE(  39)				_gthis->setReady(true);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_21_new)
-HXLINE(  22)			::Dynamic db = ::sys::db::Sqlite_obj::open(dbfile);
-HXLINE(  23)			::sys::db::Connection_obj::request(db,HX_("PRAGMA journal_mode=WAL",74,ce,b2,c7));
-HXLINE(  24)			::sys::db::Connection_obj::request(db,HX_("PRAGMA synchronous=NORMAL",9f,05,c5,b7));
-HXLINE(  25)			::sys::db::Connection_obj::request(db,HX_("PRAGMA temp_store=2",ef,8d,52,36));
-HXLINE(  26)			if (::borogove::Config_obj::constrainedMemoryMode) {
-HXLINE(  26)				::sys::db::Connection_obj::request(db,HX_("PRAGMA cache_size=0",d5,e5,b6,fc));
+            			HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_25_new)
+HXLINE(  26)			try {
+            				HX_STACK_CATCHABLE( ::Dynamic, 0);
+HXLINE(  27)				::Dynamic db = ::sys::db::Sqlite_obj::open(dbfile);
+HXLINE(  28)				::sys::db::Connection_obj::request(db,HX_("PRAGMA journal_mode=WAL",74,ce,b2,c7));
+HXLINE(  29)				::sys::db::Connection_obj::request(db,HX_("PRAGMA synchronous=NORMAL",9f,05,c5,b7));
+HXLINE(  30)				::sys::db::Connection_obj::request(db,HX_("PRAGMA temp_store=2",ef,8d,52,36));
+HXLINE(  31)				if (::borogove::Config_obj::constrainedMemoryMode) {
+HXLINE(  31)					::sys::db::Connection_obj::request(db,HX_("PRAGMA cache_size=0",d5,e5,b6,fc));
+            				}
+HXLINE(  32)				_gthis->dbs->push(db);
+            			} catch( ::Dynamic _hx_e) {
+            				if (_hx_e.IsClass<  ::Dynamic >() ){
+            					HX_STACK_BEGIN_CATCH
+            					 ::Dynamic _g = _hx_e;
+HXLINE(  33)					 ::haxe::Exception _g1 = ::haxe::Exception_obj::caught(_g);
+HXLINE(  34)					::haxe::Log_obj::trace(HX_("Could not open Sqlite db",a8,50,19,85), ::Dynamic(::hx::Anon_obj::Create(5)
+            						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.persistence.SqliteDriver",90,9d,1a,56))
+            						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_g1))
+            						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("new",60,d0,53,00))
+            						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/persistence/SqliteDriver.hx",ec,83,c0,f8))
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),34)));
+HXLINE(  35)					_gthis->setFailed(_g1);
+HXLINE(  36)					return;
+            				}
+            				else {
+            					HX_STACK_DO_THROW(_hx_e);
+            				}
             			}
-HXLINE(  27)			_gthis->dbs->push(db);
-HXLINE(  28)			::thenshim::_Promise::Promise_Impl__obj::then(migrate( ::Dynamic(new _hx_Closure_1(_gthis))), ::Dynamic(new _hx_Closure_2(_gthis)),null());
+HXLINE(  38)			::thenshim::_Promise::Promise_Impl__obj::then(migrate( ::Dynamic(new _hx_Closure_1(_gthis))), ::Dynamic(new _hx_Closure_2(_gthis)),null());
             		}
             		HX_END_LOCAL_FUNC0((void))
 
             	HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_8_new)
 HXLINE(  10)		this->writePool =  ::sys::thread::FixedThreadPool_obj::__alloc( HX_CTX ,1);
 HXLINE(   9)		this->dbs =  ::sys::thread::Deque_obj::__alloc( HX_CTX );
-HXLINE(  16)		 ::borogove::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  17)		this->dbfile = dbfile;
-HXLINE(  18)		::Dynamic _hx_tmp;
-HXDLIN(  18)		if (::borogove::Config_obj::constrainedMemoryMode) {
-HXLINE(  18)			_hx_tmp = this->writePool;
+HXLINE(  17)		 ::borogove::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  18)		this->dbfile = dbfile;
+HXLINE(  19)		::Dynamic _hx_tmp;
+HXDLIN(  19)		if (::borogove::Config_obj::constrainedMemoryMode) {
+HXLINE(  19)			_hx_tmp = this->writePool;
             		}
             		else {
-HXLINE(  18)			_hx_tmp =  ::sys::thread::ElasticThreadPool_obj::__alloc( HX_CTX ,10,null());
+HXLINE(  19)			_hx_tmp =  ::sys::thread::ElasticThreadPool_obj::__alloc( HX_CTX ,10,null());
             		}
-HXDLIN(  18)		this->readPool = _hx_tmp;
-HXLINE(  19)		this->ready = ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(  21)		::sys::thread::IThreadPool_obj::run(this->writePool, ::Dynamic(new _hx_Closure_3(_gthis,dbfile,migrate)));
+HXDLIN(  19)		this->readPool = _hx_tmp;
+HXLINE(  20)		this->ready = ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(  25)		::sys::thread::IThreadPool_obj::run(this->writePool, ::Dynamic(new _hx_Closure_3(_gthis,dbfile,migrate)));
             	}
 
 Dynamic SqliteDriver_obj::__CreateEmpty() { return new SqliteDriver_obj; }
@@ -161,51 +185,51 @@ bool SqliteDriver_obj::_hx_isInstanceOf(int inClassId) {
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::SqliteDriver,_gthis,::Array< ::Dynamic>,qs, ::Dynamic,resolve, ::Dynamic,reject) HXARGC(0)
             			void _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_36_execute)
-HXLINE(  37)				::Dynamic db = _gthis->dbs->pop(false);
-HXLINE(  38)				try {
+            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_46_execute)
+HXLINE(  47)				::Dynamic db = _gthis->dbs->pop(false);
+HXLINE(  48)				try {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,result) HXARGC(0)
             					::Dynamic _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_a11c44f890417883_50_execute)
-HXLINE(  50)						return result->__get(0);
+            						HX_STACKFRAME(&_hx_pos_a11c44f890417883_60_execute)
+HXLINE(  60)						return result->__get(0);
             					}
             					HX_END_LOCAL_FUNC0(return)
 
             					HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE(  39)					if (::hx::IsNull( db )) {
-HXLINE(  40)						db = ::sys::db::Sqlite_obj::open(_gthis->dbfile);
+HXLINE(  49)					if (::hx::IsNull( db )) {
+HXLINE(  50)						db = ::sys::db::Sqlite_obj::open(_gthis->dbfile);
             					}
-HXLINE(  42)					::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(1)->init(0,null());
-HXLINE(  43)					if ((qs->length > 1)) {
-HXLINE(  43)						::sys::db::Connection_obj::request(db,HX_("BEGIN TRANSACTION",27,ad,5f,e2));
+HXLINE(  52)					::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(1)->init(0,null());
+HXLINE(  53)					if ((qs->length > 1)) {
+HXLINE(  53)						::sys::db::Connection_obj::request(db,HX_("BEGIN TRANSACTION",27,ad,5f,e2));
             					}
-HXLINE(  44)					{
-HXLINE(  44)						int _g = 0;
-HXDLIN(  44)						while((_g < qs->length)){
-HXLINE(  44)							 ::Dynamic q = qs->__get(_g);
-HXDLIN(  44)							_g = (_g + 1);
-HXLINE(  45)							::String prepared = ::borogove::persistence::Sqlite_obj::prepare(q);
-HXLINE(  46)							result[0] = ::sys::db::Connection_obj::request(db,prepared);
+HXLINE(  54)					{
+HXLINE(  54)						int _g = 0;
+HXDLIN(  54)						while((_g < qs->length)){
+HXLINE(  54)							 ::Dynamic q = qs->__get(_g);
+HXDLIN(  54)							_g = (_g + 1);
+HXLINE(  55)							::String prepared = ::borogove::persistence::Sqlite_obj::prepare(q);
+HXLINE(  56)							result[0] = ::sys::db::Connection_obj::request(db,prepared);
             						}
             					}
-HXLINE(  50)					::cpp::VirtualArray arr = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(  60)					::cpp::VirtualArray arr = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(result)))));
-HXLINE(  51)					if ((qs->length > 1)) {
-HXLINE(  51)						::sys::db::Connection_obj::request(db,HX_("COMMIT",f7,1b,b1,79));
+HXLINE(  61)					if ((qs->length > 1)) {
+HXLINE(  61)						::sys::db::Connection_obj::request(db,HX_("COMMIT",f7,1b,b1,79));
             					}
-HXLINE(  52)					_gthis->dbs->push(db);
-HXLINE(  53)					resolve( ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,arr));
+HXLINE(  62)					_gthis->dbs->push(db);
+HXLINE(  63)					resolve( ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,arr));
             				} catch( ::Dynamic _hx_e) {
             					if (_hx_e.IsClass<  ::Dynamic >() ){
             						HX_STACK_BEGIN_CATCH
             						 ::Dynamic _g1 = _hx_e;
-HXLINE(  54)						 ::haxe::Exception _g2 = ::haxe::Exception_obj::caught(_g1);
-HXDLIN(  54)						{
-HXLINE(  55)							if ((qs->length > 1)) {
-HXLINE(  55)								::sys::db::Connection_obj::request(db,HX_("ROLLBACK",24,58,ad,78));
+HXLINE(  64)						 ::haxe::Exception _g2 = ::haxe::Exception_obj::caught(_g1);
+HXDLIN(  64)						{
+HXLINE(  65)							if ((qs->length > 1)) {
+HXLINE(  65)								::sys::db::Connection_obj::request(db,HX_("ROLLBACK",24,58,ad,78));
             							}
-HXLINE(  56)							_gthis->dbs->push(db);
-HXLINE(  57)							reject(_g2);
+HXLINE(  66)							_gthis->dbs->push(db);
+HXLINE(  67)							reject(_g2);
             						}
             					}
             					else {
@@ -215,14 +239,14 @@ HXLINE(  57)							reject(_g2);
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-            			HX_STACKFRAME(&_hx_pos_a11c44f890417883_36_execute)
-HXLINE(  36)			::sys::thread::IThreadPool_obj::run(pool, ::Dynamic(new _hx_Closure_1(_gthis,qs,resolve,reject)));
+            			HX_STACKFRAME(&_hx_pos_a11c44f890417883_46_execute)
+HXLINE(  46)			::sys::thread::IThreadPool_obj::run(pool, ::Dynamic(new _hx_Closure_1(_gthis,qs,resolve,reject)));
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_a11c44f890417883_34_execute)
-HXDLIN(  34)		 ::borogove::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  35)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,pool,qs)));
+            	HX_STACKFRAME(&_hx_pos_a11c44f890417883_44_execute)
+HXDLIN(  44)		 ::borogove::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  45)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,pool,qs)));
             	}
 
 
@@ -231,29 +255,29 @@ HX_DEFINE_DYNAMIC_FUNC2(SqliteDriver_obj,execute,return )
 ::Dynamic SqliteDriver_obj::execMany(::Array< ::Dynamic> qs){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::SqliteDriver,_gthis,::Array< ::Dynamic>,qs) HXARGC(1)
             		::Dynamic _hx_run(bool _){
-            			HX_STACKFRAME(&_hx_pos_a11c44f890417883_65_execMany)
-HXLINE(  66)			::Dynamic pool;
-HXDLIN(  66)			if (::StringTools_obj::startsWith(( (::String)(qs->__get(0)->__Field(HX_("sql",0e,a6,57,00),::hx::paccDynamic)) ),HX_("SELECT",fc,c6,b5,1c))) {
-HXLINE(  66)				pool = _gthis->readPool;
+            			HX_STACKFRAME(&_hx_pos_a11c44f890417883_75_execMany)
+HXLINE(  76)			::Dynamic pool;
+HXDLIN(  76)			if (::StringTools_obj::startsWith(( (::String)(qs->__get(0)->__Field(HX_("sql",0e,a6,57,00),::hx::paccDynamic)) ),HX_("SELECT",fc,c6,b5,1c))) {
+HXLINE(  76)				pool = _gthis->readPool;
             			}
             			else {
-HXLINE(  66)				pool = _gthis->writePool;
+HXLINE(  76)				pool = _gthis->writePool;
             			}
-HXLINE(  67)			return _gthis->execute(pool,qs);
+HXLINE(  77)			return _gthis->execute(pool,qs);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a11c44f890417883_64_execMany)
-HXDLIN(  64)		 ::borogove::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  65)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->ready, ::Dynamic(new _hx_Closure_0(_gthis,qs)),null());
+            	HX_STACKFRAME(&_hx_pos_a11c44f890417883_74_execMany)
+HXDLIN(  74)		 ::borogove::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  75)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->ready, ::Dynamic(new _hx_Closure_0(_gthis,qs)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(SqliteDriver_obj,execMany,return )
 
 ::Dynamic SqliteDriver_obj::exec(::String sql,::cpp::VirtualArray params){
-            	HX_STACKFRAME(&_hx_pos_a11c44f890417883_72_exec)
-HXDLIN(  72)		return this->execMany(::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_a11c44f890417883_82_exec)
+HXDLIN(  82)		return this->execMany(::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("params",46,fb,7a,ed),params)
             			->setFixed(1,HX_("sql",0e,a6,57,00),sql))));
             	}
@@ -288,6 +312,7 @@ void SqliteDriver_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(dbfile,"dbfile");
 	HX_MARK_MEMBER_NAME(ready,"ready");
 	HX_MARK_MEMBER_NAME(setReady,"setReady");
+	HX_MARK_MEMBER_NAME(setFailed,"setFailed");
 	HX_MARK_END_CLASS();
 }
 
@@ -299,6 +324,7 @@ void SqliteDriver_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(dbfile,"dbfile");
 	HX_VISIT_MEMBER_NAME(ready,"ready");
 	HX_VISIT_MEMBER_NAME(setReady,"setReady");
+	HX_VISIT_MEMBER_NAME(setFailed,"setFailed");
 }
 
 ::hx::Val SqliteDriver_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
@@ -326,6 +352,7 @@ void SqliteDriver_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 9:
 		if (HX_FIELD_EQ(inName,"writePool") ) { return ::hx::Val( writePool ); }
+		if (HX_FIELD_EQ(inName,"setFailed") ) { return ::hx::Val( setFailed ); }
 	}
 	return super::__Field(inName,inCallProp);
 }
@@ -348,6 +375,7 @@ void SqliteDriver_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 9:
 		if (HX_FIELD_EQ(inName,"writePool") ) { writePool=inValue.Cast< ::Dynamic >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"setFailed") ) { setFailed=inValue.Cast<  ::Dynamic >(); return inValue; }
 	}
 	return super::__SetField(inName,inValue,inCallProp);
 }
@@ -370,6 +398,7 @@ static ::hx::StorageInfo SqliteDriver_obj_sMemberStorageInfo[] = {
 	{::hx::fsString,(int)offsetof(SqliteDriver_obj,dbfile),HX_("dbfile",fa,bc,b0,ac)},
 	{::hx::fsObject /* ::Dynamic */ ,(int)offsetof(SqliteDriver_obj,ready),HX_("ready",63,a0,ba,e6)},
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(SqliteDriver_obj,setReady),HX_("setReady",61,09,ef,f4)},
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(SqliteDriver_obj,setFailed),HX_("setFailed",ff,3a,a6,47)},
 	{ ::hx::fsUnknown, 0, null()}
 };
 static ::hx::StaticInfo *SqliteDriver_obj_sStaticStorageInfo = 0;
@@ -382,6 +411,7 @@ static ::String SqliteDriver_obj_sMemberFields[] = {
 	HX_("dbfile",fa,bc,b0,ac),
 	HX_("ready",63,a0,ba,e6),
 	HX_("setReady",61,09,ef,f4),
+	HX_("setFailed",ff,3a,a6,47),
 	HX_("execute",35,0a,0d,cc),
 	HX_("execMany",d0,f8,dc,a4),
 	HX_("exec",91,f3,1d,43),
diff --git a/Sources/c_borogove/src/borogove/queries/BlocklistGet.cpp b/Sources/c_borogove/src/borogove/queries/BlocklistGet.cpp
index 889151f..ddc64eb 100644
--- a/Sources/c_borogove/src/borogove/queries/BlocklistGet.cpp
+++ b/Sources/c_borogove/src/borogove/queries/BlocklistGet.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED__UUIDv7_UUIDv7_Fields_
 #include <_UUIDv7/UUIDv7_Fields_.h>
 #endif
@@ -16,6 +13,12 @@
 #ifndef INCLUDED_borogove_queries_GenericQuery
 #include <borogove/queries/GenericQuery.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_1135fedfc55f8db7_12_new,"borogove.queries.BlocklistGet","new",0xe0c5dcb2,"borogove.queries.BlocklistGet.new","borogove/queries/BlocklistGet.hx",12,0x4fb2c83c)
 HX_LOCAL_STACK_FRAME(_hx_pos_1135fedfc55f8db7_26_handleResponse,"borogove.queries.BlocklistGet","handleResponse",0xe9266737,"borogove.queries.BlocklistGet.handleResponse","borogove/queries/BlocklistGet.hx",26,0x4fb2c83c)
@@ -31,8 +34,8 @@ HXLINE(  19)		super::__construct();
 HXLINE(  21)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  22)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
-            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))))->tag(HX_("blocklist",2b,bc,68,62), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)))->up();
+            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null())->tag(HX_("blocklist",2b,bc,68,62), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)),null())->up();
             	}
 
 Dynamic BlocklistGet_obj::__CreateEmpty() { return new BlocklistGet_obj; }
@@ -80,7 +83,7 @@ HXDLIN(  41)				while((_g < _g1)){
 HXLINE(  41)					_g = (_g + 1);
 HXDLIN(  41)					int i = (_g - 1);
 HXDLIN(  41)					{
-HXLINE(  41)						::String inValue = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->attr,HX_("jid",c5,ca,50,00))) );
+HXLINE(  41)						::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->attr->get_string(HX_("jid",c5,ca,50,00));
 HXDLIN(  41)						result->__unsafe_set(i,inValue);
             					}
             				}
diff --git a/Sources/c_borogove/src/borogove/queries/BoB.cpp b/Sources/c_borogove/src/borogove/queries/BoB.cpp
index 972ef33..2a86180 100644
--- a/Sources/c_borogove/src/borogove/queries/BoB.cpp
+++ b/Sources/c_borogove/src/borogove/queries/BoB.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
@@ -25,9 +22,15 @@
 #ifndef INCLUDED_borogove_queries_GenericQuery
 #include <borogove/queries/GenericQuery.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
 #ifndef INCLUDED_haxe_crypto_Base64
 #include <haxe/crypto/Base64.h>
 #endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 #ifndef INCLUDED_haxe_io_Bytes
 #include <haxe/io/Bytes.h>
 #endif
@@ -64,11 +67,11 @@ HXLINE(  21)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  22)		 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
             			->setFixed(1,HX_("to",7b,65,00,00),to)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))));
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null());
 HXLINE(  23)		::String _hx_tmp3 = this->xmlns;
 HXLINE(  22)		this->queryStanza = _hx_tmp2->tag(HX_("data",2a,56,63,42), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("cid",fe,7a,4b,00),uri.substr(4,null()))
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),_hx_tmp3)))->up();
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),_hx_tmp3)),null())->up();
             	}
 
 Dynamic BoB_obj::__CreateEmpty() { return new BoB_obj; }
@@ -107,9 +110,9 @@ HXLINE(  40)			 ::borogove::Stanza data = this->responseStanza->getChild(HX_("da
 HXLINE(  41)			if (::hx::IsNull( data )) {
 HXLINE(  42)				return null();
             			}
-HXLINE(  44)			::String maxAge = ( (::String)(::Reflect_obj::field(data->attr,HX_("max-age",56,bb,5f,b3))) );
+HXLINE(  44)			::String maxAge = data->attr->get_string(HX_("max-age",56,bb,5f,b3));
 HXLINE(  46)			 ::haxe::io::Bytes _hx_tmp = ::haxe::crypto::Base64_obj::decode(::StringTools_obj::replace(data->getText(),HX_("\n",0a,00,00,00),HX_("",00,00,00,00)),null());
-HXLINE(  47)			::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(data->attr,HX_("type",ba,f2,08,4d))) );
+HXLINE(  47)			::String _hx_tmp1 = data->attr->get_string(HX_("type",ba,f2,08,4d));
 HXLINE(  48)			 ::Dynamic _hx_tmp2;
 HXDLIN(  48)			if (::hx::IsNull( maxAge )) {
 HXLINE(  48)				_hx_tmp2 = null();
diff --git a/Sources/c_borogove/src/borogove/queries/CommandExecute.cpp b/Sources/c_borogove/src/borogove/queries/CommandExecute.cpp
index 096d098..4fe24e8 100644
--- a/Sources/c_borogove/src/borogove/queries/CommandExecute.cpp
+++ b/Sources/c_borogove/src/borogove/queries/CommandExecute.cpp
@@ -46,9 +46,15 @@
 #ifndef INCLUDED_borogove_queries_GenericQuery
 #include <borogove/queries/GenericQuery.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
 #ifndef INCLUDED_haxe_Log
 #include <haxe/Log.h>
 #endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_8b2a8547b04ebfcd_16_new,"borogove.queries.CommandExecute","new",0x7cda1e71,"borogove.queries.CommandExecute.new","borogove/queries/CommandExecute.hx",16,0x186d8edd)
 HX_LOCAL_STACK_FRAME(_hx_pos_8b2a8547b04ebfcd_38_handleResponse,"borogove.queries.CommandExecute","handleResponse",0x063a8fd8,"borogove.queries.CommandExecute.handleResponse","borogove/queries/CommandExecute.hx",38,0x186d8edd)
@@ -85,7 +91,7 @@ HXLINE(  29)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  30)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
             			->setFixed(1,HX_("to",7b,65,00,00),to)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("command",4b,71,6d,81),attr);
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("command",4b,71,6d,81),attr,null());
 HXLINE(  34)		if (::hx::IsNotNull( payload )) {
 HXLINE(  34)			this->queryStanza->addChild(payload);
             		}
@@ -144,21 +150,21 @@ HXDLIN(  78)				return 0;
 
 HXLINE(  49)			 ::borogove::Stanza cmd = this->responseStanza->getChild(HX_("command",4b,71,6d,81),this->xmlns);
 HXLINE(  50)			bool _hx_tmp;
-HXDLIN(  50)			if ((( (::String)(::Reflect_obj::field(this->responseStanza->attr,HX_("type",ba,f2,08,4d))) ) != HX_("error",c8,cb,29,73))) {
+HXDLIN(  50)			if (::hx::IsNotEq( this->responseStanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) )) {
 HXLINE(  50)				_hx_tmp = ::hx::IsNull( cmd );
             			}
             			else {
 HXLINE(  50)				_hx_tmp = true;
             			}
 HXDLIN(  50)			if (_hx_tmp) {
-HXLINE(  53)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(this->queryStanza->attr,HX_("sessionid",b1,74,4d,bb))) );
+HXLINE(  53)				::String _hx_tmp1 = this->queryStanza->attr->get_string(HX_("sessionid",b1,74,4d,bb));
 HXLINE(  51)				this->result =  ::borogove::CommandSession_obj::__alloc( HX_CTX ,HX_("error",c8,cb,29,73),_hx_tmp1,::Array_obj< ::Dynamic>::__new(0),this->forms(::Array_obj< ::Dynamic>::__new(1)->init(0,this->responseStanza)),command);
 HXLINE(  58)				return this->result;
             			}
 HXLINE(  62)			bool _hx_tmp2;
-HXDLIN(  62)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(this->queryStanza->attr,HX_("sessionid",b1,74,4d,bb))) ) )) {
-HXLINE(  63)				::String _hx_tmp3 = ( (::String)(::Reflect_obj::field(cmd->attr,HX_("sessionid",b1,74,4d,bb))) );
-HXLINE(  62)				_hx_tmp2 = (_hx_tmp3 != ( (::String)(::Reflect_obj::field(this->queryStanza->attr,HX_("sessionid",b1,74,4d,bb))) ));
+HXDLIN(  62)			if (::hx::IsNotNull( this->queryStanza->attr->get(HX_("sessionid",b1,74,4d,bb)) )) {
+HXLINE(  63)				::String _hx_tmp3 = cmd->attr->get_string(HX_("sessionid",b1,74,4d,bb));
+HXLINE(  62)				_hx_tmp2 = ::hx::IsNotEq( _hx_tmp3,this->queryStanza->attr->get(HX_("sessionid",b1,74,4d,bb)) );
             			}
             			else {
 HXLINE(  62)				_hx_tmp2 = false;
@@ -174,7 +180,7 @@ HXLINE(  66)				return null();
             			}
 HXLINE(  68)			::Array< ::Dynamic> forms = this->forms(cmd->allTags(null(),null()));
 HXLINE(  69)			 ::borogove::Stanza tmp = cmd->getChild(HX_("actions",fd,03,2e,67),null());
-HXDLIN(  69)			 ::Dynamic tmp1;
+HXDLIN(  69)			 ::haxe::ds::StringMap tmp1;
 HXDLIN(  69)			if (::hx::IsNotNull( tmp )) {
 HXLINE(  69)				tmp1 = tmp->attr;
             			}
@@ -183,7 +189,7 @@ HXLINE(  69)				tmp1 = null();
             			}
 HXDLIN(  69)			::String execute;
 HXDLIN(  69)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(  69)				execute = ( (::String)(::Reflect_obj::field(tmp1,HX_("execute",35,0a,0d,cc))) );
+HXLINE(  69)				execute = tmp1->get_string(HX_("execute",35,0a,0d,cc));
             			}
             			else {
 HXLINE(  69)				execute = null();
@@ -204,7 +210,7 @@ HXLINE(  70)				extActionsField = ::borogove::_DataForm::DataForm_Impl__obj::fie
 HXLINE(  70)				extActionsField = null();
             			}
 HXLINE(  71)			if (::hx::IsNotNull( extActionsField )) {
-HXLINE(  71)				::Reflect_obj::setField(extActionsField->attr,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c));
+HXLINE(  71)				extActionsField->attr->set(HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c));
             			}
 HXLINE(  72)			::Array< ::Dynamic> _this;
 HXDLIN(  72)			::Array< ::Dynamic> tmp4;
@@ -300,7 +306,7 @@ HXLINE(  73)					actions = tmp8;
 HXLINE(  73)					actions = ::Array_obj< ::Dynamic>::__new(0);
             				}
             			}
-HXLINE(  74)			if ((( (::String)(::Reflect_obj::field(cmd->attr,HX_("status",32,e7,fb,05))) ) == HX_("executing",b2,2a,0f,b1))) {
+HXLINE(  74)			if (::hx::IsEq( cmd->attr->get(HX_("status",32,e7,fb,05)),HX_("executing",b2,2a,0f,b1) )) {
             				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             				bool _hx_run( ::borogove::FormOption a){
             					HX_GC_STACKFRAME(&_hx_pos_8b2a8547b04ebfcd_76_getResult)
@@ -316,8 +322,8 @@ HXLINE(  76)					actions->push( ::borogove::FormOption_obj::__alloc( HX_CTX ,HX_
             				}
             			}
 HXLINE(  78)			actions->sort( ::Dynamic(new _hx_Closure_1(execute)));
-HXLINE(  80)			::String _hx_tmp4 = ( (::String)(::Reflect_obj::field(cmd->attr,HX_("status",32,e7,fb,05))) );
-HXLINE(  79)			this->result =  ::borogove::CommandSession_obj::__alloc( HX_CTX ,_hx_tmp4,( (::String)(::Reflect_obj::field(cmd->attr,HX_("sessionid",b1,74,4d,bb))) ),actions,forms,command);
+HXLINE(  80)			::String _hx_tmp4 = cmd->attr->get_string(HX_("status",32,e7,fb,05));
+HXLINE(  79)			this->result =  ::borogove::CommandSession_obj::__alloc( HX_CTX ,_hx_tmp4,cmd->attr->get_string(HX_("sessionid",b1,74,4d,bb)),actions,forms,command);
             		}
 HXLINE(  87)		return this->result;
             	}
@@ -335,7 +341,7 @@ HXLINE(  92)				 ::borogove::Stanza el = els->__get(_g).StaticCast<  ::borogove:
 HXDLIN(  92)				_g = (_g + 1);
 HXLINE(  93)				bool _hx_tmp;
 HXDLIN(  93)				if ((el->name == HX_("x",78,00,00,00))) {
-HXLINE(  93)					_hx_tmp = (( (::String)(::Reflect_obj::field(el->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:x:data",c2,e1,e9,7c));
+HXLINE(  93)					_hx_tmp = ::hx::IsEq( el->attr->get(HX_("xmlns",dc,31,74,60)),HX_("jabber:x:data",c2,e1,e9,7c) );
             				}
             				else {
 HXLINE(  93)					_hx_tmp = false;
@@ -345,7 +351,7 @@ HXLINE(  94)					fs->push( ::borogove::Form_obj::__alloc( HX_CTX ,el,null()));
             				}
 HXLINE(  96)				bool _hx_tmp1;
 HXDLIN(  96)				if ((el->name == HX_("x",78,00,00,00))) {
-HXLINE(  96)					_hx_tmp1 = (( (::String)(::Reflect_obj::field(el->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:x:oob",aa,8a,5f,ef));
+HXLINE(  96)					_hx_tmp1 = ::hx::IsEq( el->attr->get(HX_("xmlns",dc,31,74,60)),HX_("jabber:x:oob",aa,8a,5f,ef) );
             				}
             				else {
 HXLINE(  96)					_hx_tmp1 = false;
@@ -355,7 +361,7 @@ HXLINE(  97)					fs->push( ::borogove::Form_obj::__alloc( HX_CTX ,null(),el));
             				}
 HXLINE(  99)				bool _hx_tmp2;
 HXDLIN(  99)				if ((el->name == HX_("iq",e8,5b,00,00))) {
-HXLINE(  99)					_hx_tmp2 = (( (::String)(::Reflect_obj::field(el->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73));
+HXLINE(  99)					_hx_tmp2 = ::hx::IsEq( el->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) );
             				}
             				else {
 HXLINE(  99)					_hx_tmp2 = false;
@@ -372,16 +378,16 @@ HXLINE( 101)						formish = error->condition;
             					}
 HXLINE( 102)					fs->push( ::borogove::Form_obj::__alloc( HX_CTX , ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("result",dd,68,84,08))
-            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))))->textTag(HX_("instructions",a5,96,3f,6d),formish, ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("error",c8,cb,29,73)))),null()));
+            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->textTag(HX_("instructions",a5,96,3f,6d),formish, ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("error",c8,cb,29,73))),null()),null()));
             				}
 HXLINE( 104)				if ((el->name == HX_("note",f2,17,0a,49))) {
 HXLINE( 105)					 ::borogove::Stanza formish1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("result",dd,68,84,08))
-            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))));
+            						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null());
 HXDLIN( 105)					::String formish2 = el->getText();
 HXLINE( 106)					fs->push( ::borogove::Form_obj::__alloc( HX_CTX ,formish1->textTag(HX_("instructions",a5,96,3f,6d),formish2, ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("type",ba,f2,08,4d),( (::String)(::Reflect_obj::field(el->attr,HX_("type",ba,f2,08,4d))) )))),null()));
+            						->setFixed(0,HX_("type",ba,f2,08,4d),el->attr->get(HX_("type",ba,f2,08,4d)))),null()),null()));
             				}
             			}
             		}
diff --git a/Sources/c_borogove/src/borogove/queries/DiscoInfoGet.cpp b/Sources/c_borogove/src/borogove/queries/DiscoInfoGet.cpp
index d2eced8..06ab154 100644
--- a/Sources/c_borogove/src/borogove/queries/DiscoInfoGet.cpp
+++ b/Sources/c_borogove/src/borogove/queries/DiscoInfoGet.cpp
@@ -22,6 +22,12 @@
 #ifndef INCLUDED_borogove_queries_GenericQuery
 #include <borogove/queries/GenericQuery.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_ed0ef8fead0ee9f6_12_new,"borogove.queries.DiscoInfoGet","new",0x10b37175,"borogove.queries.DiscoInfoGet.new","borogove/queries/DiscoInfoGet.hx",12,0x692b3cd9)
 HX_LOCAL_STACK_FRAME(_hx_pos_ed0ef8fead0ee9f6_30_handleResponse,"borogove.queries.DiscoInfoGet","handleResponse",0x5689d354,"borogove.queries.DiscoInfoGet.handleResponse","borogove/queries/DiscoInfoGet.hx",30,0x692b3cd9)
@@ -43,7 +49,7 @@ HXLINE(  23)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  24)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
             			->setFixed(1,HX_("to",7b,65,00,00),to)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))))->tag(HX_("query",08,8b,ea,5d),attr)->up();
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null())->tag(HX_("query",08,8b,ea,5d),attr,null())->up();
             	}
 
 Dynamic DiscoInfoGet_obj::__CreateEmpty() { return new DiscoInfoGet_obj; }
@@ -84,7 +90,7 @@ HXLINE(  42)				return null();
             			}
 HXLINE(  44)			::Array< ::Dynamic> identities = q->allTags(HX_("identity",3e,45,2f,b9),null());
 HXLINE(  45)			::Array< ::Dynamic> features = q->allTags(HX_("feature",b6,f2,7c,1a),null());
-HXLINE(  47)			::String _hx_tmp = ( (::String)(::Reflect_obj::field(q->attr,HX_("node",02,0a,0a,49))) );
+HXLINE(  47)			::String _hx_tmp = q->attr->get_string(HX_("node",02,0a,0a,49));
 HXLINE(  48)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(identities->length);
 HXDLIN(  48)			{
 HXLINE(  48)				int _g = 0;
@@ -94,10 +100,10 @@ HXLINE(  48)					_g = (_g + 1);
 HXDLIN(  48)					int i = (_g - 1);
 HXDLIN(  48)					{
 HXLINE(  49)						 ::borogove::Stanza identity = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(identities,i)) );
-HXLINE(  50)						::String inValue = ( (::String)(::Reflect_obj::field(identity->attr,HX_("category",fe,2a,6c,ad))) );
-HXLINE(  51)						::String inValue1 = ( (::String)(::Reflect_obj::field(identity->attr,HX_("type",ba,f2,08,4d))) );
-HXLINE(  52)						::String inValue2 = ( (::String)(::Reflect_obj::field(identity->attr,HX_("name",4b,72,ff,48))) );
-HXLINE(  48)						 ::borogove::Identity inValue3 =  ::borogove::Identity_obj::__alloc( HX_CTX ,inValue,inValue1,inValue2,( (::String)(::Reflect_obj::field(identity->attr,HX_("xml:lang",f1,b1,be,5f))) ));
+HXLINE(  50)						::String inValue = identity->attr->get_string(HX_("category",fe,2a,6c,ad));
+HXLINE(  51)						::String inValue1 = identity->attr->get_string(HX_("type",ba,f2,08,4d));
+HXLINE(  52)						::String inValue2 = identity->attr->get_string(HX_("name",4b,72,ff,48));
+HXLINE(  48)						 ::borogove::Identity inValue3 =  ::borogove::Identity_obj::__alloc( HX_CTX ,inValue,inValue1,inValue2,identity->attr->get_string(HX_("xml:lang",f1,b1,be,5f)));
 HXDLIN(  48)						result->__unsafe_set(i,inValue3);
             					}
             				}
@@ -110,7 +116,7 @@ HXDLIN(  56)				while((_g2 < _g3)){
 HXLINE(  56)					_g2 = (_g2 + 1);
 HXDLIN(  56)					int i1 = (_g2 - 1);
 HXDLIN(  56)					{
-HXLINE(  56)						::String inValue4 = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(features,i1)) )->attr,HX_("var",e7,de,59,00))) );
+HXLINE(  56)						::String inValue4 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(features,i1)) )->attr->get_string(HX_("var",e7,de,59,00));
 HXDLIN(  56)						result1->__unsafe_set(i1,inValue4);
             					}
             				}
diff --git a/Sources/c_borogove/src/borogove/queries/DiscoItemsGet.cpp b/Sources/c_borogove/src/borogove/queries/DiscoItemsGet.cpp
index a7763ad..9d18f22 100644
--- a/Sources/c_borogove/src/borogove/queries/DiscoItemsGet.cpp
+++ b/Sources/c_borogove/src/borogove/queries/DiscoItemsGet.cpp
@@ -19,6 +19,12 @@
 #ifndef INCLUDED_borogove_queries_GenericQuery
 #include <borogove/queries/GenericQuery.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_86f8447d6718115f_13_new,"borogove.queries.DiscoItemsGet","new",0x44ec104d,"borogove.queries.DiscoItemsGet.new","borogove/queries/DiscoItemsGet.hx",13,0x8b2444c5)
 HX_LOCAL_STACK_FRAME(_hx_pos_86f8447d6718115f_30_handleResponse,"borogove.queries.DiscoItemsGet","handleResponse",0x3c7e737c,"borogove.queries.DiscoItemsGet.handleResponse","borogove/queries/DiscoItemsGet.hx",30,0x8b2444c5)
@@ -40,7 +46,7 @@ HXLINE(  23)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  24)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
             			->setFixed(1,HX_("to",7b,65,00,00),to)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))))->tag(HX_("query",08,8b,ea,5d),attr)->up();
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null())->tag(HX_("query",08,8b,ea,5d),attr,null())->up();
             	}
 
 Dynamic DiscoItemsGet_obj::__CreateEmpty() { return new DiscoItemsGet_obj; }
@@ -86,15 +92,15 @@ HXDLIN(  45)				::Array< ::Dynamic> _g1 = q->allTags(HX_("item",13,c5,bf,45),nul
 HXDLIN(  45)				while((_g < _g1->length)){
 HXLINE(  45)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
 HXDLIN(  45)					_g = (_g + 1);
-HXLINE(  46)					::String jid = ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) );
+HXLINE(  46)					::String jid = item->attr->get_string(HX_("jid",c5,ca,50,00));
 HXLINE(  47)					if (::hx::IsNotNull( jid )) {
 HXLINE(  48)						::Array< ::Dynamic> _hx_tmp = this->result;
 HXDLIN(  48)						 ::borogove::JID _hx_tmp1 = ::borogove::JID_obj::parse(jid);
-HXDLIN(  48)						::String _hx_tmp2 = ( (::String)(::Reflect_obj::field(item->attr,HX_("name",4b,72,ff,48))) );
+HXDLIN(  48)						::String _hx_tmp2 = item->attr->get_string(HX_("name",4b,72,ff,48));
 HXDLIN(  48)						_hx_tmp->push( ::Dynamic(::hx::Anon_obj::Create(3)
             							->setFixed(0,HX_("jid",c5,ca,50,00),_hx_tmp1)
             							->setFixed(1,HX_("name",4b,72,ff,48),_hx_tmp2)
-            							->setFixed(2,HX_("node",02,0a,0a,49),( (::String)(::Reflect_obj::field(item->attr,HX_("node",02,0a,0a,49))) ))));
+            							->setFixed(2,HX_("node",02,0a,0a,49),item->attr->get(HX_("node",02,0a,0a,49)))));
             					}
             				}
             			}
diff --git a/Sources/c_borogove/src/borogove/queries/ExtDiscoGet.cpp b/Sources/c_borogove/src/borogove/queries/ExtDiscoGet.cpp
index 5e5fd60..704d207 100644
--- a/Sources/c_borogove/src/borogove/queries/ExtDiscoGet.cpp
+++ b/Sources/c_borogove/src/borogove/queries/ExtDiscoGet.cpp
@@ -13,6 +13,12 @@
 #ifndef INCLUDED_borogove_queries_GenericQuery
 #include <borogove/queries/GenericQuery.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_7c20bf4cb6261d46_13_new,"borogove.queries.ExtDiscoGet","new",0xb0242afa,"borogove.queries.ExtDiscoGet.new","borogove/queries/ExtDiscoGet.hx",13,0x05e63a38)
 HX_LOCAL_STACK_FRAME(_hx_pos_7c20bf4cb6261d46_29_handleResponse,"borogove.queries.ExtDiscoGet","handleResponse",0x8bc5adef,"borogove.queries.ExtDiscoGet.handleResponse","borogove/queries/ExtDiscoGet.hx",29,0x05e63a38)
@@ -29,8 +35,8 @@ HXLINE(  22)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  23)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
             			->setFixed(1,HX_("to",7b,65,00,00),to)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))))->tag(HX_("services",9e,92,4b,e5), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)))->up();
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null())->tag(HX_("services",9e,92,4b,e5), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)),null())->up();
             	}
 
 Dynamic ExtDiscoGet_obj::__CreateEmpty() { return new ExtDiscoGet_obj; }
diff --git a/Sources/c_borogove/src/borogove/queries/HttpUploadSlot.cpp b/Sources/c_borogove/src/borogove/queries/HttpUploadSlot.cpp
index b5adfcd..54c1cec 100644
--- a/Sources/c_borogove/src/borogove/queries/HttpUploadSlot.cpp
+++ b/Sources/c_borogove/src/borogove/queries/HttpUploadSlot.cpp
@@ -1,18 +1,12 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
 #ifndef INCLUDED__UUIDv7_UUIDv7_Fields_
 #include <_UUIDv7/UUIDv7_Fields_.h>
 #endif
-#ifndef INCLUDED_borogove_Hash
-#include <borogove/Hash.h>
-#endif
 #ifndef INCLUDED_borogove_Stanza
 #include <borogove/Stanza.h>
 #endif
@@ -22,11 +16,11 @@
 #ifndef INCLUDED_borogove_queries_HttpUploadSlot
 #include <borogove/queries/HttpUploadSlot.h>
 #endif
-#ifndef INCLUDED_haxe_crypto_Base64
-#include <haxe/crypto/Base64.h>
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
 #endif
-#ifndef INCLUDED_haxe_io_Bytes
-#include <haxe/io/Bytes.h>
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
 #endif
 #ifndef INCLUDED_tink_core_NamedWith
 #include <tink/core/NamedWith.h>
@@ -36,12 +30,12 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_9d272fcc1f8cfff5_16_new,"borogove.queries.HttpUploadSlot","new",0xb6de630e,"borogove.queries.HttpUploadSlot.new","borogove/queries/HttpUploadSlot.hx",16,0x81278ce0)
-HX_LOCAL_STACK_FRAME(_hx_pos_9d272fcc1f8cfff5_35_handleResponse,"borogove.queries.HttpUploadSlot","handleResponse",0xee3b065b,"borogove.queries.HttpUploadSlot.handleResponse","borogove/queries/HttpUploadSlot.hx",35,0x81278ce0)
-HX_LOCAL_STACK_FRAME(_hx_pos_9d272fcc1f8cfff5_40_getResult,"borogove.queries.HttpUploadSlot","getResult",0x4035bb41,"borogove.queries.HttpUploadSlot.getResult","borogove/queries/HttpUploadSlot.hx",40,0x81278ce0)
+HX_LOCAL_STACK_FRAME(_hx_pos_9d272fcc1f8cfff5_32_handleResponse,"borogove.queries.HttpUploadSlot","handleResponse",0xee3b065b,"borogove.queries.HttpUploadSlot.handleResponse","borogove/queries/HttpUploadSlot.hx",32,0x81278ce0)
+HX_LOCAL_STACK_FRAME(_hx_pos_9d272fcc1f8cfff5_37_getResult,"borogove.queries.HttpUploadSlot","getResult",0x4035bb41,"borogove.queries.HttpUploadSlot.getResult","borogove/queries/HttpUploadSlot.hx",37,0x81278ce0)
 namespace borogove{
 namespace queries{
 
-void HttpUploadSlot_obj::__construct(::String to,::String filename,int size,::String mime,::Array< ::Dynamic> hashes){
+void HttpUploadSlot_obj::__construct(::String to,::String filename,int size,::String mime){
             	HX_GC_STACKFRAME(&_hx_pos_9d272fcc1f8cfff5_16_new)
 HXLINE(  18)		this->queryId = null();
 HXLINE(  17)		this->xmlns = HX_("urn:xmpp:http:upload:0",0d,db,46,68);
@@ -50,26 +44,14 @@ HXLINE(  24)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  25)		 ::borogove::Stanza _hx_tmp =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
             			->setFixed(1,HX_("to",7b,65,00,00),to)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))));
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null());
 HXLINE(  28)		::String _hx_tmp1 = this->xmlns;
 HXLINE(  25)		this->queryStanza = _hx_tmp->tag(HX_("request",4f,df,84,44), ::Dynamic(::hx::Anon_obj::Create(4)
             			->setFixed(0,HX_("content-type",8e,f1,71,89),mime)
             			->setFixed(1,HX_("size",c1,a0,53,4c),::Std_obj::string(size))
             			->setFixed(2,HX_("xmlns",dc,31,74,60),_hx_tmp1)
-            			->setFixed(3,HX_("filename",c7,2e,6a,77),filename)));
-HXLINE(  29)		{
-HXLINE(  29)			int _g = 0;
-HXDLIN(  29)			while((_g < hashes->length)){
-HXLINE(  29)				 ::borogove::Hash hash = hashes->__get(_g).StaticCast<  ::borogove::Hash >();
-HXDLIN(  29)				_g = (_g + 1);
-HXLINE(  30)				 ::borogove::Stanza _hx_tmp2 = this->queryStanza;
-HXDLIN(  30)				::String _hx_tmp3 = ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofData(hash->hash),null());
-HXDLIN(  30)				_hx_tmp2->textTag(HX_("hash",ce,2f,08,45),_hx_tmp3, ::Dynamic(::hx::Anon_obj::Create(2)
-            					->setFixed(0,HX_("algo",d3,ff,6f,40),hash->algorithm)
-            					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hashes:2",90,ad,87,c7))));
-            			}
-            		}
-HXLINE(  32)		this->queryStanza->up();
+            			->setFixed(3,HX_("filename",c7,2e,6a,77),filename)),null());
+HXLINE(  29)		this->queryStanza->up();
             	}
 
 Dynamic HttpUploadSlot_obj::__CreateEmpty() { return new HttpUploadSlot_obj; }
@@ -79,7 +61,7 @@ void *HttpUploadSlot_obj::_hx_vtable = 0;
 Dynamic HttpUploadSlot_obj::__Create(::hx::DynamicArray inArgs)
 {
 	::hx::ObjectPtr< HttpUploadSlot_obj > _hx_result = new HttpUploadSlot_obj();
-	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2],inArgs[3],inArgs[4]);
+	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2],inArgs[3]);
 	return _hx_result;
 }
 
@@ -92,63 +74,63 @@ bool HttpUploadSlot_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 void HttpUploadSlot_obj::handleResponse( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_9d272fcc1f8cfff5_35_handleResponse)
-HXLINE(  36)		this->responseStanza = stanza;
-HXLINE(  37)		this->finish();
+            	HX_STACKFRAME(&_hx_pos_9d272fcc1f8cfff5_32_handleResponse)
+HXLINE(  33)		this->responseStanza = stanza;
+HXLINE(  34)		this->finish();
             	}
 
 
  ::Dynamic HttpUploadSlot_obj::getResult(){
-            	HX_GC_STACKFRAME(&_hx_pos_9d272fcc1f8cfff5_40_getResult)
-HXLINE(  41)		if (::hx::IsNull( this->responseStanza )) {
-HXLINE(  42)			return null();
+            	HX_GC_STACKFRAME(&_hx_pos_9d272fcc1f8cfff5_37_getResult)
+HXLINE(  38)		if (::hx::IsNull( this->responseStanza )) {
+HXLINE(  39)			return null();
             		}
-HXLINE(  44)		if (::hx::IsNull( this->result )) {
-HXLINE(  45)			 ::borogove::Stanza q = this->responseStanza->getChild(HX_("slot",fe,dd,55,4c),this->xmlns);
-HXLINE(  46)			if (::hx::IsNull( q )) {
-HXLINE(  47)				return null();
+HXLINE(  41)		if (::hx::IsNull( this->result )) {
+HXLINE(  42)			 ::borogove::Stanza q = this->responseStanza->getChild(HX_("slot",fe,dd,55,4c),this->xmlns);
+HXLINE(  43)			if (::hx::IsNull( q )) {
+HXLINE(  44)				return null();
             			}
-HXLINE(  49)			::String get = q->findText(HX_("get@url",c5,56,50,12));
-HXLINE(  50)			if (::hx::IsNull( get )) {
-HXLINE(  50)				return null();
+HXLINE(  46)			::String get = q->findText(HX_("get@url",c5,56,50,12));
+HXLINE(  47)			if (::hx::IsNull( get )) {
+HXLINE(  47)				return null();
             			}
-HXLINE(  51)			::String put = q->findText(HX_("put@url",7e,49,47,ee));
-HXLINE(  52)			if (::hx::IsNull( put )) {
-HXLINE(  52)				return null();
+HXLINE(  48)			::String put = q->findText(HX_("put@url",7e,49,47,ee));
+HXLINE(  49)			if (::hx::IsNull( put )) {
+HXLINE(  49)				return null();
             			}
-HXLINE(  53)			::Array< ::Dynamic> headers = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(  54)			{
-HXLINE(  54)				int _g = 0;
-HXDLIN(  54)				::Array< ::Dynamic> _g1 = q->getChild(HX_("put",cf,62,55,00),null())->allTags(HX_("header",8d,09,00,fd),null());
-HXDLIN(  54)				while((_g < _g1->length)){
-HXLINE(  54)					 ::borogove::Stanza header = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(  54)					_g = (_g + 1);
-HXLINE(  55)					::String _hx_tmp = ( (::String)(::Reflect_obj::field(header->attr,HX_("name",4b,72,ff,48))) ).toLowerCase();
-HXDLIN(  55)					headers->push( ::tink::http::HeaderField_obj::__alloc( HX_CTX ,_hx_tmp,header->getText()));
+HXLINE(  50)			::Array< ::Dynamic> headers = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(  51)			{
+HXLINE(  51)				int _g = 0;
+HXDLIN(  51)				::Array< ::Dynamic> _g1 = q->getChild(HX_("put",cf,62,55,00),null())->allTags(HX_("header",8d,09,00,fd),null());
+HXDLIN(  51)				while((_g < _g1->length)){
+HXLINE(  51)					 ::borogove::Stanza header = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(  51)					_g = (_g + 1);
+HXLINE(  52)					::String _hx_tmp = header->attr->get_string(HX_("name",4b,72,ff,48)).toLowerCase();
+HXDLIN(  52)					headers->push( ::tink::http::HeaderField_obj::__alloc( HX_CTX ,_hx_tmp,header->getText()));
             				}
             			}
-HXLINE(  57)			this->result =  ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE(  54)			this->result =  ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("putHeaders",37,9f,1e,a4),headers)
             				->setFixed(1,HX_("get",96,80,4e,00),get)
             				->setFixed(2,HX_("put",cf,62,55,00),put));
             		}
-HXLINE(  59)		return this->result;
+HXLINE(  56)		return this->result;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(HttpUploadSlot_obj,getResult,return )
 
 
-::hx::ObjectPtr< HttpUploadSlot_obj > HttpUploadSlot_obj::__new(::String to,::String filename,int size,::String mime,::Array< ::Dynamic> hashes) {
+::hx::ObjectPtr< HttpUploadSlot_obj > HttpUploadSlot_obj::__new(::String to,::String filename,int size,::String mime) {
 	::hx::ObjectPtr< HttpUploadSlot_obj > __this = new HttpUploadSlot_obj();
-	__this->__construct(to,filename,size,mime,hashes);
+	__this->__construct(to,filename,size,mime);
 	return __this;
 }
 
-::hx::ObjectPtr< HttpUploadSlot_obj > HttpUploadSlot_obj::__alloc(::hx::Ctx *_hx_ctx,::String to,::String filename,int size,::String mime,::Array< ::Dynamic> hashes) {
+::hx::ObjectPtr< HttpUploadSlot_obj > HttpUploadSlot_obj::__alloc(::hx::Ctx *_hx_ctx,::String to,::String filename,int size,::String mime) {
 	HttpUploadSlot_obj *__this = (HttpUploadSlot_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(HttpUploadSlot_obj), true, "borogove.queries.HttpUploadSlot"));
 	*(void **)__this = HttpUploadSlot_obj::_hx_vtable;
-	__this->__construct(to,filename,size,mime,hashes);
+	__this->__construct(to,filename,size,mime);
 	return __this;
 }
 
diff --git a/Sources/c_borogove/src/borogove/queries/JabberIqGatewayGet.cpp b/Sources/c_borogove/src/borogove/queries/JabberIqGatewayGet.cpp
index c1b5ffe..868a737 100644
--- a/Sources/c_borogove/src/borogove/queries/JabberIqGatewayGet.cpp
+++ b/Sources/c_borogove/src/borogove/queries/JabberIqGatewayGet.cpp
@@ -13,9 +13,15 @@
 #ifndef INCLUDED_borogove_queries_JabberIqGatewayGet
 #include <borogove/queries/JabberIqGatewayGet.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
 #ifndef INCLUDED_haxe_ds_Either
 #include <haxe/ds/Either.h>
 #endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_13d3300d6eeec322_14_new,"borogove.queries.JabberIqGatewayGet","new",0x3a38f045,"borogove.queries.JabberIqGatewayGet.new","borogove/queries/JabberIqGatewayGet.hx",14,0x37870a89)
 HX_LOCAL_STACK_FRAME(_hx_pos_13d3300d6eeec322_34_handleResponse,"borogove.queries.JabberIqGatewayGet","handleResponse",0x64a22684,"borogove.queries.JabberIqGatewayGet.handleResponse","borogove/queries/JabberIqGatewayGet.hx",34,0x37870a89)
@@ -39,11 +45,11 @@ HXLINE(  25)			_hx_tmp = HX_("set",a2,9b,57,00);
 HXLINE(  23)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
             			->setFixed(1,HX_("to",7b,65,00,00),to)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),_hx_tmp)));
+            			->setFixed(2,HX_("type",ba,f2,08,4d),_hx_tmp)),null());
 HXLINE(  27)		 ::borogove::Stanza query = this->queryStanza->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)));
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)),null());
 HXLINE(  28)		if (::hx::IsNotNull( prompt )) {
-HXLINE(  29)			query->textTag(HX_("prompt",a4,51,58,b5),prompt, ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE(  29)			query->textTag(HX_("prompt",a4,51,58,b5),prompt, ::Dynamic(::hx::Anon_obj::Create(0)),null());
             		}
 HXLINE(  31)		query->up();
             	}
diff --git a/Sources/c_borogove/src/borogove/queries/MAMQuery.cpp b/Sources/c_borogove/src/borogove/queries/MAMQuery.cpp
index 580c03d..4925a00 100644
--- a/Sources/c_borogove/src/borogove/queries/MAMQuery.cpp
+++ b/Sources/c_borogove/src/borogove/queries/MAMQuery.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_Reflect
-#include <Reflect.h>
-#endif
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
@@ -22,6 +19,12 @@
 #ifndef INCLUDED_haxe_Exception
 #include <haxe/Exception.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_64437080bc77dd71_31_new,"borogove.queries.MAMQuery","new",0xc92a58b6,"borogove.queries.MAMQuery.new","borogove/queries/MAMQuery.hx",31,0xf037c1b8)
 HX_LOCAL_STACK_FRAME(_hx_pos_64437080bc77dd71_37_addStringField,"borogove.queries.MAMQuery","addStringField",0x44e298f2,"borogove.queries.MAMQuery.addStringField","borogove/queries/MAMQuery.hx",37,0xf037c1b8)
@@ -39,13 +42,13 @@ HXLINE(  58)		super::__construct();
 HXLINE(  60)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  61)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("to",7b,65,00,00),jid)
-            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("queryid",e3,b8,e9,95),this->queryId)
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),this->xmlns)))->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),this->xmlns)),null())->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
-            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))))->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))),null())->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
-            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))))->textTag(HX_("value",71,7f,b8,31),this->xmlns,null())->up();
+            			->setFixed(1,HX_("type",ba,f2,08,4d),HX_("hidden",6a,ff,95,4c))),null())->textTag(HX_("value",71,7f,b8,31),this->xmlns,null(),null())->up();
 HXLINE(  69)		this->addStringField(HX_("start",62,74,0b,84),( (::String)(params->__Field(HX_("startTime",8f,45,f0,05),::hx::paccDynamic)) ));
 HXLINE(  70)		this->addStringField(HX_("end",db,03,4d,00),( (::String)(params->__Field(HX_("endTime",88,85,21,2f),::hx::paccDynamic)) ));
 HXLINE(  71)		this->addStringField(HX_("with",06,76,f8,4e),( (::String)(params->__Field(HX_("with",06,76,f8,4e),::hx::paccDynamic)) ));
@@ -56,10 +59,10 @@ HXLINE(  76)		this->queryStanza->up();
 HXLINE(  78)		if (::hx::IsNotNull( params->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic) )) {
 HXLINE(  79)			 ::Dynamic page = params->__Field(HX_("page",4f,da,51,4a),::hx::paccDynamic);
 HXLINE(  80)			this->queryStanza->tag(HX_("set",a2,9b,57,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/rsm",98,7b,83,c6))));
+            				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/rsm",98,7b,83,c6))),null());
 HXLINE(  81)			if (::hx::IsNotNull( page->__Field(HX_("limit",3b,1f,01,75),::hx::paccDynamic) )) {
 HXLINE(  82)				 ::borogove::Stanza _hx_tmp = this->queryStanza;
-HXDLIN(  82)				_hx_tmp->textTag(HX_("max",a4,0a,53,00),::Std_obj::string( ::Dynamic(page->__Field(HX_("limit",3b,1f,01,75),::hx::paccDynamic))),null());
+HXDLIN(  82)				_hx_tmp->textTag(HX_("max",a4,0a,53,00),::Std_obj::string( ::Dynamic(page->__Field(HX_("limit",3b,1f,01,75),::hx::paccDynamic))),null(),null());
             			}
 HXLINE(  84)			bool _hx_tmp1;
 HXDLIN(  84)			if (::hx::IsNotNull( page->__Field(HX_("before",7f,54,32,9a),::hx::paccDynamic) )) {
@@ -72,11 +75,11 @@ HXDLIN(  84)			if (_hx_tmp1) {
 HXLINE(  85)				HX_STACK_DO_THROW( ::haxe::Exception_obj::__alloc( HX_CTX ,HX_("It is not allowed to request a page before AND a page after",72,f7,df,75),null(),null()));
             			}
 HXLINE(  87)			if (::hx::IsNotNull( page->__Field(HX_("before",7f,54,32,9a),::hx::paccDynamic) )) {
-HXLINE(  88)				this->queryStanza->textTag(HX_("before",7f,54,32,9a),( (::String)(page->__Field(HX_("before",7f,54,32,9a),::hx::paccDynamic)) ),null());
+HXLINE(  88)				this->queryStanza->textTag(HX_("before",7f,54,32,9a),( (::String)(page->__Field(HX_("before",7f,54,32,9a),::hx::paccDynamic)) ),null(),null());
             			}
             			else {
 HXLINE(  89)				if (::hx::IsNotNull( page->__Field(HX_("after",1c,66,a2,1d),::hx::paccDynamic) )) {
-HXLINE(  90)					this->queryStanza->textTag(HX_("after",1c,66,a2,1d),( (::String)(page->__Field(HX_("after",1c,66,a2,1d),::hx::paccDynamic)) ),null());
+HXLINE(  90)					this->queryStanza->textTag(HX_("after",1c,66,a2,1d),( (::String)(page->__Field(HX_("after",1c,66,a2,1d),::hx::paccDynamic)) ),null(),null());
             				}
             			}
 HXLINE(  92)			this->queryStanza->up();
@@ -108,7 +111,7 @@ HXLINE(  38)		if (::hx::IsNull( value )) {
 HXLINE(  39)			return;
             		}
 HXLINE(  41)		this->queryStanza->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),name)))->textTag(HX_("value",71,7f,b8,31),value,null())->up();
+            			->setFixed(0,HX_("var",e7,de,59,00),name)),null())->textTag(HX_("value",71,7f,b8,31),value,null(),null())->up();
             	}
 
 
@@ -120,13 +123,13 @@ HXLINE(  48)		if (::hx::IsNull( values )) {
 HXLINE(  49)			return;
             		}
 HXLINE(  51)		this->queryStanza->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("var",e7,de,59,00),name)));
+            			->setFixed(0,HX_("var",e7,de,59,00),name)),null());
 HXLINE(  52)		{
 HXLINE(  52)			int _g = 0;
 HXDLIN(  52)			while((_g < values->length)){
 HXLINE(  52)				::String value = values->__get(_g);
 HXDLIN(  52)				_g = (_g + 1);
-HXLINE(  53)				this->queryStanza->textTag(HX_("value",71,7f,b8,31),value,null());
+HXLINE(  53)				this->queryStanza->textTag(HX_("value",71,7f,b8,31),value,null(),null());
             			}
             		}
 HXLINE(  55)		this->queryStanza->up();
@@ -158,7 +161,7 @@ HXLINE( 107)				_hx_tmp1 = (fin->name != HX_("fin",cb,c1,4d,00));
 HXLINE( 107)				_hx_tmp1 = true;
             			}
 HXDLIN( 107)			if (!(_hx_tmp1)) {
-HXLINE( 107)				::String _hx_tmp2 = ( (::String)(::Reflect_obj::field(fin->attr,HX_("xmlns",dc,31,74,60))) );
+HXLINE( 107)				::String _hx_tmp2 = fin->attr->get_string(HX_("xmlns",dc,31,74,60));
 HXDLIN( 107)				_hx_tmp = (_hx_tmp2 != this->xmlns);
             			}
             			else {
@@ -170,8 +173,8 @@ HXLINE( 108)				return null();
 HXLINE( 110)			 ::borogove::Stanza rsmInfo = fin->getChild(HX_("set",a2,9b,57,00),HX_("http://jabber.org/protocol/rsm",98,7b,83,c6));
 HXLINE( 111)			::String count = rsmInfo->getChildText(HX_("count",cf,44,63,4a),null());
 HXLINE( 113)			bool _hx_tmp3;
-HXDLIN( 113)			if ((( (::String)(::Reflect_obj::field(fin->attr,HX_("complete",b9,00,c8,7f))) ) != HX_("true",4e,a7,03,4d))) {
-HXLINE( 113)				_hx_tmp3 = (( (::String)(::Reflect_obj::field(fin->attr,HX_("complete",b9,00,c8,7f))) ) == HX_("1",31,00,00,00));
+HXDLIN( 113)			if (::hx::IsNotEq( fin->attr->get(HX_("complete",b9,00,c8,7f)),HX_("true",4e,a7,03,4d) )) {
+HXLINE( 113)				_hx_tmp3 = ::hx::IsEq( fin->attr->get(HX_("complete",b9,00,c8,7f)),HX_("1",31,00,00,00) );
             			}
             			else {
 HXLINE( 113)				_hx_tmp3 = true;
diff --git a/Sources/c_borogove/src/borogove/queries/MucSettingsGet.cpp b/Sources/c_borogove/src/borogove/queries/MucSettingsGet.cpp
new file mode 100644
index 0000000..26cef00
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/queries/MucSettingsGet.cpp
@@ -0,0 +1,225 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED__UUIDv7_UUIDv7_Fields_
+#include <_UUIDv7/UUIDv7_Fields_.h>
+#endif
+#ifndef INCLUDED_borogove_Stanza
+#include <borogove/Stanza.h>
+#endif
+#ifndef INCLUDED_borogove_StanzaError
+#include <borogove/StanzaError.h>
+#endif
+#ifndef INCLUDED_borogove_queries_GenericQuery
+#include <borogove/queries/GenericQuery.h>
+#endif
+#ifndef INCLUDED_borogove_queries_MucSettingsGet
+#include <borogove/queries/MucSettingsGet.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_c7ef9399871ba990_6_new,"borogove.queries.MucSettingsGet","new",0x266cf07f,"borogove.queries.MucSettingsGet.new","borogove/queries/MucSettingsGet.hx",6,0xd44f388f)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7ef9399871ba990_16_handleResponse,"borogove.queries.MucSettingsGet","handleResponse",0x224cfc8a,"borogove.queries.MucSettingsGet.handleResponse","borogove/queries/MucSettingsGet.hx",16,0xd44f388f)
+HX_LOCAL_STACK_FRAME(_hx_pos_c7ef9399871ba990_24_getResult,"borogove.queries.MucSettingsGet","getResult",0x7ba57372,"borogove.queries.MucSettingsGet.getResult","borogove/queries/MucSettingsGet.hx",24,0xd44f388f)
+namespace borogove{
+namespace queries{
+
+void MucSettingsGet_obj::__construct(::String to){
+            	HX_GC_STACKFRAME(&_hx_pos_c7ef9399871ba990_6_new)
+HXLINE(   8)		this->error = null();
+HXLINE(  10)		super::__construct();
+HXLINE(  11)		::String _hx_tmp = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXDLIN(  11)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
+            			->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp)
+            			->setFixed(1,HX_("to",7b,65,00,00),to)
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null())->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#owner",77,aa,5b,76))),null())->up();
+            	}
+
+Dynamic MucSettingsGet_obj::__CreateEmpty() { return new MucSettingsGet_obj; }
+
+void *MucSettingsGet_obj::_hx_vtable = 0;
+
+Dynamic MucSettingsGet_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< MucSettingsGet_obj > _hx_result = new MucSettingsGet_obj();
+	_hx_result->__construct(inArgs[0]);
+	return _hx_result;
+}
+
+bool MucSettingsGet_obj::_hx_isInstanceOf(int inClassId) {
+	if (inClassId<=(int)0x7c285bb6) {
+		return inClassId==(int)0x00000001 || inClassId==(int)0x7c285bb6;
+	} else {
+		return inClassId==(int)0x7ebf24bd;
+	}
+}
+
+void MucSettingsGet_obj::handleResponse( ::borogove::Stanza stanza){
+            	HX_STACKFRAME(&_hx_pos_c7ef9399871ba990_16_handleResponse)
+HXLINE(  17)		this->responseStanza = stanza;
+HXLINE(  18)		if (::hx::IsEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) )) {
+HXLINE(  19)			::String tmp = stanza->getError()->text;
+HXDLIN(  19)			::String tmp1;
+HXDLIN(  19)			if (::hx::IsNotNull( tmp )) {
+HXLINE(  19)				tmp1 = tmp;
+            			}
+            			else {
+HXLINE(  19)				tmp1 = stanza->getError()->condition;
+            			}
+HXDLIN(  19)			::String _hx_tmp;
+HXDLIN(  19)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(  19)				_hx_tmp = tmp1;
+            			}
+            			else {
+HXLINE(  19)				_hx_tmp = HX_("error",c8,cb,29,73);
+            			}
+HXDLIN(  19)			this->error = _hx_tmp;
+            		}
+HXLINE(  21)		this->finish();
+            	}
+
+
+ ::borogove::Stanza MucSettingsGet_obj::getResult(){
+            	HX_STACKFRAME(&_hx_pos_c7ef9399871ba990_24_getResult)
+HXLINE(  25)		bool _hx_tmp;
+HXDLIN(  25)		if (::hx::IsNotNull( this->responseStanza )) {
+HXLINE(  25)			_hx_tmp = ::hx::IsNotNull( this->error );
+            		}
+            		else {
+HXLINE(  25)			_hx_tmp = true;
+            		}
+HXDLIN(  25)		if (_hx_tmp) {
+HXLINE(  25)			return null();
+            		}
+HXLINE(  27)		 ::borogove::Stanza query = this->responseStanza->getChild(HX_("query",08,8b,ea,5d),HX_("http://jabber.org/protocol/muc#owner",77,aa,5b,76));
+HXLINE(  28)		if (::hx::IsNull( query )) {
+HXLINE(  28)			return null();
+            		}
+HXLINE(  30)		 ::borogove::Stanza x = query->getChild(HX_("x",78,00,00,00),HX_("jabber:x:data",c2,e1,e9,7c));
+HXLINE(  31)		if (::hx::IsNull( x )) {
+HXLINE(  31)			return null();
+            		}
+HXLINE(  33)		return x;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(MucSettingsGet_obj,getResult,return )
+
+
+::hx::ObjectPtr< MucSettingsGet_obj > MucSettingsGet_obj::__new(::String to) {
+	::hx::ObjectPtr< MucSettingsGet_obj > __this = new MucSettingsGet_obj();
+	__this->__construct(to);
+	return __this;
+}
+
+::hx::ObjectPtr< MucSettingsGet_obj > MucSettingsGet_obj::__alloc(::hx::Ctx *_hx_ctx,::String to) {
+	MucSettingsGet_obj *__this = (MucSettingsGet_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(MucSettingsGet_obj), true, "borogove.queries.MucSettingsGet"));
+	*(void **)__this = MucSettingsGet_obj::_hx_vtable;
+	__this->__construct(to);
+	return __this;
+}
+
+MucSettingsGet_obj::MucSettingsGet_obj()
+{
+}
+
+void MucSettingsGet_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(MucSettingsGet);
+	HX_MARK_MEMBER_NAME(responseStanza,"responseStanza");
+	HX_MARK_MEMBER_NAME(error,"error");
+	 ::borogove::queries::GenericQuery_obj::__Mark(HX_MARK_ARG);
+	HX_MARK_END_CLASS();
+}
+
+void MucSettingsGet_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(responseStanza,"responseStanza");
+	HX_VISIT_MEMBER_NAME(error,"error");
+	 ::borogove::queries::GenericQuery_obj::__Visit(HX_VISIT_ARG);
+}
+
+::hx::Val MucSettingsGet_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 5:
+		if (HX_FIELD_EQ(inName,"error") ) { return ::hx::Val( error ); }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"getResult") ) { return ::hx::Val( getResult_dyn() ); }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"responseStanza") ) { return ::hx::Val( responseStanza ); }
+		if (HX_FIELD_EQ(inName,"handleResponse") ) { return ::hx::Val( handleResponse_dyn() ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+::hx::Val MucSettingsGet_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 5:
+		if (HX_FIELD_EQ(inName,"error") ) { error=inValue.Cast< ::String >(); return inValue; }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"responseStanza") ) { responseStanza=inValue.Cast<  ::borogove::Stanza >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+void MucSettingsGet_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("responseStanza",56,d7,9f,78));
+	outFields->push(HX_("error",c8,cb,29,73));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo MucSettingsGet_obj_sMemberStorageInfo[] = {
+	{::hx::fsObject /*  ::borogove::Stanza */ ,(int)offsetof(MucSettingsGet_obj,responseStanza),HX_("responseStanza",56,d7,9f,78)},
+	{::hx::fsString,(int)offsetof(MucSettingsGet_obj,error),HX_("error",c8,cb,29,73)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo *MucSettingsGet_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String MucSettingsGet_obj_sMemberFields[] = {
+	HX_("responseStanza",56,d7,9f,78),
+	HX_("error",c8,cb,29,73),
+	HX_("handleResponse",49,d6,e3,ef),
+	HX_("getResult",13,f2,da,84),
+	::String(null()) };
+
+::hx::Class MucSettingsGet_obj::__mClass;
+
+void MucSettingsGet_obj::__register()
+{
+	MucSettingsGet_obj _hx_dummy;
+	MucSettingsGet_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.queries.MucSettingsGet",0d,45,f5,c6);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(MucSettingsGet_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< MucSettingsGet_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = MucSettingsGet_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = MucSettingsGet_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace borogove
+} // end namespace queries
diff --git a/Sources/c_borogove/src/borogove/queries/MucSettingsSubmit.cpp b/Sources/c_borogove/src/borogove/queries/MucSettingsSubmit.cpp
new file mode 100644
index 0000000..e10a93b
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/queries/MucSettingsSubmit.cpp
@@ -0,0 +1,217 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED__UUIDv7_UUIDv7_Fields_
+#include <_UUIDv7/UUIDv7_Fields_.h>
+#endif
+#ifndef INCLUDED_borogove_Stanza
+#include <borogove/Stanza.h>
+#endif
+#ifndef INCLUDED_borogove_StanzaError
+#include <borogove/StanzaError.h>
+#endif
+#ifndef INCLUDED_borogove_queries_GenericQuery
+#include <borogove/queries/GenericQuery.h>
+#endif
+#ifndef INCLUDED_borogove_queries_MucSettingsSubmit
+#include <borogove/queries/MucSettingsSubmit.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_7f311f26785587ce_7_new,"borogove.queries.MucSettingsSubmit","new",0x7858ad73,"borogove.queries.MucSettingsSubmit.new","borogove/queries/MucSettingsSubmit.hx",7,0x34dfb75f)
+HX_LOCAL_STACK_FRAME(_hx_pos_7f311f26785587ce_18_handleResponse,"borogove.queries.MucSettingsSubmit","handleResponse",0x51373c16,"borogove.queries.MucSettingsSubmit.handleResponse","borogove/queries/MucSettingsSubmit.hx",18,0x34dfb75f)
+HX_LOCAL_STACK_FRAME(_hx_pos_7f311f26785587ce_26_getResult,"borogove.queries.MucSettingsSubmit","getResult",0xf57b5f66,"borogove.queries.MucSettingsSubmit.getResult","borogove/queries/MucSettingsSubmit.hx",26,0x34dfb75f)
+namespace borogove{
+namespace queries{
+
+void MucSettingsSubmit_obj::__construct(::String to, ::borogove::Stanza submitForm){
+            	HX_GC_STACKFRAME(&_hx_pos_7f311f26785587ce_7_new)
+HXLINE(   9)		this->error = null();
+HXLINE(  11)		super::__construct();
+HXLINE(  12)		::String _hx_tmp = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
+HXDLIN(  12)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
+            			->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp)
+            			->setFixed(1,HX_("to",7b,65,00,00),to)
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null())->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#owner",77,aa,5b,76))),null())->addChild(submitForm)->up();
+            	}
+
+Dynamic MucSettingsSubmit_obj::__CreateEmpty() { return new MucSettingsSubmit_obj; }
+
+void *MucSettingsSubmit_obj::_hx_vtable = 0;
+
+Dynamic MucSettingsSubmit_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< MucSettingsSubmit_obj > _hx_result = new MucSettingsSubmit_obj();
+	_hx_result->__construct(inArgs[0],inArgs[1]);
+	return _hx_result;
+}
+
+bool MucSettingsSubmit_obj::_hx_isInstanceOf(int inClassId) {
+	if (inClassId<=(int)0x425b8651) {
+		return inClassId==(int)0x00000001 || inClassId==(int)0x425b8651;
+	} else {
+		return inClassId==(int)0x7c285bb6;
+	}
+}
+
+void MucSettingsSubmit_obj::handleResponse( ::borogove::Stanza stanza){
+            	HX_STACKFRAME(&_hx_pos_7f311f26785587ce_18_handleResponse)
+HXLINE(  19)		this->responseStanza = stanza;
+HXLINE(  20)		if (::hx::IsEq( stanza->attr->get(HX_("type",ba,f2,08,4d)),HX_("error",c8,cb,29,73) )) {
+HXLINE(  21)			::String tmp = stanza->getError()->text;
+HXDLIN(  21)			::String tmp1;
+HXDLIN(  21)			if (::hx::IsNotNull( tmp )) {
+HXLINE(  21)				tmp1 = tmp;
+            			}
+            			else {
+HXLINE(  21)				tmp1 = stanza->getError()->condition;
+            			}
+HXDLIN(  21)			::String _hx_tmp;
+HXDLIN(  21)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(  21)				_hx_tmp = tmp1;
+            			}
+            			else {
+HXLINE(  21)				_hx_tmp = HX_("error",c8,cb,29,73);
+            			}
+HXDLIN(  21)			this->error = _hx_tmp;
+            		}
+HXLINE(  23)		this->finish();
+            	}
+
+
+bool MucSettingsSubmit_obj::getResult(){
+            	HX_STACKFRAME(&_hx_pos_7f311f26785587ce_26_getResult)
+HXLINE(  27)		bool _hx_tmp;
+HXDLIN(  27)		if (::hx::IsNotNull( this->responseStanza )) {
+HXLINE(  27)			_hx_tmp = ::hx::IsNotNull( this->error );
+            		}
+            		else {
+HXLINE(  27)			_hx_tmp = true;
+            		}
+HXDLIN(  27)		if (_hx_tmp) {
+HXLINE(  27)			return false;
+            		}
+HXLINE(  29)		return true;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(MucSettingsSubmit_obj,getResult,return )
+
+
+::hx::ObjectPtr< MucSettingsSubmit_obj > MucSettingsSubmit_obj::__new(::String to, ::borogove::Stanza submitForm) {
+	::hx::ObjectPtr< MucSettingsSubmit_obj > __this = new MucSettingsSubmit_obj();
+	__this->__construct(to,submitForm);
+	return __this;
+}
+
+::hx::ObjectPtr< MucSettingsSubmit_obj > MucSettingsSubmit_obj::__alloc(::hx::Ctx *_hx_ctx,::String to, ::borogove::Stanza submitForm) {
+	MucSettingsSubmit_obj *__this = (MucSettingsSubmit_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(MucSettingsSubmit_obj), true, "borogove.queries.MucSettingsSubmit"));
+	*(void **)__this = MucSettingsSubmit_obj::_hx_vtable;
+	__this->__construct(to,submitForm);
+	return __this;
+}
+
+MucSettingsSubmit_obj::MucSettingsSubmit_obj()
+{
+}
+
+void MucSettingsSubmit_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(MucSettingsSubmit);
+	HX_MARK_MEMBER_NAME(responseStanza,"responseStanza");
+	HX_MARK_MEMBER_NAME(error,"error");
+	 ::borogove::queries::GenericQuery_obj::__Mark(HX_MARK_ARG);
+	HX_MARK_END_CLASS();
+}
+
+void MucSettingsSubmit_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(responseStanza,"responseStanza");
+	HX_VISIT_MEMBER_NAME(error,"error");
+	 ::borogove::queries::GenericQuery_obj::__Visit(HX_VISIT_ARG);
+}
+
+::hx::Val MucSettingsSubmit_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 5:
+		if (HX_FIELD_EQ(inName,"error") ) { return ::hx::Val( error ); }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"getResult") ) { return ::hx::Val( getResult_dyn() ); }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"responseStanza") ) { return ::hx::Val( responseStanza ); }
+		if (HX_FIELD_EQ(inName,"handleResponse") ) { return ::hx::Val( handleResponse_dyn() ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+::hx::Val MucSettingsSubmit_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 5:
+		if (HX_FIELD_EQ(inName,"error") ) { error=inValue.Cast< ::String >(); return inValue; }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"responseStanza") ) { responseStanza=inValue.Cast<  ::borogove::Stanza >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+void MucSettingsSubmit_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("responseStanza",56,d7,9f,78));
+	outFields->push(HX_("error",c8,cb,29,73));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo MucSettingsSubmit_obj_sMemberStorageInfo[] = {
+	{::hx::fsObject /*  ::borogove::Stanza */ ,(int)offsetof(MucSettingsSubmit_obj,responseStanza),HX_("responseStanza",56,d7,9f,78)},
+	{::hx::fsString,(int)offsetof(MucSettingsSubmit_obj,error),HX_("error",c8,cb,29,73)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo *MucSettingsSubmit_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String MucSettingsSubmit_obj_sMemberFields[] = {
+	HX_("responseStanza",56,d7,9f,78),
+	HX_("error",c8,cb,29,73),
+	HX_("handleResponse",49,d6,e3,ef),
+	HX_("getResult",13,f2,da,84),
+	::String(null()) };
+
+::hx::Class MucSettingsSubmit_obj::__mClass;
+
+void MucSettingsSubmit_obj::__register()
+{
+	MucSettingsSubmit_obj _hx_dummy;
+	MucSettingsSubmit_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.queries.MucSettingsSubmit",01,78,9a,db);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(MucSettingsSubmit_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< MucSettingsSubmit_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = MucSettingsSubmit_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = MucSettingsSubmit_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace borogove
+} // end namespace queries
diff --git a/Sources/c_borogove/src/borogove/queries/PubsubGet.cpp b/Sources/c_borogove/src/borogove/queries/PubsubGet.cpp
index 25af093..363c84d 100644
--- a/Sources/c_borogove/src/borogove/queries/PubsubGet.cpp
+++ b/Sources/c_borogove/src/borogove/queries/PubsubGet.cpp
@@ -16,6 +16,12 @@
 #ifndef INCLUDED_borogove_queries_PubsubGet
 #include <borogove/queries/PubsubGet.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_8b5dd76f08720c34_11_new,"borogove.queries.PubsubGet","new",0x0119f3b0,"borogove.queries.PubsubGet.new","borogove/queries/PubsubGet.hx",11,0xf925f5c2)
 HX_LOCAL_STACK_FRAME(_hx_pos_8b5dd76f08720c34_33_handleResponse,"borogove.queries.PubsubGet","handleResponse",0x70acd4f9,"borogove.queries.PubsubGet.handleResponse","borogove/queries/PubsubGet.hx",33,0xf925f5c2)
@@ -37,13 +43,13 @@ HXLINE(  22)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  23)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
             			->setFixed(1,HX_("to",7b,65,00,00),to)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))));
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null());
 HXLINE(  24)		 ::borogove::Stanza items = this->queryStanza->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)))->tag(HX_("items",00,ac,0c,c2), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("node",02,0a,0a,49),node)));
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)),null())->tag(HX_("items",00,ac,0c,c2), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("node",02,0a,0a,49),node)),null());
 HXLINE(  27)		if (::hx::IsNotNull( itemId )) {
 HXLINE(  28)			items->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("id",db,5b,00,00),itemId)))->up();
+            				->setFixed(0,HX_("id",db,5b,00,00),itemId)),null())->up();
             		}
 HXLINE(  30)		this->queryStanza->up()->up();
             	}
@@ -88,8 +94,8 @@ HXLINE(  47)			 ::borogove::Stanza items = q->getChild(HX_("items",00,ac,0c,c2),
 HXLINE(  48)			if (::hx::IsNull( items )) {
 HXLINE(  49)				return ::Array_obj< ::Dynamic>::__new(0);
             			}
-HXLINE(  51)			if (::hx::IsNull( ( (::String)(::Reflect_obj::field(items->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE(  51)				::Reflect_obj::setField(items->attr,HX_("xmlns",dc,31,74,60),this->xmlns);
+HXLINE(  51)			if (::hx::IsNull( items->attr->get(HX_("xmlns",dc,31,74,60)) )) {
+HXLINE(  51)				items->attr->set(HX_("xmlns",dc,31,74,60),this->xmlns);
             			}
 HXLINE(  53)			this->result = items->allTags(HX_("item",13,c5,bf,45),null());
             		}
diff --git a/Sources/c_borogove/src/borogove/queries/Push2Disable.cpp b/Sources/c_borogove/src/borogove/queries/Push2Disable.cpp
index a9e8e8c..e091bec 100644
--- a/Sources/c_borogove/src/borogove/queries/Push2Disable.cpp
+++ b/Sources/c_borogove/src/borogove/queries/Push2Disable.cpp
@@ -13,6 +13,12 @@
 #ifndef INCLUDED_borogove_queries_Push2Disable
 #include <borogove/queries/Push2Disable.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_888b8aba8e0d2e4e_10_new,"borogove.queries.Push2Disable","new",0xf0da31b7,"borogove.queries.Push2Disable.new","borogove/queries/Push2Disable.hx",10,0xa392bad7)
 HX_LOCAL_STACK_FRAME(_hx_pos_888b8aba8e0d2e4e_25_handleResponse,"borogove.queries.Push2Disable","handleResponse",0x41b55652,"borogove.queries.Push2Disable.handleResponse","borogove/queries/Push2Disable.hx",25,0xa392bad7)
@@ -28,9 +34,9 @@ HXLINE(  17)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  18)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
             			->setFixed(1,HX_("to",7b,65,00,00),to)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))));
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null());
 HXLINE(  22)		this->queryStanza->tag(HX_("disable",e8,69,58,b1), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)));
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)),null());
             	}
 
 Dynamic Push2Disable_obj::__CreateEmpty() { return new Push2Disable_obj; }
diff --git a/Sources/c_borogove/src/borogove/queries/Push2Enable.cpp b/Sources/c_borogove/src/borogove/queries/Push2Enable.cpp
index e9f5413..24d5068 100644
--- a/Sources/c_borogove/src/borogove/queries/Push2Enable.cpp
+++ b/Sources/c_borogove/src/borogove/queries/Push2Enable.cpp
@@ -43,15 +43,15 @@ HXLINE(  17)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  18)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
             			->setFixed(1,HX_("to",7b,65,00,00),to)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))));
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))),null());
 HXLINE(  22)		 ::borogove::Stanza enable = this->queryStanza->tag(HX_("enable",83,ae,87,f8), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)));
-HXLINE(  23)		enable->textTag(HX_("service",35,1c,2d,02),service,null());
-HXLINE(  24)		enable->textTag(HX_("client",4b,ca,4f,0a),client,null());
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)),null());
+HXLINE(  23)		enable->textTag(HX_("service",35,1c,2d,02),service,null(),null());
+HXLINE(  24)		enable->textTag(HX_("client",4b,ca,4f,0a),client,null(),null());
 HXLINE(  25)		 ::borogove::Stanza match = enable->tag(HX_("match",45,49,23,03), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("profile",29,49,49,f3),HX_("urn:xmpp:push2:match:important",2f,d1,6d,52))));
+            			->setFixed(0,HX_("profile",29,49,49,f3),HX_("urn:xmpp:push2:match:important",2f,d1,6d,52))),null());
 HXLINE(  26)		if ((grace > 0)) {
-HXLINE(  26)			match->textTag(HX_("grace",f8,03,ea,99),::Std_obj::string(grace),null());
+HXLINE(  26)			match->textTag(HX_("grace",f8,03,ea,99),::Std_obj::string(grace),null(),null());
             		}
 HXLINE(  27)		{
 HXLINE(  27)			int _g = 0;
@@ -59,23 +59,23 @@ HXDLIN(  27)			while((_g < filters->length)){
 HXLINE(  27)				 ::Dynamic filter = filters->__get(_g);
 HXDLIN(  27)				_g = (_g + 1);
 HXLINE(  28)				 ::borogove::Stanza filterel = match->tag(HX_("filter",b8,1f,35,85), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("jid",c5,ca,50,00), ::Dynamic(filter->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)))));
+            					->setFixed(0,HX_("jid",c5,ca,50,00), ::Dynamic(filter->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)))),null());
 HXLINE(  29)				if (( (bool)(filter->__Field(HX_("mention",ea,9e,bf,b9),::hx::paccDynamic)) )) {
-HXLINE(  29)					filterel->tag(HX_("mention",ea,9e,bf,b9),null())->up();
+HXLINE(  29)					filterel->tag(HX_("mention",ea,9e,bf,b9),null(),null())->up();
             				}
 HXLINE(  30)				if (( (bool)(filter->__Field(HX_("reply",2a,09,c6,e6),::hx::paccDynamic)) )) {
-HXLINE(  30)					filterel->tag(HX_("reply",2a,09,c6,e6),null())->up();
+HXLINE(  30)					filterel->tag(HX_("reply",2a,09,c6,e6),null(),null())->up();
             				}
 HXLINE(  31)				filterel->up();
             			}
             		}
 HXLINE(  33)		 ::borogove::Stanza send = match->tag(HX_("send",48,8d,50,4c), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:push2:send:sce+rfc8291+rfc8292:0",04,95,a2,be))));
-HXLINE(  34)		send->textTag(HX_("ua-public",ca,9b,ab,ca),::haxe::crypto::Base64_obj::encode(ua_public,null()),null());
-HXLINE(  35)		send->textTag(HX_("auth-secret",f5,4b,c1,3b),::haxe::crypto::Base64_obj::encode(auth_secret,null()),null());
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:push2:send:sce+rfc8291+rfc8292:0",04,95,a2,be))),null());
+HXLINE(  34)		send->textTag(HX_("ua-public",ca,9b,ab,ca),::haxe::crypto::Base64_obj::encode(ua_public,null()),null(),null());
+HXLINE(  35)		send->textTag(HX_("auth-secret",f5,4b,c1,3b),::haxe::crypto::Base64_obj::encode(auth_secret,null()),null(),null());
 HXLINE(  36)		if (::hx::IsNotNull( jwt_alg )) {
-HXLINE(  37)			send->textTag(HX_("jwt-alg",96,f9,de,b4),jwt_alg,null());
-HXLINE(  38)			send->textTag(HX_("jwt-key",19,8a,e6,b4),::haxe::crypto::Base64_obj::encode(jwt_key,null()),null());
+HXLINE(  37)			send->textTag(HX_("jwt-alg",96,f9,de,b4),jwt_alg,null(),null());
+HXLINE(  38)			send->textTag(HX_("jwt-key",19,8a,e6,b4),::haxe::crypto::Base64_obj::encode(jwt_key,null()),null(),null());
 HXLINE(  39)			{
 HXLINE(  39)				::Dynamic map = jwt_claims;
 HXDLIN(  39)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
@@ -83,7 +83,7 @@ HXDLIN(  39)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx:
 HXLINE(  39)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
 HXDLIN(  39)					::String _g_value = ( (::String)(::haxe::IMap_obj::get(map,key)) );
 HXLINE(  40)					send->textTag(HX_("jwt-claim",76,02,8a,0c),_g_value, ::Dynamic(::hx::Anon_obj::Create(1)
-            						->setFixed(0,HX_("name",4b,72,ff,48),key)));
+            						->setFixed(0,HX_("name",4b,72,ff,48),key)),null());
             				}
             			}
             		}
diff --git a/Sources/c_borogove/src/borogove/queries/RosterGet.cpp b/Sources/c_borogove/src/borogove/queries/RosterGet.cpp
index fb86541..6a92eb9 100644
--- a/Sources/c_borogove/src/borogove/queries/RosterGet.cpp
+++ b/Sources/c_borogove/src/borogove/queries/RosterGet.cpp
@@ -16,6 +16,12 @@
 #ifndef INCLUDED_borogove_queries_RosterGet
 #include <borogove/queries/RosterGet.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_0b59605641f7a716_12_new,"borogove.queries.RosterGet","new",0xb53e8608,"borogove.queries.RosterGet.new","borogove/queries/RosterGet.hx",12,0x1581f66a)
 HX_LOCAL_STACK_FRAME(_hx_pos_0b59605641f7a716_29_handleResponse,"borogove.queries.RosterGet","handleResponse",0x6d5b31a1,"borogove.queries.RosterGet.handleResponse","borogove/queries/RosterGet.hx",29,0x1581f66a)
@@ -36,7 +42,7 @@ HXLINE(  21)			::Reflect_obj::setField(attr,HX_("ver",63,e2,59,00),ver);
             		}
 HXLINE(  23)		this->queryId = ::_UUIDv7::UUIDv7_Fields__obj::uuidv7();
 HXLINE(  24)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))))->tag(HX_("query",08,8b,ea,5d),attr)->up();
+            			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null())->tag(HX_("query",08,8b,ea,5d),attr,null())->up();
             	}
 
 Dynamic RosterGet_obj::__CreateEmpty() { return new RosterGet_obj; }
@@ -75,45 +81,10 @@ HXLINE(  39)			 ::borogove::Stanza q = this->responseStanza->getChild(HX_("query
 HXLINE(  40)			if (::hx::IsNull( q )) {
 HXLINE(  41)				return ::Array_obj< ::Dynamic>::__new(0);
             			}
-HXLINE(  43)			this->ver = ( (::String)(::Reflect_obj::field(q->attr,HX_("ver",63,e2,59,00))) );
-HXLINE(  45)			::Array< ::Dynamic> _this = q->allTags(HX_("item",13,c5,bf,45),null());
-HXDLIN(  45)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN(  45)			{
-HXLINE(  45)				int _g = 0;
-HXDLIN(  45)				int _g1 = _this->length;
-HXDLIN(  45)				while((_g < _g1)){
-HXLINE(  45)					_g = (_g + 1);
-HXDLIN(  45)					int i = (_g - 1);
-HXDLIN(  45)					{
-HXLINE(  45)						 ::borogove::Stanza item = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) );
-HXLINE(  46)						::String inValue = ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) );
-HXLINE(  47)						::String inValue1 = ( (::String)(::Reflect_obj::field(item->attr,HX_("name",4b,72,ff,48))) );
-HXLINE(  48)						::String inValue2 = ( (::String)(::Reflect_obj::field(item->attr,HX_("subscription",1d,ff,00,36))) );
-HXLINE(  49)						::Array< ::Dynamic> _this1 = item->allTags(HX_("group",3f,b3,f4,99),null());
-HXDLIN(  49)						::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
-HXDLIN(  49)						{
-HXLINE(  49)							int _g2 = 0;
-HXDLIN(  49)							int _g3 = _this1->length;
-HXDLIN(  49)							while((_g2 < _g3)){
-HXLINE(  49)								_g2 = (_g2 + 1);
-HXDLIN(  49)								int i1 = (_g2 - 1);
-HXDLIN(  49)								{
-HXLINE(  49)									::String inValue3 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this1,i1)) )->getText();
-HXDLIN(  49)									result1->__unsafe_set(i1,inValue3);
-            								}
-            							}
-            						}
-HXLINE(  45)						result->__unsafe_set(i, ::Dynamic(::hx::Anon_obj::Create(4)
-            							->setFixed(0,HX_("fn",48,59,00,00),inValue1)
-            							->setFixed(1,HX_("jid",c5,ca,50,00),inValue)
-            							->setFixed(2,HX_("groups",54,24,28,1c),result1)
-            							->setFixed(3,HX_("subscription",1d,ff,00,36),inValue2)));
-            					}
-            				}
-            			}
-HXDLIN(  45)			this->result = result;
+HXLINE(  43)			this->ver = q->attr->get_string(HX_("ver",63,e2,59,00));
+HXLINE(  44)			this->result = q->allTags(HX_("item",13,c5,bf,45),null());
             		}
-HXLINE(  52)		return this->result;
+HXLINE(  46)		return this->result;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/queries/VcardTempGet.cpp b/Sources/c_borogove/src/borogove/queries/VcardTempGet.cpp
index b04c6ee..e930901 100644
--- a/Sources/c_borogove/src/borogove/queries/VcardTempGet.cpp
+++ b/Sources/c_borogove/src/borogove/queries/VcardTempGet.cpp
@@ -19,9 +19,15 @@
 #ifndef INCLUDED_borogove_queries_VcardTempGet
 #include <borogove/queries/VcardTempGet.h>
 #endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
 #ifndef INCLUDED_haxe_crypto_Base64
 #include <haxe/crypto/Base64.h>
 #endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 #ifndef INCLUDED_haxe_io_Bytes
 #include <haxe/io/Bytes.h>
 #endif
@@ -42,9 +48,9 @@ HXLINE(  24)		::String _hx_tmp = to->asString();
 HXDLIN(  24)		this->queryStanza =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
             			->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp)
-            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))));
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null());
 HXLINE(  25)		this->queryStanza->tag(HX_("vCard",66,bd,db,1d), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)))->up();
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)),null())->up();
             	}
 
 Dynamic VcardTempGet_obj::__CreateEmpty() { return new VcardTempGet_obj; }
diff --git a/Sources/c_borogove/src/borogove/streams/XmppStropheStream.cpp b/Sources/c_borogove/src/borogove/streams/XmppStropheStream.cpp
index 1787deb..b0731db 100644
--- a/Sources/c_borogove/src/borogove/streams/XmppStropheStream.cpp
+++ b/Sources/c_borogove/src/borogove/streams/XmppStropheStream.cpp
@@ -36,6 +36,9 @@
 #ifndef INCLUDED_borogove_streams_XmppStropheStream
 #include <borogove/streams/XmppStropheStream.h>
 #endif
+#ifndef INCLUDED_cpp_vm_WeakRef
+#include <cpp/vm/WeakRef.h>
+#endif
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
@@ -55,27 +58,30 @@
 #include <haxe/ds/StringMap.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_0c65e41c3007e035_272_new,"borogove.streams.XmppStropheStream","new",0x591fef04,"borogove.streams.XmppStropheStream.new","borogove/streams/XmppStropheStream.hx",272,0x2dd892ee)
+HX_DEFINE_STACK_FRAME(_hx_pos_0c65e41c3007e035_292_new,"borogove.streams.XmppStropheStream","new",0x591fef04,"borogove.streams.XmppStropheStream.new","borogove/streams/XmppStropheStream.hx",292,0x2dd892ee)
 HX_DEFINE_STACK_FRAME(_hx_pos_0c65e41c3007e035_239_new,"borogove.streams.XmppStropheStream","new",0x591fef04,"borogove.streams.XmppStropheStream.new","borogove/streams/XmppStropheStream.hx",239,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_381_onIq,"borogove.streams.XmppStropheStream","onIq",0xa38117c3,"borogove.streams.XmppStropheStream.onIq","borogove/streams/XmppStropheStream.hx",381,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_422_connect,"borogove.streams.XmppStropheStream","connect",0x376a7c8e,"borogove.streams.XmppStropheStream.connect","borogove/streams/XmppStropheStream.hx",422,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_435_disconnect,"borogove.streams.XmppStropheStream","disconnect",0x8fa92238,"borogove.streams.XmppStropheStream.disconnect","borogove/streams/XmppStropheStream.hx",435,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_440_poll,"borogove.streams.XmppStropheStream","poll",0xa42b2f1b,"borogove.streams.XmppStropheStream.poll","borogove/streams/XmppStropheStream.hx",440,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_438_poll,"borogove.streams.XmppStropheStream","poll",0xa42b2f1b,"borogove.streams.XmppStropheStream.poll","borogove/streams/XmppStropheStream.hx",438,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_523_sendStanza,"borogove.streams.XmppStropheStream","sendStanza",0xcdb24339,"borogove.streams.XmppStropheStream.sendStanza","borogove/streams/XmppStropheStream.hx",523,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_531_finalize,"borogove.streams.XmppStropheStream","finalize",0x8048947a,"borogove.streams.XmppStropheStream.finalize","borogove/streams/XmppStropheStream.hx",531,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_295_strophe_certfail_handler,"borogove.streams.XmppStropheStream","strophe_certfail_handler",0x762926d9,"borogove.streams.XmppStropheStream.strophe_certfail_handler","borogove/streams/XmppStropheStream.hx",295,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_313_strophe_fast_token_handler,"borogove.streams.XmppStropheStream","strophe_fast_token_handler",0x01296ced,"borogove.streams.XmppStropheStream.strophe_fast_token_handler","borogove/streams/XmppStropheStream.hx",313,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_319_strophe_sm_handler,"borogove.streams.XmppStropheStream","strophe_sm_handler",0x892f1fb1,"borogove.streams.XmppStropheStream.strophe_sm_handler","borogove/streams/XmppStropheStream.hx",319,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_325_strophe_sm_ack_handler,"borogove.streams.XmppStropheStream","strophe_sm_ack_handler",0xbb54dafb,"borogove.streams.XmppStropheStream.strophe_sm_ack_handler","borogove/streams/XmppStropheStream.hx",325,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_331_strophe_sm_fail_handler,"borogove.streams.XmppStropheStream","strophe_sm_fail_handler",0x56025be2,"borogove.streams.XmppStropheStream.strophe_sm_fail_handler","borogove/streams/XmppStropheStream.hx",331,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_337_strophe_stanza,"borogove.streams.XmppStropheStream","strophe_stanza",0x9ef00fc1,"borogove.streams.XmppStropheStream.strophe_stanza","borogove/streams/XmppStropheStream.hx",337,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_384_strophe_connect,"borogove.streams.XmppStropheStream","strophe_connect",0x56231c9e,"borogove.streams.XmppStropheStream.strophe_connect","borogove/streams/XmppStropheStream.hx",384,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_402_strophe_connect,"borogove.streams.XmppStropheStream","strophe_connect",0x56231c9e,"borogove.streams.XmppStropheStream.strophe_connect","borogove/streams/XmppStropheStream.hx",402,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_447_parseStanza,"borogove.streams.XmppStropheStream","parseStanza",0xf2f56d2c,"borogove.streams.XmppStropheStream.parseStanza","borogove/streams/XmppStropheStream.hx",447,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_456_serializeStanza,"borogove.streams.XmppStropheStream","serializeStanza",0xb8bb5c99,"borogove.streams.XmppStropheStream.serializeStanza","borogove/streams/XmppStropheStream.hx",456,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_469_convertToStanza,"borogove.streams.XmppStropheStream","convertToStanza",0xfb6eef87,"borogove.streams.XmppStropheStream.convertToStanza","borogove/streams/XmppStropheStream.hx",469,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_497_convertFromStanza,"borogove.streams.XmppStropheStream","convertFromStanza",0xc6cb6876,"borogove.streams.XmppStropheStream.convertFromStanza","borogove/streams/XmppStropheStream.hx",497,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_401_onIq,"borogove.streams.XmppStropheStream","onIq",0xa38117c3,"borogove.streams.XmppStropheStream.onIq","borogove/streams/XmppStropheStream.hx",401,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_442_connect,"borogove.streams.XmppStropheStream","connect",0x376a7c8e,"borogove.streams.XmppStropheStream.connect","borogove/streams/XmppStropheStream.hx",442,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_454_disconnect,"borogove.streams.XmppStropheStream","disconnect",0x8fa92238,"borogove.streams.XmppStropheStream.disconnect","borogove/streams/XmppStropheStream.hx",454,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_459_poll,"borogove.streams.XmppStropheStream","poll",0xa42b2f1b,"borogove.streams.XmppStropheStream.poll","borogove/streams/XmppStropheStream.hx",459,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_457_poll,"borogove.streams.XmppStropheStream","poll",0xa42b2f1b,"borogove.streams.XmppStropheStream.poll","borogove/streams/XmppStropheStream.hx",457,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_542_sendStanza,"borogove.streams.XmppStropheStream","sendStanza",0xcdb24339,"borogove.streams.XmppStropheStream.sendStanza","borogove/streams/XmppStropheStream.hx",542,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_550_finalize,"borogove.streams.XmppStropheStream","finalize",0x8048947a,"borogove.streams.XmppStropheStream.finalize","borogove/streams/XmppStropheStream.hx",550,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_251_startHeartbeat,"borogove.streams.XmppStropheStream","startHeartbeat",0x5443a716,"borogove.streams.XmppStropheStream.startHeartbeat","borogove/streams/XmppStropheStream.hx",251,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_258_startHeartbeat,"borogove.streams.XmppStropheStream","startHeartbeat",0x5443a716,"borogove.streams.XmppStropheStream.startHeartbeat","borogove/streams/XmppStropheStream.hx",258,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_249_startHeartbeat,"borogove.streams.XmppStropheStream","startHeartbeat",0x5443a716,"borogove.streams.XmppStropheStream.startHeartbeat","borogove/streams/XmppStropheStream.hx",249,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_315_strophe_certfail_handler,"borogove.streams.XmppStropheStream","strophe_certfail_handler",0x762926d9,"borogove.streams.XmppStropheStream.strophe_certfail_handler","borogove/streams/XmppStropheStream.hx",315,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_333_strophe_fast_token_handler,"borogove.streams.XmppStropheStream","strophe_fast_token_handler",0x01296ced,"borogove.streams.XmppStropheStream.strophe_fast_token_handler","borogove/streams/XmppStropheStream.hx",333,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_339_strophe_sm_handler,"borogove.streams.XmppStropheStream","strophe_sm_handler",0x892f1fb1,"borogove.streams.XmppStropheStream.strophe_sm_handler","borogove/streams/XmppStropheStream.hx",339,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_345_strophe_sm_ack_handler,"borogove.streams.XmppStropheStream","strophe_sm_ack_handler",0xbb54dafb,"borogove.streams.XmppStropheStream.strophe_sm_ack_handler","borogove/streams/XmppStropheStream.hx",345,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_351_strophe_sm_fail_handler,"borogove.streams.XmppStropheStream","strophe_sm_fail_handler",0x56025be2,"borogove.streams.XmppStropheStream.strophe_sm_fail_handler","borogove/streams/XmppStropheStream.hx",351,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_357_strophe_stanza,"borogove.streams.XmppStropheStream","strophe_stanza",0x9ef00fc1,"borogove.streams.XmppStropheStream.strophe_stanza","borogove/streams/XmppStropheStream.hx",357,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_404_strophe_connect,"borogove.streams.XmppStropheStream","strophe_connect",0x56231c9e,"borogove.streams.XmppStropheStream.strophe_connect","borogove/streams/XmppStropheStream.hx",404,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_422_strophe_connect,"borogove.streams.XmppStropheStream","strophe_connect",0x56231c9e,"borogove.streams.XmppStropheStream.strophe_connect","borogove/streams/XmppStropheStream.hx",422,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_466_parseStanza,"borogove.streams.XmppStropheStream","parseStanza",0xf2f56d2c,"borogove.streams.XmppStropheStream.parseStanza","borogove/streams/XmppStropheStream.hx",466,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_475_serializeStanza,"borogove.streams.XmppStropheStream","serializeStanza",0xb8bb5c99,"borogove.streams.XmppStropheStream.serializeStanza","borogove/streams/XmppStropheStream.hx",475,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_488_convertToStanza,"borogove.streams.XmppStropheStream","convertToStanza",0xfb6eef87,"borogove.streams.XmppStropheStream.convertToStanza","borogove/streams/XmppStropheStream.hx",488,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_516_convertFromStanza,"borogove.streams.XmppStropheStream","convertFromStanza",0xc6cb6876,"borogove.streams.XmppStropheStream.convertFromStanza","borogove/streams/XmppStropheStream.hx",516,0x2dd892ee)
 
 xmpp_log_t *logger = xmpp_get_default_logger(XMPP_LEVEL_DEBUG);
 xmpp_ctx_t* borogove::streams::XmppStropheStream_obj::ctx = xmpp_ctx_new(0,logger);
@@ -86,31 +92,31 @@ namespace streams{
 void XmppStropheStream_obj::__construct(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::streams::XmppStropheStream,_gthis) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic event){
-            			HX_GC_STACKFRAME(&_hx_pos_0c65e41c3007e035_272_new)
-HXLINE( 273)			 ::borogove::streams::XmppStropheStream o = _gthis;
-HXLINE( 274)			::String pass = ( (::String)(event->__Field(HX_("password",1b,23,d0,48),::hx::paccDynamic)) );
-HXLINE( 275)			if (::hx::IsNotNull( event->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic) )) {
-HXLINE( 276)				::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(pass.c_str());
-HXDLIN( 276)				::cpp::Pointer< char > tmp1 = tmp;
-HXDLIN( 276)				xmpp_conn_set_fast(_gthis->conn,tmp1,( (int)(event->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic)) ));
+            			HX_GC_STACKFRAME(&_hx_pos_0c65e41c3007e035_292_new)
+HXLINE( 293)			 ::borogove::streams::XmppStropheStream o = _gthis;
+HXLINE( 294)			::String pass = ( (::String)(event->__Field(HX_("password",1b,23,d0,48),::hx::paccDynamic)) );
+HXLINE( 295)			if (::hx::IsNotNull( event->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic) )) {
+HXLINE( 296)				::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(pass.c_str());
+HXDLIN( 296)				::cpp::Pointer< char > tmp1 = tmp;
+HXDLIN( 296)				xmpp_conn_set_fast(_gthis->conn,tmp1,( (int)(event->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic)) ));
             			}
             			else {
-HXLINE( 278)				::cpp::Pointer< char > tmp11 = cpp::Pointer_obj::fromPointer(pass.c_str());
-HXDLIN( 278)				::cpp::Pointer< char > tmp2 = tmp11;
-HXDLIN( 278)				xmpp_conn_set_pass(_gthis->conn,tmp2);
-HXLINE( 279)				::cpp::Pointer< char > tmp21 = null();
-HXDLIN( 279)				::cpp::Pointer< char > tmp3 = tmp21;
-HXDLIN( 279)				xmpp_conn_set_fast(_gthis->conn,tmp3,-1);
+HXLINE( 298)				::cpp::Pointer< char > tmp11 = cpp::Pointer_obj::fromPointer(pass.c_str());
+HXDLIN( 298)				::cpp::Pointer< char > tmp2 = tmp11;
+HXDLIN( 298)				xmpp_conn_set_pass(_gthis->conn,tmp2);
+HXLINE( 299)				::cpp::Pointer< char > tmp21 = null();
+HXDLIN( 299)				::cpp::Pointer< char > tmp3 = tmp21;
+HXDLIN( 299)				xmpp_conn_set_fast(_gthis->conn,tmp3,-1);
             			}
-HXLINE( 281)			::cpp::Pointer< char > tmp31 = cpp::Pointer_obj::fromPointer(_gthis->clientId.c_str());
-HXDLIN( 281)			::cpp::Pointer< char > tmp4 = tmp31;
-HXDLIN( 281)			xmpp_conn_set_user_agent_id(_gthis->conn,tmp4);
-HXLINE( 284)			::cpp::Pointer< char > tmp41 = null();
-HXLINE( 283)			 xmpp_conn_t* _gthis1 = _gthis->conn;
-HXLINE( 286)			::cpp::Function< void  ( xmpp_conn_t*, xmpp_conn_event_t,int, xmpp_stream_error_t*,int,void*) > _hx_tmp = ::cpp::Function< void ( xmpp_conn_t*, xmpp_conn_event_t,int, xmpp_stream_error_t*,int,void*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_connect ));
-HXLINE( 284)			::cpp::Pointer< char > tmp5 = tmp41;
-HXLINE( 282)			xmpp_connect_client(_gthis1,tmp5,( (unsigned short)(0) ),_hx_tmp,o.GetPtr());
-HXLINE( 290)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE( 301)			::cpp::Pointer< char > tmp31 = cpp::Pointer_obj::fromPointer(_gthis->clientId.c_str());
+HXDLIN( 301)			::cpp::Pointer< char > tmp4 = tmp31;
+HXDLIN( 301)			xmpp_conn_set_user_agent_id(_gthis->conn,tmp4);
+HXLINE( 304)			::cpp::Pointer< char > tmp41 = null();
+HXLINE( 303)			 xmpp_conn_t* _gthis1 = _gthis->conn;
+HXLINE( 306)			::cpp::Function< void  ( xmpp_conn_t*, xmpp_conn_event_t,int, xmpp_stream_error_t*,int,void*) > _hx_tmp = ::cpp::Function< void ( xmpp_conn_t*, xmpp_conn_event_t,int, xmpp_stream_error_t*,int,void*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_connect ));
+HXLINE( 304)			::cpp::Pointer< char > tmp5 = tmp41;
+HXLINE( 302)			xmpp_connect_client(_gthis1,tmp5,( (unsigned short)(0) ),_hx_tmp,o.GetPtr());
+HXLINE( 310)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -123,37 +129,38 @@ HXLINE( 242)		 ::haxe::ds::EnumValueMap _g =  ::haxe::ds::EnumValueMap_obj::__al
 HXDLIN( 242)		_g->set(::borogove::IqRequestType_obj::Get_dyn(), ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
 HXDLIN( 242)		_g->set(::borogove::IqRequestType_obj::Set_dyn(), ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
 HXDLIN( 242)		this->iqHandlers = _g;
-HXLINE( 248)		 ::borogove::streams::XmppStropheStream _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 249)		super::__construct();
-HXLINE( 250)		xmpp_initialize();
-HXLINE( 251)		this->conn = xmpp_conn_new(::borogove::streams::XmppStropheStream_obj::ctx);
-HXLINE( 255)		::cpp::Pointer< char > tmp = null();
-HXLINE( 256)		::cpp::Pointer< char > tmp1 = null();
-HXLINE( 257)		::cpp::Pointer< char > tmp2 = null();
-HXLINE( 253)		 xmpp_conn_t* _hx_tmp = this->conn;
-HXLINE( 254)		::cpp::Function< int  ( xmpp_conn_t*, xmpp_stanza_t*,void*) > _hx_tmp1 = ::cpp::Function< int ( xmpp_conn_t*, xmpp_stanza_t*,void*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_stanza ));
-HXLINE( 255)		::cpp::Pointer< char > tmp3 = tmp;
-HXLINE( 256)		::cpp::Pointer< char > tmp4 = tmp1;
-HXLINE( 257)		::cpp::Pointer< char > tmp5 = tmp2;
-HXLINE( 252)		xmpp_handler_add(_hx_tmp,_hx_tmp1,tmp3,tmp4,tmp5,(void*)this);
-HXLINE( 260)		 xmpp_conn_t* _hx_tmp2 = this->conn;
-HXDLIN( 260)		xmpp_conn_set_certfail_handler(_hx_tmp2,::cpp::Function< int ( const xmpp_tlscert_t*,const char*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_certfail_handler )));
-HXLINE( 262)		 xmpp_conn_t* _hx_tmp3 = this->conn;
-HXLINE( 263)		::cpp::Function< void  ( xmpp_conn_t*,const char*,void*) > _hx_tmp4 = ::cpp::Function< void ( xmpp_conn_t*,const char*,void*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_fast_token_handler ));
-HXLINE( 261)		xmpp_conn_set_fast_token_handler(_hx_tmp3,_hx_tmp4,(void*)this);
-HXLINE( 266)		 xmpp_conn_t* _hx_tmp5 = this->conn;
-HXDLIN( 266)		xmpp_conn_set_certfail_handler(_hx_tmp5,::cpp::Function< int ( const xmpp_tlscert_t*,const char*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_certfail_handler )));
-HXLINE( 267)		 xmpp_conn_t* _hx_tmp6 = this->conn;
-HXDLIN( 267)		::cpp::Function< void  ( xmpp_conn_t*,void*,const unsigned char*,size_t) > _hx_tmp7 = ::cpp::Function< void ( xmpp_conn_t*,void*,const unsigned char*,size_t)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_sm_handler ));
-HXDLIN( 267)		xmpp_conn_set_sm_callback(_hx_tmp6,_hx_tmp7,(void*)this);
-HXLINE( 268)		 xmpp_conn_t* _hx_tmp8 = this->conn;
-HXDLIN( 268)		::cpp::Function< void  ( xmpp_conn_t*,void*,const char*) > _hx_tmp9 = ::cpp::Function< void ( xmpp_conn_t*,void*,const char*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_sm_ack_handler ));
-HXDLIN( 268)		xmpp_conn_set_sm_ack_callback(_hx_tmp8,_hx_tmp9,(void*)this);
-HXLINE( 269)		 xmpp_conn_t* _hx_tmp10 = this->conn;
-HXDLIN( 269)		::cpp::Function< void  ( xmpp_conn_t*,void*,const char*) > _hx_tmp11 = ::cpp::Function< void ( xmpp_conn_t*,void*,const char*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_sm_fail_handler ));
-HXDLIN( 269)		xmpp_conn_set_sm_fail_callback(_hx_tmp10,_hx_tmp11,(void*)this);
-HXLINE( 270)		_hx_add_finalizable(::hx::ObjectPtr<OBJ_>(this),false);
-HXLINE( 272)		this->on(HX_("auth/password",e2,5d,98,00), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 267)		 ::borogove::streams::XmppStropheStream _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 268)		super::__construct();
+HXLINE( 269)		xmpp_initialize();
+HXLINE( 270)		this->conn = xmpp_conn_new(::borogove::streams::XmppStropheStream_obj::ctx);
+HXLINE( 274)		::cpp::Pointer< char > tmp = null();
+HXLINE( 275)		::cpp::Pointer< char > tmp1 = null();
+HXLINE( 276)		::cpp::Pointer< char > tmp2 = null();
+HXLINE( 272)		 xmpp_conn_t* _hx_tmp = this->conn;
+HXLINE( 273)		::cpp::Function< int  ( xmpp_conn_t*, xmpp_stanza_t*,void*) > _hx_tmp1 = ::cpp::Function< int ( xmpp_conn_t*, xmpp_stanza_t*,void*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_stanza ));
+HXLINE( 274)		::cpp::Pointer< char > tmp3 = tmp;
+HXLINE( 275)		::cpp::Pointer< char > tmp4 = tmp1;
+HXLINE( 276)		::cpp::Pointer< char > tmp5 = tmp2;
+HXLINE( 271)		xmpp_handler_add(_hx_tmp,_hx_tmp1,tmp3,tmp4,tmp5,(void*)this);
+HXLINE( 279)		 xmpp_conn_t* _hx_tmp2 = this->conn;
+HXDLIN( 279)		xmpp_conn_set_certfail_handler(_hx_tmp2,::cpp::Function< int ( const xmpp_tlscert_t*,const char*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_certfail_handler )));
+HXLINE( 281)		 xmpp_conn_t* _hx_tmp3 = this->conn;
+HXLINE( 282)		::cpp::Function< void  ( xmpp_conn_t*,const char*,void*) > _hx_tmp4 = ::cpp::Function< void ( xmpp_conn_t*,const char*,void*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_fast_token_handler ));
+HXLINE( 280)		xmpp_conn_set_fast_token_handler(_hx_tmp3,_hx_tmp4,(void*)this);
+HXLINE( 285)		 xmpp_conn_t* _hx_tmp5 = this->conn;
+HXDLIN( 285)		xmpp_conn_set_certfail_handler(_hx_tmp5,::cpp::Function< int ( const xmpp_tlscert_t*,const char*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_certfail_handler )));
+HXLINE( 286)		 xmpp_conn_t* _hx_tmp6 = this->conn;
+HXDLIN( 286)		::cpp::Function< void  ( xmpp_conn_t*,void*,const unsigned char*,size_t) > _hx_tmp7 = ::cpp::Function< void ( xmpp_conn_t*,void*,const unsigned char*,size_t)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_sm_handler ));
+HXDLIN( 286)		xmpp_conn_set_sm_callback(_hx_tmp6,_hx_tmp7,(void*)this);
+HXLINE( 287)		 xmpp_conn_t* _hx_tmp8 = this->conn;
+HXDLIN( 287)		::cpp::Function< void  ( xmpp_conn_t*,void*,const char*) > _hx_tmp9 = ::cpp::Function< void ( xmpp_conn_t*,void*,const char*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_sm_ack_handler ));
+HXDLIN( 287)		xmpp_conn_set_sm_ack_callback(_hx_tmp8,_hx_tmp9,(void*)this);
+HXLINE( 288)		 xmpp_conn_t* _hx_tmp10 = this->conn;
+HXDLIN( 288)		::cpp::Function< void  ( xmpp_conn_t*,void*,const char*) > _hx_tmp11 = ::cpp::Function< void ( xmpp_conn_t*,void*,const char*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_sm_fail_handler ));
+HXDLIN( 288)		xmpp_conn_set_sm_fail_callback(_hx_tmp10,_hx_tmp11,(void*)this);
+HXLINE( 289)		_hx_add_finalizable(::hx::ObjectPtr<OBJ_>(this),false);
+HXLINE( 291)		::borogove::streams::XmppStropheStream_obj::startHeartbeat( ::cpp::vm::WeakRef_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),null()));
+HXLINE( 292)		this->on(HX_("auth/password",e2,5d,98,00), ::Dynamic(new _hx_Closure_0(_gthis)));
             	}
 
 Dynamic XmppStropheStream_obj::__CreateEmpty() { return new XmppStropheStream_obj; }
@@ -180,227 +187,265 @@ bool XmppStropheStream_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 void XmppStropheStream_obj::onIq( ::borogove::IqRequestType type,::String tag,::String xmlns, ::Dynamic handler){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_381_onIq)
-HXDLIN( 381)		this->iqHandlers->get(type).StaticCast<  ::haxe::ds::StringMap >()->set((((HX_("{",7b,00,00,00) + xmlns) + HX_("}",7d,00,00,00)) + tag),handler);
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_401_onIq)
+HXDLIN( 401)		this->iqHandlers->get(type).StaticCast<  ::haxe::ds::StringMap >()->set((((HX_("{",7b,00,00,00) + xmlns) + HX_("}",7d,00,00,00)) + tag),handler);
             	}
 
 
 void XmppStropheStream_obj::connect(::String jid,::Array< unsigned char > sm){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_422_connect)
-HXLINE( 423)		::haxe::Log_obj::trace(HX_("SM data",70,2f,26,f4), ::Dynamic(::hx::Anon_obj::Create(5)
-            			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.streams.XmppStropheStream",12,5d,bb,9f))
-            			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,sm))
-            			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("connect",ea,3b,80,15))
-            			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/streams/XmppStropheStream.hx",ee,92,d8,2d))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),423)));
-HXLINE( 424)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(jid.c_str());
-HXDLIN( 424)		xmpp_conn_set_jid(this->conn,tmp);
-HXLINE( 430)		this->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 431)		 ::Dynamic _hx_tmp;
-HXDLIN( 431)		if (this->stanzaThisPoll) {
-HXLINE( 431)			_hx_tmp = 5;
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_442_connect)
+HXLINE( 443)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(jid.c_str());
+HXDLIN( 443)		xmpp_conn_set_jid(this->conn,tmp);
+HXLINE( 444)		if (::hx::IsNotNull( sm )) {
+HXLINE( 446)			const unsigned char* smPtr = (unsigned char*)sm->getBase();
+HXLINE( 447)			xmpp_conn_restore_sm_state(this->conn,smPtr,( (size_t)(sm->length) ));
+            		}
+HXLINE( 449)		this->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 450)		 ::Dynamic _hx_tmp;
+HXDLIN( 450)		if (this->stanzaThisPoll) {
+HXLINE( 450)			_hx_tmp = 5;
             		}
             		else {
-HXLINE( 431)			_hx_tmp = 100;
+HXLINE( 450)			_hx_tmp = 100;
             		}
-HXDLIN( 431)		this->poll(_hx_tmp);
+HXDLIN( 450)		this->poll(_hx_tmp);
             	}
 
 
 void XmppStropheStream_obj::disconnect(){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_435_disconnect)
-HXDLIN( 435)		xmpp_disconnect(this->conn);
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_454_disconnect)
+HXDLIN( 454)		xmpp_disconnect(this->conn);
             	}
 
 
 void XmppStropheStream_obj::poll( ::Dynamic __o_timeout){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::streams::XmppStropheStream,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_440_poll)
-HXLINE( 441)			_gthis->stanzaThisPoll = false;
-HXLINE( 442)			xmpp_run_once(::borogove::streams::XmppStropheStream_obj::ctx,( (::cpp::UInt64)(5) ));
-HXLINE( 443)			 ::Dynamic _hx_tmp;
-HXDLIN( 443)			if (_gthis->stanzaThisPoll) {
-HXLINE( 443)				_hx_tmp = 5;
+            			HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_459_poll)
+HXLINE( 460)			_gthis->stanzaThisPoll = false;
+HXLINE( 461)			xmpp_run_once(::borogove::streams::XmppStropheStream_obj::ctx,( (::cpp::UInt64)(5) ));
+HXLINE( 462)			 ::Dynamic _hx_tmp;
+HXDLIN( 462)			if (_gthis->stanzaThisPoll) {
+HXLINE( 462)				_hx_tmp = 5;
             			}
             			else {
-HXLINE( 443)				_hx_tmp = 100;
+HXLINE( 462)				_hx_tmp = 100;
             			}
-HXDLIN( 443)			_gthis->poll(_hx_tmp);
+HXDLIN( 462)			_gthis->poll(_hx_tmp);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
             		 ::Dynamic timeout = __o_timeout;
             		if (::hx::IsNull(__o_timeout)) timeout = 100;
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_438_poll)
-HXDLIN( 438)		 ::borogove::streams::XmppStropheStream _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 439)		if (::hx::IsNotNull( this->pollTimer )) {
-HXLINE( 439)			this->pollTimer->stop();
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_457_poll)
+HXDLIN( 457)		 ::borogove::streams::XmppStropheStream _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 458)		if (::hx::IsNotNull( this->pollTimer )) {
+HXLINE( 458)			this->pollTimer->stop();
             		}
-HXLINE( 440)		this->pollTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),( (int)(timeout) ));
+HXLINE( 459)		this->pollTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),( (int)(timeout) ));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(XmppStropheStream_obj,poll,(void))
 
 void XmppStropheStream_obj::sendStanza( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_523_sendStanza)
-HXDLIN( 523)		if (this->ready) {
-HXLINE( 524)			 xmpp_conn_t* _hx_tmp = this->conn;
-HXDLIN( 524)			xmpp_send(_hx_tmp,::borogove::streams::XmppStropheStream_obj::convertFromStanza(stanza));
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_542_sendStanza)
+HXDLIN( 542)		if (this->ready) {
+HXLINE( 543)			 xmpp_conn_t* _hx_tmp = this->conn;
+HXDLIN( 543)			xmpp_send(_hx_tmp,::borogove::streams::XmppStropheStream_obj::convertFromStanza(stanza));
             		}
             		else {
-HXLINE( 526)			this->pending->push(stanza);
+HXLINE( 545)			this->pending->push(stanza);
             		}
             	}
 
 
 void XmppStropheStream_obj::finalize(){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_531_finalize)
-HXDLIN( 531)		xmpp_conn_release(this->conn);
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_550_finalize)
+HXDLIN( 550)		xmpp_conn_release(this->conn);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(XmppStropheStream_obj,finalize,(void))
 
+void XmppStropheStream_obj::startHeartbeat( ::cpp::vm::WeakRef weakThis){
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::cpp::vm::WeakRef,weakThis, ::haxe::Timer,heartbeat) HXARGC(0)
+            		void _hx_run(){
+            			HX_GC_STACKFRAME(&_hx_pos_0c65e41c3007e035_251_startHeartbeat)
+HXLINE( 252)			 ::borogove::streams::XmppStropheStream stream = weakThis->get().StaticCast<  ::borogove::streams::XmppStropheStream >();
+HXLINE( 253)			if (::hx::IsNotNull( stream )) {
+HXLINE( 254)				if (stream->ready) {
+            					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            					void _hx_run( ::borogove::Stanza reply){
+            						HX_GC_STACKFRAME(&_hx_pos_0c65e41c3007e035_258_startHeartbeat)
+HXLINE( 258)						::haxe::Log_obj::trace(HX_("ABCDEFG ping reply",58,7f,85,ac), ::Dynamic(::hx::Anon_obj::Create(5)
+            							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.streams.XmppStropheStream",12,5d,bb,9f))
+            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,reply))
+            							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("startHeartbeat",3a,cb,14,c4))
+            							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/streams/XmppStropheStream.hx",ee,92,d8,2d))
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),258)));
+            					}
+            					HX_END_LOCAL_FUNC1((void))
+
+HXLINE( 255)					::haxe::Log_obj::trace(HX_("ABCDEFG ping",ce,1b,88,2a),::hx::SourceInfo(HX_("borogove/streams/XmppStropheStream.hx",ee,92,d8,2d),255,HX_("borogove.streams.XmppStropheStream",12,5d,bb,9f),HX_("startHeartbeat",3a,cb,14,c4)));
+HXLINE( 257)					stream->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(0,HX_("to",7b,65,00,00),HX_("singpolyma.net",9e,a8,3c,17))
+            						->setFixed(1,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))),null())->tag(HX_("ping",72,f2,57,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:ping",8e,30,3f,fd))),null()), ::Dynamic(new _hx_Closure_0()));
+            				}
+            			}
+            			else {
+HXLINE( 262)				heartbeat->stop();
+            			}
+            		}
+            		HX_END_LOCAL_FUNC0((void))
+
+            	HX_GC_STACKFRAME(&_hx_pos_0c65e41c3007e035_249_startHeartbeat)
+HXLINE( 250)		 ::haxe::Timer heartbeat =  ::haxe::Timer_obj::__alloc( HX_CTX ,5000);
+HXLINE( 251)		heartbeat->run =  ::Dynamic(new _hx_Closure_1(weakThis,heartbeat));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(XmppStropheStream_obj,startHeartbeat,(void))
+
 int XmppStropheStream_obj::strophe_certfail_handler( const xmpp_tlscert_t* cert,const char* err){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_295_strophe_certfail_handler)
-HXLINE( 296)		void* userdata = xmpp_tlscert_get_userdata(cert);
-HXLINE( 297)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
-HXLINE( 298)		::Array< ::String > dnsNames = ::Array_obj< ::String >::__new(0);
-HXLINE( 299)		::cpp::Pointer< char > dnsName = null();
-HXLINE( 300)		int dnsNameN = 0;
-HXLINE( 301)		while(true){
-HXLINE( 301)			dnsNameN = (dnsNameN + 1);
-HXDLIN( 301)			dnsName = xmpp_tlscert_get_dnsname(cert,( (size_t)((dnsNameN - 1)) ));
-HXDLIN( 301)			if (!(::hx::IsNotNull( dnsName ))) {
-HXLINE( 301)				goto _hx_goto_9;
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_315_strophe_certfail_handler)
+HXLINE( 316)		void* userdata = xmpp_tlscert_get_userdata(cert);
+HXLINE( 317)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 318)		::Array< ::String > dnsNames = ::Array_obj< ::String >::__new(0);
+HXLINE( 319)		::cpp::Pointer< char > dnsName = null();
+HXLINE( 320)		int dnsNameN = 0;
+HXLINE( 321)		while(true){
+HXLINE( 321)			dnsNameN = (dnsNameN + 1);
+HXDLIN( 321)			dnsName = xmpp_tlscert_get_dnsname(cert,( (size_t)((dnsNameN - 1)) ));
+HXDLIN( 321)			if (!(::hx::IsNotNull( dnsName ))) {
+HXLINE( 321)				goto _hx_goto_12;
             			}
-HXLINE( 302)			dnsNames->push( ::String(dnsName->ptr));
+HXLINE( 322)			dnsNames->push( ::String(dnsName->ptr));
             		}
-            		_hx_goto_9:;
-HXLINE( 304)		::cpp::Pointer< char > inPtr = xmpp_tlscert_get_pem(cert);
-HXDLIN( 304)		::String pem =  ::String(inPtr->ptr);
-HXLINE( 305)		 ::borogove::EventResult _g = stream->trigger(HX_("tls/check",74,a0,4c,75), ::Dynamic(::hx::Anon_obj::Create(2)
+            		_hx_goto_12:;
+HXLINE( 324)		::cpp::Pointer< char > inPtr = xmpp_tlscert_get_pem(cert);
+HXDLIN( 324)		::String pem =  ::String(inPtr->ptr);
+HXLINE( 325)		 ::borogove::EventResult _g = stream->trigger(HX_("tls/check",74,a0,4c,75), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("pem",d8,54,55,00),pem)
             			->setFixed(1,HX_("dnsNames",5f,19,aa,5a),dnsNames)));
-HXDLIN( 305)		if ((_g->_hx_getIndex() == 3)) {
-HXLINE( 306)			 ::Dynamic result = _g->_hx_getObject(0);
-HXLINE( 307)			if (( (bool)(result) )) {
-HXLINE( 307)				return 1;
+HXDLIN( 325)		if ((_g->_hx_getIndex() == 3)) {
+HXLINE( 326)			 ::Dynamic result = _g->_hx_getObject(0);
+HXLINE( 327)			if (( (bool)(result) )) {
+HXLINE( 327)				return 1;
             			}
             			else {
-HXLINE( 307)				return 0;
+HXLINE( 327)				return 0;
             			}
             		}
             		else {
-HXLINE( 309)			return 0;
+HXLINE( 329)			return 0;
             		}
-HXLINE( 305)		return 0;
+HXLINE( 325)		return 0;
             	}
 
 
 void XmppStropheStream_obj::strophe_fast_token_handler( xmpp_conn_t* conn,const char* token,void* userdata){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_313_strophe_fast_token_handler)
-HXLINE( 314)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
-HXLINE( 315)		::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(token);
-HXDLIN( 315)		::String token1 =  ::String(inPtr->ptr);
-HXLINE( 316)		stream->trigger(HX_("fast-token",48,5f,c2,26), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_333_strophe_fast_token_handler)
+HXLINE( 334)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 335)		::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(token);
+HXDLIN( 335)		::String token1 =  ::String(inPtr->ptr);
+HXLINE( 336)		stream->trigger(HX_("fast-token",48,5f,c2,26), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("token",f9,82,2b,14),token1)));
             	}
 
 
 void XmppStropheStream_obj::strophe_sm_handler( xmpp_conn_t* conn,void* userdata,const unsigned char* sm_state,size_t sm_state_len){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_319_strophe_sm_handler)
-HXLINE( 320)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
-HXLINE( 321)		::cpp::Pointer<  ::Dynamic > _this = cpp::Pointer_obj::fromRaw(sm_state)->reinterpret();
-HXDLIN( 321)		::cpp::VirtualArray result = ::cpp::VirtualArray_obj::__new();
-HXDLIN( 321)		::cpp::Pointer<  ::Dynamic > tmp = _this;
-HXDLIN( 321)		result->setUnmanagedData(tmp,( (int)(sm_state_len) ));
-HXDLIN( 321)		::cpp::VirtualArray bytes = result->copy();
-HXLINE( 322)		stream->trigger(HX_("sm/update",1e,16,63,46), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_339_strophe_sm_handler)
+HXLINE( 340)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 341)		::cpp::Pointer<  ::Dynamic > _this = cpp::Pointer_obj::fromRaw(sm_state)->reinterpret();
+HXDLIN( 341)		::cpp::VirtualArray result = ::cpp::VirtualArray_obj::__new();
+HXDLIN( 341)		::cpp::Pointer<  ::Dynamic > tmp = _this;
+HXDLIN( 341)		result->setUnmanagedData(tmp,( (int)(sm_state_len) ));
+HXDLIN( 341)		::cpp::VirtualArray bytes = result->copy();
+HXLINE( 342)		stream->trigger(HX_("sm/update",1e,16,63,46), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("sm",9a,64,00,00),bytes)));
             	}
 
 
 void XmppStropheStream_obj::strophe_sm_ack_handler( xmpp_conn_t* conn,void* userdata,const char* id){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_325_strophe_sm_ack_handler)
-HXLINE( 326)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
-HXLINE( 327)		::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(id);
-HXDLIN( 327)		::String sid =  ::String(inPtr->ptr);
-HXLINE( 328)		stream->trigger(HX_("sm/ack",14,b2,12,dd), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_345_strophe_sm_ack_handler)
+HXLINE( 346)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 347)		::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(id);
+HXDLIN( 347)		::String sid =  ::String(inPtr->ptr);
+HXLINE( 348)		stream->trigger(HX_("sm/ack",14,b2,12,dd), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("id",db,5b,00,00),sid)));
             	}
 
 
 void XmppStropheStream_obj::strophe_sm_fail_handler( xmpp_conn_t* conn,void* userdata,const char* id){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_331_strophe_sm_fail_handler)
-HXLINE( 332)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
-HXLINE( 333)		::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(id);
-HXDLIN( 333)		::String sid =  ::String(inPtr->ptr);
-HXLINE( 334)		stream->trigger(HX_("sm/fail",b3,aa,95,96), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_351_strophe_sm_fail_handler)
+HXLINE( 352)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 353)		::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(id);
+HXDLIN( 353)		::String sid =  ::String(inPtr->ptr);
+HXLINE( 354)		stream->trigger(HX_("sm/fail",b3,aa,95,96), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("id",db,5b,00,00),sid)));
             	}
 
 
 int XmppStropheStream_obj::strophe_stanza( xmpp_conn_t* conn, xmpp_stanza_t* sstanza,void* userdata){
-            	HX_GC_STACKFRAME(&_hx_pos_0c65e41c3007e035_337_strophe_stanza)
-HXLINE( 338)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
-HXLINE( 339)		stream->stanzaThisPoll = true;
-HXLINE( 340)		 ::borogove::Stanza stanza = ::borogove::streams::XmppStropheStream_obj::convertToStanza(sstanza,null());
-HXLINE( 342)		::String xmlns = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("xmlns",dc,31,74,60))) );
-HXLINE( 343)		if ((xmlns == HX_("jabber:client",21,64,c5,e4))) {
-HXLINE( 344)			::String name = stanza->name;
-HXLINE( 345)			if ((name == HX_("iq",e8,5b,00,00))) {
-HXLINE( 346)				::String type = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) );
-HXLINE( 347)				bool _hx_tmp;
-HXDLIN( 347)				if ((type != HX_("result",dd,68,84,08))) {
-HXLINE( 347)					_hx_tmp = (type == HX_("error",c8,cb,29,73));
+            	HX_GC_STACKFRAME(&_hx_pos_0c65e41c3007e035_357_strophe_stanza)
+HXLINE( 358)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 359)		stream->stanzaThisPoll = true;
+HXLINE( 360)		 ::borogove::Stanza stanza = ::borogove::streams::XmppStropheStream_obj::convertToStanza(sstanza,null());
+HXLINE( 362)		::String xmlns = stanza->attr->get_string(HX_("xmlns",dc,31,74,60));
+HXLINE( 363)		if ((xmlns == HX_("jabber:client",21,64,c5,e4))) {
+HXLINE( 364)			::String name = stanza->name;
+HXLINE( 365)			if ((name == HX_("iq",e8,5b,00,00))) {
+HXLINE( 366)				::String type = stanza->attr->get_string(HX_("type",ba,f2,08,4d));
+HXLINE( 367)				bool _hx_tmp;
+HXDLIN( 367)				if ((type != HX_("result",dd,68,84,08))) {
+HXLINE( 367)					_hx_tmp = (type == HX_("error",c8,cb,29,73));
             				}
             				else {
-HXLINE( 347)					_hx_tmp = true;
+HXLINE( 367)					_hx_tmp = true;
             				}
-HXDLIN( 347)				if (_hx_tmp) {
-HXLINE( 348)					stream->onStanza(stanza);
+HXDLIN( 367)				if (_hx_tmp) {
+HXLINE( 368)					stream->onStanza(stanza);
             				}
             				else {
-HXLINE( 351)					 ::borogove::Stanza child = stanza->getFirstChild();
-HXLINE( 352)					if (::hx::IsNotNull( child )) {
-HXLINE( 353)						 ::borogove::IqRequestType this1;
-HXDLIN( 353)						if ((type == HX_("get",96,80,4e,00))) {
-HXLINE( 353)							this1 = ::borogove::IqRequestType_obj::Get_dyn();
+HXLINE( 371)					 ::borogove::Stanza child = stanza->getFirstChild();
+HXLINE( 372)					if (::hx::IsNotNull( child )) {
+HXLINE( 373)						 ::borogove::IqRequestType this1;
+HXDLIN( 373)						if ((type == HX_("get",96,80,4e,00))) {
+HXLINE( 373)							this1 = ::borogove::IqRequestType_obj::Get_dyn();
             						}
             						else {
-HXLINE( 353)							this1 = ::borogove::IqRequestType_obj::Set_dyn();
+HXLINE( 373)							this1 = ::borogove::IqRequestType_obj::Set_dyn();
             						}
-HXDLIN( 353)						::Dynamic this2 = stream->iqHandlers->get(this1).StaticCast<  ::haxe::ds::StringMap >();
-HXDLIN( 353)						::String key = ((HX_("{",7b,00,00,00) + ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) )) + HX_("}",7d,00,00,00));
-HXDLIN( 353)						 ::Dynamic handler = ( ( ::haxe::ds::StringMap)(this2) )->get((key + child->name));
-HXLINE( 354)						if (::hx::IsNotNull( handler )) {
-HXLINE( 355)							::String reply = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) );
-HXDLIN( 355)							::String reply1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN( 355)							 ::borogove::Stanza reply2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(4)
-            								->setFixed(0,HX_("id",db,5b,00,00),( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) ))
+HXDLIN( 373)						::Dynamic this2 = stream->iqHandlers->get(this1).StaticCast<  ::haxe::ds::StringMap >();
+HXDLIN( 373)						::String key = ((HX_("{",7b,00,00,00) + child->attr->get(HX_("xmlns",dc,31,74,60))) + HX_("}",7d,00,00,00));
+HXDLIN( 373)						 ::Dynamic handler = ( ( ::haxe::ds::StringMap)(this2) )->get((key + child->name));
+HXLINE( 374)						if (::hx::IsNotNull( handler )) {
+HXLINE( 375)							::String reply = stanza->attr->get_string(HX_("to",7b,65,00,00));
+HXDLIN( 375)							::String reply1 = stanza->attr->get_string(HX_("from",6a,a5,c2,43));
+HXDLIN( 375)							 ::borogove::Stanza reply2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(4)
+            								->setFixed(0,HX_("id",db,5b,00,00),stanza->attr->get(HX_("id",db,5b,00,00)))
             								->setFixed(1,HX_("to",7b,65,00,00),reply1)
             								->setFixed(2,HX_("from",6a,a5,c2,43),reply)
-            								->setFixed(3,HX_("type",ba,f2,08,4d),HX_("result",dd,68,84,08))));
-HXLINE( 356)							try {
+            								->setFixed(3,HX_("type",ba,f2,08,4d),HX_("result",dd,68,84,08))),null());
+HXLINE( 376)							try {
             								HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 357)								 ::borogove::IqResult _g = handler(stanza);
-HXDLIN( 357)								switch((int)(_g->_hx_getIndex())){
+HXLINE( 377)								 ::borogove::IqResult _g = handler(stanza);
+HXDLIN( 377)								switch((int)(_g->_hx_getIndex())){
             									case (int)0: {
-HXLINE( 358)										 ::borogove::Stanza el = _g->_hx_getObject(0).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 358)										reply2->addChild(el);
+HXLINE( 378)										 ::borogove::Stanza el = _g->_hx_getObject(0).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 378)										reply2->addChild(el);
             									}
             									break;
             									case (int)1: {
             									}
             									break;
             									case (int)2: {
-HXLINE( 361)										::Reflect_obj::setField(reply2->attr,HX_("result",dd,68,84,08),HX_("error",c8,cb,29,73));
-HXLINE( 362)										reply2->tag(HX_("error",c8,cb,29,73), ::Dynamic(::hx::Anon_obj::Create(1)
-            											->setFixed(0,HX_("type",ba,f2,08,4d),HX_("cancel",7a,ed,33,b8))))->tag(HX_("service-unavailable",f8,3c,11,1c), ::Dynamic(::hx::Anon_obj::Create(1)
-            											->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30))));
+HXLINE( 381)										reply2->attr->set(HX_("result",dd,68,84,08),HX_("error",c8,cb,29,73));
+HXLINE( 382)										reply2->tag(HX_("error",c8,cb,29,73), ::Dynamic(::hx::Anon_obj::Create(1)
+            											->setFixed(0,HX_("type",ba,f2,08,4d),HX_("cancel",7a,ed,33,b8))),null())->tag(HX_("service-unavailable",f8,3c,11,1c), ::Dynamic(::hx::Anon_obj::Create(1)
+            											->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30))),null());
             									}
             									break;
             								}
@@ -408,193 +453,191 @@ HXLINE( 362)										reply2->tag(HX_("error",c8,cb,29,73), ::Dynamic(::hx::Anon
             								if (_hx_e.IsClass<  ::Dynamic >() ){
             									HX_STACK_BEGIN_CATCH
             									 ::Dynamic _g1 = _hx_e;
-HXLINE( 365)									::Reflect_obj::setField(reply2->attr,HX_("result",dd,68,84,08),HX_("error",c8,cb,29,73));
-HXLINE( 366)									reply2->tag(HX_("error",c8,cb,29,73), ::Dynamic(::hx::Anon_obj::Create(1)
-            										->setFixed(0,HX_("type",ba,f2,08,4d),HX_("cancel",7a,ed,33,b8))))->tag(HX_("internal-server-error",ce,6d,55,6c), ::Dynamic(::hx::Anon_obj::Create(1)
-            										->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30))));
+HXLINE( 385)									reply2->attr->set(HX_("result",dd,68,84,08),HX_("error",c8,cb,29,73));
+HXLINE( 386)									reply2->tag(HX_("error",c8,cb,29,73), ::Dynamic(::hx::Anon_obj::Create(1)
+            										->setFixed(0,HX_("type",ba,f2,08,4d),HX_("cancel",7a,ed,33,b8))),null())->tag(HX_("internal-server-error",ce,6d,55,6c), ::Dynamic(::hx::Anon_obj::Create(1)
+            										->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30))),null());
             								}
             								else {
             									HX_STACK_DO_THROW(_hx_e);
             								}
             							}
-HXLINE( 368)							stream->sendStanza(reply2);
+HXLINE( 388)							stream->sendStanza(reply2);
             						}
             					}
             				}
             			}
             			else {
-HXLINE( 373)				stream->onStanza(stanza);
+HXLINE( 393)				stream->onStanza(stanza);
             			}
             		}
-HXLINE( 377)		return 1;
+HXLINE( 397)		return 1;
             	}
 
 
 void XmppStropheStream_obj::strophe_connect( xmpp_conn_t* conn, xmpp_conn_event_t event,int error, xmpp_stream_error_t* stream_error,int resumed,void* userdata){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_384_strophe_connect)
-HXLINE( 385)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
-HXLINE( 386)		if (::hx::IsInstanceEq( event,XMPP_CONN_CONNECT )) {
-HXLINE( 387)			stream->ready = true;
-HXLINE( 388)			while((stream->pending->length > 0)){
-HXLINE( 389)				stream->sendStanza(stream->pending->shift().StaticCast<  ::borogove::Stanza >());
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_404_strophe_connect)
+HXLINE( 405)		 ::borogove::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 406)		if (::hx::IsInstanceEq( event,XMPP_CONN_CONNECT )) {
+HXLINE( 407)			stream->ready = true;
+HXLINE( 408)			while((stream->pending->length > 0)){
+HXLINE( 409)				stream->sendStanza(stream->pending->shift().StaticCast<  ::borogove::Stanza >());
             			}
-HXLINE( 391)			stream->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 411)			stream->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("resumed",17,0e,58,6b),(resumed != 0))));
             		}
-HXLINE( 393)		if (::hx::IsInstanceEq( event,XMPP_CONN_DISCONNECT )) {
-HXLINE( 394)			bool _hx_tmp;
-HXDLIN( 394)			if ((error == 0)) {
-HXLINE( 394)				_hx_tmp = ::hx::IsNull( stream_error );
+HXLINE( 413)		if (::hx::IsInstanceEq( event,XMPP_CONN_DISCONNECT )) {
+HXLINE( 414)			bool _hx_tmp;
+HXDLIN( 414)			if ((error == 0)) {
+HXLINE( 414)				_hx_tmp = ::hx::IsNull( stream_error );
             			}
             			else {
-HXLINE( 394)				_hx_tmp = false;
+HXLINE( 414)				_hx_tmp = false;
             			}
-HXDLIN( 394)			if (_hx_tmp) {
-HXLINE( 396)				stream->trigger(HX_("auth/fail",25,45,e9,d1), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXDLIN( 414)			if (_hx_tmp) {
+HXLINE( 416)				stream->trigger(HX_("auth/fail",25,45,e9,d1), ::Dynamic(::hx::Anon_obj::Create(0)));
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,void*,userdata, xmpp_conn_t*,conn) HXARGC(0)
             				void _hx_run(){
-            					HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_402_strophe_connect)
-HXLINE( 404)					::cpp::Pointer< char > tmp = null();
-HXLINE( 403)					 xmpp_conn_t* conn1 = conn;
-HXLINE( 402)					xmpp_connect_client(conn1,tmp,( (unsigned short)(0) ),::cpp::Function< void ( xmpp_conn_t*, xmpp_conn_event_t,int, xmpp_stream_error_t*,int,void*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_connect )),userdata);
+            					HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_422_strophe_connect)
+HXLINE( 424)					::cpp::Pointer< char > tmp = null();
+HXLINE( 423)					 xmpp_conn_t* conn1 = conn;
+HXLINE( 422)					xmpp_connect_client(conn1,tmp,( (unsigned short)(0) ),::cpp::Function< void ( xmpp_conn_t*, xmpp_conn_event_t,int, xmpp_stream_error_t*,int,void*)>(::hx::AnyCast(&::borogove::streams::XmppStropheStream_obj::strophe_connect )),userdata);
             				}
             				HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 398)				stream->ready = false;
-HXLINE( 399)				stream->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 401)				::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(userdata,conn)),100);
+HXLINE( 418)				stream->ready = false;
+HXLINE( 419)				stream->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 421)				::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(userdata,conn)),100);
             			}
             		}
-HXLINE( 412)		if (::hx::IsInstanceEq( event,XMPP_CONN_FAIL )) {
-HXLINE( 413)			stream->ready = false;
-HXLINE( 414)			stream->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 432)		if (::hx::IsInstanceEq( event,XMPP_CONN_FAIL )) {
+HXLINE( 433)			stream->ready = false;
+HXLINE( 434)			stream->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
             		}
             	}
 
 
  ::borogove::Stanza XmppStropheStream_obj::parseStanza(::String s){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_447_parseStanza)
-HXLINE( 448)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(s.c_str());
-HXDLIN( 448)		 xmpp_stanza_t* sstanza = xmpp_stanza_new_from_string(::borogove::streams::XmppStropheStream_obj::ctx,tmp);
-HXLINE( 449)		if (::hx::IsNull( sstanza )) {
-HXLINE( 449)			HX_STACK_DO_THROW((HX_("Failed to parse stanza: ",6a,ef,ec,9c) + s));
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_466_parseStanza)
+HXLINE( 467)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(s.c_str());
+HXDLIN( 467)		 xmpp_stanza_t* sstanza = xmpp_stanza_new_from_string(::borogove::streams::XmppStropheStream_obj::ctx,tmp);
+HXLINE( 468)		if (::hx::IsNull( sstanza )) {
+HXLINE( 468)			HX_STACK_DO_THROW((HX_("Failed to parse stanza: ",6a,ef,ec,9c) + s));
             		}
-HXLINE( 450)		 ::borogove::Stanza stanza = ::borogove::streams::XmppStropheStream_obj::convertToStanza(sstanza,null());
-HXLINE( 451)		xmpp_stanza_release(sstanza);
-HXLINE( 452)		return stanza;
+HXLINE( 469)		 ::borogove::Stanza stanza = ::borogove::streams::XmppStropheStream_obj::convertToStanza(sstanza,null());
+HXLINE( 470)		xmpp_stanza_release(sstanza);
+HXLINE( 471)		return stanza;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(XmppStropheStream_obj,parseStanza,return )
 
 ::String XmppStropheStream_obj::serializeStanza( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_456_serializeStanza)
-HXLINE( 457)		 xmpp_stanza_t* sstanza = ::borogove::streams::XmppStropheStream_obj::convertFromStanza(stanza);
-HXLINE( 458)		char* buf = null();
-HXLINE( 459)		size_t bufsize = ( (size_t)(-1) );
-HXLINE( 460)		::cpp::Pointer< char* > tmp = ::cpp::Pointer_obj::addressOf(buf);
-HXDLIN( 460)		::cpp::Pointer< size_t > tmp1 = ::cpp::Pointer_obj::addressOf(bufsize);
-HXDLIN( 460)		int err = xmpp_stanza_to_text(sstanza,tmp,tmp1);
-HXLINE( 461)		xmpp_stanza_release(sstanza);
-HXLINE( 462)		bool _hx_tmp = (err != 0);
-HXDLIN( 462)		if (_hx_tmp) {
-HXLINE( 462)			return null();
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_475_serializeStanza)
+HXLINE( 476)		 xmpp_stanza_t* sstanza = ::borogove::streams::XmppStropheStream_obj::convertFromStanza(stanza);
+HXLINE( 477)		char* buf = null();
+HXLINE( 478)		size_t bufsize = ( (size_t)(-1) );
+HXLINE( 479)		::cpp::Pointer< char* > tmp = ::cpp::Pointer_obj::addressOf(buf);
+HXDLIN( 479)		::cpp::Pointer< size_t > tmp1 = ::cpp::Pointer_obj::addressOf(bufsize);
+HXDLIN( 479)		int err = xmpp_stanza_to_text(sstanza,tmp,tmp1);
+HXLINE( 480)		xmpp_stanza_release(sstanza);
+HXLINE( 481)		bool _hx_tmp = (err != 0);
+HXDLIN( 481)		if (_hx_tmp) {
+HXLINE( 481)			return null();
             		}
-HXLINE( 463)		::cpp::Pointer< char > bufPtr = cpp::Pointer_obj::fromRaw(buf);
-HXLINE( 464)		::String s =  ::String(bufPtr->ptr);
-HXLINE( 465)		 xmpp_ctx_t* _hx_tmp1 = ::borogove::streams::XmppStropheStream_obj::ctx;
-HXDLIN( 465)		void* _hx_tmp2 = bufPtr->rawCast();
-HXDLIN( 465)		xmpp_free(_hx_tmp1,_hx_tmp2);
-HXLINE( 466)		return s;
+HXLINE( 482)		::cpp::Pointer< char > bufPtr = cpp::Pointer_obj::fromRaw(buf);
+HXLINE( 483)		::String s =  ::String(bufPtr->ptr);
+HXLINE( 484)		 xmpp_ctx_t* _hx_tmp1 = ::borogove::streams::XmppStropheStream_obj::ctx;
+HXDLIN( 484)		void* _hx_tmp2 = bufPtr->rawCast();
+HXDLIN( 484)		xmpp_free(_hx_tmp1,_hx_tmp2);
+HXLINE( 485)		return s;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(XmppStropheStream_obj,serializeStanza,return )
 
  ::borogove::Stanza XmppStropheStream_obj::convertToStanza( xmpp_stanza_t* el,void* dummy){
-            	HX_GC_STACKFRAME(&_hx_pos_0c65e41c3007e035_469_convertToStanza)
-HXLINE( 470)		::cpp::Pointer< char > name = xmpp_stanza_get_name(el);
-HXLINE( 471)		int attrlen = xmpp_stanza_get_attribute_count(el);
-HXLINE( 472)		void* attrsraw = ::hx::InternalNew(((attrlen * 2) * sizeof(char*)),false);
-HXLINE( 473)		const char** attrsarray = static_cast<const char**>(attrsraw);
-HXLINE( 474)		::cpp::Pointer< const char* > attrsptr = ::cpp::Pointer_obj::fromRaw(attrsarray);
-HXLINE( 475)		xmpp_stanza_get_attributes(el,attrsarray,(attrlen * 2));
-HXLINE( 476)		 ::Dynamic attrs =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE( 477)		{
-HXLINE( 477)			int _g = 0;
-HXDLIN( 477)			int _g1 = attrlen;
-HXDLIN( 477)			while((_g < _g1)){
-HXLINE( 477)				_g = (_g + 1);
-HXDLIN( 477)				int i = (_g - 1);
-HXLINE( 478)				::cpp::Pointer< char > key = cpp::Pointer_obj::fromRaw(attrsptr->at((i * 2)));
-HXLINE( 479)				::cpp::Pointer< char > value = cpp::Pointer_obj::fromRaw(attrsptr->at(((i * 2) + 1)));
-HXLINE( 480)				{
-HXLINE( 480)					::String key1 =  ::String(key->ptr);
-HXDLIN( 480)					::String value1 =  ::String(value->ptr);
-HXDLIN( 480)					::Reflect_obj::setField(attrs,key1,value1);
+            	HX_GC_STACKFRAME(&_hx_pos_0c65e41c3007e035_488_convertToStanza)
+HXLINE( 489)		::cpp::Pointer< char > name = xmpp_stanza_get_name(el);
+HXLINE( 490)		int attrlen = xmpp_stanza_get_attribute_count(el);
+HXLINE( 491)		void* attrsraw = ::hx::InternalNew(((attrlen * 2) * sizeof(char*)),false);
+HXLINE( 492)		const char** attrsarray = static_cast<const char**>(attrsraw);
+HXLINE( 493)		::cpp::Pointer< const char* > attrsptr = ::cpp::Pointer_obj::fromRaw(attrsarray);
+HXLINE( 494)		xmpp_stanza_get_attributes(el,attrsarray,(attrlen * 2));
+HXLINE( 495)		 ::Dynamic attrs =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE( 496)		{
+HXLINE( 496)			int _g = 0;
+HXDLIN( 496)			int _g1 = attrlen;
+HXDLIN( 496)			while((_g < _g1)){
+HXLINE( 496)				_g = (_g + 1);
+HXDLIN( 496)				int i = (_g - 1);
+HXLINE( 497)				::cpp::Pointer< char > key = cpp::Pointer_obj::fromRaw(attrsptr->at((i * 2)));
+HXLINE( 498)				::cpp::Pointer< char > value = cpp::Pointer_obj::fromRaw(attrsptr->at(((i * 2) + 1)));
+HXLINE( 499)				{
+HXLINE( 499)					::String key1 =  ::String(key->ptr);
+HXDLIN( 499)					::String value1 =  ::String(value->ptr);
+HXDLIN( 499)					::Reflect_obj::setField(attrs,key1,value1);
             				}
             			}
             		}
-HXLINE( 482)		 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX , ::String(name->ptr),attrs);
-HXLINE( 484)		 xmpp_stanza_t* child = xmpp_stanza_get_children(el);
-HXLINE( 485)		while(::hx::IsNotNull( child )){
-HXLINE( 486)			if (xmpp_stanza_is_text(child)) {
-HXLINE( 487)				::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(xmpp_stanza_get_text_ptr(child));
-HXDLIN( 487)				stanza->text( ::String(inPtr->ptr));
+HXLINE( 501)		 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX , ::String(name->ptr),attrs,null());
+HXLINE( 503)		 xmpp_stanza_t* child = xmpp_stanza_get_children(el);
+HXLINE( 504)		while(::hx::IsNotNull( child )){
+HXLINE( 505)			if (xmpp_stanza_is_text(child)) {
+HXLINE( 506)				::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(xmpp_stanza_get_text_ptr(child));
+HXDLIN( 506)				stanza->text( ::String(inPtr->ptr));
             			}
             			else {
-HXLINE( 489)				stanza->addChild(::borogove::streams::XmppStropheStream_obj::convertToStanza(child,null()));
+HXLINE( 508)				stanza->addChild(::borogove::streams::XmppStropheStream_obj::convertToStanza(child,null()));
             			}
-HXLINE( 491)			child = xmpp_stanza_get_next(child);
+HXLINE( 510)			child = xmpp_stanza_get_next(child);
             		}
-HXLINE( 494)		return stanza;
+HXLINE( 513)		return stanza;
             	}
 
 
  xmpp_stanza_t* XmppStropheStream_obj::convertFromStanza( ::borogove::Stanza el){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_497_convertFromStanza)
-HXLINE( 498)		 xmpp_stanza_t* xml = xmpp_stanza_new(::borogove::streams::XmppStropheStream_obj::ctx);
-HXLINE( 499)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(el->name.c_str());
-HXDLIN( 499)		xmpp_stanza_set_name(xml,tmp);
-HXLINE( 500)		{
-HXLINE( 500)			 ::Dynamic access = el->attr;
-HXDLIN( 500)			::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
-HXDLIN( 500)			int _g_index = 0;
-HXDLIN( 500)			while((_g_index < _g_keys->length)){
-HXLINE( 500)				_g_index = (_g_index + 1);
-HXDLIN( 500)				::String key = _g_keys->__get((_g_index - 1));
-HXDLIN( 500)				::String attr_value = ( (::String)(::Reflect_obj::field(access,key)) );
-HXLINE( 503)				if (::hx::IsNotNull( attr_value )) {
-HXLINE( 504)					::cpp::Pointer< char > tmp1 = cpp::Pointer_obj::fromPointer(key.c_str());
-HXDLIN( 504)					::cpp::Pointer< char > tmp2 = cpp::Pointer_obj::fromPointer(attr_value.c_str());
-HXDLIN( 504)					xmpp_stanza_set_attribute(xml,tmp1,tmp2);
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_516_convertFromStanza)
+HXLINE( 517)		 xmpp_stanza_t* xml = xmpp_stanza_new(::borogove::streams::XmppStropheStream_obj::ctx);
+HXLINE( 518)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(el->name.c_str());
+HXDLIN( 518)		xmpp_stanza_set_name(xml,tmp);
+HXLINE( 519)		{
+HXLINE( 519)			::Dynamic map = el->attr;
+HXDLIN( 519)			 ::Dynamic attr_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 519)			while(( (bool)(attr_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 519)				::String key = ( (::String)(attr_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 519)				::String attr_value = ( (::String)(::haxe::IMap_obj::get(map,key)) );
+HXLINE( 522)				if (::hx::IsNotNull( attr_value )) {
+HXLINE( 523)					::cpp::Pointer< char > tmp1 = cpp::Pointer_obj::fromPointer(key.c_str());
+HXDLIN( 523)					::cpp::Pointer< char > tmp2 = cpp::Pointer_obj::fromPointer(attr_value.c_str());
+HXDLIN( 523)					xmpp_stanza_set_attribute(xml,tmp1,tmp2);
             				}
             			}
             		}
-HXLINE( 507)		if ((el->children->length > 0)) {
-HXLINE( 508)			int _g = 0;
-HXDLIN( 508)			::Array< ::Dynamic> _g1 = el->children;
-HXDLIN( 508)			while((_g < _g1->length)){
-HXLINE( 508)				 ::borogove::Node child = _g1->__get(_g).StaticCast<  ::borogove::Node >();
-HXDLIN( 508)				_g = (_g + 1);
-HXLINE( 509)				switch((int)(child->_hx_getIndex())){
+HXLINE( 526)		if ((el->children->length > 0)) {
+HXLINE( 527)			int _g = 0;
+HXDLIN( 527)			::Array< ::Dynamic> _g1 = el->children;
+HXDLIN( 527)			while((_g < _g1->length)){
+HXLINE( 527)				 ::borogove::Node child = _g1->__get(_g).StaticCast<  ::borogove::Node >();
+HXDLIN( 527)				_g = (_g + 1);
+HXLINE( 528)				switch((int)(child->_hx_getIndex())){
             					case (int)0: {
-HXLINE( 511)						xmpp_stanza_add_child_ex(xml,::borogove::streams::XmppStropheStream_obj::convertFromStanza(child->_hx_getObject(0).StaticCast<  ::borogove::Stanza >()),false);
+HXLINE( 530)						xmpp_stanza_add_child_ex(xml,::borogove::streams::XmppStropheStream_obj::convertFromStanza(child->_hx_getObject(0).StaticCast<  ::borogove::Stanza >()),false);
             					}
             					break;
             					case (int)1: {
-HXLINE( 513)						 xmpp_stanza_t* text_node = xmpp_stanza_new(::borogove::streams::XmppStropheStream_obj::ctx);
-HXLINE( 514)						::cpp::Pointer< char > tmp3 = cpp::Pointer_obj::fromPointer(child->_hx_getString(0).c_str());
-HXDLIN( 514)						xmpp_stanza_set_text(text_node,tmp3);
-HXLINE( 515)						xmpp_stanza_add_child_ex(xml,text_node,false);
+HXLINE( 532)						 xmpp_stanza_t* text_node = xmpp_stanza_new(::borogove::streams::XmppStropheStream_obj::ctx);
+HXLINE( 533)						::cpp::Pointer< char > tmp3 = cpp::Pointer_obj::fromPointer(child->_hx_getString(0).c_str());
+HXDLIN( 533)						xmpp_stanza_set_text(text_node,tmp3);
+HXLINE( 534)						xmpp_stanza_add_child_ex(xml,text_node,false);
             					}
             					break;
             				}
             			}
             		}
-HXLINE( 519)		return xml;
+HXLINE( 538)		return xml;
             	}
 
 
@@ -677,6 +720,9 @@ bool XmppStropheStream_obj::__GetStatic(const ::String &inName, Dynamic &outValu
 	case 11:
 		if (HX_FIELD_EQ(inName,"parseStanza") ) { outValue = parseStanza_dyn(); return true; }
 		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"startHeartbeat") ) { outValue = startHeartbeat_dyn(); return true; }
+		break;
 	case 15:
 		if (HX_FIELD_EQ(inName,"serializeStanza") ) { outValue = serializeStanza_dyn(); return true; }
 		break;
@@ -746,6 +792,7 @@ static ::String XmppStropheStream_obj_sMemberFields[] = {
 ::hx::Class XmppStropheStream_obj::__mClass;
 
 static ::String XmppStropheStream_obj_sStaticFields[] = {
+	HX_("startHeartbeat",3a,cb,14,c4),
 	HX_("parseStanza",88,0a,34,81),
 	HX_("serializeStanza",f5,d7,e9,1f),
 	HX_("convertFromStanza",d2,72,14,33),
diff --git a/Sources/c_borogove/src/cpp/vm/Gc.cpp b/Sources/c_borogove/src/cpp/vm/Gc.cpp
new file mode 100644
index 0000000..46744de
--- /dev/null
+++ b/Sources/c_borogove/src/cpp/vm/Gc.cpp
@@ -0,0 +1,88 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_cpp_vm_Gc
+#include <cpp/vm/Gc.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_be3f97a95d181a8b_59_trace,"cpp.vm.Gc","trace",0xb7afef1f,"cpp.vm.Gc.trace","/usr/local/lib/haxe/std/cpp/vm/Gc.hx",59,0x44f3d2d3)
+namespace cpp{
+namespace vm{
+
+void Gc_obj::__construct() { }
+
+Dynamic Gc_obj::__CreateEmpty() { return new Gc_obj; }
+
+void *Gc_obj::_hx_vtable = 0;
+
+Dynamic Gc_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< Gc_obj > _hx_result = new Gc_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool Gc_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x6bc853d6;
+}
+
+int Gc_obj::trace(::hx::Class sought,::hx::Null< bool >  __o_printInstances){
+            		bool printInstances = __o_printInstances.Default(true);
+            	HX_STACKFRAME(&_hx_pos_be3f97a95d181a8b_59_trace)
+HXDLIN(  59)		return __hxcpp_gc_trace(sought,printInstances);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(Gc_obj,trace,return )
+
+
+Gc_obj::Gc_obj()
+{
+}
+
+bool Gc_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 5:
+		if (HX_FIELD_EQ(inName,"trace") ) { outValue = trace_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *Gc_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *Gc_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class Gc_obj::__mClass;
+
+static ::String Gc_obj_sStaticFields[] = {
+	HX_("trace",85,8e,1f,16),
+	::String(null())
+};
+
+void Gc_obj::__register()
+{
+	Gc_obj _hx_dummy;
+	Gc_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("cpp.vm.Gc",88,f1,b3,68);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &Gc_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(Gc_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< Gc_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = Gc_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = Gc_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace cpp
+} // end namespace vm
diff --git a/Sources/c_borogove/src/cpp/vm/WeakRef.cpp b/Sources/c_borogove/src/cpp/vm/WeakRef.cpp
new file mode 100644
index 0000000..24b1f1a
--- /dev/null
+++ b/Sources/c_borogove/src/cpp/vm/WeakRef.cpp
@@ -0,0 +1,143 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_cpp_vm_WeakRef
+#include <cpp/vm/WeakRef.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_5d77fc6d6289cb3b_29_new,"cpp.vm.WeakRef","new",0x9ce60541,"cpp.vm.WeakRef.new","/usr/local/lib/haxe/std/cpp/vm/WeakRef.hx",29,0xff0f6792)
+HX_LOCAL_STACK_FRAME(_hx_pos_5d77fc6d6289cb3b_37_get,"cpp.vm.WeakRef","get",0x9ce0b577,"cpp.vm.WeakRef.get","/usr/local/lib/haxe/std/cpp/vm/WeakRef.hx",37,0xff0f6792)
+namespace cpp{
+namespace vm{
+
+void WeakRef_obj::__construct( ::Dynamic inObject,::hx::Null< bool >  __o_inHard){
+            		bool inHard = __o_inHard.Default(false);
+            	HX_STACKFRAME(&_hx_pos_5d77fc6d6289cb3b_29_new)
+HXLINE(  30)		this->hardRef = inHard;
+HXLINE(  31)		if (this->hardRef) {
+HXLINE(  32)			this->ref = inObject;
+            		}
+            		else {
+HXLINE(  34)			this->ref =  ::__hxcpp_weak_ref_create(inObject);
+            		}
+            	}
+
+Dynamic WeakRef_obj::__CreateEmpty() { return new WeakRef_obj; }
+
+void *WeakRef_obj::_hx_vtable = 0;
+
+Dynamic WeakRef_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< WeakRef_obj > _hx_result = new WeakRef_obj();
+	_hx_result->__construct(inArgs[0],inArgs[1]);
+	return _hx_result;
+}
+
+bool WeakRef_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x79de7951;
+}
+
+ ::Dynamic WeakRef_obj::get(){
+            	HX_STACKFRAME(&_hx_pos_5d77fc6d6289cb3b_37_get)
+HXLINE(  38)		if (this->hardRef) {
+HXLINE(  39)			return this->ref;
+            		}
+HXLINE(  41)		return  ::__hxcpp_weak_ref_get(this->ref);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(WeakRef_obj,get,return )
+
+
+WeakRef_obj::WeakRef_obj()
+{
+}
+
+void WeakRef_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(WeakRef);
+	HX_MARK_MEMBER_NAME(ref,"ref");
+	HX_MARK_MEMBER_NAME(hardRef,"hardRef");
+	HX_MARK_END_CLASS();
+}
+
+void WeakRef_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(ref,"ref");
+	HX_VISIT_MEMBER_NAME(hardRef,"hardRef");
+}
+
+::hx::Val WeakRef_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"ref") ) { return ::hx::Val( ref ); }
+		if (HX_FIELD_EQ(inName,"get") ) { return ::hx::Val( get_dyn() ); }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"hardRef") ) { return ::hx::Val( hardRef ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+::hx::Val WeakRef_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"ref") ) { ref=inValue.Cast<  ::Dynamic >(); return inValue; }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"hardRef") ) { hardRef=inValue.Cast< bool >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+void WeakRef_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("ref",53,d9,56,00));
+	outFields->push(HX_("hardRef",28,47,5c,93));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo WeakRef_obj_sMemberStorageInfo[] = {
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(WeakRef_obj,ref),HX_("ref",53,d9,56,00)},
+	{::hx::fsBool,(int)offsetof(WeakRef_obj,hardRef),HX_("hardRef",28,47,5c,93)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo *WeakRef_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String WeakRef_obj_sMemberFields[] = {
+	HX_("ref",53,d9,56,00),
+	HX_("hardRef",28,47,5c,93),
+	HX_("get",96,80,4e,00),
+	::String(null()) };
+
+::hx::Class WeakRef_obj::__mClass;
+
+void WeakRef_obj::__register()
+{
+	WeakRef_obj _hx_dummy;
+	WeakRef_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("cpp.vm.WeakRef",cf,50,d0,17);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(WeakRef_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< WeakRef_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = WeakRef_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = WeakRef_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace cpp
+} // end namespace vm
diff --git a/Sources/c_borogove/src/haxe/crypto/Aes.cpp b/Sources/c_borogove/src/haxe/crypto/Aes.cpp
new file mode 100644
index 0000000..db7786c
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/Aes.cpp
@@ -0,0 +1,1020 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_95f339a1d026d52c
+#define INCLUDED_95f339a1d026d52c
+#include "hxMath.h"
+#endif
+#ifndef INCLUDED_haxe_crypto_Aes
+#include <haxe/crypto/Aes.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CBC
+#include <haxe/crypto/mode/CBC.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CCM
+#include <haxe/crypto/mode/CCM.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CFB
+#include <haxe/crypto/mode/CFB.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CTR
+#include <haxe/crypto/mode/CTR.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_EAX
+#include <haxe/crypto/mode/EAX.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_ECB
+#include <haxe/crypto/mode/ECB.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_GCM
+#include <haxe/crypto/mode/GCM.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_GCMSIV
+#include <haxe/crypto/mode/GCMSIV.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_OFB
+#include <haxe/crypto/mode/OFB.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_PCBC
+#include <haxe/crypto/mode/PCBC.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_SIV
+#include <haxe/crypto/mode/SIV.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_AnsiX923
+#include <haxe/crypto/padding/AnsiX923.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_BitPadding
+#include <haxe/crypto/padding/BitPadding.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_ISO10126
+#include <haxe/crypto/padding/ISO10126.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_NoPadding
+#include <haxe/crypto/padding/NoPadding.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_NullPadding
+#include <haxe/crypto/padding/NullPadding.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_PKCS7
+#include <haxe/crypto/padding/PKCS7.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_SpacePadding
+#include <haxe/crypto/padding/SpacePadding.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_TBC
+#include <haxe/crypto/padding/TBC.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_896031c90f9f6860_41_new,"haxe.crypto.Aes","new",0xb682427c,"haxe.crypto.Aes.new","haxe/crypto/Aes.hx",41,0xba916a94)
+HX_LOCAL_STACK_FRAME(_hx_pos_896031c90f9f6860_36_set_iv,"haxe.crypto.Aes","set_iv",0xb6df0f0e,"haxe.crypto.Aes.set_iv","haxe/crypto/Aes.hx",36,0xba916a94)
+HX_LOCAL_STACK_FRAME(_hx_pos_896031c90f9f6860_47_init,"haxe.crypto.Aes","init",0xf830a174,"haxe.crypto.Aes.init","haxe/crypto/Aes.hx",47,0xba916a94)
+HX_LOCAL_STACK_FRAME(_hx_pos_896031c90f9f6860_120_keyExpansion,"haxe.crypto.Aes","keyExpansion",0xc2ae5bc4,"haxe.crypto.Aes.keyExpansion","haxe/crypto/Aes.hx",120,0xba916a94)
+HX_LOCAL_STACK_FRAME(_hx_pos_896031c90f9f6860_160_encrypt,"haxe.crypto.Aes","encrypt",0xe2232e81,"haxe.crypto.Aes.encrypt","haxe/crypto/Aes.hx",160,0xba916a94)
+HX_LOCAL_STACK_FRAME(_hx_pos_896031c90f9f6860_211_decrypt,"haxe.crypto.Aes","decrypt",0x1f577869,"haxe.crypto.Aes.decrypt","haxe/crypto/Aes.hx",211,0xba916a94)
+HX_LOCAL_STACK_FRAME(_hx_pos_896031c90f9f6860_260_encryptBlock,"haxe.crypto.Aes","encryptBlock",0xc5c9830c,"haxe.crypto.Aes.encryptBlock","haxe/crypto/Aes.hx",260,0xba916a94)
+HX_LOCAL_STACK_FRAME(_hx_pos_896031c90f9f6860_270_decryptBlock,"haxe.crypto.Aes","decryptBlock",0xfc385024,"haxe.crypto.Aes.decryptBlock","haxe/crypto/Aes.hx",270,0xba916a94)
+HX_LOCAL_STACK_FRAME(_hx_pos_896031c90f9f6860_287_generateBlock,"haxe.crypto.Aes","generateBlock",0xfb3df2f4,"haxe.crypto.Aes.generateBlock","haxe/crypto/Aes.hx",287,0xba916a94)
+HX_LOCAL_STACK_FRAME(_hx_pos_896031c90f9f6860_322_bytesToInt32,"haxe.crypto.Aes","bytesToInt32",0xbe9d1d0c,"haxe.crypto.Aes.bytesToInt32","haxe/crypto/Aes.hx",322,0xba916a94)
+HX_LOCAL_STACK_FRAME(_hx_pos_896031c90f9f6860_330_int32ToBytes,"haxe.crypto.Aes","int32ToBytes",0x47cc79a6,"haxe.crypto.Aes.int32ToBytes","haxe/crypto/Aes.hx",330,0xba916a94)
+HX_LOCAL_STACK_FRAME(_hx_pos_896031c90f9f6860_57_initTable,"haxe.crypto.Aes","initTable",0xce5ec1fa,"haxe.crypto.Aes.initTable","haxe/crypto/Aes.hx",57,0xba916a94)
+namespace haxe{
+namespace crypto{
+
+void Aes_obj::__construct( ::haxe::io::Bytes key, ::haxe::io::Bytes iv){
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_41_new)
+HXLINE(  42)		::haxe::crypto::Aes_obj::initTable();
+HXLINE(  43)		if (::hx::IsNotNull( key )) {
+HXLINE(  44)			this->init(key,iv);
+            		}
+            	}
+
+Dynamic Aes_obj::__CreateEmpty() { return new Aes_obj; }
+
+void *Aes_obj::_hx_vtable = 0;
+
+Dynamic Aes_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< Aes_obj > _hx_result = new Aes_obj();
+	_hx_result->__construct(inArgs[0],inArgs[1]);
+	return _hx_result;
+}
+
+bool Aes_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x49ad9de8;
+}
+
+ ::haxe::io::Bytes Aes_obj::set_iv( ::haxe::io::Bytes vector){
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_36_set_iv)
+HXLINE(  37)		this->iv = vector;
+HXLINE(  38)		return this->iv;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Aes_obj,set_iv,return )
+
+void Aes_obj::init( ::haxe::io::Bytes key, ::haxe::io::Bytes iv){
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_47_init)
+HXLINE(  48)		this->key = key;
+HXLINE(  49)		this->Nk = (key->length >> 2);
+HXLINE(  50)		this->Nr = (this->Nk + 6);
+HXLINE(  51)		this->keyRows = ((this->Nr + 1) * 4);
+HXLINE(  52)		this->state = ::Array_obj< int >::__new(this->Nk);
+HXLINE(  53)		this->set_iv(iv);
+HXLINE(  54)		this->keyExpansion(key);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Aes_obj,init,(void))
+
+void Aes_obj::keyExpansion( ::haxe::io::Bytes key){
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_120_keyExpansion)
+HXLINE( 121)		this->roundKey = ::Array_obj< int >::__new(this->keyRows);
+HXLINE( 122)		{
+HXLINE( 122)			int _g = 0;
+HXDLIN( 122)			int _g1 = this->keyRows;
+HXDLIN( 122)			while((_g < _g1)){
+HXLINE( 122)				_g = (_g + 1);
+HXDLIN( 122)				int ksRow = (_g - 1);
+HXLINE( 123)				if ((ksRow < this->Nk)) {
+HXLINE( 124)					::Array< int > this1 = this->roundKey;
+HXDLIN( 124)					int val = this->bytesToInt32(key,(ksRow << 2));
+HXDLIN( 124)					this1->__unsafe_set(ksRow,val);
+            				}
+            				else {
+HXLINE( 126)					int t = ( (int)(_hx_array_unsafe_get(this->roundKey,(ksRow - 1))) );
+HXLINE( 127)					if ((::hx::Mod(ksRow,this->Nk) == 0)) {
+HXLINE( 128)						t = ((t << 8) | ::hx::UShr(t,24));
+HXLINE( 129)						int t1 = (( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,::hx::UShr(t,24))) ) << 24);
+HXDLIN( 129)						int t2 = (t1 | (( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,(::hx::UShr(t,16) & 255))) ) << 16));
+HXDLIN( 129)						int t3 = (t2 | (( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,(::hx::UShr(t,8) & 255))) ) << 8));
+HXDLIN( 129)						t = (t3 | ( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,(t & 255))) ));
+HXLINE( 130)						t = (t ^ (( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::RCON,(::Math_obj::floor((( (Float)(ksRow) ) / ( (Float)(this->Nk) ))) | 0))) ) << 24));
+            					}
+            					else {
+HXLINE( 131)						bool _hx_tmp;
+HXDLIN( 131)						if ((this->Nk > 6)) {
+HXLINE( 131)							_hx_tmp = (::hx::Mod(ksRow,this->Nk) == 4);
+            						}
+            						else {
+HXLINE( 131)							_hx_tmp = false;
+            						}
+HXDLIN( 131)						if (_hx_tmp) {
+HXLINE( 132)							int t4 = (( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,::hx::UShr(t,24))) ) << 24);
+HXDLIN( 132)							int t5 = (t4 | (( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,(::hx::UShr(t,16) & 255))) ) << 16));
+HXDLIN( 132)							int t6 = (t5 | (( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,(::hx::UShr(t,8) & 255))) ) << 8));
+HXDLIN( 132)							t = (t6 | ( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,(t & 255))) ));
+            						}
+            					}
+HXLINE( 134)					{
+HXLINE( 134)						::Array< int > this2 = this->roundKey;
+HXDLIN( 134)						int val1 = (( (int)(_hx_array_unsafe_get(this->roundKey,(ksRow - this->Nk))) ) ^ t);
+HXDLIN( 134)						this2->__unsafe_set(ksRow,val1);
+            					}
+            				}
+            			}
+            		}
+HXLINE( 137)		this->rRoundKey = ::Array_obj< int >::__new(this->keyRows);
+HXLINE( 138)		int keyRow;
+HXDLIN( 138)		int t7;
+HXLINE( 139)		{
+HXLINE( 139)			int _g2 = 0;
+HXDLIN( 139)			int _g3 = this->keyRows;
+HXDLIN( 139)			while((_g2 < _g3)){
+HXLINE( 139)				_g2 = (_g2 + 1);
+HXDLIN( 139)				int i = (_g2 - 1);
+HXLINE( 140)				keyRow = (this->keyRows - i);
+HXLINE( 142)				if ((::hx::Mod(i,4) != 0)) {
+HXLINE( 143)					t7 = ( (int)(_hx_array_unsafe_get(this->roundKey,keyRow)) );
+            				}
+            				else {
+HXLINE( 145)					t7 = ( (int)(_hx_array_unsafe_get(this->roundKey,(keyRow - 4))) );
+            				}
+HXLINE( 148)				bool _hx_tmp1;
+HXDLIN( 148)				if ((i >= 4)) {
+HXLINE( 148)					_hx_tmp1 = (keyRow <= 4);
+            				}
+            				else {
+HXLINE( 148)					_hx_tmp1 = true;
+            				}
+HXDLIN( 148)				if (_hx_tmp1) {
+HXLINE( 149)					this->rRoundKey->__unsafe_set(i,t7);
+            				}
+            				else {
+HXLINE( 151)					::Array< int > this3 = this->rRoundKey;
+HXDLIN( 151)					::Array< int > this4 = ::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_0;
+HXDLIN( 151)					int val2 = ( (int)(_hx_array_unsafe_get(this4,( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,::hx::UShr(t7,24))) ))) );
+HXDLIN( 151)					::Array< int > this5 = ::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_1;
+HXDLIN( 151)					int val3 = (val2 ^ ( (int)(_hx_array_unsafe_get(this5,( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,(::hx::UShr(t7,16) & 255))) ))) ));
+HXDLIN( 151)					::Array< int > this6 = ::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_2;
+HXDLIN( 151)					int val4 = (val3 ^ ( (int)(_hx_array_unsafe_get(this6,( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,(::hx::UShr(t7,8) & 255))) ))) ));
+HXDLIN( 151)					::Array< int > this7 = ::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_3;
+HXDLIN( 151)					int val5 = (val4 ^ ( (int)(_hx_array_unsafe_get(this7,( (int)(_hx_array_unsafe_get(::haxe::crypto::Aes_obj::SBOX,(t7 & 255))) ))) ));
+HXDLIN( 151)					this3->__unsafe_set(i,val5);
+            				}
+            			}
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Aes_obj,keyExpansion,(void))
+
+ ::haxe::io::Bytes Aes_obj::encrypt(::String cipherMode, ::haxe::io::Bytes data,::String __o_padding, ::haxe::io::Bytes aad, ::Dynamic __o_tagLen,::Array< ::Dynamic> aadCollection){
+            		::String padding = __o_padding;
+            		if (::hx::IsNull(__o_padding)) padding = HX_("NoPadding",70,fb,3b,b0);
+            		 ::Dynamic tagLen = __o_tagLen;
+            		if (::hx::IsNull(__o_tagLen)) tagLen = 16;
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_160_encrypt)
+HXLINE( 161)		 ::haxe::io::Bytes out;
+HXLINE( 163)		::String _hx_switch_0 = padding;
+            		if (  (_hx_switch_0==HX_("AnsiX923",45,9b,7b,0e)) ){
+HXLINE( 172)			out = ::haxe::crypto::padding::AnsiX923_obj::pad(data,16);
+HXDLIN( 172)			goto _hx_goto_6;
+            		}
+            		if (  (_hx_switch_0==HX_("BitPadding",a4,30,e1,a0)) ){
+HXLINE( 170)			out = ::haxe::crypto::padding::BitPadding_obj::pad(data,16);
+HXDLIN( 170)			goto _hx_goto_6;
+            		}
+            		if (  (_hx_switch_0==HX_("ISO10126",71,91,8b,b7)) ){
+HXLINE( 174)			out = ::haxe::crypto::padding::ISO10126_obj::pad(data,16);
+HXDLIN( 174)			goto _hx_goto_6;
+            		}
+            		if (  (_hx_switch_0==HX_("NoPadding",70,fb,3b,b0)) ){
+HXLINE( 166)			out = ::haxe::crypto::padding::NoPadding_obj::pad(data,16);
+HXDLIN( 166)			goto _hx_goto_6;
+            		}
+            		if (  (_hx_switch_0==HX_("NullPadding",ea,69,bc,e2)) ){
+HXLINE( 176)			out = ::haxe::crypto::padding::NullPadding_obj::pad(data,16);
+HXDLIN( 176)			goto _hx_goto_6;
+            		}
+            		if (  (_hx_switch_0==HX_("PKCS7",6c,88,d4,41)) ){
+HXLINE( 168)			out = ::haxe::crypto::padding::PKCS7_obj::pad(data,16);
+HXDLIN( 168)			goto _hx_goto_6;
+            		}
+            		if (  (_hx_switch_0==HX_("SpacePadding",cb,05,a8,50)) ){
+HXLINE( 178)			out = ::haxe::crypto::padding::SpacePadding_obj::pad(data,16);
+HXDLIN( 178)			goto _hx_goto_6;
+            		}
+            		if (  (_hx_switch_0==HX_("TBC",15,f7,3f,00)) ){
+HXLINE( 180)			out = ::haxe::crypto::padding::TBC_obj::pad(data,16);
+HXDLIN( 180)			goto _hx_goto_6;
+            		}
+            		_hx_goto_6:;
+HXLINE( 183)		::String _hx_switch_1 = cipherMode;
+            		if (  (_hx_switch_1==HX_("cbc",e4,74,4b,00)) ){
+HXLINE( 185)			::haxe::crypto::mode::CBC_obj::encrypt(out,this->iv,16,this->encryptBlock_dyn());
+HXDLIN( 185)			goto _hx_goto_7;
+            		}
+            		if (  (_hx_switch_1==HX_("ccm",cd,75,4b,00)) ){
+HXLINE( 197)			return ::haxe::crypto::mode::CCM_obj::encrypt(out,this->iv,aad,( (int)(tagLen) ),16,this->encryptBlock_dyn());
+HXDLIN( 197)			goto _hx_goto_7;
+            		}
+            		if (  (_hx_switch_1==HX_("cfb",5f,78,4b,00)) ){
+HXLINE( 193)			::haxe::crypto::mode::CFB_obj::encrypt(out,this->iv,16,this->encryptBlock_dyn());
+HXDLIN( 193)			goto _hx_goto_7;
+            		}
+            		if (  (_hx_switch_1==HX_("ctr",a1,84,4b,00)) ){
+HXLINE( 191)			::haxe::crypto::mode::CTR_obj::encrypt(out,this->iv,16,this->encryptBlock_dyn());
+HXDLIN( 191)			goto _hx_goto_7;
+            		}
+            		if (  (_hx_switch_1==HX_("eax",9c,f8,4c,00)) ){
+HXLINE( 205)			return ::haxe::crypto::mode::EAX_obj::encrypt(out,this->key,this->iv,this->encryptBlock_dyn(),aadCollection);
+HXDLIN( 205)			goto _hx_goto_7;
+            		}
+            		if (  (_hx_switch_1==HX_("ecb",44,fa,4c,00)) ){
+HXLINE( 187)			::haxe::crypto::mode::ECB_obj::encrypt(out,16,this->encryptBlock_dyn());
+HXDLIN( 187)			goto _hx_goto_7;
+            		}
+            		if (  (_hx_switch_1==HX_("gcm",d1,7e,4e,00)) ){
+HXLINE( 199)			return ::haxe::crypto::mode::GCM_obj::encrypt(out,this->iv,aad,( (int)(tagLen) ),16,this->encryptBlock_dyn());
+HXDLIN( 199)			goto _hx_goto_7;
+            		}
+            		if (  (_hx_switch_1==HX_("gcmsiv",ef,78,d1,77)) ){
+HXLINE( 203)			return ::haxe::crypto::mode::GCMSIV_obj::encrypt(this->key,this->iv,out,aad,this->encryptBlock_dyn(),this->init_dyn());
+HXDLIN( 203)			goto _hx_goto_7;
+            		}
+            		if (  (_hx_switch_1==HX_("ofb",6b,93,54,00)) ){
+HXLINE( 195)			::haxe::crypto::mode::OFB_obj::encrypt(out,this->iv,16,this->encryptBlock_dyn());
+HXDLIN( 195)			goto _hx_goto_7;
+            		}
+            		if (  (_hx_switch_1==HX_("pcbc",74,5a,53,4a)) ){
+HXLINE( 189)			::haxe::crypto::mode::PCBC_obj::encrypt(out,this->iv,16,this->encryptBlock_dyn());
+HXDLIN( 189)			goto _hx_goto_7;
+            		}
+            		if (  (_hx_switch_1==HX_("siv",20,9f,57,00)) ){
+HXLINE( 201)			return ::haxe::crypto::mode::SIV_obj::encrypt(this->key,out,this->iv,aadCollection,this->encryptBlock_dyn(),this->init_dyn());
+HXDLIN( 201)			goto _hx_goto_7;
+            		}
+            		_hx_goto_7:;
+HXLINE( 208)		return out;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC6(Aes_obj,encrypt,return )
+
+ ::haxe::io::Bytes Aes_obj::decrypt(::String cipherMode, ::haxe::io::Bytes data,::String __o_padding, ::haxe::io::Bytes aad, ::Dynamic __o_tagLen,::Array< ::Dynamic> aadCollection){
+            		::String padding = __o_padding;
+            		if (::hx::IsNull(__o_padding)) padding = HX_("NoPadding",70,fb,3b,b0);
+            		 ::Dynamic tagLen = __o_tagLen;
+            		if (::hx::IsNull(__o_tagLen)) tagLen = 16;
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_211_decrypt)
+HXLINE( 212)		 ::haxe::io::Bytes out = data->sub(0,data->length);
+HXLINE( 214)		::String _hx_switch_0 = cipherMode;
+            		if (  (_hx_switch_0==HX_("cbc",e4,74,4b,00)) ){
+HXLINE( 216)			::haxe::crypto::mode::CBC_obj::decrypt(out,this->iv,16,this->decryptBlock_dyn());
+HXDLIN( 216)			goto _hx_goto_9;
+            		}
+            		if (  (_hx_switch_0==HX_("ccm",cd,75,4b,00)) ){
+HXLINE( 228)			return ::haxe::crypto::mode::CCM_obj::decrypt(out,this->iv,aad,( (int)(tagLen) ),16,this->encryptBlock_dyn());
+HXDLIN( 228)			goto _hx_goto_9;
+            		}
+            		if (  (_hx_switch_0==HX_("cfb",5f,78,4b,00)) ){
+HXLINE( 224)			::haxe::crypto::mode::CFB_obj::decrypt(out,this->iv,16,this->encryptBlock_dyn());
+HXDLIN( 224)			goto _hx_goto_9;
+            		}
+            		if (  (_hx_switch_0==HX_("ctr",a1,84,4b,00)) ){
+HXLINE( 222)			::haxe::crypto::mode::CTR_obj::decrypt(out,this->iv,16,this->encryptBlock_dyn());
+HXDLIN( 222)			goto _hx_goto_9;
+            		}
+            		if (  (_hx_switch_0==HX_("eax",9c,f8,4c,00)) ){
+HXLINE( 236)			return ::haxe::crypto::mode::EAX_obj::decrypt(out,this->key,this->iv,this->encryptBlock_dyn(),aadCollection);
+HXDLIN( 236)			goto _hx_goto_9;
+            		}
+            		if (  (_hx_switch_0==HX_("ecb",44,fa,4c,00)) ){
+HXLINE( 218)			::haxe::crypto::mode::ECB_obj::decrypt(out,16,this->decryptBlock_dyn());
+HXDLIN( 218)			goto _hx_goto_9;
+            		}
+            		if (  (_hx_switch_0==HX_("gcm",d1,7e,4e,00)) ){
+HXLINE( 230)			return ::haxe::crypto::mode::GCM_obj::decrypt(out,this->iv,aad,( (int)(tagLen) ),16,this->encryptBlock_dyn());
+HXDLIN( 230)			goto _hx_goto_9;
+            		}
+            		if (  (_hx_switch_0==HX_("gcmsiv",ef,78,d1,77)) ){
+HXLINE( 234)			return ::haxe::crypto::mode::GCMSIV_obj::decrypt(this->key,this->iv,out,aad,this->encryptBlock_dyn(),this->init_dyn());
+HXDLIN( 234)			goto _hx_goto_9;
+            		}
+            		if (  (_hx_switch_0==HX_("ofb",6b,93,54,00)) ){
+HXLINE( 226)			::haxe::crypto::mode::OFB_obj::decrypt(out,this->iv,16,this->encryptBlock_dyn());
+HXDLIN( 226)			goto _hx_goto_9;
+            		}
+            		if (  (_hx_switch_0==HX_("pcbc",74,5a,53,4a)) ){
+HXLINE( 220)			::haxe::crypto::mode::PCBC_obj::decrypt(out,this->iv,16,this->decryptBlock_dyn());
+HXDLIN( 220)			goto _hx_goto_9;
+            		}
+            		if (  (_hx_switch_0==HX_("siv",20,9f,57,00)) ){
+HXLINE( 232)			return ::haxe::crypto::mode::SIV_obj::decrypt(this->key,out,this->iv,aadCollection,this->encryptBlock_dyn(),this->init_dyn());
+HXDLIN( 232)			goto _hx_goto_9;
+            		}
+            		_hx_goto_9:;
+HXLINE( 239)		::String _hx_switch_1 = padding;
+            		if (  (_hx_switch_1==HX_("AnsiX923",45,9b,7b,0e)) ){
+HXLINE( 247)			out = ::haxe::crypto::padding::AnsiX923_obj::unpad(out);
+HXDLIN( 247)			goto _hx_goto_10;
+            		}
+            		if (  (_hx_switch_1==HX_("BitPadding",a4,30,e1,a0)) ){
+HXLINE( 245)			out = ::haxe::crypto::padding::BitPadding_obj::unpad(out);
+HXDLIN( 245)			goto _hx_goto_10;
+            		}
+            		if (  (_hx_switch_1==HX_("ISO10126",71,91,8b,b7)) ){
+HXLINE( 249)			out = ::haxe::crypto::padding::ISO10126_obj::unpad(out);
+HXDLIN( 249)			goto _hx_goto_10;
+            		}
+            		if (  (_hx_switch_1==HX_("NoPadding",70,fb,3b,b0)) ){
+HXLINE( 241)			out = ::haxe::crypto::padding::NoPadding_obj::unpad(out);
+HXDLIN( 241)			goto _hx_goto_10;
+            		}
+            		if (  (_hx_switch_1==HX_("NullPadding",ea,69,bc,e2)) ){
+HXLINE( 251)			out = ::haxe::crypto::padding::NullPadding_obj::unpad(out);
+HXDLIN( 251)			goto _hx_goto_10;
+            		}
+            		if (  (_hx_switch_1==HX_("PKCS7",6c,88,d4,41)) ){
+HXLINE( 243)			out = ::haxe::crypto::padding::PKCS7_obj::unpad(out);
+HXDLIN( 243)			goto _hx_goto_10;
+            		}
+            		if (  (_hx_switch_1==HX_("SpacePadding",cb,05,a8,50)) ){
+HXLINE( 253)			out = ::haxe::crypto::padding::SpacePadding_obj::unpad(out);
+HXDLIN( 253)			goto _hx_goto_10;
+            		}
+            		if (  (_hx_switch_1==HX_("TBC",15,f7,3f,00)) ){
+HXLINE( 255)			out = ::haxe::crypto::padding::TBC_obj::unpad(out);
+HXDLIN( 255)			goto _hx_goto_10;
+            		}
+            		_hx_goto_10:;
+HXLINE( 257)		return out;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC6(Aes_obj,decrypt,return )
+
+void Aes_obj::encryptBlock( ::haxe::io::Bytes src,int srcIndex, ::haxe::io::Bytes dst,int dstIndex){
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_260_encryptBlock)
+HXLINE( 261)		{
+HXLINE( 262)			{
+HXLINE( 262)				::Array< int > this1 = this->state;
+HXDLIN( 262)				int val = this->bytesToInt32(src,srcIndex);
+HXDLIN( 262)				this1->__unsafe_set(0,val);
+            			}
+HXDLIN( 262)			{
+HXLINE( 262)				::Array< int > this2 = this->state;
+HXDLIN( 262)				int val1 = this->bytesToInt32(src,(srcIndex + 4));
+HXDLIN( 262)				this2->__unsafe_set(1,val1);
+            			}
+HXDLIN( 262)			{
+HXLINE( 262)				::Array< int > this3 = this->state;
+HXDLIN( 262)				int val2 = this->bytesToInt32(src,(srcIndex + 8));
+HXDLIN( 262)				this3->__unsafe_set(2,val2);
+            			}
+HXDLIN( 262)			{
+HXLINE( 262)				::Array< int > this4 = this->state;
+HXDLIN( 262)				int val3 = this->bytesToInt32(src,(srcIndex + 12));
+HXDLIN( 262)				this4->__unsafe_set(3,val3);
+            			}
+            		}
+HXLINE( 264)		this->generateBlock(this->roundKey,::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_0,::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_1,::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_2,::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_3,::haxe::crypto::Aes_obj::SBOX);
+HXLINE( 265)		{
+HXLINE( 266)			this->int32ToBytes(( (int)(_hx_array_unsafe_get(this->state,0)) ),dst,dstIndex);
+HXDLIN( 266)			this->int32ToBytes(( (int)(_hx_array_unsafe_get(this->state,1)) ),dst,(dstIndex + 4));
+HXDLIN( 266)			this->int32ToBytes(( (int)(_hx_array_unsafe_get(this->state,2)) ),dst,(dstIndex + 8));
+HXDLIN( 266)			this->int32ToBytes(( (int)(_hx_array_unsafe_get(this->state,3)) ),dst,(dstIndex + 12));
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC4(Aes_obj,encryptBlock,(void))
+
+void Aes_obj::decryptBlock( ::haxe::io::Bytes src,int srcIndex, ::haxe::io::Bytes dst,::hx::Null< int >  __o_dstIndex){
+            		int dstIndex = __o_dstIndex.Default(0);
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_270_decryptBlock)
+HXLINE( 271)		{
+HXLINE( 272)			{
+HXLINE( 272)				::Array< int > this1 = this->state;
+HXDLIN( 272)				int val = this->bytesToInt32(src,srcIndex);
+HXDLIN( 272)				this1->__unsafe_set(0,val);
+            			}
+HXDLIN( 272)			{
+HXLINE( 272)				::Array< int > this2 = this->state;
+HXDLIN( 272)				int val1 = this->bytesToInt32(src,(srcIndex + 4));
+HXDLIN( 272)				this2->__unsafe_set(1,val1);
+            			}
+HXDLIN( 272)			{
+HXLINE( 272)				::Array< int > this3 = this->state;
+HXDLIN( 272)				int val2 = this->bytesToInt32(src,(srcIndex + 8));
+HXDLIN( 272)				this3->__unsafe_set(2,val2);
+            			}
+HXDLIN( 272)			{
+HXLINE( 272)				::Array< int > this4 = this->state;
+HXDLIN( 272)				int val3 = this->bytesToInt32(src,(srcIndex + 12));
+HXDLIN( 272)				this4->__unsafe_set(3,val3);
+            			}
+            		}
+HXLINE( 274)		int t = ( (int)(_hx_array_unsafe_get(this->state,1)) );
+HXLINE( 275)		{
+HXLINE( 275)			::Array< int > this5 = this->state;
+HXDLIN( 275)			int val4 = ( (int)(_hx_array_unsafe_get(this->state,3)) );
+HXDLIN( 275)			this5->__unsafe_set(1,val4);
+            		}
+HXLINE( 276)		this->state->__unsafe_set(3,t);
+HXLINE( 277)		this->generateBlock(this->rRoundKey,::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_0,::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_1,::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_2,::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_3,::haxe::crypto::Aes_obj::RSBOX);
+HXLINE( 278)		t = ( (int)(_hx_array_unsafe_get(this->state,1)) );
+HXLINE( 279)		{
+HXLINE( 279)			::Array< int > this6 = this->state;
+HXDLIN( 279)			int val5 = ( (int)(_hx_array_unsafe_get(this->state,3)) );
+HXDLIN( 279)			this6->__unsafe_set(1,val5);
+            		}
+HXLINE( 280)		this->state->__unsafe_set(3,t);
+HXLINE( 281)		{
+HXLINE( 282)			this->int32ToBytes(( (int)(_hx_array_unsafe_get(this->state,0)) ),dst,dstIndex);
+HXDLIN( 282)			this->int32ToBytes(( (int)(_hx_array_unsafe_get(this->state,1)) ),dst,(dstIndex + 4));
+HXDLIN( 282)			this->int32ToBytes(( (int)(_hx_array_unsafe_get(this->state,2)) ),dst,(dstIndex + 8));
+HXDLIN( 282)			this->int32ToBytes(( (int)(_hx_array_unsafe_get(this->state,3)) ),dst,(dstIndex + 12));
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC4(Aes_obj,decryptBlock,(void))
+
+void Aes_obj::generateBlock(::Array< int > keySchedule,::Array< int > SUB_MIX_0,::Array< int > SUB_MIX_1,::Array< int > SUB_MIX_2,::Array< int > SUB_MIX_3,::Array< int > SBOX){
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_287_generateBlock)
+HXLINE( 288)		int state0 = ( (int)(_hx_array_unsafe_get(this->state,0)) );
+HXDLIN( 288)		int state01 = (state0 ^ ( (int)(_hx_array_unsafe_get(keySchedule,0)) ));
+HXLINE( 289)		int state1 = ( (int)(_hx_array_unsafe_get(this->state,1)) );
+HXDLIN( 289)		int state11 = (state1 ^ ( (int)(_hx_array_unsafe_get(keySchedule,1)) ));
+HXLINE( 290)		int state2 = ( (int)(_hx_array_unsafe_get(this->state,2)) );
+HXDLIN( 290)		int state21 = (state2 ^ ( (int)(_hx_array_unsafe_get(keySchedule,2)) ));
+HXLINE( 291)		int state3 = ( (int)(_hx_array_unsafe_get(this->state,3)) );
+HXDLIN( 291)		int state31 = (state3 ^ ( (int)(_hx_array_unsafe_get(keySchedule,3)) ));
+HXLINE( 293)		int ksRow = 4;
+HXLINE( 294)		int tmp0;
+HXLINE( 295)		int tmp1;
+HXLINE( 296)		int tmp2;
+HXLINE( 297)		int tmp3;
+HXLINE( 299)		{
+HXLINE( 299)			int _g = 1;
+HXDLIN( 299)			int _g1 = this->Nr;
+HXDLIN( 299)			while((_g < _g1)){
+HXLINE( 299)				_g = (_g + 1);
+HXLINE( 300)				int tmp01 = ( (int)(_hx_array_unsafe_get(SUB_MIX_0,::hx::UShr(state01,24))) );
+HXDLIN( 300)				int tmp02 = (tmp01 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_1,(::hx::UShr(state11,16) & 255))) ));
+HXDLIN( 300)				int tmp03 = (tmp02 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_2,(::hx::UShr(state21,8) & 255))) ));
+HXDLIN( 300)				int tmp04 = (tmp03 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_3,(state31 & 255))) ));
+HXDLIN( 300)				ksRow = (ksRow + 1);
+HXDLIN( 300)				tmp0 = (tmp04 ^ ( (int)(_hx_array_unsafe_get(keySchedule,(ksRow - 1))) ));
+HXLINE( 301)				int tmp11 = ( (int)(_hx_array_unsafe_get(SUB_MIX_0,::hx::UShr(state11,24))) );
+HXDLIN( 301)				int tmp12 = (tmp11 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_1,(::hx::UShr(state21,16) & 255))) ));
+HXDLIN( 301)				int tmp13 = (tmp12 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_2,(::hx::UShr(state31,8) & 255))) ));
+HXDLIN( 301)				int tmp14 = (tmp13 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_3,(state01 & 255))) ));
+HXDLIN( 301)				ksRow = (ksRow + 1);
+HXDLIN( 301)				tmp1 = (tmp14 ^ ( (int)(_hx_array_unsafe_get(keySchedule,(ksRow - 1))) ));
+HXLINE( 302)				int tmp21 = ( (int)(_hx_array_unsafe_get(SUB_MIX_0,::hx::UShr(state21,24))) );
+HXDLIN( 302)				int tmp22 = (tmp21 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_1,(::hx::UShr(state31,16) & 255))) ));
+HXDLIN( 302)				int tmp23 = (tmp22 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_2,(::hx::UShr(state01,8) & 255))) ));
+HXDLIN( 302)				int tmp24 = (tmp23 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_3,(state11 & 255))) ));
+HXDLIN( 302)				ksRow = (ksRow + 1);
+HXDLIN( 302)				tmp2 = (tmp24 ^ ( (int)(_hx_array_unsafe_get(keySchedule,(ksRow - 1))) ));
+HXLINE( 303)				int tmp31 = ( (int)(_hx_array_unsafe_get(SUB_MIX_0,::hx::UShr(state31,24))) );
+HXDLIN( 303)				int tmp32 = (tmp31 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_1,(::hx::UShr(state01,16) & 255))) ));
+HXDLIN( 303)				int tmp33 = (tmp32 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_2,(::hx::UShr(state11,8) & 255))) ));
+HXDLIN( 303)				int tmp34 = (tmp33 ^ ( (int)(_hx_array_unsafe_get(SUB_MIX_3,(state21 & 255))) ));
+HXDLIN( 303)				ksRow = (ksRow + 1);
+HXDLIN( 303)				tmp3 = (tmp34 ^ ( (int)(_hx_array_unsafe_get(keySchedule,(ksRow - 1))) ));
+HXLINE( 305)				state01 = tmp0;
+HXLINE( 306)				state11 = tmp1;
+HXLINE( 307)				state21 = tmp2;
+HXLINE( 308)				state31 = tmp3;
+            			}
+            		}
+HXLINE( 311)		int tmp05 = (( (int)(_hx_array_unsafe_get(SBOX,::hx::UShr(state01,24))) ) << 24);
+HXDLIN( 311)		int tmp06 = (tmp05 | (( (int)(_hx_array_unsafe_get(SBOX,(::hx::UShr(state11,16) & 255))) ) << 16));
+HXDLIN( 311)		int tmp07 = (tmp06 | (( (int)(_hx_array_unsafe_get(SBOX,(::hx::UShr(state21,8) & 255))) ) << 8));
+HXDLIN( 311)		int tmp08 = (tmp07 | ( (int)(_hx_array_unsafe_get(SBOX,(state31 & 255))) ));
+HXDLIN( 311)		ksRow = (ksRow + 1);
+HXDLIN( 311)		tmp0 = (tmp08 ^ ( (int)(_hx_array_unsafe_get(keySchedule,(ksRow - 1))) ));
+HXLINE( 312)		int tmp15 = (( (int)(_hx_array_unsafe_get(SBOX,::hx::UShr(state11,24))) ) << 24);
+HXDLIN( 312)		int tmp16 = (tmp15 | (( (int)(_hx_array_unsafe_get(SBOX,(::hx::UShr(state21,16) & 255))) ) << 16));
+HXDLIN( 312)		int tmp17 = (tmp16 | (( (int)(_hx_array_unsafe_get(SBOX,(::hx::UShr(state31,8) & 255))) ) << 8));
+HXDLIN( 312)		int tmp18 = (tmp17 | ( (int)(_hx_array_unsafe_get(SBOX,(state01 & 255))) ));
+HXDLIN( 312)		ksRow = (ksRow + 1);
+HXDLIN( 312)		tmp1 = (tmp18 ^ ( (int)(_hx_array_unsafe_get(keySchedule,(ksRow - 1))) ));
+HXLINE( 313)		int tmp25 = (( (int)(_hx_array_unsafe_get(SBOX,::hx::UShr(state21,24))) ) << 24);
+HXDLIN( 313)		int tmp26 = (tmp25 | (( (int)(_hx_array_unsafe_get(SBOX,(::hx::UShr(state31,16) & 255))) ) << 16));
+HXDLIN( 313)		int tmp27 = (tmp26 | (( (int)(_hx_array_unsafe_get(SBOX,(::hx::UShr(state01,8) & 255))) ) << 8));
+HXDLIN( 313)		int tmp28 = (tmp27 | ( (int)(_hx_array_unsafe_get(SBOX,(state11 & 255))) ));
+HXDLIN( 313)		ksRow = (ksRow + 1);
+HXDLIN( 313)		tmp2 = (tmp28 ^ ( (int)(_hx_array_unsafe_get(keySchedule,(ksRow - 1))) ));
+HXLINE( 314)		int tmp35 = (( (int)(_hx_array_unsafe_get(SBOX,::hx::UShr(state31,24))) ) << 24);
+HXDLIN( 314)		int tmp36 = (tmp35 | (( (int)(_hx_array_unsafe_get(SBOX,(::hx::UShr(state01,16) & 255))) ) << 16));
+HXDLIN( 314)		int tmp37 = (tmp36 | (( (int)(_hx_array_unsafe_get(SBOX,(::hx::UShr(state11,8) & 255))) ) << 8));
+HXDLIN( 314)		int tmp38 = (tmp37 | ( (int)(_hx_array_unsafe_get(SBOX,(state21 & 255))) ));
+HXDLIN( 314)		ksRow = (ksRow + 1);
+HXDLIN( 314)		tmp3 = (tmp38 ^ ( (int)(_hx_array_unsafe_get(keySchedule,(ksRow - 1))) ));
+HXLINE( 316)		this->state->__unsafe_set(0,tmp0);
+HXLINE( 317)		this->state->__unsafe_set(1,tmp1);
+HXLINE( 318)		this->state->__unsafe_set(2,tmp2);
+HXLINE( 319)		this->state->__unsafe_set(3,tmp3);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC6(Aes_obj,generateBlock,(void))
+
+int Aes_obj::bytesToInt32( ::haxe::io::Bytes bs,int off){
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_322_bytesToInt32)
+HXLINE( 323)		int n = ((( (int)(bs->b->__get(off)) ) & 255) << 24);
+HXLINE( 324)		off = (off + 1);
+HXDLIN( 324)		n = (n | ((( (int)(bs->b->__get(off)) ) & 255) << 16));
+HXLINE( 325)		off = (off + 1);
+HXDLIN( 325)		n = (n | ((( (int)(bs->b->__get(off)) ) & 255) << 8));
+HXLINE( 326)		off = (off + 1);
+HXDLIN( 326)		n = (n | (( (int)(bs->b->__get(off)) ) & 255));
+HXLINE( 327)		return n;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(Aes_obj,bytesToInt32,return )
+
+void Aes_obj::int32ToBytes(int n, ::haxe::io::Bytes bs,int off){
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_330_int32ToBytes)
+HXLINE( 331)		bs->b[off] = ( (unsigned char)((n >> 24)) );
+HXLINE( 332)		{
+HXLINE( 332)			off = (off + 1);
+HXDLIN( 332)			bs->b[off] = ( (unsigned char)((n >> 16)) );
+            		}
+HXLINE( 333)		{
+HXLINE( 333)			off = (off + 1);
+HXDLIN( 333)			bs->b[off] = ( (unsigned char)((n >> 8)) );
+            		}
+HXLINE( 334)		{
+HXLINE( 334)			off = (off + 1);
+HXDLIN( 334)			bs->b[off] = ( (unsigned char)(n) );
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC3(Aes_obj,int32ToBytes,(void))
+
+::Array< int > Aes_obj::SBOX;
+
+::Array< int > Aes_obj::RSBOX;
+
+::Array< int > Aes_obj::SUB_BYTES_MIX_COLUMN_0;
+
+::Array< int > Aes_obj::SUB_BYTES_MIX_COLUMN_1;
+
+::Array< int > Aes_obj::SUB_BYTES_MIX_COLUMN_2;
+
+::Array< int > Aes_obj::SUB_BYTES_MIX_COLUMN_3;
+
+::Array< int > Aes_obj::RSUB_BYTES_MIX_COLUMN_0;
+
+::Array< int > Aes_obj::RSUB_BYTES_MIX_COLUMN_1;
+
+::Array< int > Aes_obj::RSUB_BYTES_MIX_COLUMN_2;
+
+::Array< int > Aes_obj::RSUB_BYTES_MIX_COLUMN_3;
+
+::Array< int > Aes_obj::RCON;
+
+void Aes_obj::initTable(){
+            	HX_STACKFRAME(&_hx_pos_896031c90f9f6860_57_initTable)
+HXLINE(  58)		::haxe::crypto::Aes_obj::SBOX = ::Array_obj< int >::__new(256);
+HXLINE(  59)		::haxe::crypto::Aes_obj::RSBOX = ::Array_obj< int >::__new(256);
+HXLINE(  60)		::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_0 = ::Array_obj< int >::__new(256);
+HXLINE(  61)		::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_1 = ::Array_obj< int >::__new(256);
+HXLINE(  62)		::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_2 = ::Array_obj< int >::__new(256);
+HXLINE(  63)		::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_3 = ::Array_obj< int >::__new(256);
+HXLINE(  64)		::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_0 = ::Array_obj< int >::__new(256);
+HXLINE(  65)		::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_1 = ::Array_obj< int >::__new(256);
+HXLINE(  66)		::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_2 = ::Array_obj< int >::__new(256);
+HXLINE(  67)		::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_3 = ::Array_obj< int >::__new(256);
+HXLINE(  68)		::haxe::crypto::Aes_obj::RCON = ::Array_obj< int >::__new(11);
+HXLINE(  69)		::Array< int > d = ::Array_obj< int >::__new(256);
+HXLINE(  70)		{
+HXLINE(  70)			int _g = 0;
+HXDLIN(  70)			while((_g < 256)){
+HXLINE(  70)				_g = (_g + 1);
+HXDLIN(  70)				int i = (_g - 1);
+HXLINE(  71)				if ((i < 128)) {
+HXLINE(  72)					d->__unsafe_set(i,(i << 1));
+            				}
+            				else {
+HXLINE(  74)					d->__unsafe_set(i,((i << 1) ^ 283));
+            				}
+            			}
+            		}
+HXLINE(  77)		int x = 0;
+HXLINE(  78)		int xi = 0;
+HXLINE(  79)		{
+HXLINE(  79)			int _g1 = 0;
+HXDLIN(  79)			while((_g1 < 256)){
+HXLINE(  79)				_g1 = (_g1 + 1);
+HXLINE(  80)				int sx = ((((xi ^ (xi << 1)) ^ (xi << 2)) ^ (xi << 3)) ^ (xi << 4));
+HXLINE(  81)				sx = ((::hx::UShr(sx,8) ^ (sx & 255)) ^ 99);
+HXLINE(  82)				::haxe::crypto::Aes_obj::SBOX->__unsafe_set(x,sx);
+HXLINE(  83)				::haxe::crypto::Aes_obj::RSBOX->__unsafe_set(sx,x);
+HXLINE(  85)				int x2 = ( (int)(_hx_array_unsafe_get(d,x)) );
+HXLINE(  86)				int x4 = ( (int)(_hx_array_unsafe_get(d,x2)) );
+HXLINE(  87)				int x8 = ( (int)(_hx_array_unsafe_get(d,x4)) );
+HXLINE(  89)				int t = ((( (int)(_hx_array_unsafe_get(d,sx)) ) * 257) ^ (sx * 16843008));
+HXLINE(  90)				::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_0->__unsafe_set(x,((t << 24) | ::hx::UShr(t,8)));
+HXLINE(  91)				::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_1->__unsafe_set(x,((t << 16) | ::hx::UShr(t,16)));
+HXLINE(  92)				::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_2->__unsafe_set(x,((t << 8) | ::hx::UShr(t,24)));
+HXLINE(  93)				::haxe::crypto::Aes_obj::SUB_BYTES_MIX_COLUMN_3->__unsafe_set(x,t);
+HXLINE(  95)				t = ((((x8 * 16843009) ^ (x4 * 65537)) ^ (x2 * 257)) ^ (x * 16843008));
+HXLINE(  96)				::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_0->__unsafe_set(sx,((t << 24) | ::hx::UShr(t,8)));
+HXLINE(  97)				::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_1->__unsafe_set(sx,((t << 16) | ::hx::UShr(t,16)));
+HXLINE(  98)				::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_2->__unsafe_set(sx,((t << 8) | ::hx::UShr(t,24)));
+HXLINE(  99)				::haxe::crypto::Aes_obj::RSUB_BYTES_MIX_COLUMN_3->__unsafe_set(sx,t);
+HXLINE( 100)				if ((x == 0)) {
+HXLINE( 101)					xi = 1;
+HXDLIN( 101)					x = 1;
+            				}
+            				else {
+HXLINE( 103)					x = (x2 ^ ( (int)(_hx_array_unsafe_get(d,( (int)(_hx_array_unsafe_get(d,( (int)(_hx_array_unsafe_get(d,(x8 ^ x2))) ))) ))) ));
+HXLINE( 104)					xi = (xi ^ ( (int)(_hx_array_unsafe_get(d,( (int)(_hx_array_unsafe_get(d,xi)) ))) ));
+            				}
+            			}
+            		}
+HXLINE( 107)		::haxe::crypto::Aes_obj::RCON->__unsafe_set(0,0);
+HXLINE( 108)		::haxe::crypto::Aes_obj::RCON->__unsafe_set(1,1);
+HXLINE( 109)		::haxe::crypto::Aes_obj::RCON->__unsafe_set(2,2);
+HXLINE( 110)		::haxe::crypto::Aes_obj::RCON->__unsafe_set(3,4);
+HXLINE( 111)		::haxe::crypto::Aes_obj::RCON->__unsafe_set(4,8);
+HXLINE( 112)		::haxe::crypto::Aes_obj::RCON->__unsafe_set(5,16);
+HXLINE( 113)		::haxe::crypto::Aes_obj::RCON->__unsafe_set(6,32);
+HXLINE( 114)		::haxe::crypto::Aes_obj::RCON->__unsafe_set(7,64);
+HXLINE( 115)		::haxe::crypto::Aes_obj::RCON->__unsafe_set(8,128);
+HXLINE( 116)		::haxe::crypto::Aes_obj::RCON->__unsafe_set(9,27);
+HXLINE( 117)		::haxe::crypto::Aes_obj::RCON->__unsafe_set(10,54);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC0(Aes_obj,initTable,(void))
+
+
+::hx::ObjectPtr< Aes_obj > Aes_obj::__new( ::haxe::io::Bytes key, ::haxe::io::Bytes iv) {
+	::hx::ObjectPtr< Aes_obj > __this = new Aes_obj();
+	__this->__construct(key,iv);
+	return __this;
+}
+
+::hx::ObjectPtr< Aes_obj > Aes_obj::__alloc(::hx::Ctx *_hx_ctx, ::haxe::io::Bytes key, ::haxe::io::Bytes iv) {
+	Aes_obj *__this = (Aes_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Aes_obj), true, "haxe.crypto.Aes"));
+	*(void **)__this = Aes_obj::_hx_vtable;
+	__this->__construct(key,iv);
+	return __this;
+}
+
+Aes_obj::Aes_obj()
+{
+}
+
+void Aes_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(Aes);
+	HX_MARK_MEMBER_NAME(Nk,"Nk");
+	HX_MARK_MEMBER_NAME(Nr,"Nr");
+	HX_MARK_MEMBER_NAME(roundKey,"roundKey");
+	HX_MARK_MEMBER_NAME(rRoundKey,"rRoundKey");
+	HX_MARK_MEMBER_NAME(keyRows,"keyRows");
+	HX_MARK_MEMBER_NAME(state,"state");
+	HX_MARK_MEMBER_NAME(key,"key");
+	HX_MARK_MEMBER_NAME(iv,"iv");
+	HX_MARK_END_CLASS();
+}
+
+void Aes_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(Nk,"Nk");
+	HX_VISIT_MEMBER_NAME(Nr,"Nr");
+	HX_VISIT_MEMBER_NAME(roundKey,"roundKey");
+	HX_VISIT_MEMBER_NAME(rRoundKey,"rRoundKey");
+	HX_VISIT_MEMBER_NAME(keyRows,"keyRows");
+	HX_VISIT_MEMBER_NAME(state,"state");
+	HX_VISIT_MEMBER_NAME(key,"key");
+	HX_VISIT_MEMBER_NAME(iv,"iv");
+}
+
+::hx::Val Aes_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 2:
+		if (HX_FIELD_EQ(inName,"Nk") ) { return ::hx::Val( Nk ); }
+		if (HX_FIELD_EQ(inName,"Nr") ) { return ::hx::Val( Nr ); }
+		if (HX_FIELD_EQ(inName,"iv") ) { return ::hx::Val( iv ); }
+		break;
+	case 3:
+		if (HX_FIELD_EQ(inName,"key") ) { return ::hx::Val( key ); }
+		break;
+	case 4:
+		if (HX_FIELD_EQ(inName,"init") ) { return ::hx::Val( init_dyn() ); }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"state") ) { return ::hx::Val( state ); }
+		break;
+	case 6:
+		if (HX_FIELD_EQ(inName,"set_iv") ) { return ::hx::Val( set_iv_dyn() ); }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"keyRows") ) { return ::hx::Val( keyRows ); }
+		if (HX_FIELD_EQ(inName,"encrypt") ) { return ::hx::Val( encrypt_dyn() ); }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { return ::hx::Val( decrypt_dyn() ); }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"roundKey") ) { return ::hx::Val( roundKey ); }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"rRoundKey") ) { return ::hx::Val( rRoundKey ); }
+		break;
+	case 12:
+		if (HX_FIELD_EQ(inName,"keyExpansion") ) { return ::hx::Val( keyExpansion_dyn() ); }
+		if (HX_FIELD_EQ(inName,"encryptBlock") ) { return ::hx::Val( encryptBlock_dyn() ); }
+		if (HX_FIELD_EQ(inName,"decryptBlock") ) { return ::hx::Val( decryptBlock_dyn() ); }
+		if (HX_FIELD_EQ(inName,"bytesToInt32") ) { return ::hx::Val( bytesToInt32_dyn() ); }
+		if (HX_FIELD_EQ(inName,"int32ToBytes") ) { return ::hx::Val( int32ToBytes_dyn() ); }
+		break;
+	case 13:
+		if (HX_FIELD_EQ(inName,"generateBlock") ) { return ::hx::Val( generateBlock_dyn() ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+bool Aes_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 4:
+		if (HX_FIELD_EQ(inName,"SBOX") ) { outValue = ( SBOX ); return true; }
+		if (HX_FIELD_EQ(inName,"RCON") ) { outValue = ( RCON ); return true; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"RSBOX") ) { outValue = ( RSBOX ); return true; }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"initTable") ) { outValue = initTable_dyn(); return true; }
+		break;
+	case 22:
+		if (HX_FIELD_EQ(inName,"SUB_BYTES_MIX_COLUMN_0") ) { outValue = ( SUB_BYTES_MIX_COLUMN_0 ); return true; }
+		if (HX_FIELD_EQ(inName,"SUB_BYTES_MIX_COLUMN_1") ) { outValue = ( SUB_BYTES_MIX_COLUMN_1 ); return true; }
+		if (HX_FIELD_EQ(inName,"SUB_BYTES_MIX_COLUMN_2") ) { outValue = ( SUB_BYTES_MIX_COLUMN_2 ); return true; }
+		if (HX_FIELD_EQ(inName,"SUB_BYTES_MIX_COLUMN_3") ) { outValue = ( SUB_BYTES_MIX_COLUMN_3 ); return true; }
+		break;
+	case 23:
+		if (HX_FIELD_EQ(inName,"RSUB_BYTES_MIX_COLUMN_0") ) { outValue = ( RSUB_BYTES_MIX_COLUMN_0 ); return true; }
+		if (HX_FIELD_EQ(inName,"RSUB_BYTES_MIX_COLUMN_1") ) { outValue = ( RSUB_BYTES_MIX_COLUMN_1 ); return true; }
+		if (HX_FIELD_EQ(inName,"RSUB_BYTES_MIX_COLUMN_2") ) { outValue = ( RSUB_BYTES_MIX_COLUMN_2 ); return true; }
+		if (HX_FIELD_EQ(inName,"RSUB_BYTES_MIX_COLUMN_3") ) { outValue = ( RSUB_BYTES_MIX_COLUMN_3 ); return true; }
+	}
+	return false;
+}
+
+::hx::Val Aes_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 2:
+		if (HX_FIELD_EQ(inName,"Nk") ) { Nk=inValue.Cast< int >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"Nr") ) { Nr=inValue.Cast< int >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"iv") ) { if (inCallProp == ::hx::paccAlways) return ::hx::Val( set_iv(inValue.Cast<  ::haxe::io::Bytes >()) );iv=inValue.Cast<  ::haxe::io::Bytes >(); return inValue; }
+		break;
+	case 3:
+		if (HX_FIELD_EQ(inName,"key") ) { key=inValue.Cast<  ::haxe::io::Bytes >(); return inValue; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"state") ) { state=inValue.Cast< ::Array< int > >(); return inValue; }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"keyRows") ) { keyRows=inValue.Cast< int >(); return inValue; }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"roundKey") ) { roundKey=inValue.Cast< ::Array< int > >(); return inValue; }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"rRoundKey") ) { rRoundKey=inValue.Cast< ::Array< int > >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+bool Aes_obj::__SetStatic(const ::String &inName,Dynamic &ioValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 4:
+		if (HX_FIELD_EQ(inName,"SBOX") ) { SBOX=ioValue.Cast< ::Array< int > >(); return true; }
+		if (HX_FIELD_EQ(inName,"RCON") ) { RCON=ioValue.Cast< ::Array< int > >(); return true; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"RSBOX") ) { RSBOX=ioValue.Cast< ::Array< int > >(); return true; }
+		break;
+	case 22:
+		if (HX_FIELD_EQ(inName,"SUB_BYTES_MIX_COLUMN_0") ) { SUB_BYTES_MIX_COLUMN_0=ioValue.Cast< ::Array< int > >(); return true; }
+		if (HX_FIELD_EQ(inName,"SUB_BYTES_MIX_COLUMN_1") ) { SUB_BYTES_MIX_COLUMN_1=ioValue.Cast< ::Array< int > >(); return true; }
+		if (HX_FIELD_EQ(inName,"SUB_BYTES_MIX_COLUMN_2") ) { SUB_BYTES_MIX_COLUMN_2=ioValue.Cast< ::Array< int > >(); return true; }
+		if (HX_FIELD_EQ(inName,"SUB_BYTES_MIX_COLUMN_3") ) { SUB_BYTES_MIX_COLUMN_3=ioValue.Cast< ::Array< int > >(); return true; }
+		break;
+	case 23:
+		if (HX_FIELD_EQ(inName,"RSUB_BYTES_MIX_COLUMN_0") ) { RSUB_BYTES_MIX_COLUMN_0=ioValue.Cast< ::Array< int > >(); return true; }
+		if (HX_FIELD_EQ(inName,"RSUB_BYTES_MIX_COLUMN_1") ) { RSUB_BYTES_MIX_COLUMN_1=ioValue.Cast< ::Array< int > >(); return true; }
+		if (HX_FIELD_EQ(inName,"RSUB_BYTES_MIX_COLUMN_2") ) { RSUB_BYTES_MIX_COLUMN_2=ioValue.Cast< ::Array< int > >(); return true; }
+		if (HX_FIELD_EQ(inName,"RSUB_BYTES_MIX_COLUMN_3") ) { RSUB_BYTES_MIX_COLUMN_3=ioValue.Cast< ::Array< int > >(); return true; }
+	}
+	return false;
+}
+
+void Aes_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("Nk",5d,44,00,00));
+	outFields->push(HX_("Nr",64,44,00,00));
+	outFields->push(HX_("roundKey",f1,ed,6c,e0));
+	outFields->push(HX_("rRoundKey",83,6c,9f,a9));
+	outFields->push(HX_("keyRows",58,66,88,a5));
+	outFields->push(HX_("state",11,76,0b,84));
+	outFields->push(HX_("key",9f,89,51,00));
+	outFields->push(HX_("iv",ed,5b,00,00));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo Aes_obj_sMemberStorageInfo[] = {
+	{::hx::fsInt,(int)offsetof(Aes_obj,Nk),HX_("Nk",5d,44,00,00)},
+	{::hx::fsInt,(int)offsetof(Aes_obj,Nr),HX_("Nr",64,44,00,00)},
+	{::hx::fsObject /* ::Array< int > */ ,(int)offsetof(Aes_obj,roundKey),HX_("roundKey",f1,ed,6c,e0)},
+	{::hx::fsObject /* ::Array< int > */ ,(int)offsetof(Aes_obj,rRoundKey),HX_("rRoundKey",83,6c,9f,a9)},
+	{::hx::fsInt,(int)offsetof(Aes_obj,keyRows),HX_("keyRows",58,66,88,a5)},
+	{::hx::fsObject /* ::Array< int > */ ,(int)offsetof(Aes_obj,state),HX_("state",11,76,0b,84)},
+	{::hx::fsObject /*  ::haxe::io::Bytes */ ,(int)offsetof(Aes_obj,key),HX_("key",9f,89,51,00)},
+	{::hx::fsObject /*  ::haxe::io::Bytes */ ,(int)offsetof(Aes_obj,iv),HX_("iv",ed,5b,00,00)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo Aes_obj_sStaticStorageInfo[] = {
+	{::hx::fsObject /* ::Array< int > */ ,(void *) &Aes_obj::SBOX,HX_("SBOX",78,0f,0f,37)},
+	{::hx::fsObject /* ::Array< int > */ ,(void *) &Aes_obj::RSBOX,HX_("RSBOX",ca,a0,ea,6d)},
+	{::hx::fsObject /* ::Array< int > */ ,(void *) &Aes_obj::SUB_BYTES_MIX_COLUMN_0,HX_("SUB_BYTES_MIX_COLUMN_0",1d,c4,b2,ed)},
+	{::hx::fsObject /* ::Array< int > */ ,(void *) &Aes_obj::SUB_BYTES_MIX_COLUMN_1,HX_("SUB_BYTES_MIX_COLUMN_1",1e,c4,b2,ed)},
+	{::hx::fsObject /* ::Array< int > */ ,(void *) &Aes_obj::SUB_BYTES_MIX_COLUMN_2,HX_("SUB_BYTES_MIX_COLUMN_2",1f,c4,b2,ed)},
+	{::hx::fsObject /* ::Array< int > */ ,(void *) &Aes_obj::SUB_BYTES_MIX_COLUMN_3,HX_("SUB_BYTES_MIX_COLUMN_3",20,c4,b2,ed)},
+	{::hx::fsObject /* ::Array< int > */ ,(void *) &Aes_obj::RSUB_BYTES_MIX_COLUMN_0,HX_("RSUB_BYTES_MIX_COLUMN_0",ef,11,f7,fd)},
+	{::hx::fsObject /* ::Array< int > */ ,(void *) &Aes_obj::RSUB_BYTES_MIX_COLUMN_1,HX_("RSUB_BYTES_MIX_COLUMN_1",f0,11,f7,fd)},
+	{::hx::fsObject /* ::Array< int > */ ,(void *) &Aes_obj::RSUB_BYTES_MIX_COLUMN_2,HX_("RSUB_BYTES_MIX_COLUMN_2",f1,11,f7,fd)},
+	{::hx::fsObject /* ::Array< int > */ ,(void *) &Aes_obj::RSUB_BYTES_MIX_COLUMN_3,HX_("RSUB_BYTES_MIX_COLUMN_3",f2,11,f7,fd)},
+	{::hx::fsObject /* ::Array< int > */ ,(void *) &Aes_obj::RCON,HX_("RCON",10,9b,66,36)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+#endif
+
+static ::String Aes_obj_sMemberFields[] = {
+	HX_("Nk",5d,44,00,00),
+	HX_("Nr",64,44,00,00),
+	HX_("roundKey",f1,ed,6c,e0),
+	HX_("rRoundKey",83,6c,9f,a9),
+	HX_("keyRows",58,66,88,a5),
+	HX_("state",11,76,0b,84),
+	HX_("key",9f,89,51,00),
+	HX_("iv",ed,5b,00,00),
+	HX_("set_iv",aa,47,78,6f),
+	HX_("init",10,3b,bb,45),
+	HX_("keyExpansion",60,f1,15,7d),
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	HX_("encryptBlock",a8,18,31,80),
+	HX_("decryptBlock",c0,e5,9f,b6),
+	HX_("generateBlock",d8,45,79,5b),
+	HX_("bytesToInt32",a8,b2,04,79),
+	HX_("int32ToBytes",42,0f,34,02),
+	::String(null()) };
+
+static void Aes_obj_sMarkStatics(HX_MARK_PARAMS) {
+	HX_MARK_MEMBER_NAME(Aes_obj::SBOX,"SBOX");
+	HX_MARK_MEMBER_NAME(Aes_obj::RSBOX,"RSBOX");
+	HX_MARK_MEMBER_NAME(Aes_obj::SUB_BYTES_MIX_COLUMN_0,"SUB_BYTES_MIX_COLUMN_0");
+	HX_MARK_MEMBER_NAME(Aes_obj::SUB_BYTES_MIX_COLUMN_1,"SUB_BYTES_MIX_COLUMN_1");
+	HX_MARK_MEMBER_NAME(Aes_obj::SUB_BYTES_MIX_COLUMN_2,"SUB_BYTES_MIX_COLUMN_2");
+	HX_MARK_MEMBER_NAME(Aes_obj::SUB_BYTES_MIX_COLUMN_3,"SUB_BYTES_MIX_COLUMN_3");
+	HX_MARK_MEMBER_NAME(Aes_obj::RSUB_BYTES_MIX_COLUMN_0,"RSUB_BYTES_MIX_COLUMN_0");
+	HX_MARK_MEMBER_NAME(Aes_obj::RSUB_BYTES_MIX_COLUMN_1,"RSUB_BYTES_MIX_COLUMN_1");
+	HX_MARK_MEMBER_NAME(Aes_obj::RSUB_BYTES_MIX_COLUMN_2,"RSUB_BYTES_MIX_COLUMN_2");
+	HX_MARK_MEMBER_NAME(Aes_obj::RSUB_BYTES_MIX_COLUMN_3,"RSUB_BYTES_MIX_COLUMN_3");
+	HX_MARK_MEMBER_NAME(Aes_obj::RCON,"RCON");
+};
+
+#ifdef HXCPP_VISIT_ALLOCS
+static void Aes_obj_sVisitStatics(HX_VISIT_PARAMS) {
+	HX_VISIT_MEMBER_NAME(Aes_obj::SBOX,"SBOX");
+	HX_VISIT_MEMBER_NAME(Aes_obj::RSBOX,"RSBOX");
+	HX_VISIT_MEMBER_NAME(Aes_obj::SUB_BYTES_MIX_COLUMN_0,"SUB_BYTES_MIX_COLUMN_0");
+	HX_VISIT_MEMBER_NAME(Aes_obj::SUB_BYTES_MIX_COLUMN_1,"SUB_BYTES_MIX_COLUMN_1");
+	HX_VISIT_MEMBER_NAME(Aes_obj::SUB_BYTES_MIX_COLUMN_2,"SUB_BYTES_MIX_COLUMN_2");
+	HX_VISIT_MEMBER_NAME(Aes_obj::SUB_BYTES_MIX_COLUMN_3,"SUB_BYTES_MIX_COLUMN_3");
+	HX_VISIT_MEMBER_NAME(Aes_obj::RSUB_BYTES_MIX_COLUMN_0,"RSUB_BYTES_MIX_COLUMN_0");
+	HX_VISIT_MEMBER_NAME(Aes_obj::RSUB_BYTES_MIX_COLUMN_1,"RSUB_BYTES_MIX_COLUMN_1");
+	HX_VISIT_MEMBER_NAME(Aes_obj::RSUB_BYTES_MIX_COLUMN_2,"RSUB_BYTES_MIX_COLUMN_2");
+	HX_VISIT_MEMBER_NAME(Aes_obj::RSUB_BYTES_MIX_COLUMN_3,"RSUB_BYTES_MIX_COLUMN_3");
+	HX_VISIT_MEMBER_NAME(Aes_obj::RCON,"RCON");
+};
+
+#endif
+
+::hx::Class Aes_obj::__mClass;
+
+static ::String Aes_obj_sStaticFields[] = {
+	HX_("SBOX",78,0f,0f,37),
+	HX_("RSBOX",ca,a0,ea,6d),
+	HX_("SUB_BYTES_MIX_COLUMN_0",1d,c4,b2,ed),
+	HX_("SUB_BYTES_MIX_COLUMN_1",1e,c4,b2,ed),
+	HX_("SUB_BYTES_MIX_COLUMN_2",1f,c4,b2,ed),
+	HX_("SUB_BYTES_MIX_COLUMN_3",20,c4,b2,ed),
+	HX_("RSUB_BYTES_MIX_COLUMN_0",ef,11,f7,fd),
+	HX_("RSUB_BYTES_MIX_COLUMN_1",f0,11,f7,fd),
+	HX_("RSUB_BYTES_MIX_COLUMN_2",f1,11,f7,fd),
+	HX_("RSUB_BYTES_MIX_COLUMN_3",f2,11,f7,fd),
+	HX_("RCON",10,9b,66,36),
+	HX_("initTable",de,d2,75,26),
+	::String(null())
+};
+
+void Aes_obj::__register()
+{
+	Aes_obj _hx_dummy;
+	Aes_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.Aes",8a,94,a0,04);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &Aes_obj::__GetStatic;
+	__mClass->mSetStaticField = &Aes_obj::__SetStatic;
+	__mClass->mMarkFunc = Aes_obj_sMarkStatics;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(Aes_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(Aes_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< Aes_obj >;
+#ifdef HXCPP_VISIT_ALLOCS
+	__mClass->mVisitFunc = Aes_obj_sVisitStatics;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = Aes_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = Aes_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/CBC.cpp b/Sources/c_borogove/src/haxe/crypto/mode/CBC.cpp
new file mode 100644
index 0000000..7d1fa33
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/CBC.cpp
@@ -0,0 +1,146 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_mode_CBC
+#include <haxe/crypto/mode/CBC.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_5ab5ceac4d957549_6_encrypt,"haxe.crypto.mode.CBC","encrypt",0x318ff4b5,"haxe.crypto.mode.CBC.encrypt","haxe/crypto/mode/CBC.hx",6,0xa9617f61)
+HX_LOCAL_STACK_FRAME(_hx_pos_5ab5ceac4d957549_22_decrypt,"haxe.crypto.mode.CBC","decrypt",0x6ec43e9d,"haxe.crypto.mode.CBC.decrypt","haxe/crypto/mode/CBC.hx",22,0xa9617f61)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void CBC_obj::__construct() { }
+
+Dynamic CBC_obj::__CreateEmpty() { return new CBC_obj; }
+
+void *CBC_obj::_hx_vtable = 0;
+
+Dynamic CBC_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< CBC_obj > _hx_result = new CBC_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool CBC_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x1013da96;
+}
+
+void CBC_obj::encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_5ab5ceac4d957549_6_encrypt)
+HXLINE(   7)		::Array< unsigned char > vector = iv->b;
+HXLINE(   8)		int i = 0;
+HXLINE(   9)		int len = src->length;
+HXLINE(  10)		int ivpos = 0;
+HXLINE(  11)		while((i < len)){
+HXLINE(  12)			{
+HXLINE(  12)				int _g = 0;
+HXDLIN(  12)				while((_g < blockSize)){
+HXLINE(  12)					_g = (_g + 1);
+HXDLIN(  12)					int j = (_g - 1);
+HXLINE(  13)					{
+HXLINE(  13)						int src1 = ( (int)(src->b->__get((i + j))) );
+HXDLIN(  13)						int v = (src1 ^ ( (int)(_hx_array_unsafe_get(vector,(ivpos + j))) ));
+HXDLIN(  13)						src->b[(i + j)] = ( (unsigned char)(v) );
+            					}
+            				}
+            			}
+HXLINE(  15)			encryptBlock(src,i,src,i);
+HXLINE(  16)			ivpos = i;
+HXLINE(  17)			vector = src->b;
+HXLINE(  18)			i = (i + blockSize);
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(CBC_obj,encrypt,(void))
+
+void CBC_obj::decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic decryptBlock){
+            	HX_STACKFRAME(&_hx_pos_5ab5ceac4d957549_22_decrypt)
+HXLINE(  23)		int vpos = (src->length - blockSize);
+HXLINE(  24)		int i = src->length;
+HXLINE(  25)		while((i > 0)){
+HXLINE(  26)			i = (i - blockSize);
+HXLINE(  27)			vpos = (vpos - blockSize);
+HXLINE(  29)			decryptBlock(src,i,src,i);
+HXLINE(  30)			if ((vpos < 0)) {
+HXLINE(  31)				int _g = 0;
+HXDLIN(  31)				while((_g < blockSize)){
+HXLINE(  31)					_g = (_g + 1);
+HXDLIN(  31)					int j = (_g - 1);
+HXLINE(  32)					src->b[j] = ( (unsigned char)((( (int)(src->b->__get(j)) ) ^ ( (int)(iv->b->__get(j)) ))) );
+            				}
+            			}
+            			else {
+HXLINE(  34)				int _g1 = 0;
+HXDLIN(  34)				while((_g1 < blockSize)){
+HXLINE(  34)					_g1 = (_g1 + 1);
+HXDLIN(  34)					int j1 = (_g1 - 1);
+HXLINE(  35)					src->b[(i + j1)] = ( (unsigned char)((( (int)(src->b->__get((i + j1))) ) ^ ( (int)(src->b->__get((vpos + j1))) ))) );
+            				}
+            			}
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(CBC_obj,decrypt,(void))
+
+
+CBC_obj::CBC_obj()
+{
+}
+
+bool CBC_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"encrypt") ) { outValue = encrypt_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { outValue = decrypt_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *CBC_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *CBC_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class CBC_obj::__mClass;
+
+static ::String CBC_obj_sStaticFields[] = {
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	::String(null())
+};
+
+void CBC_obj::__register()
+{
+	CBC_obj _hx_dummy;
+	CBC_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.CBC",be,06,42,f1);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &CBC_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(CBC_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< CBC_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = CBC_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = CBC_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/CCM.cpp b/Sources/c_borogove/src/haxe/crypto/mode/CCM.cpp
new file mode 100644
index 0000000..99c32a7
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/CCM.cpp
@@ -0,0 +1,446 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_mode_CCM
+#include <haxe/crypto/mode/CCM.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_074f7a4fc05ced9a_16_encrypt,"haxe.crypto.mode.CCM","encrypt",0x2f48869e,"haxe.crypto.mode.CCM.encrypt","haxe/crypto/mode/CCM.hx",16,0x43643618)
+HX_LOCAL_STACK_FRAME(_hx_pos_074f7a4fc05ced9a_67_decrypt,"haxe.crypto.mode.CCM","decrypt",0x6c7cd086,"haxe.crypto.mode.CCM.decrypt","haxe/crypto/mode/CCM.hx",67,0x43643618)
+HX_LOCAL_STACK_FRAME(_hx_pos_074f7a4fc05ced9a_118_createAuthBlocks,"haxe.crypto.mode.CCM","createAuthBlocks",0xecd326d1,"haxe.crypto.mode.CCM.createAuthBlocks","haxe/crypto/mode/CCM.hx",118,0x43643618)
+HX_LOCAL_STACK_FRAME(_hx_pos_074f7a4fc05ced9a_159_computeCBCMac,"haxe.crypto.mode.CCM","computeCBCMac",0x1a2bb7db,"haxe.crypto.mode.CCM.computeCBCMac","haxe/crypto/mode/CCM.hx",159,0x43643618)
+HX_LOCAL_STACK_FRAME(_hx_pos_074f7a4fc05ced9a_177_formatAuthData,"haxe.crypto.mode.CCM","formatAuthData",0x2e3f70f0,"haxe.crypto.mode.CCM.formatAuthData","haxe/crypto/mode/CCM.hx",177,0x43643618)
+HX_LOCAL_STACK_FRAME(_hx_pos_074f7a4fc05ced9a_219_encryptCTR,"haxe.crypto.mode.CCM","encryptCTR",0x88f210a3,"haxe.crypto.mode.CCM.encryptCTR","haxe/crypto/mode/CCM.hx",219,0x43643618)
+HX_LOCAL_STACK_FRAME(_hx_pos_074f7a4fc05ced9a_264_encryptTag,"haxe.crypto.mode.CCM","encryptTag",0x88ff025c,"haxe.crypto.mode.CCM.encryptTag","haxe/crypto/mode/CCM.hx",264,0x43643618)
+HX_LOCAL_STACK_FRAME(_hx_pos_074f7a4fc05ced9a_283_constantTimeCompare,"haxe.crypto.mode.CCM","constantTimeCompare",0xead502cd,"haxe.crypto.mode.CCM.constantTimeCompare","haxe/crypto/mode/CCM.hx",283,0x43643618)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void CCM_obj::__construct() { }
+
+Dynamic CCM_obj::__CreateEmpty() { return new CCM_obj; }
+
+void *CCM_obj::_hx_vtable = 0;
+
+Dynamic CCM_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< CCM_obj > _hx_result = new CCM_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool CCM_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x1013db7f;
+}
+
+ ::haxe::io::Bytes CCM_obj::encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes nonce, ::haxe::io::Bytes aad,int tagLen,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_074f7a4fc05ced9a_16_encrypt)
+HXLINE(  17)		bool _hx_tmp;
+HXDLIN(  17)		if ((nonce->length >= 7)) {
+HXLINE(  17)			_hx_tmp = (nonce->length > 13);
+            		}
+            		else {
+HXLINE(  17)			_hx_tmp = true;
+            		}
+HXDLIN(  17)		if (_hx_tmp) {
+HXLINE(  18)			HX_STACK_DO_THROW(HX_("Nonce length must be between 7 and 13 bytes",c6,a7,af,d5));
+            		}
+HXLINE(  21)		bool _hx_tmp1;
+HXDLIN(  21)		bool _hx_tmp2;
+HXDLIN(  21)		if ((tagLen >= 4)) {
+HXLINE(  21)			_hx_tmp2 = (tagLen > 16);
+            		}
+            		else {
+HXLINE(  21)			_hx_tmp2 = true;
+            		}
+HXDLIN(  21)		if (!(_hx_tmp2)) {
+HXLINE(  21)			_hx_tmp1 = ((tagLen & 1) != 0);
+            		}
+            		else {
+HXLINE(  21)			_hx_tmp1 = true;
+            		}
+HXDLIN(  21)		if (_hx_tmp1) {
+HXLINE(  22)			HX_STACK_DO_THROW(HX_("Tag length must be even and between 4 and 16 bytes",d2,8e,14,c9));
+            		}
+HXLINE(  29)		int flags;
+HXDLIN(  29)		if ((aad->length > 0)) {
+HXLINE(  29)			flags = 64;
+            		}
+            		else {
+HXLINE(  29)			flags = 0;
+            		}
+HXDLIN(  29)		int flags1 = ((flags | (((tagLen - 2) >> 1) << 3)) | ((15 - nonce->length) - 1));
+HXLINE(  31)		 ::haxe::io::Bytes B0 = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE(  32)		B0->b[0] = ( (unsigned char)(flags1) );
+HXLINE(  33)		B0->blit(1,nonce,0,nonce->length);
+HXLINE(  35)		int msgLen = src->length;
+HXLINE(  36)		int pos = 15;
+HXLINE(  37)		while((msgLen > 0)){
+HXLINE(  38)			B0->b[pos] = ( (unsigned char)((msgLen & 255)) );
+HXLINE(  39)			msgLen = ::hx::UShr(msgLen,8);
+HXLINE(  40)			pos = (pos - 1);
+            		}
+HXLINE(  44)		 ::haxe::io::Bytes tag = ::haxe::crypto::mode::CCM_obj::computeCBCMac(::haxe::crypto::mode::CCM_obj::createAuthBlocks(B0,aad,src,blockSize),blockSize,encryptBlock);
+HXLINE(  45)		 ::haxe::io::Bytes ciphertext = ::haxe::crypto::mode::CCM_obj::encryptCTR(nonce,src,blockSize,encryptBlock);
+HXLINE(  46)		 ::haxe::io::Bytes encryptedTag = ::haxe::crypto::mode::CCM_obj::encryptTag(nonce,tag,tagLen,blockSize,encryptBlock);
+HXLINE(  48)		 ::haxe::io::Bytes result = ::haxe::io::Bytes_obj::alloc((ciphertext->length + tagLen));
+HXLINE(  49)		result->blit(0,ciphertext,0,ciphertext->length);
+HXLINE(  50)		result->blit(ciphertext->length,encryptedTag,0,tagLen);
+HXLINE(  52)		return result;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC6(CCM_obj,encrypt,return )
+
+ ::haxe::io::Bytes CCM_obj::decrypt( ::haxe::io::Bytes ciphertextWithTag, ::haxe::io::Bytes nonce, ::haxe::io::Bytes aad,int tagLen,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_074f7a4fc05ced9a_67_decrypt)
+HXLINE(  68)		bool _hx_tmp;
+HXDLIN(  68)		if ((nonce->length >= 7)) {
+HXLINE(  68)			_hx_tmp = (nonce->length > 13);
+            		}
+            		else {
+HXLINE(  68)			_hx_tmp = true;
+            		}
+HXDLIN(  68)		if (_hx_tmp) {
+HXLINE(  69)			HX_STACK_DO_THROW(HX_("Nonce length must be between 7 and 13 bytes",c6,a7,af,d5));
+            		}
+HXLINE(  72)		bool _hx_tmp1;
+HXDLIN(  72)		bool _hx_tmp2;
+HXDLIN(  72)		if ((tagLen >= 4)) {
+HXLINE(  72)			_hx_tmp2 = (tagLen > 16);
+            		}
+            		else {
+HXLINE(  72)			_hx_tmp2 = true;
+            		}
+HXDLIN(  72)		if (!(_hx_tmp2)) {
+HXLINE(  72)			_hx_tmp1 = ((tagLen & 1) != 0);
+            		}
+            		else {
+HXLINE(  72)			_hx_tmp1 = true;
+            		}
+HXDLIN(  72)		if (_hx_tmp1) {
+HXLINE(  73)			HX_STACK_DO_THROW(HX_("Tag length must be even and between 4 and 16 bytes",d2,8e,14,c9));
+            		}
+HXLINE(  76)		if ((ciphertextWithTag->length < tagLen)) {
+HXLINE(  77)			HX_STACK_DO_THROW(HX_("Ciphertext too short for specified tag length",4b,c8,55,34));
+            		}
+HXLINE(  80)		int ciphertextLen = (ciphertextWithTag->length - tagLen);
+HXLINE(  81)		 ::haxe::io::Bytes src = ciphertextWithTag->sub(0,ciphertextLen);
+HXLINE(  82)		 ::haxe::io::Bytes providedTag = ciphertextWithTag->sub(ciphertextLen,tagLen);
+HXLINE(  84)		 ::haxe::io::Bytes plaintext = ::haxe::crypto::mode::CCM_obj::encryptCTR(nonce,src,blockSize,encryptBlock);
+HXLINE(  90)		int flags;
+HXDLIN(  90)		if ((aad->length > 0)) {
+HXLINE(  90)			flags = 64;
+            		}
+            		else {
+HXLINE(  90)			flags = 0;
+            		}
+HXDLIN(  90)		int flags1 = ((flags | (((tagLen - 2) >> 1) << 3)) | ((15 - nonce->length) - 1));
+HXLINE(  92)		 ::haxe::io::Bytes B0 = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE(  93)		B0->b[0] = ( (unsigned char)(flags1) );
+HXLINE(  94)		B0->blit(1,nonce,0,nonce->length);
+HXLINE(  96)		int msgLen = plaintext->length;
+HXLINE(  97)		int pos = 15;
+HXLINE(  98)		while((msgLen > 0)){
+HXLINE(  99)			B0->b[pos] = ( (unsigned char)((msgLen & 255)) );
+HXLINE( 100)			msgLen = ::hx::UShr(msgLen,8);
+HXLINE( 101)			pos = (pos - 1);
+            		}
+HXLINE( 108)		if (!(::haxe::crypto::mode::CCM_obj::constantTimeCompare(::haxe::crypto::mode::CCM_obj::encryptTag(nonce,::haxe::crypto::mode::CCM_obj::computeCBCMac(::haxe::crypto::mode::CCM_obj::createAuthBlocks(B0,aad,plaintext,blockSize),blockSize,encryptBlock),tagLen,blockSize,encryptBlock),providedTag))) {
+HXLINE( 109)			HX_STACK_DO_THROW(HX_("Authentication failed",45,9b,5d,12));
+            		}
+HXLINE( 112)		return plaintext;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC6(CCM_obj,decrypt,return )
+
+::Array< ::Dynamic> CCM_obj::createAuthBlocks( ::haxe::io::Bytes B0, ::haxe::io::Bytes aad, ::haxe::io::Bytes message,int blockSize){
+            	HX_STACKFRAME(&_hx_pos_074f7a4fc05ced9a_118_createAuthBlocks)
+HXLINE( 119)		::Array< ::Dynamic> blocks = ::Array_obj< ::Dynamic>::__new();
+HXLINE( 120)		blocks->push(B0);
+HXLINE( 122)		if ((aad->length > 0)) {
+HXLINE( 123)			 ::haxe::io::Bytes formattedAAD = ::haxe::crypto::mode::CCM_obj::formatAuthData(aad);
+HXLINE( 124)			int pos = 0;
+HXLINE( 125)			int remaining = formattedAAD->length;
+HXLINE( 127)			while((remaining > 0)){
+HXLINE( 128)				 ::haxe::io::Bytes block = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE( 129)				int bytesToCopy;
+HXDLIN( 129)				if ((remaining < blockSize)) {
+HXLINE( 129)					bytesToCopy = remaining;
+            				}
+            				else {
+HXLINE( 129)					bytesToCopy = blockSize;
+            				}
+HXLINE( 131)				block->blit(0,formattedAAD,pos,bytesToCopy);
+HXLINE( 132)				blocks->push(block);
+HXLINE( 133)				pos = (pos + blockSize);
+HXLINE( 134)				remaining = (remaining - blockSize);
+            			}
+            		}
+HXLINE( 138)		if ((message->length > 0)) {
+HXLINE( 139)			int pos1 = 0;
+HXLINE( 140)			int remaining1 = message->length;
+HXLINE( 142)			while((remaining1 > 0)){
+HXLINE( 143)				 ::haxe::io::Bytes block1 = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE( 144)				int bytesToCopy1;
+HXDLIN( 144)				if ((remaining1 < blockSize)) {
+HXLINE( 144)					bytesToCopy1 = remaining1;
+            				}
+            				else {
+HXLINE( 144)					bytesToCopy1 = blockSize;
+            				}
+HXLINE( 146)				block1->blit(0,message,pos1,bytesToCopy1);
+HXLINE( 147)				blocks->push(block1);
+HXLINE( 148)				pos1 = (pos1 + blockSize);
+HXLINE( 149)				remaining1 = (remaining1 - blockSize);
+            			}
+            		}
+HXLINE( 153)		return blocks;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(CCM_obj,createAuthBlocks,return )
+
+ ::haxe::io::Bytes CCM_obj::computeCBCMac(::Array< ::Dynamic> blocks,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_074f7a4fc05ced9a_159_computeCBCMac)
+HXLINE( 160)		 ::haxe::io::Bytes X = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE( 161)		int blocksLen = blocks->length;
+HXLINE( 163)		{
+HXLINE( 163)			int _g = 0;
+HXDLIN( 163)			while((_g < blocksLen)){
+HXLINE( 163)				_g = (_g + 1);
+HXLINE( 164)				 ::haxe::io::Bytes currentBlock = blocks->__get((_g - 1)).StaticCast<  ::haxe::io::Bytes >();
+HXLINE( 165)				{
+HXLINE( 165)					int _g1 = 0;
+HXDLIN( 165)					while((_g1 < blockSize)){
+HXLINE( 165)						_g1 = (_g1 + 1);
+HXDLIN( 165)						int j = (_g1 - 1);
+HXLINE( 166)						X->b[j] = ( (unsigned char)((( (int)(X->b->__get(j)) ) ^ ( (int)(currentBlock->b->__get(j)) ))) );
+            					}
+            				}
+HXLINE( 168)				encryptBlock(X,0,X,0);
+            			}
+            		}
+HXLINE( 171)		return X;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(CCM_obj,computeCBCMac,return )
+
+ ::haxe::io::Bytes CCM_obj::formatAuthData( ::haxe::io::Bytes aad){
+            	HX_STACKFRAME(&_hx_pos_074f7a4fc05ced9a_177_formatAuthData)
+HXLINE( 178)		if ((aad->length == 0)) {
+HXLINE( 179)			return ::haxe::io::Bytes_obj::alloc(0);
+            		}
+HXLINE( 182)		int len = aad->length;
+HXLINE( 183)		 ::haxe::io::Bytes authData;
+HXLINE( 185)		if ((len < 65280)) {
+HXLINE( 186)			authData = ::haxe::io::Bytes_obj::alloc((2 + len));
+HXLINE( 187)			authData->b[0] = ( (unsigned char)(::hx::UShr(len,8)) );
+HXLINE( 188)			authData->b[1] = ( (unsigned char)((len & 255)) );
+HXLINE( 189)			authData->blit(2,aad,0,len);
+            		}
+            		else {
+HXLINE( 190)			if ((len <= -1)) {
+HXLINE( 191)				authData = ::haxe::io::Bytes_obj::alloc((6 + len));
+HXLINE( 192)				authData->b[0] = ( (unsigned char)(255) );
+HXLINE( 193)				authData->b[1] = ( (unsigned char)(254) );
+HXLINE( 194)				authData->b[2] = ( (unsigned char)(::hx::UShr(len,24)) );
+HXLINE( 195)				authData->b[3] = ( (unsigned char)((::hx::UShr(len,16) & 255)) );
+HXLINE( 196)				authData->b[4] = ( (unsigned char)((::hx::UShr(len,8) & 255)) );
+HXLINE( 197)				authData->b[5] = ( (unsigned char)((len & 255)) );
+HXLINE( 198)				authData->blit(6,aad,0,len);
+            			}
+            			else {
+HXLINE( 200)				authData = ::haxe::io::Bytes_obj::alloc((10 + len));
+HXLINE( 201)				authData->b[0] = ( (unsigned char)(255) );
+HXLINE( 202)				authData->b[1] = ( (unsigned char)(255) );
+HXLINE( 203)				authData->b[2] = ( (unsigned char)(0) );
+HXLINE( 204)				authData->b[3] = ( (unsigned char)(0) );
+HXLINE( 205)				authData->b[4] = ( (unsigned char)(0) );
+HXLINE( 206)				authData->b[5] = ( (unsigned char)(0) );
+HXLINE( 207)				authData->b[6] = ( (unsigned char)(::hx::UShr(len,24)) );
+HXLINE( 208)				authData->b[7] = ( (unsigned char)((::hx::UShr(len,16) & 255)) );
+HXLINE( 209)				authData->b[8] = ( (unsigned char)((::hx::UShr(len,8) & 255)) );
+HXLINE( 210)				authData->b[9] = ( (unsigned char)((len & 255)) );
+HXLINE( 211)				authData->blit(10,aad,0,len);
+            			}
+            		}
+HXLINE( 213)		return authData;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(CCM_obj,formatAuthData,return )
+
+ ::haxe::io::Bytes CCM_obj::encryptCTR( ::haxe::io::Bytes nonce, ::haxe::io::Bytes message,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_074f7a4fc05ced9a_219_encryptCTR)
+HXLINE( 220)		if ((message->length == 0)) {
+HXLINE( 221)			return ::haxe::io::Bytes_obj::alloc(0);
+            		}
+HXLINE( 224)		 ::haxe::io::Bytes result = ::haxe::io::Bytes_obj::alloc(message->length);
+HXLINE( 225)		 ::haxe::io::Bytes counter = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE( 226)		 ::haxe::io::Bytes keystream = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE( 230)		counter->b[0] = ( (unsigned char)(((15 - nonce->length) - 1)) );
+HXLINE( 231)		counter->blit(1,nonce,0,nonce->length);
+HXLINE( 233)		int pos = 0;
+HXLINE( 234)		int counterValue = 1;
+HXLINE( 235)		int remaining = message->length;
+HXLINE( 237)		while((remaining > 0)){
+HXLINE( 238)			int tempCounter = counterValue;
+HXLINE( 239)			int counterPos = 15;
+HXLINE( 240)			while((tempCounter > 0)){
+HXLINE( 241)				counter->b[counterPos] = ( (unsigned char)((tempCounter & 255)) );
+HXLINE( 242)				tempCounter = ::hx::UShr(tempCounter,8);
+HXLINE( 243)				counterPos = (counterPos - 1);
+            			}
+HXLINE( 246)			encryptBlock(counter,0,keystream,0);
+HXLINE( 248)			int bytesToProcess;
+HXDLIN( 248)			if ((remaining < blockSize)) {
+HXLINE( 248)				bytesToProcess = remaining;
+            			}
+            			else {
+HXLINE( 248)				bytesToProcess = blockSize;
+            			}
+HXLINE( 249)			{
+HXLINE( 249)				int _g = 0;
+HXDLIN( 249)				int _g1 = bytesToProcess;
+HXDLIN( 249)				while((_g < _g1)){
+HXLINE( 249)					_g = (_g + 1);
+HXDLIN( 249)					int j = (_g - 1);
+HXLINE( 250)					result->b[(pos + j)] = ( (unsigned char)((( (int)(message->b->__get((pos + j))) ) ^ ( (int)(keystream->b->__get(j)) ))) );
+            				}
+            			}
+HXLINE( 253)			pos = (pos + blockSize);
+HXLINE( 254)			remaining = (remaining - blockSize);
+HXLINE( 255)			counterValue = (counterValue + 1);
+            		}
+HXLINE( 258)		return result;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(CCM_obj,encryptCTR,return )
+
+ ::haxe::io::Bytes CCM_obj::encryptTag( ::haxe::io::Bytes nonce, ::haxe::io::Bytes tag,int tagLen,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_074f7a4fc05ced9a_264_encryptTag)
+HXLINE( 265)		 ::haxe::io::Bytes counter = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE( 269)		counter->b[0] = ( (unsigned char)(((15 - nonce->length) - 1)) );
+HXLINE( 270)		counter->blit(1,nonce,0,nonce->length);
+HXLINE( 272)		 ::haxe::io::Bytes keystream = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE( 273)		encryptBlock(counter,0,keystream,0);
+HXLINE( 275)		 ::haxe::io::Bytes encryptedTag = ::haxe::io::Bytes_obj::alloc(tagLen);
+HXLINE( 276)		{
+HXLINE( 276)			int _g = 0;
+HXDLIN( 276)			while((_g < tagLen)){
+HXLINE( 276)				_g = (_g + 1);
+HXDLIN( 276)				int i = (_g - 1);
+HXLINE( 277)				encryptedTag->b[i] = ( (unsigned char)((( (int)(tag->b->__get(i)) ) ^ ( (int)(keystream->b->__get(i)) ))) );
+            			}
+            		}
+HXLINE( 280)		return encryptedTag;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC5(CCM_obj,encryptTag,return )
+
+bool CCM_obj::constantTimeCompare( ::haxe::io::Bytes a, ::haxe::io::Bytes b){
+            	HX_STACKFRAME(&_hx_pos_074f7a4fc05ced9a_283_constantTimeCompare)
+HXLINE( 284)		if ((a->length != b->length)) {
+HXLINE( 285)			return false;
+            		}
+HXLINE( 286)		int result = 0;
+HXLINE( 287)		int len = a->length;
+HXLINE( 288)		{
+HXLINE( 288)			int _g = 0;
+HXDLIN( 288)			while((_g < len)){
+HXLINE( 288)				_g = (_g + 1);
+HXDLIN( 288)				int i = (_g - 1);
+HXLINE( 289)				result = (result | (( (int)(a->b->__get(i)) ) ^ ( (int)(b->b->__get(i)) )));
+            			}
+            		}
+HXLINE( 291)		return (result == 0);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(CCM_obj,constantTimeCompare,return )
+
+
+CCM_obj::CCM_obj()
+{
+}
+
+bool CCM_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"encrypt") ) { outValue = encrypt_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { outValue = decrypt_dyn(); return true; }
+		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"encryptCTR") ) { outValue = encryptCTR_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"encryptTag") ) { outValue = encryptTag_dyn(); return true; }
+		break;
+	case 13:
+		if (HX_FIELD_EQ(inName,"computeCBCMac") ) { outValue = computeCBCMac_dyn(); return true; }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"formatAuthData") ) { outValue = formatAuthData_dyn(); return true; }
+		break;
+	case 16:
+		if (HX_FIELD_EQ(inName,"createAuthBlocks") ) { outValue = createAuthBlocks_dyn(); return true; }
+		break;
+	case 19:
+		if (HX_FIELD_EQ(inName,"constantTimeCompare") ) { outValue = constantTimeCompare_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *CCM_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *CCM_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class CCM_obj::__mClass;
+
+static ::String CCM_obj_sStaticFields[] = {
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	HX_("createAuthBlocks",2a,7e,cc,25),
+	HX_("computeCBCMac",e2,3e,c1,2c),
+	HX_("formatAuthData",09,10,80,5e),
+	HX_("encryptCTR",3c,ef,1c,4f),
+	HX_("encryptTag",f5,e0,29,4f),
+	HX_("constantTimeCompare",14,09,e0,8f),
+	::String(null())
+};
+
+void CCM_obj::__register()
+{
+	CCM_obj _hx_dummy;
+	CCM_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.CCM",a7,07,42,f1);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &CCM_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(CCM_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< CCM_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = CCM_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = CCM_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/CFB.cpp b/Sources/c_borogove/src/haxe/crypto/mode/CFB.cpp
new file mode 100644
index 0000000..9608e0c
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/CFB.cpp
@@ -0,0 +1,150 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_mode_CFB
+#include <haxe/crypto/mode/CFB.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_4c2da62b921ae7c2_6_encrypt,"haxe.crypto.mode.CFB","encrypt",0x5fc86b30,"haxe.crypto.mode.CFB.encrypt","haxe/crypto/mode/CFB.hx",6,0xf6529ac6)
+HX_LOCAL_STACK_FRAME(_hx_pos_4c2da62b921ae7c2_21_decrypt,"haxe.crypto.mode.CFB","decrypt",0x9cfcb518,"haxe.crypto.mode.CFB.decrypt","haxe/crypto/mode/CFB.hx",21,0xf6529ac6)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void CFB_obj::__construct() { }
+
+Dynamic CFB_obj::__CreateEmpty() { return new CFB_obj; }
+
+void *CFB_obj::_hx_vtable = 0;
+
+Dynamic CFB_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< CFB_obj > _hx_result = new CFB_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool CFB_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x1013de11;
+}
+
+void CFB_obj::encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_4c2da62b921ae7c2_6_encrypt)
+HXLINE(   7)		 ::haxe::io::Bytes vector = iv->sub(0,iv->length);
+HXLINE(   8)		int i = 0;
+HXLINE(   9)		int len = src->length;
+HXLINE(  10)		while((i < len)){
+HXLINE(  11)			encryptBlock(vector,0,vector,0);
+HXLINE(  12)			int block;
+HXDLIN(  12)			if (((i + blockSize) > len)) {
+HXLINE(  12)				block = (len - i);
+            			}
+            			else {
+HXLINE(  12)				block = blockSize;
+            			}
+HXLINE(  13)			{
+HXLINE(  13)				int _g = 0;
+HXDLIN(  13)				int _g1 = block;
+HXDLIN(  13)				while((_g < _g1)){
+HXLINE(  13)					_g = (_g + 1);
+HXDLIN(  13)					int j = (_g - 1);
+HXLINE(  14)					src->b[(i + j)] = ( (unsigned char)((( (int)(src->b->__get((i + j))) ) ^ ( (int)(vector->b->__get(j)) ))) );
+HXLINE(  15)					vector->b[j] = src->b->__get((i + j));
+            				}
+            			}
+HXLINE(  17)			i = (i + blockSize);
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(CFB_obj,encrypt,(void))
+
+void CFB_obj::decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic decryptBlock){
+            	HX_STACKFRAME(&_hx_pos_4c2da62b921ae7c2_21_decrypt)
+HXLINE(  22)		 ::haxe::io::Bytes vector = iv->sub(0,iv->length);
+HXLINE(  23)		int i = 0;
+HXLINE(  24)		int len = src->length;
+HXLINE(  25)		 ::haxe::io::Bytes vectorResult = ::haxe::io::Bytes_obj::alloc(iv->length);
+HXLINE(  26)		while((i < len)){
+HXLINE(  27)			decryptBlock(vector,0,vectorResult,0);
+HXLINE(  28)			int block;
+HXDLIN(  28)			if (((i + blockSize) > len)) {
+HXLINE(  28)				block = (len - i);
+            			}
+            			else {
+HXLINE(  28)				block = blockSize;
+            			}
+HXLINE(  29)			{
+HXLINE(  29)				int _g = 0;
+HXDLIN(  29)				int _g1 = block;
+HXDLIN(  29)				while((_g < _g1)){
+HXLINE(  29)					_g = (_g + 1);
+HXDLIN(  29)					int j = (_g - 1);
+HXLINE(  30)					vector->b[j] = src->b->__get((i + j));
+HXLINE(  31)					src->b[(i + j)] = ( (unsigned char)((( (int)(src->b->__get((i + j))) ) ^ ( (int)(vectorResult->b->__get(j)) ))) );
+            				}
+            			}
+HXLINE(  33)			i = (i + blockSize);
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(CFB_obj,decrypt,(void))
+
+
+CFB_obj::CFB_obj()
+{
+}
+
+bool CFB_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"encrypt") ) { outValue = encrypt_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { outValue = decrypt_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *CFB_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *CFB_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class CFB_obj::__mClass;
+
+static ::String CFB_obj_sStaticFields[] = {
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	::String(null())
+};
+
+void CFB_obj::__register()
+{
+	CFB_obj _hx_dummy;
+	CFB_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.CFB",39,0a,42,f1);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &CFB_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(CFB_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< CFB_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = CFB_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = CFB_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/CMAC.cpp b/Sources/c_borogove/src/haxe/crypto/mode/CMAC.cpp
new file mode 100644
index 0000000..09f5ce6
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/CMAC.cpp
@@ -0,0 +1,239 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_95f339a1d026d52c
+#define INCLUDED_95f339a1d026d52c
+#include "hxMath.h"
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CMAC
+#include <haxe/crypto/mode/CMAC.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_f3f389fb2f0d5ce6_31_generate,"haxe.crypto.mode.CMAC","generate",0x99569c51,"haxe.crypto.mode.CMAC.generate","haxe/crypto/mode/CMAC.hx",31,0xd8c32f6b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f3f389fb2f0d5ce6_120_generateSubkeys,"haxe.crypto.mode.CMAC","generateSubkeys",0xab6d7323,"haxe.crypto.mode.CMAC.generateSubkeys","haxe/crypto/mode/CMAC.hx",120,0xd8c32f6b)
+HX_LOCAL_STACK_FRAME(_hx_pos_f3f389fb2f0d5ce6_147_leftShiftOnebit,"haxe.crypto.mode.CMAC","leftShiftOnebit",0x20023de6,"haxe.crypto.mode.CMAC.leftShiftOnebit","haxe/crypto/mode/CMAC.hx",147,0xd8c32f6b)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void CMAC_obj::__construct() { }
+
+Dynamic CMAC_obj::__CreateEmpty() { return new CMAC_obj; }
+
+void *CMAC_obj::_hx_vtable = 0;
+
+Dynamic CMAC_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< CMAC_obj > _hx_result = new CMAC_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool CMAC_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x0153bffa;
+}
+
+ ::haxe::io::Bytes CMAC_obj::generate( ::haxe::io::Bytes message, ::haxe::io::Bytes key,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_f3f389fb2f0d5ce6_31_generate)
+HXLINE(  32)		 ::Dynamic subkeys = ::haxe::crypto::mode::CMAC_obj::generateSubkeys(key,blockSize,encryptBlock);
+HXLINE(  33)		 ::haxe::io::Bytes k1 = ( ( ::haxe::io::Bytes)(subkeys->__Field(HX_("k1",66,5d,00,00),::hx::paccDynamic)) );
+HXLINE(  34)		 ::haxe::io::Bytes k2 = ( ( ::haxe::io::Bytes)(subkeys->__Field(HX_("k2",67,5d,00,00),::hx::paccDynamic)) );
+HXLINE(  36)		int messageLen = message->length;
+HXLINE(  37)		int numBlocks = ::Math_obj::ceil((( (Float)(messageLen) ) / ( (Float)(blockSize) )));
+HXLINE(  39)		if ((numBlocks == 0)) {
+HXLINE(  40)			numBlocks = 1;
+            		}
+HXLINE(  43)		 ::haxe::io::Bytes lastBlock;
+HXLINE(  44)		bool isComplete;
+HXLINE(  46)		if ((messageLen == 0)) {
+HXLINE(  47)			lastBlock = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE(  48)			lastBlock->b[0] = ( (unsigned char)(128) );
+HXLINE(  49)			isComplete = false;
+            		}
+            		else {
+HXLINE(  50)			if ((::hx::Mod(messageLen,blockSize) == 0)) {
+HXLINE(  51)				lastBlock = message->sub((messageLen - blockSize),blockSize);
+HXLINE(  52)				isComplete = true;
+            			}
+            			else {
+HXLINE(  54)				int remainingBytes = ::hx::Mod(messageLen,blockSize);
+HXLINE(  55)				lastBlock = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE(  56)				lastBlock->blit(0,message,(messageLen - remainingBytes),remainingBytes);
+HXLINE(  57)				lastBlock->b[remainingBytes] = ( (unsigned char)(128) );
+HXLINE(  58)				isComplete = false;
+            			}
+            		}
+HXLINE(  61)		 ::haxe::io::Bytes keyToUse;
+HXDLIN(  61)		if (isComplete) {
+HXLINE(  61)			keyToUse = k1;
+            		}
+            		else {
+HXLINE(  61)			keyToUse = k2;
+            		}
+HXLINE(  62)		{
+HXLINE(  62)			int _g = 0;
+HXDLIN(  62)			while((_g < blockSize)){
+HXLINE(  62)				_g = (_g + 1);
+HXDLIN(  62)				int i = (_g - 1);
+HXLINE(  63)				lastBlock->b[i] = ( (unsigned char)((( (int)(lastBlock->b->__get(i)) ) ^ ( (int)(keyToUse->b->__get(i)) ))) );
+            			}
+            		}
+HXLINE(  66)		 ::haxe::io::Bytes mac = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE(  68)		int fullBlocks;
+HXDLIN(  68)		if (isComplete) {
+HXLINE(  68)			fullBlocks = (numBlocks - 1);
+            		}
+            		else {
+HXLINE(  68)			fullBlocks = (numBlocks - 1);
+            		}
+HXLINE(  69)		{
+HXLINE(  69)			int _g1 = 0;
+HXDLIN(  69)			int _g2 = fullBlocks;
+HXDLIN(  69)			while((_g1 < _g2)){
+HXLINE(  69)				_g1 = (_g1 + 1);
+HXLINE(  70)				int offset = ((_g1 - 1) * blockSize);
+HXLINE(  71)				{
+HXLINE(  71)					int _g3 = 0;
+HXDLIN(  71)					while((_g3 < blockSize)){
+HXLINE(  71)						_g3 = (_g3 + 1);
+HXDLIN(  71)						int i1 = (_g3 - 1);
+HXLINE(  72)						mac->b[i1] = ( (unsigned char)((( (int)(mac->b->__get(i1)) ) ^ ( (int)(message->b->__get((offset + i1))) ))) );
+            					}
+            				}
+HXLINE(  74)				encryptBlock(mac,0,mac,0);
+            			}
+            		}
+HXLINE(  77)		{
+HXLINE(  77)			int _g4 = 0;
+HXDLIN(  77)			while((_g4 < blockSize)){
+HXLINE(  77)				_g4 = (_g4 + 1);
+HXDLIN(  77)				int i2 = (_g4 - 1);
+HXLINE(  78)				mac->b[i2] = ( (unsigned char)((( (int)(mac->b->__get(i2)) ) ^ ( (int)(lastBlock->b->__get(i2)) ))) );
+            			}
+            		}
+HXLINE(  80)		encryptBlock(mac,0,mac,0);
+HXLINE(  82)		return mac;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(CMAC_obj,generate,return )
+
+ ::Dynamic CMAC_obj::generateSubkeys( ::haxe::io::Bytes key,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_f3f389fb2f0d5ce6_120_generateSubkeys)
+HXLINE( 121)		int rb;
+HXLINE( 122)		if ((blockSize == 16)) {
+HXLINE( 123)			rb = 135;
+            		}
+            		else {
+HXLINE( 124)			if ((blockSize == 8)) {
+HXLINE( 125)				rb = 27;
+            			}
+            			else {
+HXLINE( 127)				HX_STACK_DO_THROW(HX_("Unsupported block size for CMAC",a4,48,54,66));
+            			}
+            		}
+HXLINE( 131)		 ::haxe::io::Bytes l = ::haxe::io::Bytes_obj::alloc(blockSize)->sub(0,blockSize);
+HXLINE( 132)		encryptBlock(l,0,l,0);
+HXLINE( 134)		 ::haxe::io::Bytes k1 = ::haxe::crypto::mode::CMAC_obj::leftShiftOnebit(l);
+HXLINE( 135)		if (((( (int)(l->b->__get(0)) ) & 128) != 0)) {
+HXLINE( 136)			k1->b[(blockSize - 1)] = ( (unsigned char)((( (int)(k1->b->__get((blockSize - 1))) ) ^ rb)) );
+            		}
+HXLINE( 139)		 ::haxe::io::Bytes k2 = ::haxe::crypto::mode::CMAC_obj::leftShiftOnebit(k1);
+HXLINE( 140)		if (((( (int)(k1->b->__get(0)) ) & 128) != 0)) {
+HXLINE( 141)			k2->b[(blockSize - 1)] = ( (unsigned char)((( (int)(k2->b->__get((blockSize - 1))) ) ^ rb)) );
+            		}
+HXLINE( 144)		return  ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("k1",66,5d,00,00),k1)
+            			->setFixed(1,HX_("k2",67,5d,00,00),k2));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(CMAC_obj,generateSubkeys,return )
+
+ ::haxe::io::Bytes CMAC_obj::leftShiftOnebit( ::haxe::io::Bytes input){
+            	HX_STACKFRAME(&_hx_pos_f3f389fb2f0d5ce6_147_leftShiftOnebit)
+HXLINE( 148)		 ::haxe::io::Bytes output = ::haxe::io::Bytes_obj::alloc(input->length);
+HXLINE( 149)		int carry = 0;
+HXLINE( 151)		{
+HXLINE( 151)			int _g = 0;
+HXDLIN( 151)			int _g1 = input->length;
+HXDLIN( 151)			while((_g < _g1)){
+HXLINE( 151)				_g = (_g + 1);
+HXDLIN( 151)				int i = (_g - 1);
+HXLINE( 152)				int b = ( (int)(input->b->__get(((input->length - 1) - i))) );
+HXLINE( 153)				output->b[((input->length - 1) - i)] = ( (unsigned char)((((b << 1) | carry) & 255)) );
+HXLINE( 154)				if (((b & 128) != 0)) {
+HXLINE( 154)					carry = 1;
+            				}
+            				else {
+HXLINE( 154)					carry = 0;
+            				}
+            			}
+            		}
+HXLINE( 157)		return output;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(CMAC_obj,leftShiftOnebit,return )
+
+
+CMAC_obj::CMAC_obj()
+{
+}
+
+bool CMAC_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 8:
+		if (HX_FIELD_EQ(inName,"generate") ) { outValue = generate_dyn(); return true; }
+		break;
+	case 15:
+		if (HX_FIELD_EQ(inName,"generateSubkeys") ) { outValue = generateSubkeys_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"leftShiftOnebit") ) { outValue = leftShiftOnebit_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *CMAC_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *CMAC_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class CMAC_obj::__mClass;
+
+static ::String CMAC_obj_sStaticFields[] = {
+	HX_("generate",35,5f,a2,d9),
+	HX_("generateSubkeys",bf,94,eb,05),
+	HX_("leftShiftOnebit",82,5f,80,7a),
+	::String(null())
+};
+
+void CMAC_obj::__register()
+{
+	CMAC_obj _hx_dummy;
+	CMAC_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.CMAC",d2,36,8c,28);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &CMAC_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(CMAC_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< CMAC_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = CMAC_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = CMAC_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/CTR.cpp b/Sources/c_borogove/src/haxe/crypto/mode/CTR.cpp
new file mode 100644
index 0000000..a2131fc
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/CTR.cpp
@@ -0,0 +1,135 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_mode_CTR
+#include <haxe/crypto/mode/CTR.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_d22c6c8c15a71668_6_encrypt,"haxe.crypto.mode.CTR","encrypt",0x12f18972,"haxe.crypto.mode.CTR.encrypt","haxe/crypto/mode/CTR.hx",6,0x108223c4)
+HX_LOCAL_STACK_FRAME(_hx_pos_d22c6c8c15a71668_28_decrypt,"haxe.crypto.mode.CTR","decrypt",0x5025d35a,"haxe.crypto.mode.CTR.decrypt","haxe/crypto/mode/CTR.hx",28,0x108223c4)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void CTR_obj::__construct() { }
+
+Dynamic CTR_obj::__CreateEmpty() { return new CTR_obj; }
+
+void *CTR_obj::_hx_vtable = 0;
+
+Dynamic CTR_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< CTR_obj > _hx_result = new CTR_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool CTR_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x1013ea53;
+}
+
+void CTR_obj::encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_d22c6c8c15a71668_6_encrypt)
+HXLINE(   7)		 ::haxe::io::Bytes vector = ::haxe::io::Bytes_obj::alloc(iv->length);
+HXLINE(   8)		 ::haxe::io::Bytes vkey = iv->sub(0,iv->length);
+HXLINE(   9)		int i = 0;
+HXLINE(  10)		int len = src->length;
+HXLINE(  11)		while((i < len)){
+HXLINE(  12)			encryptBlock(vkey,0,vector,0);
+HXLINE(  13)			int block;
+HXDLIN(  13)			if (((i + blockSize) > len)) {
+HXLINE(  13)				block = (len - i);
+            			}
+            			else {
+HXLINE(  13)				block = blockSize;
+            			}
+HXLINE(  14)			{
+HXLINE(  14)				int _g = 0;
+HXDLIN(  14)				int _g1 = block;
+HXDLIN(  14)				while((_g < _g1)){
+HXLINE(  14)					_g = (_g + 1);
+HXDLIN(  14)					int j = (_g - 1);
+HXLINE(  15)					src->b[(i + j)] = ( (unsigned char)((( (int)(src->b->__get((i + j))) ) ^ ( (int)(vector->b->__get(j)) ))) );
+            				}
+            			}
+HXLINE(  17)			int j1 = blockSize;
+HXLINE(  18)			do {
+HXLINE(  18)				j1 = (j1 - 1);
+HXDLIN(  18)				if (!(((j1 + 1) >= 0))) {
+HXLINE(  18)					goto _hx_goto_2;
+            				}
+HXLINE(  19)				vkey->b[j1] = ( (unsigned char)((vkey->b->__get(j1) + 1)) );
+            			} while((vkey->b->__get(j1) == 0));
+            			_hx_goto_2:;
+HXLINE(  23)			i = (i + blockSize);
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(CTR_obj,encrypt,(void))
+
+void CTR_obj::decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic decryptBlock){
+            	HX_STACKFRAME(&_hx_pos_d22c6c8c15a71668_28_decrypt)
+HXDLIN(  28)		::haxe::crypto::mode::CTR_obj::encrypt(src,iv,blockSize,decryptBlock);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(CTR_obj,decrypt,(void))
+
+
+CTR_obj::CTR_obj()
+{
+}
+
+bool CTR_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"encrypt") ) { outValue = encrypt_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { outValue = decrypt_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *CTR_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *CTR_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class CTR_obj::__mClass;
+
+static ::String CTR_obj_sStaticFields[] = {
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	::String(null())
+};
+
+void CTR_obj::__register()
+{
+	CTR_obj _hx_dummy;
+	CTR_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.CTR",7b,16,42,f1);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &CTR_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(CTR_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< CTR_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = CTR_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = CTR_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/EAX.cpp b/Sources/c_borogove/src/haxe/crypto/mode/EAX.cpp
new file mode 100644
index 0000000..dca3f06
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/EAX.cpp
@@ -0,0 +1,266 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_mode_CMAC
+#include <haxe/crypto/mode/CMAC.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CTR
+#include <haxe/crypto/mode/CTR.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_EAX
+#include <haxe/crypto/mode/EAX.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_9e90b070894cfaa5_17_encrypt,"haxe.crypto.mode.EAX","encrypt",0xc0cff06d,"haxe.crypto.mode.EAX.encrypt","haxe/crypto/mode/EAX.hx",17,0xf0931ea9)
+HX_LOCAL_STACK_FRAME(_hx_pos_9e90b070894cfaa5_56_decrypt,"haxe.crypto.mode.EAX","decrypt",0xfe043a55,"haxe.crypto.mode.EAX.decrypt","haxe/crypto/mode/EAX.hx",56,0xf0931ea9)
+HX_LOCAL_STACK_FRAME(_hx_pos_9e90b070894cfaa5_99_omac,"haxe.crypto.mode.EAX","omac",0xcfe53278,"haxe.crypto.mode.EAX.omac","haxe/crypto/mode/EAX.hx",99,0xf0931ea9)
+HX_LOCAL_STACK_FRAME(_hx_pos_9e90b070894cfaa5_111_constantTimeEquals,"haxe.crypto.mode.EAX","constantTimeEquals",0x26205ba8,"haxe.crypto.mode.EAX.constantTimeEquals","haxe/crypto/mode/EAX.hx",111,0xf0931ea9)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void EAX_obj::__construct() { }
+
+Dynamic EAX_obj::__CreateEmpty() { return new EAX_obj; }
+
+void *EAX_obj::_hx_vtable = 0;
+
+Dynamic EAX_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< EAX_obj > _hx_result = new EAX_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool EAX_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x10155e4e;
+}
+
+ ::haxe::io::Bytes EAX_obj::encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes key, ::haxe::io::Bytes iv, ::Dynamic encryptBlock,::Array< ::Dynamic> aad){
+            	HX_STACKFRAME(&_hx_pos_9e90b070894cfaa5_17_encrypt)
+HXLINE(  18)		 ::haxe::io::Bytes n = ::haxe::crypto::mode::EAX_obj::omac(0,iv,key,encryptBlock);
+HXLINE(  19)		 ::haxe::io::Bytes h;
+HXLINE(  20)		bool _hx_tmp;
+HXDLIN(  20)		if (::hx::IsNotNull( aad )) {
+HXLINE(  20)			_hx_tmp = (aad->length > 0);
+            		}
+            		else {
+HXLINE(  20)			_hx_tmp = false;
+            		}
+HXDLIN(  20)		if (_hx_tmp) {
+HXLINE(  21)			int totalAadLength = 0;
+HXLINE(  22)			{
+HXLINE(  22)				int _g = 0;
+HXDLIN(  22)				while((_g < aad->length)){
+HXLINE(  22)					 ::haxe::io::Bytes aadItem = aad->__get(_g).StaticCast<  ::haxe::io::Bytes >();
+HXDLIN(  22)					_g = (_g + 1);
+HXLINE(  23)					totalAadLength = (totalAadLength + aadItem->length);
+            				}
+            			}
+HXLINE(  25)			 ::haxe::io::Bytes combinedAad = ::haxe::io::Bytes_obj::alloc(totalAadLength);
+HXLINE(  26)			int offset = 0;
+HXLINE(  27)			{
+HXLINE(  27)				int _g1 = 0;
+HXDLIN(  27)				while((_g1 < aad->length)){
+HXLINE(  27)					 ::haxe::io::Bytes aadItem1 = aad->__get(_g1).StaticCast<  ::haxe::io::Bytes >();
+HXDLIN(  27)					_g1 = (_g1 + 1);
+HXLINE(  28)					combinedAad->blit(offset,aadItem1,0,aadItem1->length);
+HXLINE(  29)					offset = (offset + aadItem1->length);
+            				}
+            			}
+HXLINE(  31)			h = ::haxe::crypto::mode::EAX_obj::omac(1,combinedAad,key,encryptBlock);
+            		}
+            		else {
+HXLINE(  33)			h = ::haxe::crypto::mode::EAX_obj::omac(1,::haxe::io::Bytes_obj::alloc(0),key,encryptBlock);
+            		}
+HXLINE(  35)		::haxe::crypto::mode::CTR_obj::encrypt(src,n,16,encryptBlock);
+HXLINE(  36)		 ::haxe::io::Bytes c = ::haxe::crypto::mode::EAX_obj::omac(2,src,key,encryptBlock);
+HXLINE(  37)		 ::haxe::io::Bytes tag = ::haxe::io::Bytes_obj::alloc(16);
+HXLINE(  38)		{
+HXLINE(  38)			int _g2 = 0;
+HXDLIN(  38)			while((_g2 < 16)){
+HXLINE(  38)				_g2 = (_g2 + 1);
+HXDLIN(  38)				int i = (_g2 - 1);
+HXLINE(  39)				tag->b[i] = ( (unsigned char)(((( (int)(n->b->__get(i)) ) ^ ( (int)(h->b->__get(i)) )) ^ ( (int)(c->b->__get(i)) ))) );
+            			}
+            		}
+HXLINE(  41)		 ::haxe::io::Bytes result = ::haxe::io::Bytes_obj::alloc((src->length + 16));
+HXLINE(  42)		result->blit(0,src,0,src->length);
+HXLINE(  43)		result->blit(src->length,tag,0,16);
+HXLINE(  44)		return result;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC5(EAX_obj,encrypt,return )
+
+ ::haxe::io::Bytes EAX_obj::decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes key, ::haxe::io::Bytes iv, ::Dynamic encryptBlock,::Array< ::Dynamic> aad){
+            	HX_STACKFRAME(&_hx_pos_9e90b070894cfaa5_56_decrypt)
+HXLINE(  57)		if ((src->length < 16)) {
+HXLINE(  58)			return null();
+            		}
+HXLINE(  60)		int ciphertextLen = (src->length - 16);
+HXLINE(  61)		 ::haxe::io::Bytes ciphertext = src->sub(0,ciphertextLen);
+HXLINE(  62)		 ::haxe::io::Bytes receivedTag = src->sub(ciphertextLen,16);
+HXLINE(  63)		 ::haxe::io::Bytes n = ::haxe::crypto::mode::EAX_obj::omac(0,iv,key,encryptBlock);
+HXLINE(  64)		 ::haxe::io::Bytes h;
+HXLINE(  65)		bool _hx_tmp;
+HXDLIN(  65)		if (::hx::IsNotNull( aad )) {
+HXLINE(  65)			_hx_tmp = (aad->length > 0);
+            		}
+            		else {
+HXLINE(  65)			_hx_tmp = false;
+            		}
+HXDLIN(  65)		if (_hx_tmp) {
+HXLINE(  66)			int totalAadLength = 0;
+HXLINE(  67)			{
+HXLINE(  67)				int _g = 0;
+HXDLIN(  67)				while((_g < aad->length)){
+HXLINE(  67)					 ::haxe::io::Bytes aadItem = aad->__get(_g).StaticCast<  ::haxe::io::Bytes >();
+HXDLIN(  67)					_g = (_g + 1);
+HXLINE(  68)					totalAadLength = (totalAadLength + aadItem->length);
+            				}
+            			}
+HXLINE(  71)			 ::haxe::io::Bytes combinedAad = ::haxe::io::Bytes_obj::alloc(totalAadLength);
+HXLINE(  72)			int offset = 0;
+HXLINE(  73)			{
+HXLINE(  73)				int _g1 = 0;
+HXDLIN(  73)				while((_g1 < aad->length)){
+HXLINE(  73)					 ::haxe::io::Bytes aadItem1 = aad->__get(_g1).StaticCast<  ::haxe::io::Bytes >();
+HXDLIN(  73)					_g1 = (_g1 + 1);
+HXLINE(  74)					combinedAad->blit(offset,aadItem1,0,aadItem1->length);
+HXLINE(  75)					offset = (offset + aadItem1->length);
+            				}
+            			}
+HXLINE(  77)			h = ::haxe::crypto::mode::EAX_obj::omac(1,combinedAad,key,encryptBlock);
+            		}
+            		else {
+HXLINE(  79)			h = ::haxe::crypto::mode::EAX_obj::omac(1,::haxe::io::Bytes_obj::alloc(0),key,encryptBlock);
+            		}
+HXLINE(  81)		 ::haxe::io::Bytes c = ::haxe::crypto::mode::EAX_obj::omac(2,ciphertext,key,encryptBlock);
+HXLINE(  82)		 ::haxe::io::Bytes expectedTag = ::haxe::io::Bytes_obj::alloc(16);
+HXLINE(  83)		{
+HXLINE(  83)			int _g2 = 0;
+HXDLIN(  83)			while((_g2 < 16)){
+HXLINE(  83)				_g2 = (_g2 + 1);
+HXDLIN(  83)				int i = (_g2 - 1);
+HXLINE(  84)				expectedTag->b[i] = ( (unsigned char)(((( (int)(n->b->__get(i)) ) ^ ( (int)(h->b->__get(i)) )) ^ ( (int)(c->b->__get(i)) ))) );
+            			}
+            		}
+HXLINE(  86)		if (!(::haxe::crypto::mode::EAX_obj::constantTimeEquals(receivedTag,expectedTag))) {
+HXLINE(  87)			return null();
+            		}
+HXLINE(  89)		 ::haxe::io::Bytes plaintext = ::haxe::io::Bytes_obj::alloc(ciphertext->length);
+HXLINE(  90)		plaintext->blit(0,ciphertext,0,ciphertext->length);
+HXLINE(  91)		::haxe::crypto::mode::CTR_obj::decrypt(plaintext,n,16,encryptBlock);
+HXLINE(  93)		return plaintext;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC5(EAX_obj,decrypt,return )
+
+ ::haxe::io::Bytes EAX_obj::omac(int t, ::haxe::io::Bytes message, ::haxe::io::Bytes key, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_9e90b070894cfaa5_99_omac)
+HXLINE( 100)		 ::haxe::io::Bytes prefixedMessage = ::haxe::io::Bytes_obj::alloc((16 + message->length));
+HXLINE( 101)		{
+HXLINE( 101)			int _g = 0;
+HXDLIN( 101)			while((_g < 15)){
+HXLINE( 101)				_g = (_g + 1);
+HXLINE( 102)				prefixedMessage->b[(_g - 1)] = ( (unsigned char)(0) );
+            			}
+            		}
+HXLINE( 104)		prefixedMessage->b[15] = ( (unsigned char)(t) );
+HXLINE( 105)		if ((message->length > 0)) {
+HXLINE( 106)			prefixedMessage->blit(16,message,0,message->length);
+            		}
+HXLINE( 108)		return ::haxe::crypto::mode::CMAC_obj::generate(prefixedMessage,key,16,encryptBlock);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(EAX_obj,omac,return )
+
+bool EAX_obj::constantTimeEquals( ::haxe::io::Bytes a, ::haxe::io::Bytes b){
+            	HX_STACKFRAME(&_hx_pos_9e90b070894cfaa5_111_constantTimeEquals)
+HXLINE( 112)		if ((a->length != b->length)) {
+HXLINE( 113)			return false;
+            		}
+HXLINE( 115)		int result = 0;
+HXLINE( 116)		{
+HXLINE( 116)			int _g = 0;
+HXDLIN( 116)			int _g1 = a->length;
+HXDLIN( 116)			while((_g < _g1)){
+HXLINE( 116)				_g = (_g + 1);
+HXDLIN( 116)				int i = (_g - 1);
+HXLINE( 117)				result = (result | (( (int)(a->b->__get(i)) ) ^ ( (int)(b->b->__get(i)) )));
+            			}
+            		}
+HXLINE( 119)		return (result == 0);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(EAX_obj,constantTimeEquals,return )
+
+
+EAX_obj::EAX_obj()
+{
+}
+
+bool EAX_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 4:
+		if (HX_FIELD_EQ(inName,"omac") ) { outValue = omac_dyn(); return true; }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"encrypt") ) { outValue = encrypt_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { outValue = decrypt_dyn(); return true; }
+		break;
+	case 18:
+		if (HX_FIELD_EQ(inName,"constantTimeEquals") ) { outValue = constantTimeEquals_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *EAX_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *EAX_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class EAX_obj::__mClass;
+
+static ::String EAX_obj_sStaticFields[] = {
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	HX_("omac",80,b9,b1,49),
+	HX_("constantTimeEquals",b0,20,08,06),
+	::String(null())
+};
+
+void EAX_obj::__register()
+{
+	EAX_obj _hx_dummy;
+	EAX_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.EAX",76,8a,43,f1);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &EAX_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(EAX_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< EAX_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = EAX_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = EAX_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/ECB.cpp b/Sources/c_borogove/src/haxe/crypto/mode/ECB.cpp
new file mode 100644
index 0000000..ef965ad
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/ECB.cpp
@@ -0,0 +1,113 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_mode_ECB
+#include <haxe/crypto/mode/ECB.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_cc9a01be86c291cf_6_encrypt,"haxe.crypto.mode.ECB","encrypt",0x20a5da15,"haxe.crypto.mode.ECB.encrypt","haxe/crypto/mode/ECB.hx",6,0x08d59601)
+HX_LOCAL_STACK_FRAME(_hx_pos_cc9a01be86c291cf_15_decrypt,"haxe.crypto.mode.ECB","decrypt",0x5dda23fd,"haxe.crypto.mode.ECB.decrypt","haxe/crypto/mode/ECB.hx",15,0x08d59601)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void ECB_obj::__construct() { }
+
+Dynamic ECB_obj::__CreateEmpty() { return new ECB_obj; }
+
+void *ECB_obj::_hx_vtable = 0;
+
+Dynamic ECB_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< ECB_obj > _hx_result = new ECB_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool ECB_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x10155ff6;
+}
+
+void ECB_obj::encrypt( ::haxe::io::Bytes src,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_cc9a01be86c291cf_6_encrypt)
+HXLINE(   7)		int i = 0;
+HXLINE(   8)		int len = src->length;
+HXLINE(   9)		while((i < len)){
+HXLINE(  10)			encryptBlock(src,i,src,i);
+HXLINE(  11)			i = (i + blockSize);
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(ECB_obj,encrypt,(void))
+
+void ECB_obj::decrypt( ::haxe::io::Bytes src,int blockSize, ::Dynamic decryptBlock){
+            	HX_STACKFRAME(&_hx_pos_cc9a01be86c291cf_15_decrypt)
+HXLINE(  16)		int i = 0;
+HXLINE(  17)		int len = src->length;
+HXLINE(  18)		while((i < len)){
+HXLINE(  19)			decryptBlock(src,i,src,i);
+HXLINE(  20)			i = (i + blockSize);
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(ECB_obj,decrypt,(void))
+
+
+ECB_obj::ECB_obj()
+{
+}
+
+bool ECB_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"encrypt") ) { outValue = encrypt_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { outValue = decrypt_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *ECB_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *ECB_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class ECB_obj::__mClass;
+
+static ::String ECB_obj_sStaticFields[] = {
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	::String(null())
+};
+
+void ECB_obj::__register()
+{
+	ECB_obj _hx_dummy;
+	ECB_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.ECB",1e,8c,43,f1);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &ECB_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(ECB_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< ECB_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = ECB_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = ECB_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/GCM.cpp b/Sources/c_borogove/src/haxe/crypto/mode/GCM.cpp
new file mode 100644
index 0000000..8f3feed
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/GCM.cpp
@@ -0,0 +1,427 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_mode_CTR
+#include <haxe/crypto/mode/CTR.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_GCM
+#include <haxe/crypto/mode/GCM.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_5bebb91a7cb31db4_16_encrypt,"haxe.crypto.mode.GCM","encrypt",0x32c233a2,"haxe.crypto.mode.GCM.encrypt","haxe/crypto/mode/GCM.hx",16,0xdcd1a794)
+HX_LOCAL_STACK_FRAME(_hx_pos_5bebb91a7cb31db4_47_decrypt,"haxe.crypto.mode.GCM","decrypt",0x6ff67d8a,"haxe.crypto.mode.GCM.decrypt","haxe/crypto/mode/GCM.hx",47,0xdcd1a794)
+HX_LOCAL_STACK_FRAME(_hx_pos_5bebb91a7cb31db4_79_calculateJ0,"haxe.crypto.mode.GCM","calculateJ0",0xd9de1349,"haxe.crypto.mode.GCM.calculateJ0","haxe/crypto/mode/GCM.hx",79,0xdcd1a794)
+HX_LOCAL_STACK_FRAME(_hx_pos_5bebb91a7cb31db4_99_incrementCounter,"haxe.crypto.mode.GCM","incrementCounter",0x9614bfb0,"haxe.crypto.mode.GCM.incrementCounter","haxe/crypto/mode/GCM.hx",99,0xdcd1a794)
+HX_LOCAL_STACK_FRAME(_hx_pos_5bebb91a7cb31db4_115_calculateTag,"haxe.crypto.mode.GCM","calculateTag",0xc87a8e37,"haxe.crypto.mode.GCM.calculateTag","haxe/crypto/mode/GCM.hx",115,0xdcd1a794)
+HX_LOCAL_STACK_FRAME(_hx_pos_5bebb91a7cb31db4_125_ghash,"haxe.crypto.mode.GCM","ghash",0xc8ffebb2,"haxe.crypto.mode.GCM.ghash","haxe/crypto/mode/GCM.hx",125,0xdcd1a794)
+HX_LOCAL_STACK_FRAME(_hx_pos_5bebb91a7cb31db4_152_ghashUpdate,"haxe.crypto.mode.GCM","ghashUpdate",0xebc8b75b,"haxe.crypto.mode.GCM.ghashUpdate","haxe/crypto/mode/GCM.hx",152,0xdcd1a794)
+HX_LOCAL_STACK_FRAME(_hx_pos_5bebb91a7cb31db4_182_gmult,"haxe.crypto.mode.GCM","gmult",0xcc5d23d4,"haxe.crypto.mode.GCM.gmult","haxe/crypto/mode/GCM.hx",182,0xdcd1a794)
+HX_LOCAL_STACK_FRAME(_hx_pos_5bebb91a7cb31db4_215_constantTimeCompare,"haxe.crypto.mode.GCM","constantTimeCompare",0xeba025d1,"haxe.crypto.mode.GCM.constantTimeCompare","haxe/crypto/mode/GCM.hx",215,0xdcd1a794)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void GCM_obj::__construct() { }
+
+Dynamic GCM_obj::__CreateEmpty() { return new GCM_obj; }
+
+void *GCM_obj::_hx_vtable = 0;
+
+Dynamic GCM_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< GCM_obj > _hx_result = new GCM_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool GCM_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x1016e483;
+}
+
+ ::haxe::io::Bytes GCM_obj::encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv, ::haxe::io::Bytes aad,int tagLen,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_5bebb91a7cb31db4_16_encrypt)
+HXLINE(  17)		bool _hx_tmp;
+HXDLIN(  17)		if ((tagLen >= 4)) {
+HXLINE(  17)			_hx_tmp = (tagLen > 16);
+            		}
+            		else {
+HXLINE(  17)			_hx_tmp = true;
+            		}
+HXDLIN(  17)		if (_hx_tmp) {
+HXLINE(  18)			HX_STACK_DO_THROW(HX_("Tag length must be between 4 and 16 bytes (32-128 bits)",2b,c7,cd,f9));
+            		}
+HXLINE(  20)		if (::hx::IsNull( aad )) {
+HXLINE(  21)			aad = ::haxe::io::Bytes_obj::alloc(0);
+            		}
+HXLINE(  22)		 ::haxe::io::Bytes H = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE(  23)		encryptBlock(::haxe::io::Bytes_obj::alloc(blockSize),0,H,0);
+HXLINE(  24)		 ::haxe::io::Bytes J0 = ::haxe::crypto::mode::GCM_obj::calculateJ0(H,iv);
+HXLINE(  25)		 ::haxe::io::Bytes counter = ::haxe::crypto::mode::GCM_obj::incrementCounter(J0);
+HXLINE(  26)		 ::haxe::io::Bytes ciphertext = src->sub(0,src->length);
+HXLINE(  27)		::haxe::crypto::mode::CTR_obj::encrypt(ciphertext,counter,blockSize,encryptBlock);
+HXLINE(  28)		 ::haxe::io::Bytes tag = ::haxe::crypto::mode::GCM_obj::calculateTag(H,aad,ciphertext,J0,encryptBlock);
+HXLINE(  29)		 ::haxe::io::Bytes result = ::haxe::io::Bytes_obj::alloc((ciphertext->length + tagLen));
+HXLINE(  30)		result->blit(0,ciphertext,0,ciphertext->length);
+HXLINE(  31)		result->blit(ciphertext->length,tag,0,tagLen);
+HXLINE(  33)		return result;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC6(GCM_obj,encrypt,return )
+
+ ::haxe::io::Bytes GCM_obj::decrypt( ::haxe::io::Bytes ciphertextWithTag, ::haxe::io::Bytes iv, ::haxe::io::Bytes aad,int tagLen,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_5bebb91a7cb31db4_47_decrypt)
+HXLINE(  48)		bool _hx_tmp;
+HXDLIN(  48)		if ((tagLen >= 4)) {
+HXLINE(  48)			_hx_tmp = (tagLen > 16);
+            		}
+            		else {
+HXLINE(  48)			_hx_tmp = true;
+            		}
+HXDLIN(  48)		if (_hx_tmp) {
+HXLINE(  49)			HX_STACK_DO_THROW(HX_("Tag length must be between 4 and 16 bytes (32-128 bits)",2b,c7,cd,f9));
+            		}
+HXLINE(  52)		if ((ciphertextWithTag->length < tagLen)) {
+HXLINE(  53)			HX_STACK_DO_THROW(HX_("Ciphertext too short for specified tag length",4b,c8,55,34));
+            		}
+HXLINE(  56)		int ciphertextLen = (ciphertextWithTag->length - tagLen);
+HXLINE(  57)		 ::haxe::io::Bytes ciphertext = ciphertextWithTag->sub(0,ciphertextLen);
+HXLINE(  58)		 ::haxe::io::Bytes providedTag = ciphertextWithTag->sub(ciphertextLen,tagLen);
+HXLINE(  59)		 ::haxe::io::Bytes H = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE(  60)		encryptBlock(::haxe::io::Bytes_obj::alloc(blockSize),0,H,0);
+HXLINE(  61)		 ::haxe::io::Bytes J0 = ::haxe::crypto::mode::GCM_obj::calculateJ0(H,iv);
+HXLINE(  64)		if (!(::haxe::crypto::mode::GCM_obj::constantTimeCompare(::haxe::crypto::mode::GCM_obj::calculateTag(H,aad,ciphertext,J0,encryptBlock)->sub(0,tagLen),providedTag))) {
+HXLINE(  65)			HX_STACK_DO_THROW(HX_("Authentication failed",45,9b,5d,12));
+            		}
+HXLINE(  68)		 ::haxe::io::Bytes counter = ::haxe::crypto::mode::GCM_obj::incrementCounter(J0);
+HXLINE(  69)		 ::haxe::io::Bytes plaintext = ciphertext->sub(0,ciphertext->length);
+HXLINE(  70)		::haxe::crypto::mode::CTR_obj::encrypt(plaintext,counter,blockSize,encryptBlock);
+HXLINE(  72)		return plaintext;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC6(GCM_obj,decrypt,return )
+
+ ::haxe::io::Bytes GCM_obj::calculateJ0( ::haxe::io::Bytes H, ::haxe::io::Bytes iv){
+            	HX_STACKFRAME(&_hx_pos_5bebb91a7cb31db4_79_calculateJ0)
+HXDLIN(  79)		if ((iv->length == 12)) {
+HXLINE(  80)			 ::haxe::io::Bytes J0 = ::haxe::io::Bytes_obj::alloc(16);
+HXLINE(  81)			J0->blit(0,iv,0,12);
+HXLINE(  82)			J0->b[15] = ( (unsigned char)(1) );
+HXLINE(  83)			return J0;
+            		}
+            		else {
+HXLINE(  85)			 ::haxe::io::Bytes J01 = ::haxe::io::Bytes_obj::alloc(16);
+HXLINE(  86)			J01 = ::haxe::crypto::mode::GCM_obj::ghashUpdate(H,J01,iv);
+HXLINE(  87)			 ::haxe::io::Bytes lenBlock = ::haxe::io::Bytes_obj::alloc(16);
+HXLINE(  88)			int ivBitLen = (iv->length * 8);
+HXLINE(  89)			lenBlock->b[12] = ( (unsigned char)((::hx::UShr(ivBitLen,24) & 255)) );
+HXLINE(  90)			lenBlock->b[13] = ( (unsigned char)((::hx::UShr(ivBitLen,16) & 255)) );
+HXLINE(  91)			lenBlock->b[14] = ( (unsigned char)((::hx::UShr(ivBitLen,8) & 255)) );
+HXLINE(  92)			lenBlock->b[15] = ( (unsigned char)((ivBitLen & 255)) );
+HXLINE(  93)			J01 = ::haxe::crypto::mode::GCM_obj::ghashUpdate(H,J01,lenBlock);
+HXLINE(  95)			return J01;
+            		}
+HXLINE(  79)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(GCM_obj,calculateJ0,return )
+
+ ::haxe::io::Bytes GCM_obj::incrementCounter( ::haxe::io::Bytes counter){
+            	HX_STACKFRAME(&_hx_pos_5bebb91a7cb31db4_99_incrementCounter)
+HXLINE( 100)		 ::haxe::io::Bytes result = counter->sub(0,counter->length);
+HXLINE( 101)		int carry = 1;
+HXLINE( 102)		int i = 15;
+HXLINE( 103)		while(true){
+HXLINE( 103)			bool _hx_tmp;
+HXDLIN( 103)			if ((carry > 0)) {
+HXLINE( 103)				_hx_tmp = (i >= 12);
+            			}
+            			else {
+HXLINE( 103)				_hx_tmp = false;
+            			}
+HXDLIN( 103)			if (!(_hx_tmp)) {
+HXLINE( 103)				goto _hx_goto_3;
+            			}
+HXLINE( 104)			int val = (result->b->__get(i) + carry);
+HXLINE( 105)			result->b[i] = ( (unsigned char)((val & 255)) );
+HXLINE( 106)			carry = ::hx::UShr(val,8);
+HXLINE( 107)			i = (i - 1);
+            		}
+            		_hx_goto_3:;
+HXLINE( 109)		return result;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(GCM_obj,incrementCounter,return )
+
+ ::haxe::io::Bytes GCM_obj::calculateTag( ::haxe::io::Bytes H, ::haxe::io::Bytes aad, ::haxe::io::Bytes ciphertext, ::haxe::io::Bytes J0, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_5bebb91a7cb31db4_115_calculateTag)
+HXLINE( 116)		 ::haxe::io::Bytes authData = ::haxe::crypto::mode::GCM_obj::ghash(H,aad,ciphertext);
+HXLINE( 117)		 ::haxe::io::Bytes encryptedJ0 = ::haxe::io::Bytes_obj::alloc(16);
+HXLINE( 118)		encryptBlock(J0,0,encryptedJ0,0);
+HXLINE( 119)		{
+HXLINE( 120)			authData->b[0] = ( (unsigned char)((( (int)(authData->b->__get(0)) ) ^ ( (int)(encryptedJ0->b->__get(0)) ))) );
+HXDLIN( 120)			authData->b[1] = ( (unsigned char)((( (int)(authData->b->__get(1)) ) ^ ( (int)(encryptedJ0->b->__get(1)) ))) );
+HXDLIN( 120)			authData->b[2] = ( (unsigned char)((( (int)(authData->b->__get(2)) ) ^ ( (int)(encryptedJ0->b->__get(2)) ))) );
+HXDLIN( 120)			authData->b[3] = ( (unsigned char)((( (int)(authData->b->__get(3)) ) ^ ( (int)(encryptedJ0->b->__get(3)) ))) );
+HXDLIN( 120)			authData->b[4] = ( (unsigned char)((( (int)(authData->b->__get(4)) ) ^ ( (int)(encryptedJ0->b->__get(4)) ))) );
+HXDLIN( 120)			authData->b[5] = ( (unsigned char)((( (int)(authData->b->__get(5)) ) ^ ( (int)(encryptedJ0->b->__get(5)) ))) );
+HXDLIN( 120)			authData->b[6] = ( (unsigned char)((( (int)(authData->b->__get(6)) ) ^ ( (int)(encryptedJ0->b->__get(6)) ))) );
+HXDLIN( 120)			authData->b[7] = ( (unsigned char)((( (int)(authData->b->__get(7)) ) ^ ( (int)(encryptedJ0->b->__get(7)) ))) );
+HXDLIN( 120)			authData->b[8] = ( (unsigned char)((( (int)(authData->b->__get(8)) ) ^ ( (int)(encryptedJ0->b->__get(8)) ))) );
+HXDLIN( 120)			authData->b[9] = ( (unsigned char)((( (int)(authData->b->__get(9)) ) ^ ( (int)(encryptedJ0->b->__get(9)) ))) );
+HXDLIN( 120)			authData->b[10] = ( (unsigned char)((( (int)(authData->b->__get(10)) ) ^ ( (int)(encryptedJ0->b->__get(10)) ))) );
+HXDLIN( 120)			authData->b[11] = ( (unsigned char)((( (int)(authData->b->__get(11)) ) ^ ( (int)(encryptedJ0->b->__get(11)) ))) );
+HXDLIN( 120)			authData->b[12] = ( (unsigned char)((( (int)(authData->b->__get(12)) ) ^ ( (int)(encryptedJ0->b->__get(12)) ))) );
+HXDLIN( 120)			authData->b[13] = ( (unsigned char)((( (int)(authData->b->__get(13)) ) ^ ( (int)(encryptedJ0->b->__get(13)) ))) );
+HXDLIN( 120)			authData->b[14] = ( (unsigned char)((( (int)(authData->b->__get(14)) ) ^ ( (int)(encryptedJ0->b->__get(14)) ))) );
+HXDLIN( 120)			authData->b[15] = ( (unsigned char)((( (int)(authData->b->__get(15)) ) ^ ( (int)(encryptedJ0->b->__get(15)) ))) );
+            		}
+HXLINE( 122)		return authData;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC5(GCM_obj,calculateTag,return )
+
+ ::haxe::io::Bytes GCM_obj::ghash( ::haxe::io::Bytes H, ::haxe::io::Bytes aad, ::haxe::io::Bytes ciphertext){
+            	HX_STACKFRAME(&_hx_pos_5bebb91a7cb31db4_125_ghash)
+HXLINE( 126)		 ::haxe::io::Bytes X = ::haxe::io::Bytes_obj::alloc(16);
+HXLINE( 127)		if ((aad->length > 0)) {
+HXLINE( 128)			X = ::haxe::crypto::mode::GCM_obj::ghashUpdate(H,X,aad);
+            		}
+HXLINE( 130)		if ((ciphertext->length > 0)) {
+HXLINE( 131)			X = ::haxe::crypto::mode::GCM_obj::ghashUpdate(H,X,ciphertext);
+            		}
+HXLINE( 133)		 ::haxe::io::Bytes lenBlock = ::haxe::io::Bytes_obj::alloc(16);
+HXLINE( 134)		int aadBitLen = (aad->length * 8);
+HXLINE( 135)		int cipherBitLen = (ciphertext->length * 8);
+HXLINE( 136)		lenBlock->b[4] = ( (unsigned char)((::hx::UShr(aadBitLen,24) & 255)) );
+HXLINE( 137)		lenBlock->b[5] = ( (unsigned char)((::hx::UShr(aadBitLen,16) & 255)) );
+HXLINE( 138)		lenBlock->b[6] = ( (unsigned char)((::hx::UShr(aadBitLen,8) & 255)) );
+HXLINE( 139)		lenBlock->b[7] = ( (unsigned char)((aadBitLen & 255)) );
+HXLINE( 140)		lenBlock->b[12] = ( (unsigned char)((::hx::UShr(cipherBitLen,24) & 255)) );
+HXLINE( 141)		lenBlock->b[13] = ( (unsigned char)((::hx::UShr(cipherBitLen,16) & 255)) );
+HXLINE( 142)		lenBlock->b[14] = ( (unsigned char)((::hx::UShr(cipherBitLen,8) & 255)) );
+HXLINE( 143)		lenBlock->b[15] = ( (unsigned char)((cipherBitLen & 255)) );
+HXLINE( 144)		{
+HXLINE( 145)			X->b[0] = ( (unsigned char)((( (int)(X->b->__get(0)) ) ^ ( (int)(lenBlock->b->__get(0)) ))) );
+HXDLIN( 145)			X->b[1] = ( (unsigned char)((( (int)(X->b->__get(1)) ) ^ ( (int)(lenBlock->b->__get(1)) ))) );
+HXDLIN( 145)			X->b[2] = ( (unsigned char)((( (int)(X->b->__get(2)) ) ^ ( (int)(lenBlock->b->__get(2)) ))) );
+HXDLIN( 145)			X->b[3] = ( (unsigned char)((( (int)(X->b->__get(3)) ) ^ ( (int)(lenBlock->b->__get(3)) ))) );
+HXDLIN( 145)			X->b[4] = ( (unsigned char)((( (int)(X->b->__get(4)) ) ^ ( (int)(lenBlock->b->__get(4)) ))) );
+HXDLIN( 145)			X->b[5] = ( (unsigned char)((( (int)(X->b->__get(5)) ) ^ ( (int)(lenBlock->b->__get(5)) ))) );
+HXDLIN( 145)			X->b[6] = ( (unsigned char)((( (int)(X->b->__get(6)) ) ^ ( (int)(lenBlock->b->__get(6)) ))) );
+HXDLIN( 145)			X->b[7] = ( (unsigned char)((( (int)(X->b->__get(7)) ) ^ ( (int)(lenBlock->b->__get(7)) ))) );
+HXDLIN( 145)			X->b[8] = ( (unsigned char)((( (int)(X->b->__get(8)) ) ^ ( (int)(lenBlock->b->__get(8)) ))) );
+HXDLIN( 145)			X->b[9] = ( (unsigned char)((( (int)(X->b->__get(9)) ) ^ ( (int)(lenBlock->b->__get(9)) ))) );
+HXDLIN( 145)			X->b[10] = ( (unsigned char)((( (int)(X->b->__get(10)) ) ^ ( (int)(lenBlock->b->__get(10)) ))) );
+HXDLIN( 145)			X->b[11] = ( (unsigned char)((( (int)(X->b->__get(11)) ) ^ ( (int)(lenBlock->b->__get(11)) ))) );
+HXDLIN( 145)			X->b[12] = ( (unsigned char)((( (int)(X->b->__get(12)) ) ^ ( (int)(lenBlock->b->__get(12)) ))) );
+HXDLIN( 145)			X->b[13] = ( (unsigned char)((( (int)(X->b->__get(13)) ) ^ ( (int)(lenBlock->b->__get(13)) ))) );
+HXDLIN( 145)			X->b[14] = ( (unsigned char)((( (int)(X->b->__get(14)) ) ^ ( (int)(lenBlock->b->__get(14)) ))) );
+HXDLIN( 145)			X->b[15] = ( (unsigned char)((( (int)(X->b->__get(15)) ) ^ ( (int)(lenBlock->b->__get(15)) ))) );
+            		}
+HXLINE( 147)		X = ::haxe::crypto::mode::GCM_obj::gmult(X,H);
+HXLINE( 149)		return X;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(GCM_obj,ghash,return )
+
+ ::haxe::io::Bytes GCM_obj::ghashUpdate( ::haxe::io::Bytes H, ::haxe::io::Bytes state, ::haxe::io::Bytes data){
+            	HX_STACKFRAME(&_hx_pos_5bebb91a7cb31db4_152_ghashUpdate)
+HXLINE( 153)		 ::haxe::io::Bytes X = state->sub(0,16);
+HXLINE( 154)		int pos = 0;
+HXLINE( 155)		int remaining = data->length;
+HXLINE( 157)		while((remaining > 0)){
+HXLINE( 158)			 ::haxe::io::Bytes block = ::haxe::io::Bytes_obj::alloc(16);
+HXLINE( 159)			int bytesToCopy;
+HXDLIN( 159)			if ((remaining < 16)) {
+HXLINE( 159)				bytesToCopy = remaining;
+            			}
+            			else {
+HXLINE( 159)				bytesToCopy = 16;
+            			}
+HXLINE( 160)			block->blit(0,data,pos,bytesToCopy);
+HXLINE( 161)			{
+HXLINE( 162)				X->b[0] = ( (unsigned char)((( (int)(X->b->__get(0)) ) ^ ( (int)(block->b->__get(0)) ))) );
+HXDLIN( 162)				X->b[1] = ( (unsigned char)((( (int)(X->b->__get(1)) ) ^ ( (int)(block->b->__get(1)) ))) );
+HXDLIN( 162)				X->b[2] = ( (unsigned char)((( (int)(X->b->__get(2)) ) ^ ( (int)(block->b->__get(2)) ))) );
+HXDLIN( 162)				X->b[3] = ( (unsigned char)((( (int)(X->b->__get(3)) ) ^ ( (int)(block->b->__get(3)) ))) );
+HXDLIN( 162)				X->b[4] = ( (unsigned char)((( (int)(X->b->__get(4)) ) ^ ( (int)(block->b->__get(4)) ))) );
+HXDLIN( 162)				X->b[5] = ( (unsigned char)((( (int)(X->b->__get(5)) ) ^ ( (int)(block->b->__get(5)) ))) );
+HXDLIN( 162)				X->b[6] = ( (unsigned char)((( (int)(X->b->__get(6)) ) ^ ( (int)(block->b->__get(6)) ))) );
+HXDLIN( 162)				X->b[7] = ( (unsigned char)((( (int)(X->b->__get(7)) ) ^ ( (int)(block->b->__get(7)) ))) );
+HXDLIN( 162)				X->b[8] = ( (unsigned char)((( (int)(X->b->__get(8)) ) ^ ( (int)(block->b->__get(8)) ))) );
+HXDLIN( 162)				X->b[9] = ( (unsigned char)((( (int)(X->b->__get(9)) ) ^ ( (int)(block->b->__get(9)) ))) );
+HXDLIN( 162)				X->b[10] = ( (unsigned char)((( (int)(X->b->__get(10)) ) ^ ( (int)(block->b->__get(10)) ))) );
+HXDLIN( 162)				X->b[11] = ( (unsigned char)((( (int)(X->b->__get(11)) ) ^ ( (int)(block->b->__get(11)) ))) );
+HXDLIN( 162)				X->b[12] = ( (unsigned char)((( (int)(X->b->__get(12)) ) ^ ( (int)(block->b->__get(12)) ))) );
+HXDLIN( 162)				X->b[13] = ( (unsigned char)((( (int)(X->b->__get(13)) ) ^ ( (int)(block->b->__get(13)) ))) );
+HXDLIN( 162)				X->b[14] = ( (unsigned char)((( (int)(X->b->__get(14)) ) ^ ( (int)(block->b->__get(14)) ))) );
+HXDLIN( 162)				X->b[15] = ( (unsigned char)((( (int)(X->b->__get(15)) ) ^ ( (int)(block->b->__get(15)) ))) );
+            			}
+HXLINE( 164)			X = ::haxe::crypto::mode::GCM_obj::gmult(X,H);
+HXLINE( 166)			pos = (pos + 16);
+HXLINE( 167)			remaining = (remaining - 16);
+            		}
+HXLINE( 170)		return X;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(GCM_obj,ghashUpdate,return )
+
+ ::haxe::io::Bytes GCM_obj::gmult( ::haxe::io::Bytes X, ::haxe::io::Bytes Y){
+            	HX_STACKFRAME(&_hx_pos_5bebb91a7cb31db4_182_gmult)
+HXLINE( 183)		 ::haxe::io::Bytes Z = ::haxe::io::Bytes_obj::alloc(16);
+HXLINE( 184)		 ::haxe::io::Bytes V = Y->sub(0,16);
+HXLINE( 186)		{
+HXLINE( 186)			int _g = 0;
+HXDLIN( 186)			while((_g < 128)){
+HXLINE( 186)				_g = (_g + 1);
+HXDLIN( 186)				int i = (_g - 1);
+HXLINE( 191)				if (((::hx::UShr(( (int)(X->b->__get(::hx::UShr(i,3))) ),(7 - (i & 7))) & 1) == 1)) {
+HXLINE( 193)					Z->b[0] = ( (unsigned char)((( (int)(Z->b->__get(0)) ) ^ ( (int)(V->b->__get(0)) ))) );
+HXDLIN( 193)					Z->b[1] = ( (unsigned char)((( (int)(Z->b->__get(1)) ) ^ ( (int)(V->b->__get(1)) ))) );
+HXDLIN( 193)					Z->b[2] = ( (unsigned char)((( (int)(Z->b->__get(2)) ) ^ ( (int)(V->b->__get(2)) ))) );
+HXDLIN( 193)					Z->b[3] = ( (unsigned char)((( (int)(Z->b->__get(3)) ) ^ ( (int)(V->b->__get(3)) ))) );
+HXDLIN( 193)					Z->b[4] = ( (unsigned char)((( (int)(Z->b->__get(4)) ) ^ ( (int)(V->b->__get(4)) ))) );
+HXDLIN( 193)					Z->b[5] = ( (unsigned char)((( (int)(Z->b->__get(5)) ) ^ ( (int)(V->b->__get(5)) ))) );
+HXDLIN( 193)					Z->b[6] = ( (unsigned char)((( (int)(Z->b->__get(6)) ) ^ ( (int)(V->b->__get(6)) ))) );
+HXDLIN( 193)					Z->b[7] = ( (unsigned char)((( (int)(Z->b->__get(7)) ) ^ ( (int)(V->b->__get(7)) ))) );
+HXDLIN( 193)					Z->b[8] = ( (unsigned char)((( (int)(Z->b->__get(8)) ) ^ ( (int)(V->b->__get(8)) ))) );
+HXDLIN( 193)					Z->b[9] = ( (unsigned char)((( (int)(Z->b->__get(9)) ) ^ ( (int)(V->b->__get(9)) ))) );
+HXDLIN( 193)					Z->b[10] = ( (unsigned char)((( (int)(Z->b->__get(10)) ) ^ ( (int)(V->b->__get(10)) ))) );
+HXDLIN( 193)					Z->b[11] = ( (unsigned char)((( (int)(Z->b->__get(11)) ) ^ ( (int)(V->b->__get(11)) ))) );
+HXDLIN( 193)					Z->b[12] = ( (unsigned char)((( (int)(Z->b->__get(12)) ) ^ ( (int)(V->b->__get(12)) ))) );
+HXDLIN( 193)					Z->b[13] = ( (unsigned char)((( (int)(Z->b->__get(13)) ) ^ ( (int)(V->b->__get(13)) ))) );
+HXDLIN( 193)					Z->b[14] = ( (unsigned char)((( (int)(Z->b->__get(14)) ) ^ ( (int)(V->b->__get(14)) ))) );
+HXDLIN( 193)					Z->b[15] = ( (unsigned char)((( (int)(Z->b->__get(15)) ) ^ ( (int)(V->b->__get(15)) ))) );
+            				}
+HXLINE( 197)				int lsb = (( (int)(V->b->__get(15)) ) & 1);
+HXLINE( 199)				int carry = 0;
+HXLINE( 200)				{
+HXLINE( 200)					int _g1 = 0;
+HXDLIN( 200)					while((_g1 < 16)){
+HXLINE( 200)						_g1 = (_g1 + 1);
+HXDLIN( 200)						int j = (_g1 - 1);
+HXLINE( 201)						int b = ( (int)(V->b->__get(j)) );
+HXLINE( 203)						V->b[j] = ( (unsigned char)((::hx::UShr(b,1) | carry)) );
+HXLINE( 204)						carry = ((b & 1) << 7);
+            					}
+            				}
+HXLINE( 207)				if ((lsb == 1)) {
+HXLINE( 208)					V->b[0] = ( (unsigned char)((( (int)(V->b->__get(0)) ) ^ 225)) );
+            				}
+            			}
+            		}
+HXLINE( 212)		return Z;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(GCM_obj,gmult,return )
+
+bool GCM_obj::constantTimeCompare( ::haxe::io::Bytes a, ::haxe::io::Bytes b){
+            	HX_STACKFRAME(&_hx_pos_5bebb91a7cb31db4_215_constantTimeCompare)
+HXLINE( 216)		if ((a->length != b->length)) {
+HXLINE( 217)			return false;
+            		}
+HXLINE( 218)		int result = 0;
+HXLINE( 219)		int len = a->length;
+HXLINE( 220)		{
+HXLINE( 220)			int _g = 0;
+HXDLIN( 220)			while((_g < len)){
+HXLINE( 220)				_g = (_g + 1);
+HXDLIN( 220)				int i = (_g - 1);
+HXLINE( 221)				result = (result | (( (int)(a->b->__get(i)) ) ^ ( (int)(b->b->__get(i)) )));
+            			}
+            		}
+HXLINE( 223)		return (result == 0);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(GCM_obj,constantTimeCompare,return )
+
+
+GCM_obj::GCM_obj()
+{
+}
+
+bool GCM_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 5:
+		if (HX_FIELD_EQ(inName,"ghash") ) { outValue = ghash_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"gmult") ) { outValue = gmult_dyn(); return true; }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"encrypt") ) { outValue = encrypt_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { outValue = decrypt_dyn(); return true; }
+		break;
+	case 11:
+		if (HX_FIELD_EQ(inName,"calculateJ0") ) { outValue = calculateJ0_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"ghashUpdate") ) { outValue = ghashUpdate_dyn(); return true; }
+		break;
+	case 12:
+		if (HX_FIELD_EQ(inName,"calculateTag") ) { outValue = calculateTag_dyn(); return true; }
+		break;
+	case 16:
+		if (HX_FIELD_EQ(inName,"incrementCounter") ) { outValue = incrementCounter_dyn(); return true; }
+		break;
+	case 19:
+		if (HX_FIELD_EQ(inName,"constantTimeCompare") ) { outValue = constantTimeCompare_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *GCM_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *GCM_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class GCM_obj::__mClass;
+
+static ::String GCM_obj_sStaticFields[] = {
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	HX_("calculateJ0",8c,7b,47,25),
+	HX_("incrementCounter",8d,84,7b,35),
+	HX_("calculateTag",94,60,4c,79),
+	HX_("ghash",b5,ef,4d,93),
+	HX_("ghashUpdate",9e,1f,32,37),
+	HX_("gmult",d7,27,ab,96),
+	HX_("constantTimeCompare",14,09,e0,8f),
+	::String(null())
+};
+
+void GCM_obj::__register()
+{
+	GCM_obj _hx_dummy;
+	GCM_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.GCM",ab,10,45,f1);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &GCM_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(GCM_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< GCM_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = GCM_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = GCM_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/GCMSIV.cpp b/Sources/c_borogove/src/haxe/crypto/mode/GCMSIV.cpp
new file mode 100644
index 0000000..40154e3
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/GCMSIV.cpp
@@ -0,0 +1,625 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_38344beec7696400
+#define INCLUDED_38344beec7696400
+#include "cpp/Int64.h"
+#endif
+#ifndef INCLUDED_95f339a1d026d52c
+#define INCLUDED_95f339a1d026d52c
+#include "hxMath.h"
+#endif
+#ifndef INCLUDED_Std
+#include <Std.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_GCMSIV
+#include <haxe/crypto/mode/GCMSIV.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_b8923f5a04908e37_26_encrypt,"haxe.crypto.mode.GCMSIV","encrypt",0x8db1642c,"haxe.crypto.mode.GCMSIV.encrypt","haxe/crypto/mode/GCMSIV.hx",26,0xdbb6aca8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b8923f5a04908e37_61_decrypt,"haxe.crypto.mode.GCMSIV","decrypt",0xcae5ae14,"haxe.crypto.mode.GCMSIV.decrypt","haxe/crypto/mode/GCMSIV.hx",61,0xdbb6aca8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b8923f5a04908e37_96_subKey,"haxe.crypto.mode.GCMSIV","subKey",0xdd80b818,"haxe.crypto.mode.GCMSIV.subKey","haxe/crypto/mode/GCMSIV.hx",96,0xdbb6aca8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b8923f5a04908e37_113_hash,"haxe.crypto.mode.GCMSIV","hash",0xc737f7a7,"haxe.crypto.mode.GCMSIV.hash","haxe/crypto/mode/GCMSIV.hx",113,0xdbb6aca8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b8923f5a04908e37_132_initPolyval,"haxe.crypto.mode.GCMSIV","initPolyval",0x2f309c2c,"haxe.crypto.mode.GCMSIV.initPolyval","haxe/crypto/mode/GCMSIV.hx",132,0xdbb6aca8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b8923f5a04908e37_174_updateBlockPolyval,"haxe.crypto.mode.GCMSIV","updateBlockPolyval",0xf5bbab8a,"haxe.crypto.mode.GCMSIV.updateBlockPolyval","haxe/crypto/mode/GCMSIV.hx",174,0xdbb6aca8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b8923f5a04908e37_248_aesCTR,"haxe.crypto.mode.GCMSIV","aesCTR",0x7fe170eb,"haxe.crypto.mode.GCMSIV.aesCTR","haxe/crypto/mode/GCMSIV.hx",248,0xdbb6aca8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b8923f5a04908e37_6_boot,"haxe.crypto.mode.GCMSIV","boot",0xc34b4c0b,"haxe.crypto.mode.GCMSIV.boot","haxe/crypto/mode/GCMSIV.hx",6,0xdbb6aca8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b8923f5a04908e37_7_boot,"haxe.crypto.mode.GCMSIV","boot",0xc34b4c0b,"haxe.crypto.mode.GCMSIV.boot","haxe/crypto/mode/GCMSIV.hx",7,0xdbb6aca8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b8923f5a04908e37_8_boot,"haxe.crypto.mode.GCMSIV","boot",0xc34b4c0b,"haxe.crypto.mode.GCMSIV.boot","haxe/crypto/mode/GCMSIV.hx",8,0xdbb6aca8)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void GCMSIV_obj::__construct() { }
+
+Dynamic GCMSIV_obj::__CreateEmpty() { return new GCMSIV_obj; }
+
+void *GCMSIV_obj::_hx_vtable = 0;
+
+Dynamic GCMSIV_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< GCMSIV_obj > _hx_result = new GCMSIV_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool GCMSIV_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x5dcabbf9;
+}
+
+int GCMSIV_obj::AES_BLOCK_SIZE;
+
+int GCMSIV_obj::NONCE_SIZE;
+
+::cpp::Int64 GCMSIV_obj::E;
+
+::cpp::Int64 GCMSIV_obj::h0;
+
+::cpp::Int64 GCMSIV_obj::h1;
+
+::cpp::Int64 GCMSIV_obj::s0;
+
+::cpp::Int64 GCMSIV_obj::s1;
+
+ ::haxe::io::Bytes GCMSIV_obj::encrypt( ::haxe::io::Bytes key, ::haxe::io::Bytes nonce, ::haxe::io::Bytes plaintext, ::haxe::io::Bytes aad, ::Dynamic encryptBlock, ::Dynamic initKey){
+            	HX_STACKFRAME(&_hx_pos_b8923f5a04908e37_26_encrypt)
+HXLINE(  27)		bool _hx_tmp;
+HXDLIN(  27)		if ((key->length != 16)) {
+HXLINE(  27)			_hx_tmp = (key->length != 32);
+            		}
+            		else {
+HXLINE(  27)			_hx_tmp = false;
+            		}
+HXDLIN(  27)		if (_hx_tmp) {
+HXLINE(  28)			HX_STACK_DO_THROW(HX_("Invalid key length",f0,9b,61,c1));
+            		}
+HXLINE(  31)		if ((nonce->length != ::haxe::crypto::mode::GCMSIV_obj::NONCE_SIZE)) {
+HXLINE(  32)			HX_STACK_DO_THROW(HX_("Invalid nonce length",e0,9e,b8,14));
+            		}
+HXLINE(  34)		bool aes128 = (key->length == 16);
+HXLINE(  35)		 ::haxe::io::Bytes authKey = ::haxe::crypto::mode::GCMSIV_obj::subKey(0,1,nonce,encryptBlock);
+HXLINE(  36)		int encKey;
+HXDLIN(  36)		if (aes128) {
+HXLINE(  36)			encKey = 3;
+            		}
+            		else {
+HXLINE(  36)			encKey = 5;
+            		}
+HXDLIN(  36)		 ::haxe::io::Bytes encKey1 = ::haxe::crypto::mode::GCMSIV_obj::subKey(2,encKey,nonce,encryptBlock);
+HXLINE(  37)		initKey(encKey1,null());
+HXLINE(  38)		 ::haxe::io::Bytes tag = ::haxe::crypto::mode::GCMSIV_obj::hash(encKey1,authKey,nonce,plaintext,aad,encryptBlock);
+HXLINE(  39)		 ::haxe::io::Bytes output = ::haxe::io::Bytes_obj::alloc((plaintext->length + ::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE));
+HXLINE(  40)		if ((plaintext->length > 0)) {
+HXLINE(  41)			output->blit(0,plaintext,0,plaintext->length);
+HXLINE(  42)			::haxe::crypto::mode::GCMSIV_obj::aesCTR(encKey1,tag,plaintext,output,encryptBlock);
+            		}
+HXLINE(  45)		initKey(key,nonce);
+HXLINE(  46)		output->blit(plaintext->length,tag,0,::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+HXLINE(  47)		return output;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC6(GCMSIV_obj,encrypt,return )
+
+ ::haxe::io::Bytes GCMSIV_obj::decrypt( ::haxe::io::Bytes key, ::haxe::io::Bytes nonce, ::haxe::io::Bytes ciphertext, ::haxe::io::Bytes aad, ::Dynamic encryptBlock, ::Dynamic initKey){
+            	HX_STACKFRAME(&_hx_pos_b8923f5a04908e37_61_decrypt)
+HXLINE(  62)		bool _hx_tmp;
+HXDLIN(  62)		if ((key->length != 16)) {
+HXLINE(  62)			_hx_tmp = (key->length != 32);
+            		}
+            		else {
+HXLINE(  62)			_hx_tmp = false;
+            		}
+HXDLIN(  62)		if (_hx_tmp) {
+HXLINE(  63)			HX_STACK_DO_THROW(HX_("Invalid key length",f0,9b,61,c1));
+            		}
+HXLINE(  66)		if ((nonce->length != ::haxe::crypto::mode::GCMSIV_obj::NONCE_SIZE)) {
+HXLINE(  67)			HX_STACK_DO_THROW(HX_("Invalid nonce length",e0,9e,b8,14));
+            		}
+HXLINE(  70)		if ((ciphertext->length < ::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE)) {
+HXLINE(  71)			HX_STACK_DO_THROW(HX_("Invalid ciphertext length",45,cc,1b,0f));
+            		}
+HXLINE(  73)		bool aes128 = (key->length == 16);
+HXLINE(  74)		int ctLen = (ciphertext->length - ::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+HXLINE(  76)		 ::haxe::io::Bytes c = ciphertext->sub(0,ctLen);
+HXLINE(  77)		 ::haxe::io::Bytes tag = ciphertext->sub(ctLen,::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+HXLINE(  79)		 ::haxe::io::Bytes authKey = ::haxe::crypto::mode::GCMSIV_obj::subKey(0,1,nonce,encryptBlock);
+HXLINE(  80)		int encKey;
+HXDLIN(  80)		if (aes128) {
+HXLINE(  80)			encKey = 3;
+            		}
+            		else {
+HXLINE(  80)			encKey = 5;
+            		}
+HXDLIN(  80)		 ::haxe::io::Bytes encKey1 = ::haxe::crypto::mode::GCMSIV_obj::subKey(2,encKey,nonce,encryptBlock);
+HXLINE(  81)		initKey(encKey1,null());
+HXLINE(  82)		 ::haxe::io::Bytes plaintext = ::haxe::io::Bytes_obj::alloc(ctLen);
+HXLINE(  83)		if ((ctLen > 0)) {
+HXLINE(  84)			plaintext->blit(0,c,0,ctLen);
+HXLINE(  85)			::haxe::crypto::mode::GCMSIV_obj::aesCTR(encKey1,tag,c,plaintext,encryptBlock);
+            		}
+HXLINE(  88)		 ::haxe::io::Bytes actualTag = ::haxe::crypto::mode::GCMSIV_obj::hash(encKey1,authKey,nonce,plaintext,aad,encryptBlock);
+HXLINE(  89)		initKey(key,nonce);
+HXLINE(  90)		bool _hx_tmp1;
+HXDLIN(  90)		if ((tag->length != actualTag->length)) {
+HXLINE(  90)			_hx_tmp1 = false;
+            		}
+            		else {
+HXLINE(  90)			int result = 0;
+HXDLIN(  90)			{
+HXLINE(  90)				int _g = 0;
+HXDLIN(  90)				int _g1 = tag->length;
+HXDLIN(  90)				while((_g < _g1)){
+HXLINE(  90)					_g = (_g + 1);
+HXDLIN(  90)					int i = (_g - 1);
+HXDLIN(  90)					result = (result | (( (int)(tag->b->__get(i)) ) ^ ( (int)(actualTag->b->__get(i)) )));
+            				}
+            			}
+HXDLIN(  90)			_hx_tmp1 = (result == 0);
+            		}
+HXDLIN(  90)		if (!(_hx_tmp1)) {
+HXLINE(  91)			return null();
+            		}
+HXLINE(  93)		return plaintext;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC6(GCMSIV_obj,decrypt,return )
+
+ ::haxe::io::Bytes GCMSIV_obj::subKey(int ctrStart,int ctrEnd, ::haxe::io::Bytes nonce, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_b8923f5a04908e37_96_subKey)
+HXLINE(  97)		 ::haxe::io::Bytes counter = ::haxe::io::Bytes_obj::alloc(::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+HXLINE(  98)		counter->blit((counter->length - nonce->length),nonce,0,nonce->length);
+HXLINE( 101)		 ::haxe::io::Bytes key = ::haxe::io::Bytes_obj::alloc((((ctrEnd - ctrStart) + 1) << 3));
+HXLINE( 102)		 ::haxe::io::Bytes block = ::haxe::io::Bytes_obj::alloc(::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+HXLINE( 104)		{
+HXLINE( 104)			int _g = ctrStart;
+HXDLIN( 104)			int _g1 = (ctrEnd + 1);
+HXDLIN( 104)			while((_g < _g1)){
+HXLINE( 104)				_g = (_g + 1);
+HXDLIN( 104)				int i = (_g - 1);
+HXLINE( 105)				{
+HXLINE( 105)					counter->b[0] = ( (unsigned char)((i & 255)) );
+HXDLIN( 105)					counter->b[1] = ( (unsigned char)(((i >> 8) & 255)) );
+HXDLIN( 105)					counter->b[2] = ( (unsigned char)(((i >> 16) & 255)) );
+HXDLIN( 105)					counter->b[3] = ( (unsigned char)(((i >> 24) & 255)) );
+            				}
+HXLINE( 106)				encryptBlock(counter,0,block,0);
+HXLINE( 108)				key->blit(((i - ctrStart) << 3),block,0,8);
+            			}
+            		}
+HXLINE( 110)		return key;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(GCMSIV_obj,subKey,return )
+
+ ::haxe::io::Bytes GCMSIV_obj::hash( ::haxe::io::Bytes encKey, ::haxe::io::Bytes authKey, ::haxe::io::Bytes nonce, ::haxe::io::Bytes plaintext, ::haxe::io::Bytes aad, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_b8923f5a04908e37_113_hash)
+HXLINE( 114)		::haxe::crypto::mode::GCMSIV_obj::initPolyval(authKey);
+HXLINE( 115)		{
+HXLINE( 115)			int extra = (aad->length & 15);
+HXDLIN( 115)			int fullBlocks = (aad->length - extra);
+HXDLIN( 115)			int i = 0;
+HXDLIN( 115)			while((i < fullBlocks)){
+HXLINE( 115)				::haxe::crypto::mode::GCMSIV_obj::updateBlockPolyval(aad,i);
+HXDLIN( 115)				i = (i + ::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+            			}
+HXDLIN( 115)			if ((extra != 0)) {
+HXLINE( 115)				 ::haxe::io::Bytes block = ::haxe::io::Bytes_obj::alloc(::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+HXDLIN( 115)				block->blit(0,aad,fullBlocks,extra);
+HXDLIN( 115)				::haxe::crypto::mode::GCMSIV_obj::updateBlockPolyval(block,0);
+            			}
+            		}
+HXLINE( 116)		{
+HXLINE( 116)			int extra1 = (plaintext->length & 15);
+HXDLIN( 116)			int fullBlocks1 = (plaintext->length - extra1);
+HXDLIN( 116)			int i1 = 0;
+HXDLIN( 116)			while((i1 < fullBlocks1)){
+HXLINE( 116)				::haxe::crypto::mode::GCMSIV_obj::updateBlockPolyval(plaintext,i1);
+HXDLIN( 116)				i1 = (i1 + ::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+            			}
+HXDLIN( 116)			if ((extra1 != 0)) {
+HXLINE( 116)				 ::haxe::io::Bytes block1 = ::haxe::io::Bytes_obj::alloc(::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+HXDLIN( 116)				block1->blit(0,plaintext,fullBlocks1,extra1);
+HXDLIN( 116)				::haxe::crypto::mode::GCMSIV_obj::updateBlockPolyval(block1,0);
+            			}
+            		}
+HXLINE( 117)		 ::haxe::io::Bytes block2 = ::haxe::io::Bytes_obj::alloc(::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+HXLINE( 118)		{
+HXLINE( 118)			int hi = ((aad->length << 3) & -1);
+HXDLIN( 118)			block2->b[0] = ( (unsigned char)((hi & 255)) );
+HXDLIN( 118)			block2->b[1] = ( (unsigned char)(((hi >> 8) & 255)) );
+HXDLIN( 118)			block2->b[2] = ( (unsigned char)(((hi >> 16) & 255)) );
+HXDLIN( 118)			block2->b[3] = ( (unsigned char)(((hi >> 24) & 255)) );
+HXDLIN( 118)			block2->b[4] = ( (unsigned char)(0) );
+HXDLIN( 118)			block2->b[5] = ( (unsigned char)(0) );
+HXDLIN( 118)			block2->b[6] = ( (unsigned char)(0) );
+HXDLIN( 118)			block2->b[7] = ( (unsigned char)(0) );
+            		}
+HXLINE( 119)		{
+HXLINE( 119)			int hi1 = ((plaintext->length << 3) & -1);
+HXDLIN( 119)			block2->b[8] = ( (unsigned char)((hi1 & 255)) );
+HXDLIN( 119)			block2->b[9] = ( (unsigned char)(((hi1 >> 8) & 255)) );
+HXDLIN( 119)			block2->b[10] = ( (unsigned char)(((hi1 >> 16) & 255)) );
+HXDLIN( 119)			block2->b[11] = ( (unsigned char)(((hi1 >> 24) & 255)) );
+HXDLIN( 119)			block2->b[12] = ( (unsigned char)(0) );
+HXDLIN( 119)			block2->b[13] = ( (unsigned char)(0) );
+HXDLIN( 119)			block2->b[14] = ( (unsigned char)(0) );
+HXDLIN( 119)			block2->b[15] = ( (unsigned char)(0) );
+            		}
+HXLINE( 120)		::haxe::crypto::mode::GCMSIV_obj::updateBlockPolyval(block2,0);
+HXLINE( 121)		{
+HXLINE( 121)			{
+HXLINE( 121)				::cpp::Int64 n = ::haxe::crypto::mode::GCMSIV_obj::s1;
+HXDLIN( 121)				int hi2 = _hx_int64_high(n);
+HXDLIN( 121)				int lo = _hx_int64_low(n);
+HXDLIN( 121)				block2->b[0] = ( (unsigned char)(lo) );
+HXDLIN( 121)				block2->b[1] = ( (unsigned char)(((lo >> 8) & 255)) );
+HXDLIN( 121)				block2->b[2] = ( (unsigned char)(((lo >> 16) & 255)) );
+HXDLIN( 121)				block2->b[3] = ( (unsigned char)(((lo >> 24) & 255)) );
+HXDLIN( 121)				block2->b[4] = ( (unsigned char)(hi2) );
+HXDLIN( 121)				block2->b[5] = ( (unsigned char)(((hi2 >> 8) & 255)) );
+HXDLIN( 121)				block2->b[6] = ( (unsigned char)(((hi2 >> 16) & 255)) );
+HXDLIN( 121)				block2->b[7] = ( (unsigned char)(((hi2 >> 24) & 255)) );
+            			}
+HXDLIN( 121)			{
+HXLINE( 121)				::cpp::Int64 n1 = ::haxe::crypto::mode::GCMSIV_obj::s0;
+HXDLIN( 121)				int hi3 = _hx_int64_high(n1);
+HXDLIN( 121)				int lo1 = _hx_int64_low(n1);
+HXDLIN( 121)				block2->b[8] = ( (unsigned char)(lo1) );
+HXDLIN( 121)				block2->b[9] = ( (unsigned char)(((lo1 >> 8) & 255)) );
+HXDLIN( 121)				block2->b[10] = ( (unsigned char)(((lo1 >> 16) & 255)) );
+HXDLIN( 121)				block2->b[11] = ( (unsigned char)(((lo1 >> 24) & 255)) );
+HXDLIN( 121)				block2->b[12] = ( (unsigned char)(hi3) );
+HXDLIN( 121)				block2->b[13] = ( (unsigned char)(((hi3 >> 8) & 255)) );
+HXDLIN( 121)				block2->b[14] = ( (unsigned char)(((hi3 >> 16) & 255)) );
+HXDLIN( 121)				block2->b[15] = ( (unsigned char)(((hi3 >> 24) & 255)) );
+            			}
+            		}
+HXLINE( 123)		{
+HXLINE( 123)			int _g = 0;
+HXDLIN( 123)			int _g1 = nonce->length;
+HXDLIN( 123)			while((_g < _g1)){
+HXLINE( 123)				_g = (_g + 1);
+HXDLIN( 123)				int i2 = (_g - 1);
+HXLINE( 124)				block2->b[i2] = ( (unsigned char)((( (int)(block2->b->__get(i2)) ) ^ ( (int)(nonce->b->__get(i2)) ))) );
+            			}
+            		}
+HXLINE( 126)		block2->b[(::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE - 1)] = ( (unsigned char)((( (int)(block2->b->__get((::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE - 1))) ) & 127)) );
+HXLINE( 127)		 ::haxe::io::Bytes result = ::haxe::io::Bytes_obj::alloc(::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+HXLINE( 128)		encryptBlock(block2,0,result,0);
+HXLINE( 129)		return result;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC6(GCMSIV_obj,hash,return )
+
+void GCMSIV_obj::initPolyval( ::haxe::io::Bytes authKey){
+            	HX_STACKFRAME(&_hx_pos_b8923f5a04908e37_132_initPolyval)
+HXLINE( 133)		int v3 = ((((( (int)(authKey->b->__get(0)) ) & 255) | ((( (int)(authKey->b->__get(1)) ) & 255) << 8)) | ((( (int)(authKey->b->__get(2)) ) & 255) << 16)) | (( (int)(authKey->b->__get(3)) ) << 24));
+HXLINE( 134)		int v2 = ((((( (int)(authKey->b->__get(4)) ) & 255) | ((( (int)(authKey->b->__get(5)) ) & 255) << 8)) | ((( (int)(authKey->b->__get(6)) ) & 255) << 16)) | (( (int)(authKey->b->__get(7)) ) << 24));
+HXLINE( 135)		int v1 = ((((( (int)(authKey->b->__get(8)) ) & 255) | ((( (int)(authKey->b->__get(9)) ) & 255) << 8)) | ((( (int)(authKey->b->__get(10)) ) & 255) << 16)) | (( (int)(authKey->b->__get(11)) ) << 24));
+HXLINE( 136)		int v0 = ((((( (int)(authKey->b->__get(12)) ) & 255) | ((( (int)(authKey->b->__get(13)) ) & 255) << 8)) | ((( (int)(authKey->b->__get(14)) ) & 255) << 16)) | (( (int)(authKey->b->__get(15)) ) << 24));
+HXLINE( 137)		int b = v0;
+HXLINE( 138)		v0 = ::hx::UShr(b,1);
+HXLINE( 139)		int c = (b << 31);
+HXLINE( 140)		b = v1;
+HXLINE( 141)		v1 = (::hx::UShr(b,1) | c);
+HXLINE( 142)		c = (b << 31);
+HXLINE( 143)		b = v2;
+HXLINE( 144)		v2 = (::hx::UShr(b,1) | c);
+HXLINE( 145)		c = (b << 31);
+HXLINE( 146)		b = v3;
+HXLINE( 147)		v3 = (::hx::UShr(b,1) | c);
+HXLINE( 150)		v0 = (v0 ^ (((b << 31) >> 8) & -520093696));
+HXLINE( 151)		::haxe::crypto::mode::GCMSIV_obj::h0 = _hx_int64_make(v0,v1);
+HXLINE( 152)		::haxe::crypto::mode::GCMSIV_obj::h1 = _hx_int64_make(v2,v3);
+HXLINE( 153)		::haxe::crypto::mode::GCMSIV_obj::s0 = _hx_int64_make(0,0);
+HXLINE( 154)		::haxe::crypto::mode::GCMSIV_obj::s1 = _hx_int64_make(0,0);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(GCMSIV_obj,initPolyval,(void))
+
+void GCMSIV_obj::updateBlockPolyval( ::haxe::io::Bytes b,int offset){
+            	HX_STACKFRAME(&_hx_pos_b8923f5a04908e37_174_updateBlockPolyval)
+HXLINE( 175)		int lo = (( (int)(b->b->__get(offset)) ) & 255);
+HXDLIN( 175)		lo = (lo | ((( (int)(b->b->__get((offset + 1))) ) & 255) << 8));
+HXDLIN( 175)		lo = (lo | ((( (int)(b->b->__get((offset + 2))) ) & 255) << 16));
+HXDLIN( 175)		lo = (lo | (( (int)(b->b->__get((offset + 3))) ) << 24));
+HXDLIN( 175)		int hi = (( (int)(b->b->__get((offset + 4))) ) & 255);
+HXDLIN( 175)		hi = (hi | ((( (int)(b->b->__get((offset + 5))) ) & 255) << 8));
+HXDLIN( 175)		hi = (hi | ((( (int)(b->b->__get((offset + 6))) ) & 255) << 16));
+HXDLIN( 175)		hi = (hi | (( (int)(b->b->__get((offset + 7))) ) << 24));
+HXDLIN( 175)		::cpp::Int64 result = _hx_int64_make(hi,lo);
+HXLINE( 176)		int offset1 = (offset + 8);
+HXDLIN( 176)		int lo1 = (( (int)(b->b->__get(offset1)) ) & 255);
+HXDLIN( 176)		lo1 = (lo1 | ((( (int)(b->b->__get((offset1 + 1))) ) & 255) << 8));
+HXDLIN( 176)		lo1 = (lo1 | ((( (int)(b->b->__get((offset1 + 2))) ) & 255) << 16));
+HXDLIN( 176)		lo1 = (lo1 | (( (int)(b->b->__get((offset1 + 3))) ) << 24));
+HXDLIN( 176)		int hi1 = (( (int)(b->b->__get((offset1 + 4))) ) & 255);
+HXDLIN( 176)		hi1 = (hi1 | ((( (int)(b->b->__get((offset1 + 5))) ) & 255) << 8));
+HXDLIN( 176)		hi1 = (hi1 | ((( (int)(b->b->__get((offset1 + 6))) ) & 255) << 16));
+HXDLIN( 176)		hi1 = (hi1 | (( (int)(b->b->__get((offset1 + 7))) ) << 24));
+HXDLIN( 176)		::cpp::Int64 result1 = _hx_int64_make(hi1,lo1);
+HXLINE( 177)		::cpp::Int64 x0 = _hx_int64_xor(::haxe::crypto::mode::GCMSIV_obj::s1,result);
+HXLINE( 178)		::cpp::Int64 x1 = _hx_int64_xor(::haxe::crypto::mode::GCMSIV_obj::s0,result1);
+HXLINE( 179)		int high = _hx_int64_high(::haxe::crypto::mode::GCMSIV_obj::h0);
+HXDLIN( 179)		::cpp::Int64 v0 = _hx_int64_make(high,_hx_int64_low(::haxe::crypto::mode::GCMSIV_obj::h0));
+HXLINE( 180)		int high1 = _hx_int64_high(::haxe::crypto::mode::GCMSIV_obj::h1);
+HXDLIN( 180)		::cpp::Int64 v1 = _hx_int64_make(high1,_hx_int64_low(::haxe::crypto::mode::GCMSIV_obj::h1));
+HXLINE( 181)		::cpp::Int64 z0 = _hx_int64_make(0,0);
+HXLINE( 182)		::cpp::Int64 z1 = _hx_int64_make(0,0);
+HXLINE( 184)		{
+HXLINE( 184)			int _g = 0;
+HXDLIN( 184)			while((_g < 64)){
+HXLINE( 184)				_g = (_g + 1);
+HXLINE( 185)				::cpp::Int64 m = _hx_int64_shr(x1,63);
+HXLINE( 186)				if (_hx_int64_neq(m,( (::cpp::Int64)(0) ))) {
+HXLINE( 187)					z0 = _hx_int64_xor(z0,v0);
+HXLINE( 188)					z1 = _hx_int64_xor(z1,v1);
+            				}
+HXLINE( 190)				::cpp::Int64 v1SignBit = _hx_int64_and(v1,( (::cpp::Int64)(1) ));
+HXLINE( 191)				::cpp::Int64 c = _hx_int64_and(v0,( (::cpp::Int64)(1) ));
+HXLINE( 193)				int high2 = ::hx::UShr(_hx_int64_high(v0),1);
+HXDLIN( 193)				int low = ::hx::UShr(_hx_int64_low(v0),1);
+HXDLIN( 193)				v0 = _hx_int64_make(high2,(low | ((_hx_int64_high(v0) & 1) << 31)));
+HXLINE( 194)				int high3 = ::hx::UShr(_hx_int64_high(v1),1);
+HXDLIN( 194)				int low1 = ::hx::UShr(_hx_int64_low(v1),1);
+HXDLIN( 194)				v1 = _hx_int64_make(high3,(low1 | ((_hx_int64_high(v1) & 1) << 31)));
+HXLINE( 195)				v1 = _hx_int64_xor(v1,_hx_int64_shl(c,63));
+HXLINE( 196)				if (_hx_int64_neq(v1SignBit,( (::cpp::Int64)(0) ))) {
+HXLINE( 197)					v0 = _hx_int64_xor(v0,::haxe::crypto::mode::GCMSIV_obj::E);
+            				}
+HXLINE( 199)				x1 = _hx_int64_shl(x1,1);
+            			}
+            		}
+HXLINE( 202)		{
+HXLINE( 202)			int _g1 = 64;
+HXDLIN( 202)			while((_g1 < 127)){
+HXLINE( 202)				_g1 = (_g1 + 1);
+HXLINE( 203)				::cpp::Int64 m1 = _hx_int64_shr(x0,63);
+HXLINE( 204)				if (_hx_int64_neq(m1,( (::cpp::Int64)(0) ))) {
+HXLINE( 205)					z0 = _hx_int64_xor(z0,v0);
+HXLINE( 206)					z1 = _hx_int64_xor(z1,v1);
+            				}
+HXLINE( 208)				::cpp::Int64 v1SignBit1 = _hx_int64_and(v1,( (::cpp::Int64)(1) ));
+HXLINE( 209)				::cpp::Int64 c1 = _hx_int64_and(v0,( (::cpp::Int64)(1) ));
+HXLINE( 211)				int high4 = ::hx::UShr(_hx_int64_high(v0),1);
+HXDLIN( 211)				int low2 = ::hx::UShr(_hx_int64_low(v0),1);
+HXDLIN( 211)				v0 = _hx_int64_make(high4,(low2 | ((_hx_int64_high(v0) & 1) << 31)));
+HXLINE( 212)				int high5 = ::hx::UShr(_hx_int64_high(v1),1);
+HXDLIN( 212)				int low3 = ::hx::UShr(_hx_int64_low(v1),1);
+HXDLIN( 212)				v1 = _hx_int64_make(high5,(low3 | ((_hx_int64_high(v1) & 1) << 31)));
+HXLINE( 213)				v1 = _hx_int64_xor(v1,_hx_int64_shl(c1,63));
+HXLINE( 215)				if (_hx_int64_neq(v1SignBit1,( (::cpp::Int64)(0) ))) {
+HXLINE( 216)					v0 = _hx_int64_xor(v0,::haxe::crypto::mode::GCMSIV_obj::E);
+            				}
+HXLINE( 218)				x0 = _hx_int64_shl(x0,1);
+            			}
+            		}
+HXLINE( 220)		::cpp::Int64 finalM = _hx_int64_shr(x0,63);
+HXLINE( 221)		if (_hx_int64_neq(finalM,( (::cpp::Int64)(0) ))) {
+HXLINE( 222)			::haxe::crypto::mode::GCMSIV_obj::s0 = _hx_int64_xor(z0,_hx_int64_and(v0,finalM));
+HXLINE( 223)			::haxe::crypto::mode::GCMSIV_obj::s1 = _hx_int64_xor(z1,_hx_int64_and(v1,finalM));
+            		}
+            		else {
+HXLINE( 225)			::haxe::crypto::mode::GCMSIV_obj::s0 = z0;
+HXLINE( 226)			::haxe::crypto::mode::GCMSIV_obj::s1 = z1;
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(GCMSIV_obj,updateBlockPolyval,(void))
+
+void GCMSIV_obj::aesCTR( ::haxe::io::Bytes key, ::haxe::io::Bytes tag, ::haxe::io::Bytes input, ::haxe::io::Bytes output, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_b8923f5a04908e37_248_aesCTR)
+HXLINE( 249)		 ::haxe::io::Bytes counter = ::haxe::io::Bytes_obj::alloc(tag->length);
+HXLINE( 250)		counter->blit(0,tag,0,tag->length);
+HXLINE( 251)		counter->b[(counter->length - 1)] = ( (unsigned char)((( (int)(counter->b->__get((counter->length - 1))) ) | 128)) );
+HXLINE( 253)		 ::haxe::io::Bytes k = ::haxe::io::Bytes_obj::alloc(::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+HXLINE( 254)		int i = 0;
+HXLINE( 255)		while((i < input->length)){
+HXLINE( 256)			encryptBlock(counter,0,k,0);
+HXLINE( 257)			int len = ::Std_obj::_hx_int(::Math_obj::min(( (Float)(::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE) ),( (Float)((input->length - i)) )));
+HXLINE( 258)			{
+HXLINE( 258)				int _g = 0;
+HXDLIN( 258)				while((_g < len)){
+HXLINE( 258)					_g = (_g + 1);
+HXDLIN( 258)					int j = (_g - 1);
+HXLINE( 259)					output->b[(i + j)] = ( (unsigned char)((( (int)(input->b->__get((i + j))) ) ^ ( (int)(k->b->__get(j)) ))) );
+            				}
+            			}
+HXLINE( 262)			int carry = 1;
+HXLINE( 263)			{
+HXLINE( 263)				int _g1 = 0;
+HXDLIN( 263)				while((_g1 < 4)){
+HXLINE( 263)					_g1 = (_g1 + 1);
+HXDLIN( 263)					int j1 = (_g1 - 1);
+HXLINE( 264)					int val = (counter->b->__get(j1) + carry);
+HXLINE( 265)					counter->b[j1] = ( (unsigned char)((val & 255)) );
+HXLINE( 266)					carry = ::hx::UShr(val,8);
+HXLINE( 267)					if ((carry == 0)) {
+HXLINE( 268)						goto _hx_goto_15;
+            					}
+            				}
+            				_hx_goto_15:;
+            			}
+HXLINE( 270)			i = (i + ::haxe::crypto::mode::GCMSIV_obj::AES_BLOCK_SIZE);
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC5(GCMSIV_obj,aesCTR,(void))
+
+
+GCMSIV_obj::GCMSIV_obj()
+{
+}
+
+bool GCMSIV_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 1:
+		if (HX_FIELD_EQ(inName,"E") ) { outValue = ( E ); return true; }
+		break;
+	case 2:
+		if (HX_FIELD_EQ(inName,"h0") ) { outValue = ( h0 ); return true; }
+		if (HX_FIELD_EQ(inName,"h1") ) { outValue = ( h1 ); return true; }
+		if (HX_FIELD_EQ(inName,"s0") ) { outValue = ( s0 ); return true; }
+		if (HX_FIELD_EQ(inName,"s1") ) { outValue = ( s1 ); return true; }
+		break;
+	case 4:
+		if (HX_FIELD_EQ(inName,"hash") ) { outValue = hash_dyn(); return true; }
+		break;
+	case 6:
+		if (HX_FIELD_EQ(inName,"subKey") ) { outValue = subKey_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"aesCTR") ) { outValue = aesCTR_dyn(); return true; }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"encrypt") ) { outValue = encrypt_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { outValue = decrypt_dyn(); return true; }
+		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"NONCE_SIZE") ) { outValue = ( NONCE_SIZE ); return true; }
+		break;
+	case 11:
+		if (HX_FIELD_EQ(inName,"initPolyval") ) { outValue = initPolyval_dyn(); return true; }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"AES_BLOCK_SIZE") ) { outValue = ( AES_BLOCK_SIZE ); return true; }
+		break;
+	case 18:
+		if (HX_FIELD_EQ(inName,"updateBlockPolyval") ) { outValue = updateBlockPolyval_dyn(); return true; }
+	}
+	return false;
+}
+
+bool GCMSIV_obj::__SetStatic(const ::String &inName,Dynamic &ioValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 1:
+		if (HX_FIELD_EQ(inName,"E") ) { E=ioValue.Cast< ::cpp::Int64 >(); return true; }
+		break;
+	case 2:
+		if (HX_FIELD_EQ(inName,"h0") ) { h0=ioValue.Cast< ::cpp::Int64 >(); return true; }
+		if (HX_FIELD_EQ(inName,"h1") ) { h1=ioValue.Cast< ::cpp::Int64 >(); return true; }
+		if (HX_FIELD_EQ(inName,"s0") ) { s0=ioValue.Cast< ::cpp::Int64 >(); return true; }
+		if (HX_FIELD_EQ(inName,"s1") ) { s1=ioValue.Cast< ::cpp::Int64 >(); return true; }
+		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"NONCE_SIZE") ) { NONCE_SIZE=ioValue.Cast< int >(); return true; }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"AES_BLOCK_SIZE") ) { AES_BLOCK_SIZE=ioValue.Cast< int >(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *GCMSIV_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo GCMSIV_obj_sStaticStorageInfo[] = {
+	{::hx::fsInt,(void *) &GCMSIV_obj::AES_BLOCK_SIZE,HX_("AES_BLOCK_SIZE",e3,4a,f5,00)},
+	{::hx::fsInt,(void *) &GCMSIV_obj::NONCE_SIZE,HX_("NONCE_SIZE",71,31,72,7f)},
+	{::hx::fsUnknown /* ::cpp::Int64 */ ,(void *) &GCMSIV_obj::E,HX_("E",45,00,00,00)},
+	{::hx::fsUnknown /* ::cpp::Int64 */ ,(void *) &GCMSIV_obj::h0,HX_("h0",c8,5a,00,00)},
+	{::hx::fsUnknown /* ::cpp::Int64 */ ,(void *) &GCMSIV_obj::h1,HX_("h1",c9,5a,00,00)},
+	{::hx::fsUnknown /* ::cpp::Int64 */ ,(void *) &GCMSIV_obj::s0,HX_("s0",5d,64,00,00)},
+	{::hx::fsUnknown /* ::cpp::Int64 */ ,(void *) &GCMSIV_obj::s1,HX_("s1",5e,64,00,00)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+#endif
+
+static void GCMSIV_obj_sMarkStatics(HX_MARK_PARAMS) {
+	HX_MARK_MEMBER_NAME(GCMSIV_obj::AES_BLOCK_SIZE,"AES_BLOCK_SIZE");
+	HX_MARK_MEMBER_NAME(GCMSIV_obj::NONCE_SIZE,"NONCE_SIZE");
+	HX_MARK_MEMBER_NAME(GCMSIV_obj::E,"E");
+	HX_MARK_MEMBER_NAME(GCMSIV_obj::h0,"h0");
+	HX_MARK_MEMBER_NAME(GCMSIV_obj::h1,"h1");
+	HX_MARK_MEMBER_NAME(GCMSIV_obj::s0,"s0");
+	HX_MARK_MEMBER_NAME(GCMSIV_obj::s1,"s1");
+};
+
+#ifdef HXCPP_VISIT_ALLOCS
+static void GCMSIV_obj_sVisitStatics(HX_VISIT_PARAMS) {
+	HX_VISIT_MEMBER_NAME(GCMSIV_obj::AES_BLOCK_SIZE,"AES_BLOCK_SIZE");
+	HX_VISIT_MEMBER_NAME(GCMSIV_obj::NONCE_SIZE,"NONCE_SIZE");
+	HX_VISIT_MEMBER_NAME(GCMSIV_obj::E,"E");
+	HX_VISIT_MEMBER_NAME(GCMSIV_obj::h0,"h0");
+	HX_VISIT_MEMBER_NAME(GCMSIV_obj::h1,"h1");
+	HX_VISIT_MEMBER_NAME(GCMSIV_obj::s0,"s0");
+	HX_VISIT_MEMBER_NAME(GCMSIV_obj::s1,"s1");
+};
+
+#endif
+
+::hx::Class GCMSIV_obj::__mClass;
+
+static ::String GCMSIV_obj_sStaticFields[] = {
+	HX_("AES_BLOCK_SIZE",e3,4a,f5,00),
+	HX_("NONCE_SIZE",71,31,72,7f),
+	HX_("E",45,00,00,00),
+	HX_("h0",c8,5a,00,00),
+	HX_("h1",c9,5a,00,00),
+	HX_("s0",5d,64,00,00),
+	HX_("s1",5e,64,00,00),
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	HX_("subKey",ff,87,ec,99),
+	HX_("hash",ce,2f,08,45),
+	HX_("initPolyval",e5,c6,06,cb),
+	HX_("updateBlockPolyval",f1,39,d3,bc),
+	HX_("aesCTR",d2,40,4d,3c),
+	::String(null())
+};
+
+void GCMSIV_obj::__register()
+{
+	GCMSIV_obj _hx_dummy;
+	GCMSIV_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.GCMSIV",35,a7,8b,6c);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &GCMSIV_obj::__GetStatic;
+	__mClass->mSetStaticField = &GCMSIV_obj::__SetStatic;
+	__mClass->mMarkFunc = GCMSIV_obj_sMarkStatics;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(GCMSIV_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< GCMSIV_obj >;
+#ifdef HXCPP_VISIT_ALLOCS
+	__mClass->mVisitFunc = GCMSIV_obj_sVisitStatics;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = GCMSIV_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = GCMSIV_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+void GCMSIV_obj::__boot()
+{
+{
+            	HX_STACKFRAME(&_hx_pos_b8923f5a04908e37_6_boot)
+HXDLIN(   6)		AES_BLOCK_SIZE = 16;
+            	}
+{
+            	HX_STACKFRAME(&_hx_pos_b8923f5a04908e37_7_boot)
+HXDLIN(   7)		NONCE_SIZE = 12;
+            	}
+{
+            	HX_STACKFRAME(&_hx_pos_b8923f5a04908e37_8_boot)
+HXDLIN(   8)		E = _hx_int64_make(-520093696,0);
+            	}
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/OFB.cpp b/Sources/c_borogove/src/haxe/crypto/mode/OFB.cpp
new file mode 100644
index 0000000..5e39880
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/OFB.cpp
@@ -0,0 +1,125 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_mode_OFB
+#include <haxe/crypto/mode/OFB.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_7039d13150f6696b_6_encrypt,"haxe.crypto.mode.OFB","encrypt",0x6a35723c,"haxe.crypto.mode.OFB.encrypt","haxe/crypto/mode/OFB.hx",6,0xc29aef3a)
+HX_LOCAL_STACK_FRAME(_hx_pos_7039d13150f6696b_21_decrypt,"haxe.crypto.mode.OFB","decrypt",0xa769bc24,"haxe.crypto.mode.OFB.decrypt","haxe/crypto/mode/OFB.hx",21,0xc29aef3a)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void OFB_obj::__construct() { }
+
+Dynamic OFB_obj::__CreateEmpty() { return new OFB_obj; }
+
+void *OFB_obj::_hx_vtable = 0;
+
+Dynamic OFB_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< OFB_obj > _hx_result = new OFB_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool OFB_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x101cf91d;
+}
+
+void OFB_obj::encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_7039d13150f6696b_6_encrypt)
+HXLINE(   7)		 ::haxe::io::Bytes vector = iv->sub(0,iv->length);
+HXLINE(   8)		int i = 0;
+HXLINE(   9)		int len = src->length;
+HXLINE(  10)		while((i < len)){
+HXLINE(  11)			encryptBlock(vector,0,vector,0);
+HXLINE(  12)			int block;
+HXDLIN(  12)			if (((i + blockSize) > len)) {
+HXLINE(  12)				block = (len - i);
+            			}
+            			else {
+HXLINE(  12)				block = blockSize;
+            			}
+HXLINE(  13)			{
+HXLINE(  13)				int _g = 0;
+HXDLIN(  13)				int _g1 = block;
+HXDLIN(  13)				while((_g < _g1)){
+HXLINE(  13)					_g = (_g + 1);
+HXDLIN(  13)					int j = (_g - 1);
+HXLINE(  14)					src->b[(i + j)] = ( (unsigned char)((( (int)(src->b->__get((i + j))) ) ^ ( (int)(vector->b->__get(j)) ))) );
+            				}
+            			}
+HXLINE(  16)			i = (i + blockSize);
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(OFB_obj,encrypt,(void))
+
+void OFB_obj::decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic decryptBlock){
+            	HX_STACKFRAME(&_hx_pos_7039d13150f6696b_21_decrypt)
+HXDLIN(  21)		::haxe::crypto::mode::OFB_obj::encrypt(src,iv,blockSize,decryptBlock);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(OFB_obj,decrypt,(void))
+
+
+OFB_obj::OFB_obj()
+{
+}
+
+bool OFB_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"encrypt") ) { outValue = encrypt_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { outValue = decrypt_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *OFB_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *OFB_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class OFB_obj::__mClass;
+
+static ::String OFB_obj_sStaticFields[] = {
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	::String(null())
+};
+
+void OFB_obj::__register()
+{
+	OFB_obj _hx_dummy;
+	OFB_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.OFB",45,25,4b,f1);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &OFB_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(OFB_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< OFB_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = OFB_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = OFB_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/PCBC.cpp b/Sources/c_borogove/src/haxe/crypto/mode/PCBC.cpp
new file mode 100644
index 0000000..8145c03
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/PCBC.cpp
@@ -0,0 +1,151 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_mode_PCBC
+#include <haxe/crypto/mode/PCBC.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_4cc6f42afbe95e8f_6_encrypt,"haxe.crypto.mode.PCBC","encrypt",0x8fb93131,"haxe.crypto.mode.PCBC.encrypt","haxe/crypto/mode/PCBC.hx",6,0x892f3003)
+HX_LOCAL_STACK_FRAME(_hx_pos_4cc6f42afbe95e8f_24_decrypt,"haxe.crypto.mode.PCBC","decrypt",0xcced7b19,"haxe.crypto.mode.PCBC.decrypt","haxe/crypto/mode/PCBC.hx",24,0x892f3003)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void PCBC_obj::__construct() { }
+
+Dynamic PCBC_obj::__CreateEmpty() { return new PCBC_obj; }
+
+void *PCBC_obj::_hx_vtable = 0;
+
+Dynamic PCBC_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< PCBC_obj > _hx_result = new PCBC_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool PCBC_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x09e3f062;
+}
+
+void PCBC_obj::encrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic encryptBlock){
+            	HX_STACKFRAME(&_hx_pos_4cc6f42afbe95e8f_6_encrypt)
+HXLINE(   7)		 ::haxe::io::Bytes vector = iv->sub(0,iv->length);
+HXLINE(   8)		int i = 0;
+HXLINE(   9)		int len = src->length;
+HXLINE(  10)		 ::haxe::io::Bytes plainText = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE(  11)		while((i < len)){
+HXLINE(  12)			{
+HXLINE(  12)				int _g = 0;
+HXDLIN(  12)				while((_g < blockSize)){
+HXLINE(  12)					_g = (_g + 1);
+HXDLIN(  12)					int j = (_g - 1);
+HXLINE(  13)					plainText->b[j] = src->b->__get((i + j));
+HXLINE(  14)					src->b[(i + j)] = ( (unsigned char)((( (int)(src->b->__get((i + j))) ) ^ ( (int)(vector->b->__get(j)) ))) );
+            				}
+            			}
+HXLINE(  16)			encryptBlock(src,i,src,i);
+HXLINE(  17)			{
+HXLINE(  17)				int _g1 = 0;
+HXDLIN(  17)				while((_g1 < blockSize)){
+HXLINE(  17)					_g1 = (_g1 + 1);
+HXDLIN(  17)					int j1 = (_g1 - 1);
+HXLINE(  18)					vector->b[j1] = ( (unsigned char)((( (int)(src->b->__get((i + j1))) ) ^ ( (int)(plainText->b->__get(j1)) ))) );
+            				}
+            			}
+HXLINE(  20)			i = (i + blockSize);
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(PCBC_obj,encrypt,(void))
+
+void PCBC_obj::decrypt( ::haxe::io::Bytes src, ::haxe::io::Bytes iv,int blockSize, ::Dynamic decryptBlock){
+            	HX_STACKFRAME(&_hx_pos_4cc6f42afbe95e8f_24_decrypt)
+HXLINE(  25)		 ::haxe::io::Bytes vector = iv->sub(0,iv->length);
+HXLINE(  26)		int i = 0;
+HXLINE(  27)		int len = src->length;
+HXLINE(  28)		 ::haxe::io::Bytes cipherText = ::haxe::io::Bytes_obj::alloc(blockSize);
+HXLINE(  29)		while((i < len)){
+HXLINE(  30)			{
+HXLINE(  30)				int _g = 0;
+HXDLIN(  30)				while((_g < blockSize)){
+HXLINE(  30)					_g = (_g + 1);
+HXDLIN(  30)					int j = (_g - 1);
+HXLINE(  31)					cipherText->b[j] = src->b->__get((i + j));
+            				}
+            			}
+HXLINE(  33)			decryptBlock(src,i,src,i);
+HXLINE(  34)			{
+HXLINE(  34)				int _g1 = 0;
+HXDLIN(  34)				while((_g1 < blockSize)){
+HXLINE(  34)					_g1 = (_g1 + 1);
+HXDLIN(  34)					int j1 = (_g1 - 1);
+HXLINE(  35)					src->b[(i + j1)] = ( (unsigned char)((( (int)(src->b->__get((i + j1))) ) ^ ( (int)(vector->b->__get(j1)) ))) );
+HXLINE(  36)					vector->b[j1] = ( (unsigned char)((( (int)(src->b->__get((i + j1))) ) ^ ( (int)(cipherText->b->__get(j1)) ))) );
+            				}
+            			}
+HXLINE(  38)			i = (i + blockSize);
+            		}
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(PCBC_obj,decrypt,(void))
+
+
+PCBC_obj::PCBC_obj()
+{
+}
+
+bool PCBC_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"encrypt") ) { outValue = encrypt_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { outValue = decrypt_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *PCBC_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *PCBC_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class PCBC_obj::__mClass;
+
+static ::String PCBC_obj_sStaticFields[] = {
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	::String(null())
+};
+
+void PCBC_obj::__register()
+{
+	PCBC_obj _hx_dummy;
+	PCBC_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.PCBC",3a,67,1c,31);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &PCBC_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(PCBC_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< PCBC_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = PCBC_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = PCBC_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/mode/SIV.cpp b/Sources/c_borogove/src/haxe/crypto/mode/SIV.cpp
new file mode 100644
index 0000000..44dac00
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/mode/SIV.cpp
@@ -0,0 +1,342 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_Std
+#include <Std.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CMAC
+#include <haxe/crypto/mode/CMAC.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_CTR
+#include <haxe/crypto/mode/CTR.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_mode_SIV
+#include <haxe/crypto/mode/SIV.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_BitPadding
+#include <haxe/crypto/padding/BitPadding.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_ff65cadbc6fda9f6_18_encrypt,"haxe.crypto.mode.SIV","encrypt",0x296abaf1,"haxe.crypto.mode.SIV.encrypt","haxe/crypto/mode/SIV.hx",18,0x237462a5)
+HX_LOCAL_STACK_FRAME(_hx_pos_ff65cadbc6fda9f6_53_decrypt,"haxe.crypto.mode.SIV","decrypt",0x669f04d9,"haxe.crypto.mode.SIV.decrypt","haxe/crypto/mode/SIV.hx",53,0x237462a5)
+HX_LOCAL_STACK_FRAME(_hx_pos_ff65cadbc6fda9f6_88_computeCtr,"haxe.crypto.mode.SIV","computeCtr",0x8b71dc5e,"haxe.crypto.mode.SIV.computeCtr","haxe/crypto/mode/SIV.hx",88,0x237462a5)
+HX_LOCAL_STACK_FRAME(_hx_pos_ff65cadbc6fda9f6_100_s2v,"haxe.crypto.mode.SIV","s2v",0xfd1275c3,"haxe.crypto.mode.SIV.s2v","haxe/crypto/mode/SIV.hx",100,0x237462a5)
+HX_LOCAL_STACK_FRAME(_hx_pos_ff65cadbc6fda9f6_127_shiftLeft,"haxe.crypto.mode.SIV","shiftLeft",0xcc2a0135,"haxe.crypto.mode.SIV.shiftLeft","haxe/crypto/mode/SIV.hx",127,0x237462a5)
+HX_LOCAL_STACK_FRAME(_hx_pos_ff65cadbc6fda9f6_138_dbl,"haxe.crypto.mode.SIV","dbl",0xfd073dba,"haxe.crypto.mode.SIV.dbl","haxe/crypto/mode/SIV.hx",138,0x237462a5)
+HX_LOCAL_STACK_FRAME(_hx_pos_ff65cadbc6fda9f6_147_xor,"haxe.crypto.mode.SIV","xor",0xfd167627,"haxe.crypto.mode.SIV.xor","haxe/crypto/mode/SIV.hx",147,0x237462a5)
+HX_LOCAL_STACK_FRAME(_hx_pos_ff65cadbc6fda9f6_158_xorend,"haxe.crypto.mode.SIV","xorend",0xedeba014,"haxe.crypto.mode.SIV.xorend","haxe/crypto/mode/SIV.hx",158,0x237462a5)
+namespace haxe{
+namespace crypto{
+namespace mode{
+
+void SIV_obj::__construct() { }
+
+Dynamic SIV_obj::__CreateEmpty() { return new SIV_obj; }
+
+void *SIV_obj::_hx_vtable = 0;
+
+Dynamic SIV_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< SIV_obj > _hx_result = new SIV_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool SIV_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x102004d2;
+}
+
+ ::haxe::io::Bytes SIV_obj::encrypt( ::haxe::io::Bytes key, ::haxe::io::Bytes plaintext, ::haxe::io::Bytes nonce,::Array< ::Dynamic> associatedData, ::Dynamic encryptBlock, ::Dynamic initKey){
+            	HX_STACKFRAME(&_hx_pos_ff65cadbc6fda9f6_18_encrypt)
+HXLINE(  19)		if (::hx::IsNull( associatedData )) {
+HXLINE(  20)			associatedData = ::Array_obj< ::Dynamic>::__new(0);
+            		}
+HXLINE(  22)		if ((plaintext->length > (int)2147483631)) {
+HXLINE(  23)			HX_STACK_DO_THROW(HX_("Text to encrypt is too long",11,75,70,02));
+            		}
+HXLINE(  26)		bool _hx_tmp;
+HXDLIN(  26)		bool _hx_tmp1;
+HXDLIN(  26)		if ((key->length != 64)) {
+HXLINE(  26)			_hx_tmp1 = (key->length != 48);
+            		}
+            		else {
+HXLINE(  26)			_hx_tmp1 = false;
+            		}
+HXDLIN(  26)		if (_hx_tmp1) {
+HXLINE(  26)			_hx_tmp = (key->length != 32);
+            		}
+            		else {
+HXLINE(  26)			_hx_tmp = false;
+            		}
+HXDLIN(  26)		if (_hx_tmp) {
+HXLINE(  27)			HX_STACK_DO_THROW(HX_("Key should be 32, 48, or 64 bytes (256, 384, 512 bits)",8b,e9,f8,61));
+            		}
+HXLINE(  30)		int subkeyLen = (key->length >> 1);
+HXLINE(  31)		 ::haxe::io::Bytes macKey = key->sub(0,subkeyLen);
+HXLINE(  32)		 ::haxe::io::Bytes ctrKey = key->sub(subkeyLen,subkeyLen);
+HXLINE(  33)		 ::haxe::io::Bytes iv = ::haxe::crypto::mode::SIV_obj::s2v(macKey,plaintext,associatedData,nonce,encryptBlock,initKey);
+HXLINE(  34)		 ::haxe::io::Bytes ciphertext = ::haxe::crypto::mode::SIV_obj::computeCtr(plaintext,ctrKey,iv,encryptBlock,initKey);
+HXLINE(  35)		 ::haxe::io::Bytes result = ::haxe::io::Bytes_obj::alloc((iv->length + ciphertext->length));
+HXLINE(  36)		result->blit(0,iv,0,iv->length);
+HXLINE(  37)		result->blit(iv->length,ciphertext,0,ciphertext->length);
+HXLINE(  38)		initKey(key,nonce);
+HXLINE(  39)		return result;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC6(SIV_obj,encrypt,return )
+
+ ::haxe::io::Bytes SIV_obj::decrypt( ::haxe::io::Bytes combinedKey, ::haxe::io::Bytes ciphertext, ::haxe::io::Bytes nonce,::Array< ::Dynamic> associatedData, ::Dynamic encryptBlock, ::Dynamic initKey){
+            	HX_STACKFRAME(&_hx_pos_ff65cadbc6fda9f6_53_decrypt)
+HXLINE(  54)		bool _hx_tmp;
+HXDLIN(  54)		bool _hx_tmp1;
+HXDLIN(  54)		if ((combinedKey->length != 64)) {
+HXLINE(  54)			_hx_tmp1 = (combinedKey->length != 48);
+            		}
+            		else {
+HXLINE(  54)			_hx_tmp1 = false;
+            		}
+HXDLIN(  54)		if (_hx_tmp1) {
+HXLINE(  54)			_hx_tmp = (combinedKey->length != 32);
+            		}
+            		else {
+HXLINE(  54)			_hx_tmp = false;
+            		}
+HXDLIN(  54)		if (_hx_tmp) {
+HXLINE(  55)			HX_STACK_DO_THROW(HX_("Key should be 32, 48, or 64 bytes (256, 384, 512 bits)",8b,e9,f8,61));
+            		}
+HXLINE(  58)		int subkeyLen = ::Std_obj::_hx_int((( (Float)(combinedKey->length) ) / ( (Float)(2) )));
+HXLINE(  59)		 ::haxe::io::Bytes macKey = combinedKey->sub(0,subkeyLen);
+HXLINE(  60)		 ::haxe::io::Bytes ctrKey = combinedKey->sub(subkeyLen,subkeyLen);
+HXLINE(  62)		if (::hx::IsNull( associatedData )) {
+HXLINE(  63)			associatedData = ::Array_obj< ::Dynamic>::__new(0);
+            		}
+HXLINE(  65)		if ((ciphertext->length < 16)) {
+HXLINE(  66)			HX_STACK_DO_THROW(HX_("Input length must be greater than or equal 16",bf,8c,fd,16));
+            		}
+HXLINE(  69)		 ::haxe::io::Bytes iv = ciphertext->sub(0,16);
+HXLINE(  71)		 ::haxe::io::Bytes plaintext = ::haxe::crypto::mode::SIV_obj::computeCtr(ciphertext->sub(16,(ciphertext->length - 16)),ctrKey,iv,encryptBlock,initKey);
+HXLINE(  72)		 ::haxe::io::Bytes control = ::haxe::crypto::mode::SIV_obj::s2v(macKey,plaintext,associatedData,nonce,encryptBlock,initKey);
+HXLINE(  74)		initKey(combinedKey,nonce);
+HXLINE(  76)		int diff = 0;
+HXLINE(  77)		{
+HXLINE(  77)			int _g = 0;
+HXDLIN(  77)			int _g1 = iv->length;
+HXDLIN(  77)			while((_g < _g1)){
+HXLINE(  77)				_g = (_g + 1);
+HXDLIN(  77)				int i = (_g - 1);
+HXLINE(  78)				diff = (diff | (( (int)(iv->b->__get(i)) ) ^ ( (int)(control->b->__get(i)) )));
+            			}
+            		}
+HXLINE(  81)		if ((diff == 0)) {
+HXLINE(  82)			return plaintext;
+            		}
+            		else {
+HXLINE(  84)			return null();
+            		}
+HXLINE(  81)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC6(SIV_obj,decrypt,return )
+
+ ::haxe::io::Bytes SIV_obj::computeCtr( ::haxe::io::Bytes input, ::haxe::io::Bytes key, ::haxe::io::Bytes iv, ::Dynamic encryptBlock, ::Dynamic initKey){
+            	HX_STACKFRAME(&_hx_pos_ff65cadbc6fda9f6_88_computeCtr)
+HXLINE(  89)		 ::haxe::io::Bytes adjustedIv = ::haxe::io::Bytes_obj::alloc(16);
+HXLINE(  90)		adjustedIv->blit(0,iv,0,16);
+HXLINE(  91)		adjustedIv->b[8] = ( (unsigned char)((( (int)(adjustedIv->b->__get(8)) ) & 127)) );
+HXLINE(  92)		adjustedIv->b[12] = ( (unsigned char)((( (int)(adjustedIv->b->__get(12)) ) & 127)) );
+HXLINE(  94)		initKey(key,iv);
+HXLINE(  95)		::haxe::crypto::mode::CTR_obj::encrypt(input,adjustedIv,16,encryptBlock);
+HXLINE(  96)		return input;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC5(SIV_obj,computeCtr,return )
+
+ ::haxe::io::Bytes SIV_obj::s2v( ::haxe::io::Bytes macKey, ::haxe::io::Bytes plaintext,::Array< ::Dynamic> associatedData, ::haxe::io::Bytes nonce, ::Dynamic encryptBlock, ::Dynamic initKey){
+            	HX_STACKFRAME(&_hx_pos_ff65cadbc6fda9f6_100_s2v)
+HXLINE( 101)		if ((associatedData->length > 126)) {
+HXLINE( 102)			HX_STACK_DO_THROW(HX_("Too many associatedData fields",f4,56,9a,65));
+            		}
+HXLINE( 104)		initKey(macKey,nonce);
+HXLINE( 105)		 ::haxe::io::Bytes d = ::haxe::crypto::mode::CMAC_obj::generate(::haxe::io::Bytes_obj::alloc(16),macKey,16,encryptBlock);
+HXLINE( 106)		{
+HXLINE( 106)			int _g = 0;
+HXDLIN( 106)			while((_g < associatedData->length)){
+HXLINE( 106)				 ::haxe::io::Bytes s = associatedData->__get(_g).StaticCast<  ::haxe::io::Bytes >();
+HXDLIN( 106)				_g = (_g + 1);
+HXLINE( 107)				 ::haxe::io::Bytes mac = ::haxe::crypto::mode::CMAC_obj::generate(s,macKey,16,encryptBlock);
+HXLINE( 109)				d = ::haxe::crypto::mode::SIV_obj::_hx_xor(::haxe::crypto::mode::SIV_obj::dbl(d),mac);
+            			}
+            		}
+HXLINE( 111)		if (::hx::IsNotNull( nonce )) {
+HXLINE( 112)			 ::haxe::io::Bytes mac1 = ::haxe::crypto::mode::CMAC_obj::generate(nonce,macKey,16,encryptBlock);
+HXLINE( 114)			d = ::haxe::crypto::mode::SIV_obj::_hx_xor(::haxe::crypto::mode::SIV_obj::dbl(d),mac1);
+            		}
+HXLINE( 116)		 ::haxe::io::Bytes t;
+HXLINE( 117)		if ((plaintext->length >= 16)) {
+HXLINE( 118)			t = ::haxe::crypto::mode::SIV_obj::xorend(plaintext,d);
+            		}
+            		else {
+HXLINE( 120)			 ::haxe::io::Bytes padded = ::haxe::crypto::padding::BitPadding_obj::pad(plaintext,16);
+HXLINE( 121)			t = ::haxe::crypto::mode::SIV_obj::_hx_xor(::haxe::crypto::mode::SIV_obj::dbl(d),padded);
+            		}
+HXLINE( 124)		return ::haxe::crypto::mode::CMAC_obj::generate(t,macKey,16,encryptBlock);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC6(SIV_obj,s2v,return )
+
+int SIV_obj::shiftLeft( ::haxe::io::Bytes block, ::haxe::io::Bytes output){
+            	HX_STACKFRAME(&_hx_pos_ff65cadbc6fda9f6_127_shiftLeft)
+HXLINE( 128)		int i = block->length;
+HXLINE( 129)		int bit = 0;
+HXLINE( 130)		while(true){
+HXLINE( 130)			i = (i - 1);
+HXDLIN( 130)			if (!((i >= 0))) {
+HXLINE( 130)				goto _hx_goto_6;
+            			}
+HXLINE( 131)			int b = (( (int)(block->b->__get(i)) ) & 255);
+HXLINE( 132)			output->b[i] = ( (unsigned char)(((b << 1) | bit)) );
+HXLINE( 133)			bit = (::hx::UShr(b,7) & 1);
+            		}
+            		_hx_goto_6:;
+HXLINE( 135)		return bit;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(SIV_obj,shiftLeft,return )
+
+ ::haxe::io::Bytes SIV_obj::dbl( ::haxe::io::Bytes input){
+            	HX_STACKFRAME(&_hx_pos_ff65cadbc6fda9f6_138_dbl)
+HXLINE( 139)		 ::haxe::io::Bytes ret = ::haxe::io::Bytes_obj::alloc(input->length);
+HXLINE( 141)		int mask = (-(::haxe::crypto::mode::SIV_obj::shiftLeft(input,ret)) & 255);
+HXLINE( 142)		ret->b[(input->length - 1)] = ( (unsigned char)((( (int)(ret->b->__get((input->length - 1))) ) ^ (135 & mask))) );
+HXLINE( 144)		return ret;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(SIV_obj,dbl,return )
+
+ ::haxe::io::Bytes SIV_obj::_hx_xor( ::haxe::io::Bytes in1, ::haxe::io::Bytes in2){
+            	HX_STACKFRAME(&_hx_pos_ff65cadbc6fda9f6_147_xor)
+HXLINE( 148)		if ((in1->length > in2->length)) {
+HXLINE( 149)			HX_STACK_DO_THROW(HX_("in1.length must be <= in2.length",e8,fe,ec,9e));
+            		}
+HXLINE( 151)		 ::haxe::io::Bytes result = ::haxe::io::Bytes_obj::alloc(in1->length);
+HXLINE( 152)		{
+HXLINE( 152)			int _g = 0;
+HXDLIN( 152)			int _g1 = result->length;
+HXDLIN( 152)			while((_g < _g1)){
+HXLINE( 152)				_g = (_g + 1);
+HXDLIN( 152)				int i = (_g - 1);
+HXLINE( 153)				result->b[i] = ( (unsigned char)((( (int)(in1->b->__get(i)) ) ^ ( (int)(in2->b->__get(i)) ))) );
+            			}
+            		}
+HXLINE( 155)		return result;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(SIV_obj,_hx_xor,return )
+
+ ::haxe::io::Bytes SIV_obj::xorend( ::haxe::io::Bytes in1, ::haxe::io::Bytes in2){
+            	HX_STACKFRAME(&_hx_pos_ff65cadbc6fda9f6_158_xorend)
+HXLINE( 159)		if ((in1->length < in2->length)) {
+HXLINE( 160)			HX_STACK_DO_THROW(HX_("in1.length must be >= in2.length",ea,f9,6d,2a));
+            		}
+HXLINE( 162)		 ::haxe::io::Bytes result = ::haxe::io::Bytes_obj::alloc(in1->length);
+HXLINE( 163)		result->blit(0,in1,0,in1->length);
+HXLINE( 164)		int diff = (in1->length - in2->length);
+HXLINE( 165)		{
+HXLINE( 165)			int _g = 0;
+HXDLIN( 165)			int _g1 = in2->length;
+HXDLIN( 165)			while((_g < _g1)){
+HXLINE( 165)				_g = (_g + 1);
+HXDLIN( 165)				int i = (_g - 1);
+HXLINE( 166)				result->b[(i + diff)] = ( (unsigned char)((( (int)(result->b->__get((i + diff))) ) ^ ( (int)(in2->b->__get(i)) ))) );
+            			}
+            		}
+HXLINE( 168)		return result;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(SIV_obj,xorend,return )
+
+
+SIV_obj::SIV_obj()
+{
+}
+
+bool SIV_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"s2v") ) { outValue = s2v_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"dbl") ) { outValue = dbl_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"xor") ) { outValue = _hx_xor_dyn(); return true; }
+		break;
+	case 6:
+		if (HX_FIELD_EQ(inName,"xorend") ) { outValue = xorend_dyn(); return true; }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"encrypt") ) { outValue = encrypt_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"decrypt") ) { outValue = decrypt_dyn(); return true; }
+		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"shiftLeft") ) { outValue = shiftLeft_dyn(); return true; }
+		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"computeCtr") ) { outValue = computeCtr_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *SIV_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *SIV_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class SIV_obj::__mClass;
+
+static ::String SIV_obj_sStaticFields[] = {
+	HX_("encrypt",65,7e,9b,af),
+	HX_("decrypt",4d,c8,cf,ec),
+	HX_("computeCtr",6a,b9,89,34),
+	HX_("s2v",37,6f,57,00),
+	HX_("shiftLeft",a9,89,a9,d2),
+	HX_("dbl",2e,37,4c,00),
+	HX_("xor",9b,6f,5b,00),
+	HX_("xorend",20,07,f5,2f),
+	::String(null())
+};
+
+void SIV_obj::__register()
+{
+	SIV_obj _hx_dummy;
+	SIV_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.mode.SIV",fa,30,4e,f1);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &SIV_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(SIV_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< SIV_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = SIV_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = SIV_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace mode
diff --git a/Sources/c_borogove/src/haxe/crypto/padding/AnsiX923.cpp b/Sources/c_borogove/src/haxe/crypto/padding/AnsiX923.cpp
new file mode 100644
index 0000000..b1c2d3e
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/padding/AnsiX923.cpp
@@ -0,0 +1,117 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_padding_AnsiX923
+#include <haxe/crypto/padding/AnsiX923.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_cb37a467fc196f08_7_pad,"haxe.crypto.padding.AnsiX923","pad",0x337b806c,"haxe.crypto.padding.AnsiX923.pad","haxe/crypto/padding/AnsiX923.hx",7,0x3a432196)
+HX_LOCAL_STACK_FRAME(_hx_pos_cb37a467fc196f08_21_unpad,"haxe.crypto.padding.AnsiX923","unpad",0x934f8ff3,"haxe.crypto.padding.AnsiX923.unpad","haxe/crypto/padding/AnsiX923.hx",21,0x3a432196)
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+void AnsiX923_obj::__construct() { }
+
+Dynamic AnsiX923_obj::__CreateEmpty() { return new AnsiX923_obj; }
+
+void *AnsiX923_obj::_hx_vtable = 0;
+
+Dynamic AnsiX923_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< AnsiX923_obj > _hx_result = new AnsiX923_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool AnsiX923_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x16ad6123;
+}
+
+ ::haxe::io::Bytes AnsiX923_obj::pad( ::haxe::io::Bytes ciphertext,int blockSize){
+            	HX_STACKFRAME(&_hx_pos_cb37a467fc196f08_7_pad)
+HXLINE(   8)		int padding = ((blockSize - ::hx::Mod(ciphertext->length,blockSize)) - 1);
+HXLINE(   9)		int bsize = (ciphertext->length + padding);
+HXLINE(  10)		 ::haxe::io::Bytes buffer = ::haxe::io::Bytes_obj::alloc((bsize + 1));
+HXLINE(  11)		buffer->blit(0,ciphertext,0,ciphertext->length);
+HXLINE(  12)		{
+HXLINE(  12)			int _g = ciphertext->length;
+HXDLIN(  12)			while((_g < bsize)){
+HXLINE(  12)				_g = (_g + 1);
+HXLINE(  13)				buffer->b[(_g - 1)] = ( (unsigned char)(0) );
+            			}
+            		}
+HXLINE(  15)		buffer->b[bsize] = ( (unsigned char)((padding + 1)) );
+HXLINE(  16)		return buffer;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(AnsiX923_obj,pad,return )
+
+ ::haxe::io::Bytes AnsiX923_obj::unpad( ::haxe::io::Bytes encrypt){
+            	HX_STACKFRAME(&_hx_pos_cb37a467fc196f08_21_unpad)
+HXDLIN(  21)		return encrypt->sub(0,(encrypt->length - ( (int)(encrypt->b->__get((encrypt->length - 1))) )));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(AnsiX923_obj,unpad,return )
+
+
+AnsiX923_obj::AnsiX923_obj()
+{
+}
+
+bool AnsiX923_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"pad") ) { outValue = pad_dyn(); return true; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"unpad") ) { outValue = unpad_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *AnsiX923_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *AnsiX923_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class AnsiX923_obj::__mClass;
+
+static ::String AnsiX923_obj_sStaticFields[] = {
+	HX_("pad",53,51,55,00),
+	HX_("unpad",9a,a8,ec,a6),
+	::String(null())
+};
+
+void AnsiX923_obj::__register()
+{
+	AnsiX923_obj _hx_dummy;
+	AnsiX923_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.padding.AnsiX923",07,cf,dc,7c);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &AnsiX923_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(AnsiX923_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< AnsiX923_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = AnsiX923_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = AnsiX923_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
diff --git a/Sources/c_borogove/src/haxe/crypto/padding/BitPadding.cpp b/Sources/c_borogove/src/haxe/crypto/padding/BitPadding.cpp
new file mode 100644
index 0000000..f13b6db
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/padding/BitPadding.cpp
@@ -0,0 +1,133 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_padding_BitPadding
+#include <haxe/crypto/padding/BitPadding.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_68e19cae3e8e95b1_7_pad,"haxe.crypto.padding.BitPadding","pad",0x24bae5cb,"haxe.crypto.padding.BitPadding.pad","haxe/crypto/padding/BitPadding.hx",7,0xf64bead7)
+HX_LOCAL_STACK_FRAME(_hx_pos_68e19cae3e8e95b1_19_unpad,"haxe.crypto.padding.BitPadding","unpad",0xdf3a4b12,"haxe.crypto.padding.BitPadding.unpad","haxe/crypto/padding/BitPadding.hx",19,0xf64bead7)
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+void BitPadding_obj::__construct() { }
+
+Dynamic BitPadding_obj::__CreateEmpty() { return new BitPadding_obj; }
+
+void *BitPadding_obj::_hx_vtable = 0;
+
+Dynamic BitPadding_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< BitPadding_obj > _hx_result = new BitPadding_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool BitPadding_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x317f63e6;
+}
+
+ ::haxe::io::Bytes BitPadding_obj::pad( ::haxe::io::Bytes ciphertext,int blockSize){
+            	HX_STACKFRAME(&_hx_pos_68e19cae3e8e95b1_7_pad)
+HXLINE(   9)		int bsize = ((ciphertext->length + ((blockSize - ::hx::Mod(ciphertext->length,blockSize)) - 1)) + 1);
+HXLINE(  10)		 ::haxe::io::Bytes buffer = ::haxe::io::Bytes_obj::alloc(bsize);
+HXLINE(  11)		buffer->blit(0,ciphertext,0,ciphertext->length);
+HXLINE(  12)		buffer->b[ciphertext->length] = ( (unsigned char)(128) );
+HXLINE(  13)		{
+HXLINE(  13)			int _g = (ciphertext->length + 1);
+HXDLIN(  13)			while((_g < bsize)){
+HXLINE(  13)				_g = (_g + 1);
+HXLINE(  14)				buffer->b[(_g - 1)] = ( (unsigned char)(0) );
+            			}
+            		}
+HXLINE(  16)		return buffer;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(BitPadding_obj,pad,return )
+
+ ::haxe::io::Bytes BitPadding_obj::unpad( ::haxe::io::Bytes encrypt){
+            	HX_STACKFRAME(&_hx_pos_68e19cae3e8e95b1_19_unpad)
+HXLINE(  20)		int padding = 0;
+HXLINE(  21)		int pos = (encrypt->length - 1);
+HXLINE(  22)		while(true){
+HXLINE(  22)			bool _hx_tmp;
+HXDLIN(  22)			if ((padding != 128)) {
+HXLINE(  22)				_hx_tmp = (pos > -1);
+            			}
+            			else {
+HXLINE(  22)				_hx_tmp = false;
+            			}
+HXDLIN(  22)			if (!(_hx_tmp)) {
+HXLINE(  22)				goto _hx_goto_2;
+            			}
+HXLINE(  23)			padding = ( (int)(encrypt->b->__get(pos)) );
+HXLINE(  24)			pos = (pos - 1);
+            		}
+            		_hx_goto_2:;
+HXLINE(  26)		return encrypt->sub(0,(pos + 1));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(BitPadding_obj,unpad,return )
+
+
+BitPadding_obj::BitPadding_obj()
+{
+}
+
+bool BitPadding_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"pad") ) { outValue = pad_dyn(); return true; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"unpad") ) { outValue = unpad_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *BitPadding_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *BitPadding_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class BitPadding_obj::__mClass;
+
+static ::String BitPadding_obj_sStaticFields[] = {
+	HX_("pad",53,51,55,00),
+	HX_("unpad",9a,a8,ec,a6),
+	::String(null())
+};
+
+void BitPadding_obj::__register()
+{
+	BitPadding_obj _hx_dummy;
+	BitPadding_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.padding.BitPadding",e6,58,c8,50);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &BitPadding_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(BitPadding_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< BitPadding_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = BitPadding_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = BitPadding_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
diff --git a/Sources/c_borogove/src/haxe/crypto/padding/ISO10126.cpp b/Sources/c_borogove/src/haxe/crypto/padding/ISO10126.cpp
new file mode 100644
index 0000000..8a8f514
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/padding/ISO10126.cpp
@@ -0,0 +1,123 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_Std
+#include <Std.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_padding_ISO10126
+#include <haxe/crypto/padding/ISO10126.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_5b644cf37c43cafe_7_pad,"haxe.crypto.padding.ISO10126","pad",0xf85ffc98,"haxe.crypto.padding.ISO10126.pad","haxe/crypto/padding/ISO10126.hx",7,0x1c264eea)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b644cf37c43cafe_21_unpad,"haxe.crypto.padding.ISO10126","unpad",0xb76c6f1f,"haxe.crypto.padding.ISO10126.unpad","haxe/crypto/padding/ISO10126.hx",21,0x1c264eea)
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+void ISO10126_obj::__construct() { }
+
+Dynamic ISO10126_obj::__CreateEmpty() { return new ISO10126_obj; }
+
+void *ISO10126_obj::_hx_vtable = 0;
+
+Dynamic ISO10126_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< ISO10126_obj > _hx_result = new ISO10126_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool ISO10126_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x5b3681fb;
+}
+
+ ::haxe::io::Bytes ISO10126_obj::pad( ::haxe::io::Bytes ciphertext,int blockSize){
+            	HX_STACKFRAME(&_hx_pos_5b644cf37c43cafe_7_pad)
+HXLINE(   8)		int padding = ((blockSize - ::hx::Mod(ciphertext->length,blockSize)) - 1);
+HXLINE(   9)		int bsize = (ciphertext->length + padding);
+HXLINE(  10)		 ::haxe::io::Bytes buffer = ::haxe::io::Bytes_obj::alloc((bsize + 1));
+HXLINE(  11)		buffer->blit(0,ciphertext,0,ciphertext->length);
+HXLINE(  12)		{
+HXLINE(  12)			int _g = ciphertext->length;
+HXDLIN(  12)			while((_g < bsize)){
+HXLINE(  12)				_g = (_g + 1);
+HXLINE(  13)				{
+HXLINE(  13)					int v = ::Std_obj::random(256);
+HXDLIN(  13)					buffer->b[(_g - 1)] = ( (unsigned char)(v) );
+            				}
+            			}
+            		}
+HXLINE(  15)		buffer->b[bsize] = ( (unsigned char)((padding + 1)) );
+HXLINE(  16)		return buffer;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(ISO10126_obj,pad,return )
+
+ ::haxe::io::Bytes ISO10126_obj::unpad( ::haxe::io::Bytes encrypt){
+            	HX_STACKFRAME(&_hx_pos_5b644cf37c43cafe_21_unpad)
+HXDLIN(  21)		return encrypt->sub(0,(encrypt->length - ( (int)(encrypt->b->__get((encrypt->length - 1))) )));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(ISO10126_obj,unpad,return )
+
+
+ISO10126_obj::ISO10126_obj()
+{
+}
+
+bool ISO10126_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"pad") ) { outValue = pad_dyn(); return true; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"unpad") ) { outValue = unpad_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *ISO10126_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *ISO10126_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class ISO10126_obj::__mClass;
+
+static ::String ISO10126_obj_sStaticFields[] = {
+	HX_("pad",53,51,55,00),
+	HX_("unpad",9a,a8,ec,a6),
+	::String(null())
+};
+
+void ISO10126_obj::__register()
+{
+	ISO10126_obj _hx_dummy;
+	ISO10126_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.padding.ISO10126",33,c5,ec,25);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &ISO10126_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(ISO10126_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< ISO10126_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = ISO10126_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = ISO10126_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
diff --git a/Sources/c_borogove/src/haxe/crypto/padding/NoPadding.cpp b/Sources/c_borogove/src/haxe/crypto/padding/NoPadding.cpp
new file mode 100644
index 0000000..b6570c9
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/padding/NoPadding.cpp
@@ -0,0 +1,105 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_padding_NoPadding
+#include <haxe/crypto/padding/NoPadding.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_cf82b51bb7889ef5_7_pad,"haxe.crypto.padding.NoPadding","pad",0xaf958253,"haxe.crypto.padding.NoPadding.pad","haxe/crypto/padding/NoPadding.hx",7,0x7c9609b1)
+HX_LOCAL_STACK_FRAME(_hx_pos_cf82b51bb7889ef5_11_unpad,"haxe.crypto.padding.NoPadding","unpad",0xcb5b199a,"haxe.crypto.padding.NoPadding.unpad","haxe/crypto/padding/NoPadding.hx",11,0x7c9609b1)
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+void NoPadding_obj::__construct() { }
+
+Dynamic NoPadding_obj::__CreateEmpty() { return new NoPadding_obj; }
+
+void *NoPadding_obj::_hx_vtable = 0;
+
+Dynamic NoPadding_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< NoPadding_obj > _hx_result = new NoPadding_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool NoPadding_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x422383a6;
+}
+
+ ::haxe::io::Bytes NoPadding_obj::pad( ::haxe::io::Bytes ciphertext,int blockSize){
+            	HX_STACKFRAME(&_hx_pos_cf82b51bb7889ef5_7_pad)
+HXDLIN(   7)		return ciphertext->sub(0,ciphertext->length);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(NoPadding_obj,pad,return )
+
+ ::haxe::io::Bytes NoPadding_obj::unpad( ::haxe::io::Bytes encrypt){
+            	HX_STACKFRAME(&_hx_pos_cf82b51bb7889ef5_11_unpad)
+HXDLIN(  11)		return encrypt;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(NoPadding_obj,unpad,return )
+
+
+NoPadding_obj::NoPadding_obj()
+{
+}
+
+bool NoPadding_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"pad") ) { outValue = pad_dyn(); return true; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"unpad") ) { outValue = unpad_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *NoPadding_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *NoPadding_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class NoPadding_obj::__mClass;
+
+static ::String NoPadding_obj_sStaticFields[] = {
+	HX_("pad",53,51,55,00),
+	HX_("unpad",9a,a8,ec,a6),
+	::String(null())
+};
+
+void NoPadding_obj::__register()
+{
+	NoPadding_obj _hx_dummy;
+	NoPadding_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.padding.NoPadding",6e,11,e8,d6);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &NoPadding_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(NoPadding_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< NoPadding_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = NoPadding_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = NoPadding_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
diff --git a/Sources/c_borogove/src/haxe/crypto/padding/NullPadding.cpp b/Sources/c_borogove/src/haxe/crypto/padding/NullPadding.cpp
new file mode 100644
index 0000000..6f34612
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/padding/NullPadding.cpp
@@ -0,0 +1,132 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_padding_NullPadding
+#include <haxe/crypto/padding/NullPadding.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_6948618a391f2740_7_pad,"haxe.crypto.padding.NullPadding","pad",0xd2db714d,"haxe.crypto.padding.NullPadding.pad","haxe/crypto/padding/NullPadding.hx",7,0x1b748237)
+HX_LOCAL_STACK_FRAME(_hx_pos_6948618a391f2740_18_unpad,"haxe.crypto.padding.NullPadding","unpad",0xbf363b14,"haxe.crypto.padding.NullPadding.unpad","haxe/crypto/padding/NullPadding.hx",18,0x1b748237)
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+void NullPadding_obj::__construct() { }
+
+Dynamic NullPadding_obj::__CreateEmpty() { return new NullPadding_obj; }
+
+void *NullPadding_obj::_hx_vtable = 0;
+
+Dynamic NullPadding_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< NullPadding_obj > _hx_result = new NullPadding_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool NullPadding_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x63beeba0;
+}
+
+ ::haxe::io::Bytes NullPadding_obj::pad( ::haxe::io::Bytes ciphertext,int blockSize){
+            	HX_STACKFRAME(&_hx_pos_6948618a391f2740_7_pad)
+HXLINE(   9)		int bsize = (ciphertext->length + (blockSize - ::hx::Mod(ciphertext->length,blockSize)));
+HXLINE(  10)		 ::haxe::io::Bytes buffer = ::haxe::io::Bytes_obj::alloc(bsize);
+HXLINE(  11)		buffer->blit(0,ciphertext,0,ciphertext->length);
+HXLINE(  12)		{
+HXLINE(  12)			int _g = ciphertext->length;
+HXDLIN(  12)			while((_g < bsize)){
+HXLINE(  12)				_g = (_g + 1);
+HXLINE(  13)				buffer->b[(_g - 1)] = ( (unsigned char)(0) );
+            			}
+            		}
+HXLINE(  15)		return buffer;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(NullPadding_obj,pad,return )
+
+ ::haxe::io::Bytes NullPadding_obj::unpad( ::haxe::io::Bytes encrypt){
+            	HX_STACKFRAME(&_hx_pos_6948618a391f2740_18_unpad)
+HXLINE(  19)		int padding = 0;
+HXLINE(  20)		int pos = encrypt->length;
+HXLINE(  21)		while(true){
+HXLINE(  21)			bool _hx_tmp;
+HXDLIN(  21)			if ((padding == 0)) {
+HXLINE(  21)				_hx_tmp = (pos > 0);
+            			}
+            			else {
+HXLINE(  21)				_hx_tmp = false;
+            			}
+HXDLIN(  21)			if (!(_hx_tmp)) {
+HXLINE(  21)				goto _hx_goto_2;
+            			}
+HXLINE(  22)			pos = (pos - 1);
+HXLINE(  23)			padding = ( (int)(encrypt->b->__get(pos)) );
+            		}
+            		_hx_goto_2:;
+HXLINE(  25)		return encrypt->sub(0,(pos + 1));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(NullPadding_obj,unpad,return )
+
+
+NullPadding_obj::NullPadding_obj()
+{
+}
+
+bool NullPadding_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"pad") ) { outValue = pad_dyn(); return true; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"unpad") ) { outValue = unpad_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *NullPadding_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *NullPadding_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class NullPadding_obj::__mClass;
+
+static ::String NullPadding_obj_sStaticFields[] = {
+	HX_("pad",53,51,55,00),
+	HX_("unpad",9a,a8,ec,a6),
+	::String(null())
+};
+
+void NullPadding_obj::__register()
+{
+	NullPadding_obj _hx_dummy;
+	NullPadding_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.padding.NullPadding",68,7b,18,1d);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &NullPadding_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(NullPadding_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< NullPadding_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = NullPadding_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = NullPadding_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
diff --git a/Sources/c_borogove/src/haxe/crypto/padding/PKCS7.cpp b/Sources/c_borogove/src/haxe/crypto/padding/PKCS7.cpp
new file mode 100644
index 0000000..4b7e5d4
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/padding/PKCS7.cpp
@@ -0,0 +1,138 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_padding_PKCS7
+#include <haxe/crypto/padding/PKCS7.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_88ba76f5af89f0a6_7_pad,"haxe.crypto.padding.PKCS7","pad",0xaf68664f,"haxe.crypto.padding.PKCS7.pad","haxe/crypto/padding/PKCS7.hx",7,0x37ba14b5)
+HX_LOCAL_STACK_FRAME(_hx_pos_88ba76f5af89f0a6_22_unpad,"haxe.crypto.padding.PKCS7","unpad",0x90abf496,"haxe.crypto.padding.PKCS7.unpad","haxe/crypto/padding/PKCS7.hx",22,0x37ba14b5)
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+void PKCS7_obj::__construct() { }
+
+Dynamic PKCS7_obj::__CreateEmpty() { return new PKCS7_obj; }
+
+void *PKCS7_obj::_hx_vtable = 0;
+
+Dynamic PKCS7_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< PKCS7_obj > _hx_result = new PKCS7_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool PKCS7_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x15a0ad06;
+}
+
+ ::haxe::io::Bytes PKCS7_obj::pad( ::haxe::io::Bytes ciphertext,int blockSize){
+            	HX_STACKFRAME(&_hx_pos_88ba76f5af89f0a6_7_pad)
+HXLINE(   8)		if ((blockSize > 255)) {
+HXLINE(   9)			HX_STACK_DO_THROW(HX_("PKCS#7 padding cannot be longer than 255 bytes",c5,e8,72,20));
+            		}
+HXLINE(  10)		if ((blockSize < 0)) {
+HXLINE(  11)			HX_STACK_DO_THROW(HX_("PKCS#7 padding size must be positive",ce,33,be,7d));
+            		}
+HXLINE(  12)		int padding = (blockSize - ::hx::Mod(ciphertext->length,blockSize));
+HXLINE(  13)		int bsize = (ciphertext->length + padding);
+HXLINE(  14)		 ::haxe::io::Bytes buffer = ::haxe::io::Bytes_obj::alloc(bsize);
+HXLINE(  15)		buffer->blit(0,ciphertext,0,ciphertext->length);
+HXLINE(  16)		{
+HXLINE(  16)			int _g = ciphertext->length;
+HXDLIN(  16)			while((_g < bsize)){
+HXLINE(  16)				_g = (_g + 1);
+HXLINE(  17)				buffer->b[(_g - 1)] = ( (unsigned char)((padding & 255)) );
+            			}
+            		}
+HXLINE(  19)		return buffer;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(PKCS7_obj,pad,return )
+
+ ::haxe::io::Bytes PKCS7_obj::unpad( ::haxe::io::Bytes encrypt){
+            	HX_STACKFRAME(&_hx_pos_88ba76f5af89f0a6_22_unpad)
+HXLINE(  23)		int padding = ( (int)(encrypt->b->__get((encrypt->length - 1))) );
+HXLINE(  24)		if ((padding > encrypt->length)) {
+HXLINE(  25)			HX_STACK_DO_THROW(((((HX_("Cannot remove ",5f,81,1b,10) + padding) + HX_(" bytes, because message is ",a4,6a,4e,45)) + encrypt->length) + HX_(" bytes",4b,94,03,89)));
+            		}
+HXLINE(  26)		int block = (encrypt->length - padding);
+HXLINE(  27)		{
+HXLINE(  27)			int _g = block;
+HXDLIN(  27)			int _g1 = encrypt->length;
+HXDLIN(  27)			while((_g < _g1)){
+HXLINE(  27)				_g = (_g + 1);
+HXDLIN(  27)				int i = (_g - 1);
+HXLINE(  28)				if ((encrypt->b->__get(i) != padding)) {
+HXLINE(  29)					HX_STACK_DO_THROW((((((HX_("Invalid padding value. Got ",3f,c8,3b,20) + encrypt->b->__get(i)) + HX_(", expected ",b4,e5,81,19)) + padding) + HX_(" at position ",0a,c2,01,e0)) + i));
+            				}
+            			}
+            		}
+HXLINE(  31)		return encrypt->sub(0,block);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(PKCS7_obj,unpad,return )
+
+
+PKCS7_obj::PKCS7_obj()
+{
+}
+
+bool PKCS7_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"pad") ) { outValue = pad_dyn(); return true; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"unpad") ) { outValue = unpad_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *PKCS7_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *PKCS7_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class PKCS7_obj::__mClass;
+
+static ::String PKCS7_obj_sStaticFields[] = {
+	HX_("pad",53,51,55,00),
+	HX_("unpad",9a,a8,ec,a6),
+	::String(null())
+};
+
+void PKCS7_obj::__register()
+{
+	PKCS7_obj _hx_dummy;
+	PKCS7_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.padding.PKCS7",6a,47,02,ec);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &PKCS7_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(PKCS7_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< PKCS7_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = PKCS7_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = PKCS7_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
diff --git a/Sources/c_borogove/src/haxe/crypto/padding/SpacePadding.cpp b/Sources/c_borogove/src/haxe/crypto/padding/SpacePadding.cpp
new file mode 100644
index 0000000..a8f1c3d
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/padding/SpacePadding.cpp
@@ -0,0 +1,132 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_padding_SpacePadding
+#include <haxe/crypto/padding/SpacePadding.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_6a51e262ebd040bf_7_pad,"haxe.crypto.padding.SpacePadding","pad",0xf0e12ef2,"haxe.crypto.padding.SpacePadding.pad","haxe/crypto/padding/SpacePadding.hx",7,0x69185150)
+HX_LOCAL_STACK_FRAME(_hx_pos_6a51e262ebd040bf_18_unpad,"haxe.crypto.padding.SpacePadding","unpad",0xb8626bf9,"haxe.crypto.padding.SpacePadding.unpad","haxe/crypto/padding/SpacePadding.hx",18,0x69185150)
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+void SpacePadding_obj::__construct() { }
+
+Dynamic SpacePadding_obj::__CreateEmpty() { return new SpacePadding_obj; }
+
+void *SpacePadding_obj::_hx_vtable = 0;
+
+Dynamic SpacePadding_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< SpacePadding_obj > _hx_result = new SpacePadding_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool SpacePadding_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x4ec10871;
+}
+
+ ::haxe::io::Bytes SpacePadding_obj::pad( ::haxe::io::Bytes ciphertext,int blockSize){
+            	HX_STACKFRAME(&_hx_pos_6a51e262ebd040bf_7_pad)
+HXLINE(   9)		int bsize = (ciphertext->length + (blockSize - ::hx::Mod(ciphertext->length,blockSize)));
+HXLINE(  10)		 ::haxe::io::Bytes buffer = ::haxe::io::Bytes_obj::alloc(bsize);
+HXLINE(  11)		buffer->blit(0,ciphertext,0,ciphertext->length);
+HXLINE(  12)		{
+HXLINE(  12)			int _g = ciphertext->length;
+HXDLIN(  12)			while((_g < bsize)){
+HXLINE(  12)				_g = (_g + 1);
+HXLINE(  13)				buffer->b[(_g - 1)] = ( (unsigned char)(32) );
+            			}
+            		}
+HXLINE(  15)		return buffer;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(SpacePadding_obj,pad,return )
+
+ ::haxe::io::Bytes SpacePadding_obj::unpad( ::haxe::io::Bytes encrypt){
+            	HX_STACKFRAME(&_hx_pos_6a51e262ebd040bf_18_unpad)
+HXLINE(  19)		int padding = 32;
+HXLINE(  20)		int pos = encrypt->length;
+HXLINE(  21)		while(true){
+HXLINE(  21)			bool _hx_tmp;
+HXDLIN(  21)			if ((padding == 32)) {
+HXLINE(  21)				_hx_tmp = (pos > 0);
+            			}
+            			else {
+HXLINE(  21)				_hx_tmp = false;
+            			}
+HXDLIN(  21)			if (!(_hx_tmp)) {
+HXLINE(  21)				goto _hx_goto_2;
+            			}
+HXLINE(  22)			pos = (pos - 1);
+HXLINE(  23)			padding = ( (int)(encrypt->b->__get(pos)) );
+            		}
+            		_hx_goto_2:;
+HXLINE(  25)		return encrypt->sub(0,(pos + 1));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(SpacePadding_obj,unpad,return )
+
+
+SpacePadding_obj::SpacePadding_obj()
+{
+}
+
+bool SpacePadding_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"pad") ) { outValue = pad_dyn(); return true; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"unpad") ) { outValue = unpad_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *SpacePadding_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *SpacePadding_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class SpacePadding_obj::__mClass;
+
+static ::String SpacePadding_obj_sStaticFields[] = {
+	HX_("pad",53,51,55,00),
+	HX_("unpad",9a,a8,ec,a6),
+	::String(null())
+};
+
+void SpacePadding_obj::__register()
+{
+	SpacePadding_obj _hx_dummy;
+	SpacePadding_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.padding.SpacePadding",8d,42,db,26);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &SpacePadding_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(SpacePadding_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< SpacePadding_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = SpacePadding_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = SpacePadding_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
diff --git a/Sources/c_borogove/src/haxe/crypto/padding/TBC.cpp b/Sources/c_borogove/src/haxe/crypto/padding/TBC.cpp
new file mode 100644
index 0000000..67b4dce
--- /dev/null
+++ b/Sources/c_borogove/src/haxe/crypto/padding/TBC.cpp
@@ -0,0 +1,140 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_crypto_padding_TBC
+#include <haxe/crypto/padding/TBC.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_60532882e7141197_7_pad,"haxe.crypto.padding.TBC","pad",0x9b88c1f8,"haxe.crypto.padding.TBC.pad","haxe/crypto/padding/TBC.hx",7,0x0391e6ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_60532882e7141197_20_unpad,"haxe.crypto.padding.TBC","unpad",0x0a594c7f,"haxe.crypto.padding.TBC.unpad","haxe/crypto/padding/TBC.hx",20,0x0391e6ec)
+namespace haxe{
+namespace crypto{
+namespace padding{
+
+void TBC_obj::__construct() { }
+
+Dynamic TBC_obj::__CreateEmpty() { return new TBC_obj; }
+
+void *TBC_obj::_hx_vtable = 0;
+
+Dynamic TBC_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< TBC_obj > _hx_result = new TBC_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool TBC_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x1629e12f;
+}
+
+ ::haxe::io::Bytes TBC_obj::pad( ::haxe::io::Bytes ciphertext,int blockSize){
+            	HX_STACKFRAME(&_hx_pos_60532882e7141197_7_pad)
+HXLINE(   9)		int paddingByte;
+HXDLIN(   9)		if (((( (int)(ciphertext->b->__get((ciphertext->length - 1))) ) & 1) == 1)) {
+HXLINE(   9)			paddingByte = 0;
+            		}
+            		else {
+HXLINE(   9)			paddingByte = 255;
+            		}
+HXLINE(  11)		int bsize = (ciphertext->length + (blockSize - ::hx::Mod(ciphertext->length,blockSize)));
+HXLINE(  12)		 ::haxe::io::Bytes buffer = ::haxe::io::Bytes_obj::alloc(bsize);
+HXLINE(  13)		buffer->blit(0,ciphertext,0,ciphertext->length);
+HXLINE(  14)		{
+HXLINE(  14)			int _g = ciphertext->length;
+HXDLIN(  14)			while((_g < bsize)){
+HXLINE(  14)				_g = (_g + 1);
+HXLINE(  15)				buffer->b[(_g - 1)] = ( (unsigned char)(paddingByte) );
+            			}
+            		}
+HXLINE(  17)		return buffer;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(TBC_obj,pad,return )
+
+ ::haxe::io::Bytes TBC_obj::unpad( ::haxe::io::Bytes encrypt){
+            	HX_STACKFRAME(&_hx_pos_60532882e7141197_20_unpad)
+HXLINE(  21)		int pos = (encrypt->length - 1);
+HXLINE(  22)		int paddingByte = ( (int)(encrypt->b->__get(pos)) );
+HXLINE(  23)		int padding = paddingByte;
+HXLINE(  24)		while(true){
+HXLINE(  24)			bool _hx_tmp;
+HXDLIN(  24)			if ((padding == paddingByte)) {
+HXLINE(  24)				_hx_tmp = (pos > -1);
+            			}
+            			else {
+HXLINE(  24)				_hx_tmp = false;
+            			}
+HXDLIN(  24)			if (!(_hx_tmp)) {
+HXLINE(  24)				goto _hx_goto_2;
+            			}
+HXLINE(  25)			pos = (pos - 1);
+HXLINE(  26)			padding = ( (int)(encrypt->b->__get(pos)) );
+            		}
+            		_hx_goto_2:;
+HXLINE(  28)		return encrypt->sub(0,(pos + 1));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(TBC_obj,unpad,return )
+
+
+TBC_obj::TBC_obj()
+{
+}
+
+bool TBC_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"pad") ) { outValue = pad_dyn(); return true; }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"unpad") ) { outValue = unpad_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *TBC_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *TBC_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class TBC_obj::__mClass;
+
+static ::String TBC_obj_sStaticFields[] = {
+	HX_("pad",53,51,55,00),
+	HX_("unpad",9a,a8,ec,a6),
+	::String(null())
+};
+
+void TBC_obj::__register()
+{
+	TBC_obj _hx_dummy;
+	TBC_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("haxe.crypto.padding.TBC",93,5a,2f,05);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &TBC_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(TBC_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< TBC_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = TBC_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = TBC_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace haxe
+} // end namespace crypto
+} // end namespace padding
diff --git a/Sources/c_borogove/src/haxe/crypto/random/SecureRandom.cpp b/Sources/c_borogove/src/haxe/crypto/random/SecureRandom.cpp
index 52c8f5e..afd2050 100644
--- a/Sources/c_borogove/src/haxe/crypto/random/SecureRandom.cpp
+++ b/Sources/c_borogove/src/haxe/crypto/random/SecureRandom.cpp
@@ -1,6 +1,10 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
+#ifndef INCLUDED_95f339a1d026d52c
+#define INCLUDED_95f339a1d026d52c
+#include "hxMath.h"
+#endif
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
@@ -34,8 +38,11 @@
 
 HX_LOCAL_STACK_FRAME(_hx_pos_f39c4520f0e8ea03_26_init,"haxe.crypto.random.SecureRandom","init",0x0e9ad35e,"haxe.crypto.random.SecureRandom.init","haxe/crypto/random/SecureRandom.hx",26,0xd102d71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_f39c4520f0e8ea03_32_int,"haxe.crypto.random.SecureRandom","int",0x3e0e7861,"haxe.crypto.random.SecureRandom.int","haxe/crypto/random/SecureRandom.hx",32,0xd102d71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_f39c4520f0e8ea03_60_bytes,"haxe.crypto.random.SecureRandom","bytes",0xb85db45d,"haxe.crypto.random.SecureRandom.bytes","haxe/crypto/random/SecureRandom.hx",60,0xd102d71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_f39c4520f0e8ea03_200_sysInt,"haxe.crypto.random.SecureRandom","sysInt",0x64f2c5b0,"haxe.crypto.random.SecureRandom.sysInt","haxe/crypto/random/SecureRandom.hx",200,0xd102d71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_f39c4520f0e8ea03_213_sysBytes,"haxe.crypto.random.SecureRandom","sysBytes",0x9aeb336c,"haxe.crypto.random.SecureRandom.sysBytes","haxe/crypto/random/SecureRandom.hx",213,0xd102d71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_f39c4520f0e8ea03_226_winInt,"haxe.crypto.random.SecureRandom","winInt",0xc4a8de01,"haxe.crypto.random.SecureRandom.winInt","haxe/crypto/random/SecureRandom.hx",226,0xd102d71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_f39c4520f0e8ea03_250_winBytes,"haxe.crypto.random.SecureRandom","winBytes",0xe694c1fd,"haxe.crypto.random.SecureRandom.winBytes","haxe/crypto/random/SecureRandom.hx",250,0xd102d71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_f39c4520f0e8ea03_12_boot,"haxe.crypto.random.SecureRandom","boot",0x09fb1c80,"haxe.crypto.random.SecureRandom.boot","haxe/crypto/random/SecureRandom.hx",12,0xd102d71d)
 namespace haxe{
 namespace crypto{
@@ -79,6 +86,20 @@ HXLINE(  52)		return ::haxe::crypto::random::SecureRandom_obj::sysInt();
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC0(SecureRandom_obj,_hx_int,return )
 
+ ::haxe::io::Bytes SecureRandom_obj::bytes(int length){
+            	HX_STACKFRAME(&_hx_pos_f39c4520f0e8ea03_60_bytes)
+HXLINE(  61)		if ((length <= 0)) {
+HXLINE(  62)			return ::haxe::io::Bytes_obj::alloc(0);
+            		}
+HXLINE(  63)		if (!(::haxe::crypto::random::SecureRandom_obj::initialized)) {
+HXLINE(  64)			::haxe::crypto::random::SecureRandom_obj::init();
+            		}
+HXLINE(  90)		return ::haxe::crypto::random::SecureRandom_obj::sysBytes(length);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(SecureRandom_obj,bytes,return )
+
 int SecureRandom_obj::sysInt(){
             	HX_STACKFRAME(&_hx_pos_f39c4520f0e8ea03_200_sysInt)
 HXLINE( 201)		if (::sys::FileSystem_obj::exists(HX_("/dev/urandom",ef,12,d0,ba))) {
@@ -97,6 +118,24 @@ HXDLIN( 210)		return 0;
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC0(SecureRandom_obj,sysInt,return )
 
+ ::haxe::io::Bytes SecureRandom_obj::sysBytes(int length){
+            	HX_STACKFRAME(&_hx_pos_f39c4520f0e8ea03_213_sysBytes)
+HXLINE( 214)		if (::sys::FileSystem_obj::exists(HX_("/dev/urandom",ef,12,d0,ba))) {
+HXLINE( 215)			 ::sys::io::FileInput file = ::sys::io::File_obj::read(HX_("/dev/urandom",ef,12,d0,ba),null());
+HXLINE( 216)			 ::haxe::io::Bytes result = file->read(length);
+HXLINE( 217)			file->close();
+HXLINE( 218)			return result;
+            		}
+HXLINE( 220)		if ((::Sys_obj::systemName() == HX_("Windows",63,06,c6,b5))) {
+HXLINE( 221)			return ::haxe::crypto::random::SecureRandom_obj::winBytes(length);
+            		}
+HXLINE( 223)		HX_STACK_DO_THROW(HX_("No secure random source available",37,f9,ae,cd));
+HXDLIN( 223)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(SecureRandom_obj,sysBytes,return )
+
 int SecureRandom_obj::winInt(){
             	HX_GC_STACKFRAME(&_hx_pos_f39c4520f0e8ea03_226_winInt)
 HXLINE( 227)		try {
@@ -143,6 +182,61 @@ HXDLIN( 247)		return 0;
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC0(SecureRandom_obj,winInt,return )
 
+ ::haxe::io::Bytes SecureRandom_obj::winBytes(int length){
+            	HX_GC_STACKFRAME(&_hx_pos_f39c4520f0e8ea03_250_winBytes)
+HXLINE( 251)		try {
+            			HX_STACK_CATCHABLE( ::Dynamic, 0);
+HXLINE( 252)			 ::sys::io::Process proc =  ::sys::io::Process_obj::__alloc( HX_CTX ,HX_("powershell",8b,ea,7a,a6),::Array_obj< ::String >::__new(3)->init(0,HX_("-NoProfile",fb,fc,1e,a0))->init(1,HX_("-Command",9e,a8,9c,5c))->init(2,(((HX_("$r=[System.Security.Cryptography.RNGCryptoServiceProvider]::new();",36,a9,0c,08) + HX_("$b=New-Object byte[] ",21,19,9a,b9)) + length) + HX_(";$r.GetBytes($b);$r.Dispose();$b-join','",46,38,72,20))),null());
+HXLINE( 259)			::String output = ::StringTools_obj::trim(proc->_hx_stdout->readAll(null())->toString());
+HXLINE( 260)			 ::Dynamic code = proc->exitCode(null());
+HXLINE( 261)			proc->close();
+HXLINE( 262)			bool _hx_tmp;
+HXDLIN( 262)			if (::hx::IsEq( code,0 )) {
+HXLINE( 262)				_hx_tmp = (output.length > 0);
+            			}
+            			else {
+HXLINE( 262)				_hx_tmp = false;
+            			}
+HXDLIN( 262)			if (_hx_tmp) {
+HXLINE( 263)				::Array< ::String > parts = output.split(HX_(",",2c,00,00,00));
+HXLINE( 264)				 ::haxe::io::Bytes result = ::haxe::io::Bytes_obj::alloc(length);
+HXLINE( 265)				{
+HXLINE( 265)					int _g = 0;
+HXDLIN( 265)					int _g1 = ::Math_obj::floor(::Math_obj::min(( (Float)(length) ),( (Float)(parts->length) )));
+HXDLIN( 265)					while((_g < _g1)){
+HXLINE( 265)						_g = (_g + 1);
+HXDLIN( 265)						int i = (_g - 1);
+HXLINE( 266)						 ::Dynamic val = ::Std_obj::parseInt(parts->__get(i));
+HXLINE( 267)						{
+HXLINE( 267)							int v;
+HXDLIN( 267)							if (::hx::IsNotNull( val )) {
+HXLINE( 267)								v = ( (int)(val) );
+            							}
+            							else {
+HXLINE( 267)								v = ::Math_obj::floor((::Math_obj::random() * ( (Float)(256) )));
+            							}
+HXDLIN( 267)							result->b[i] = ( (unsigned char)(v) );
+            						}
+            					}
+            				}
+HXLINE( 269)				return result;
+            			}
+            		} catch( ::Dynamic _hx_e) {
+            			if (_hx_e.IsClass<  ::Dynamic >() ){
+            				HX_STACK_BEGIN_CATCH
+            				 ::Dynamic _g2 = _hx_e;
+            			}
+            			else {
+            				HX_STACK_DO_THROW(_hx_e);
+            			}
+            		}
+HXLINE( 272)		HX_STACK_DO_THROW(HX_("No secure random source available",37,f9,ae,cd));
+HXDLIN( 272)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(SecureRandom_obj,winBytes,return )
+
 
 SecureRandom_obj::SecureRandom_obj()
 {
@@ -157,10 +251,17 @@ bool SecureRandom_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::
 	case 4:
 		if (HX_FIELD_EQ(inName,"init") ) { outValue = init_dyn(); return true; }
 		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"bytes") ) { outValue = bytes_dyn(); return true; }
+		break;
 	case 6:
 		if (HX_FIELD_EQ(inName,"sysInt") ) { outValue = sysInt_dyn(); return true; }
 		if (HX_FIELD_EQ(inName,"winInt") ) { outValue = winInt_dyn(); return true; }
 		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"sysBytes") ) { outValue = sysBytes_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"winBytes") ) { outValue = winBytes_dyn(); return true; }
+		break;
 	case 11:
 		if (HX_FIELD_EQ(inName,"initialized") ) { outValue = ( initialized ); return true; }
 	}
@@ -201,8 +302,11 @@ static ::String SecureRandom_obj_sStaticFields[] = {
 	HX_("initialized",14,f5,0f,37),
 	HX_("init",10,3b,bb,45),
 	HX_("int",ef,0c,50,00),
+	HX_("bytes",6b,08,98,bd),
 	HX_("sysInt",e2,fd,c1,f2),
+	HX_("sysBytes",1e,5c,1e,a5),
 	HX_("winInt",33,16,78,52),
+	HX_("winBytes",af,ea,c7,f0),
 	::String(null())
 };
 
diff --git a/Sources/c_borogove/src/haxe/io/Input.cpp b/Sources/c_borogove/src/haxe/io/Input.cpp
index caa26dc..7af019e 100644
--- a/Sources/c_borogove/src/haxe/io/Input.cpp
+++ b/Sources/c_borogove/src/haxe/io/Input.cpp
@@ -37,6 +37,7 @@ HX_LOCAL_STACK_FRAME(_hx_pos_220702dcc8429dc4_64_readBytes,"haxe.io.Input","read
 HX_LOCAL_STACK_FRAME(_hx_pos_220702dcc8429dc4_92_close,"haxe.io.Input","close",0xfc421af4,"haxe.io.Input.close","/usr/local/lib/haxe/std/haxe/io/Input.hx",92,0x3b290ab1)
 HX_LOCAL_STACK_FRAME(_hx_pos_220702dcc8429dc4_94_set_bigEndian,"haxe.io.Input","set_bigEndian",0x96732a9a,"haxe.io.Input.set_bigEndian","/usr/local/lib/haxe/std/haxe/io/Input.hx",94,0x3b290ab1)
 HX_LOCAL_STACK_FRAME(_hx_pos_220702dcc8429dc4_106_readAll,"haxe.io.Input","readAll",0xaed6e9a7,"haxe.io.Input.readAll","/usr/local/lib/haxe/std/haxe/io/Input.hx",106,0x3b290ab1)
+HX_LOCAL_STACK_FRAME(_hx_pos_220702dcc8429dc4_145_read,"haxe.io.Input","read",0x27b9839a,"haxe.io.Input.read","/usr/local/lib/haxe/std/haxe/io/Input.hx",145,0x3b290ab1)
 HX_LOCAL_STACK_FRAME(_hx_pos_220702dcc8429dc4_281_readInt32,"haxe.io.Input","readInt32",0xde2f3154,"haxe.io.Input.readInt32","/usr/local/lib/haxe/std/haxe/io/Input.hx",281,0x3b290ab1)
 namespace haxe{
 namespace io{
@@ -198,6 +199,24 @@ HXLINE( 124)		return total->getBytes();
 
 HX_DEFINE_DYNAMIC_FUNC1(Input_obj,readAll,return )
 
+ ::haxe::io::Bytes Input_obj::read(int nbytes){
+            	HX_STACKFRAME(&_hx_pos_220702dcc8429dc4_145_read)
+HXLINE( 146)		 ::haxe::io::Bytes s = ::haxe::io::Bytes_obj::alloc(nbytes);
+HXLINE( 147)		int p = 0;
+HXLINE( 148)		while((nbytes > 0)){
+HXLINE( 149)			int k = this->readBytes(s,p,nbytes);
+HXLINE( 150)			if ((k == 0)) {
+HXLINE( 151)				HX_STACK_DO_THROW(::haxe::io::Error_obj::Blocked_dyn());
+            			}
+HXLINE( 152)			p = (p + k);
+HXLINE( 153)			nbytes = (nbytes - k);
+            		}
+HXLINE( 155)		return s;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Input_obj,read,return )
+
 int Input_obj::readInt32(){
             	HX_STACKFRAME(&_hx_pos_220702dcc8429dc4_281_readInt32)
 HXLINE( 282)		int ch1 = this->readByte();
@@ -224,6 +243,9 @@ Input_obj::Input_obj()
 ::hx::Val Input_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
 {
 	switch(inName.length) {
+	case 4:
+		if (HX_FIELD_EQ(inName,"read") ) { return ::hx::Val( read_dyn() ); }
+		break;
 	case 5:
 		if (HX_FIELD_EQ(inName,"close") ) { return ::hx::Val( close_dyn() ); }
 		break;
@@ -274,6 +296,7 @@ static ::String Input_obj_sMemberFields[] = {
 	HX_("close",b8,17,63,48),
 	HX_("set_bigEndian",5e,8b,c4,26),
 	HX_("readAll",6b,9f,c3,02),
+	HX_("read",56,4b,a7,4b),
 	HX_("readInt32",18,e0,07,8f),
 	::String(null()) };
 
diff --git a/Sources/c_borogove/src/haxe/io/Output.cpp b/Sources/c_borogove/src/haxe/io/Output.cpp
index e676bd4..eef0c39 100644
--- a/Sources/c_borogove/src/haxe/io/Output.cpp
+++ b/Sources/c_borogove/src/haxe/io/Output.cpp
@@ -26,7 +26,6 @@
 HX_LOCAL_STACK_FRAME(_hx_pos_0e34c0ce46c21137_47_writeByte,"haxe.io.Output","writeByte",0xb4fe513a,"haxe.io.Output.writeByte","/usr/local/lib/haxe/std/haxe/io/Output.hx",47,0x72d66600)
 HX_LOCAL_STACK_FRAME(_hx_pos_0e34c0ce46c21137_57_writeBytes,"haxe.io.Output","writeBytes",0xa988c1f9,"haxe.io.Output.writeBytes","/usr/local/lib/haxe/std/haxe/io/Output.hx",57,0x72d66600)
 HX_LOCAL_STACK_FRAME(_hx_pos_0e34c0ce46c21137_92_close,"haxe.io.Output","close",0xe726bfeb,"haxe.io.Output.close","/usr/local/lib/haxe/std/haxe/io/Output.hx",92,0x72d66600)
-HX_LOCAL_STACK_FRAME(_hx_pos_0e34c0ce46c21137_103_write,"haxe.io.Output","write",0x6f1d1512,"haxe.io.Output.write","/usr/local/lib/haxe/std/haxe/io/Output.hx",103,0x72d66600)
 HX_LOCAL_STACK_FRAME(_hx_pos_0e34c0ce46c21137_121_writeFullBytes,"haxe.io.Output","writeFullBytes",0xc2c420ea,"haxe.io.Output.writeFullBytes","/usr/local/lib/haxe/std/haxe/io/Output.hx",121,0x72d66600)
 HX_LOCAL_STACK_FRAME(_hx_pos_0e34c0ce46c21137_246_prepare,"haxe.io.Output","prepare",0xcd01ec7a,"haxe.io.Output.prepare","/usr/local/lib/haxe/std/haxe/io/Output.hx",246,0x72d66600)
 HX_LOCAL_STACK_FRAME(_hx_pos_0e34c0ce46c21137_278_writeString,"haxe.io.Output","writeString",0x97e1cb83,"haxe.io.Output.writeString","/usr/local/lib/haxe/std/haxe/io/Output.hx",278,0x72d66600)
@@ -97,23 +96,6 @@ void Output_obj::close(){
 
 HX_DEFINE_DYNAMIC_FUNC0(Output_obj,close,(void))
 
-void Output_obj::write( ::haxe::io::Bytes s){
-            	HX_STACKFRAME(&_hx_pos_0e34c0ce46c21137_103_write)
-HXLINE( 104)		int l = s->length;
-HXLINE( 105)		int p = 0;
-HXLINE( 106)		while((l > 0)){
-HXLINE( 107)			int k = this->writeBytes(s,p,l);
-HXLINE( 108)			if ((k == 0)) {
-HXLINE( 109)				HX_STACK_DO_THROW(::haxe::io::Error_obj::Blocked_dyn());
-            			}
-HXLINE( 110)			p = (p + k);
-HXLINE( 111)			l = (l - k);
-            		}
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC1(Output_obj,write,(void))
-
 void Output_obj::writeFullBytes( ::haxe::io::Bytes s,int pos,int len){
             	HX_STACKFRAME(&_hx_pos_0e34c0ce46c21137_121_writeFullBytes)
 HXDLIN( 121)		while((len > 0)){
@@ -152,7 +134,6 @@ Output_obj::Output_obj()
 	switch(inName.length) {
 	case 5:
 		if (HX_FIELD_EQ(inName,"close") ) { return ::hx::Val( close_dyn() ); }
-		if (HX_FIELD_EQ(inName,"write") ) { return ::hx::Val( write_dyn() ); }
 		break;
 	case 7:
 		if (HX_FIELD_EQ(inName,"prepare") ) { return ::hx::Val( prepare_dyn() ); }
@@ -181,7 +162,6 @@ static ::String Output_obj_sMemberFields[] = {
 	HX_("writeByte",87,13,d7,49),
 	HX_("writeBytes",0c,03,5a,52),
 	HX_("close",b8,17,63,48),
-	HX_("write",df,6c,59,d0),
 	HX_("writeFullBytes",7d,e7,66,a4),
 	HX_("prepare",87,91,dd,37),
 	HX_("writeString",10,7b,29,a6),
diff --git a/Sources/c_borogove/src/haxe/io/Path.cpp b/Sources/c_borogove/src/haxe/io/Path.cpp
index 8c9b5cf..a22ef23 100644
--- a/Sources/c_borogove/src/haxe/io/Path.cpp
+++ b/Sources/c_borogove/src/haxe/io/Path.cpp
@@ -17,15 +17,16 @@
 HX_DEFINE_STACK_FRAME(_hx_pos_9ba24db561a9c477_76_new,"haxe.io.Path","new",0x1b96d677,"haxe.io.Path.new","/usr/local/lib/haxe/std/haxe/io/Path.hx",76,0xc99b0f1c)
 HX_LOCAL_STACK_FRAME(_hx_pos_9ba24db561a9c477_115_toString,"haxe.io.Path","toString",0xc0ab5735,"haxe.io.Path.toString","/usr/local/lib/haxe/std/haxe/io/Path.hx",115,0xc99b0f1c)
 HX_LOCAL_STACK_FRAME(_hx_pos_9ba24db561a9c477_134_withoutDirectory,"haxe.io.Path","withoutDirectory",0xdf35ce8e,"haxe.io.Path.withoutDirectory","/usr/local/lib/haxe/std/haxe/io/Path.hx",134,0xc99b0f1c)
+HX_LOCAL_STACK_FRAME(_hx_pos_9ba24db561a9c477_161_extension,"haxe.io.Path","extension",0x91c9c4d6,"haxe.io.Path.extension","/usr/local/lib/haxe/std/haxe/io/Path.hx",161,0xc99b0f1c)
 HX_LOCAL_STACK_FRAME(_hx_pos_9ba24db561a9c477_189_join,"haxe.io.Path","join",0x05c781f3,"haxe.io.Path.join","/usr/local/lib/haxe/std/haxe/io/Path.hx",189,0xc99b0f1c)
 HX_LOCAL_STACK_FRAME(_hx_pos_9ba24db561a9c477_210_normalize,"haxe.io.Path","normalize",0x585a68e4,"haxe.io.Path.normalize","/usr/local/lib/haxe/std/haxe/io/Path.hx",210,0xc99b0f1c)
-static const ::String _hx_array_data_4ec6cf05_10[] = {
+static const ::String _hx_array_data_4ec6cf05_11[] = {
 	HX_("/",2f,00,00,00),
 };
-static const ::String _hx_array_data_4ec6cf05_11[] = {
+static const ::String _hx_array_data_4ec6cf05_12[] = {
 	HX_(":",3a,00,00,00),
 };
-static const ::String _hx_array_data_4ec6cf05_12[] = {
+static const ::String _hx_array_data_4ec6cf05_13[] = {
 	HX_("/",2f,00,00,00),
 };
 HX_LOCAL_STACK_FRAME(_hx_pos_9ba24db561a9c477_271_addTrailingSlash,"haxe.io.Path","addTrailingSlash",0x8b4f8e69,"haxe.io.Path.addTrailingSlash","/usr/local/lib/haxe/std/haxe/io/Path.hx",271,0xc99b0f1c)
@@ -125,6 +126,18 @@ HXLINE( 137)		return s->toString();
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Path_obj,withoutDirectory,return )
 
+::String Path_obj::extension(::String path){
+            	HX_GC_STACKFRAME(&_hx_pos_9ba24db561a9c477_161_extension)
+HXLINE( 162)		 ::haxe::io::Path s =  ::haxe::io::Path_obj::__alloc( HX_CTX ,path);
+HXLINE( 163)		if (::hx::IsNull( s->ext )) {
+HXLINE( 164)			return HX_("",00,00,00,00);
+            		}
+HXLINE( 165)		return s->ext;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Path_obj,extension,return )
+
 ::String Path_obj::join(::Array< ::String > paths){
             	HX_STACKFRAME(&_hx_pos_9ba24db561a9c477_189_join)
 HXLINE( 190)		::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
@@ -252,7 +265,7 @@ HXLINE( 249)									if (::hx::IsNotNull( acc->charBuf )) {
 HXLINE( 249)										acc->flush();
             									}
 HXDLIN( 249)									if (::hx::IsNull( acc->b )) {
-HXLINE( 249)										acc->b = ::Array_obj< ::String >::fromData( _hx_array_data_4ec6cf05_10,1);
+HXLINE( 249)										acc->b = ::Array_obj< ::String >::fromData( _hx_array_data_4ec6cf05_11,1);
             									}
             									else {
 HXLINE( 249)										acc->b->push(HX_("/",2f,00,00,00));
@@ -288,7 +301,7 @@ HXLINE( 242)							if (::hx::IsNotNull( acc->charBuf )) {
 HXLINE( 242)								acc->flush();
             							}
 HXDLIN( 242)							if (::hx::IsNull( acc->b )) {
-HXLINE( 242)								acc->b = ::Array_obj< ::String >::fromData( _hx_array_data_4ec6cf05_11,1);
+HXLINE( 242)								acc->b = ::Array_obj< ::String >::fromData( _hx_array_data_4ec6cf05_12,1);
             							}
             							else {
 HXLINE( 242)								acc->b->push(HX_(":",3a,00,00,00));
@@ -305,7 +318,7 @@ HXLINE( 249)								if (::hx::IsNotNull( acc->charBuf )) {
 HXLINE( 249)									acc->flush();
             								}
 HXDLIN( 249)								if (::hx::IsNull( acc->b )) {
-HXLINE( 249)									acc->b = ::Array_obj< ::String >::fromData( _hx_array_data_4ec6cf05_12,1);
+HXLINE( 249)									acc->b = ::Array_obj< ::String >::fromData( _hx_array_data_4ec6cf05_13,1);
             								}
             								else {
 HXLINE( 249)									acc->b->push(HX_("/",2f,00,00,00));
@@ -376,21 +389,21 @@ STATIC_HX_DEFINE_DYNAMIC_FUNC1(Path_obj,addTrailingSlash,return )
 HXLINE( 300)		while(true){
 HXLINE( 301)			 ::Dynamic _g = path.charCodeAt((path.length - 1));
 HXDLIN( 301)			if (::hx::IsNull( _g )) {
-HXLINE( 305)				goto _hx_goto_14;
+HXLINE( 305)				goto _hx_goto_15;
             			}
             			else {
 HXLINE( 301)				 ::Dynamic _hx_switch_0 = _g;
             				if (  (_hx_switch_0==47) ||  (_hx_switch_0==92) ){
 HXLINE( 303)					path = path.substr(0,-1);
-HXDLIN( 303)					goto _hx_goto_15;
+HXDLIN( 303)					goto _hx_goto_16;
             				}
             				/* default */{
-HXLINE( 305)					goto _hx_goto_14;
+HXLINE( 305)					goto _hx_goto_15;
             				}
-            				_hx_goto_15:;
+            				_hx_goto_16:;
             			}
             		}
-            		_hx_goto_14:;
+            		_hx_goto_15:;
 HXLINE( 308)		return path;
             	}
 
@@ -476,6 +489,7 @@ bool Path_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::Prop
 		if (HX_FIELD_EQ(inName,"join") ) { outValue = join_dyn(); return true; }
 		break;
 	case 9:
+		if (HX_FIELD_EQ(inName,"extension") ) { outValue = extension_dyn(); return true; }
 		if (HX_FIELD_EQ(inName,"normalize") ) { outValue = normalize_dyn(); return true; }
 		break;
 	case 10:
@@ -539,6 +553,7 @@ static ::String Path_obj_sMemberFields[] = {
 
 static ::String Path_obj_sStaticFields[] = {
 	HX_("withoutDirectory",05,17,d2,7a),
+	HX_("extension",7f,93,10,e5),
 	HX_("join",ea,33,65,46),
 	HX_("normalize",8d,37,a1,ab),
 	HX_("addTrailingSlash",e0,d6,eb,26),
diff --git a/Sources/c_borogove/src/hx/CFFI.cpp b/Sources/c_borogove/src/hx/CFFI.cpp
index 592c8e2..264447c 100644
--- a/Sources/c_borogove/src/hx/CFFI.cpp
+++ b/Sources/c_borogove/src/hx/CFFI.cpp
@@ -49,16 +49,16 @@ public:
    }
 
 
-   virtual int __GetType() const { return mType; }
-   virtual hx::ObjectPtr<hx::Class_obj> __GetClass() const { return 0; }
+   int __GetType() const HXCPP_OVERRIDE { return mType; }
+   hx::ObjectPtr<hx::Class_obj> __GetClass() const HXCPP_OVERRIDE { return 0; }
    virtual bool __IsClass(hx::Class inClass ) const { return false; }
 
-   virtual void *__GetHandle() const
+   void *__GetHandle() const HXCPP_OVERRIDE
    {
       return mHandle;
    }
 
-   void __Mark(hx::MarkContext *__inCtx)
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_MARK_MEMBER(_hxcpp_toString);
       if (mMarkSize>=sizeof(void *) && mHandle)
@@ -68,7 +68,7 @@ public:
    }
 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx)
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_VISIT_MEMBER(_hxcpp_toString);
       if (mFinalizer)
@@ -100,7 +100,7 @@ public:
       mHandle = 0;
    }
 
-   String toString()
+   String toString() HXCPP_OVERRIDE
    {
       if (_hxcpp_toString.mPtr)
          return _hxcpp_toString( Dynamic(this) );
@@ -115,14 +115,14 @@ public:
              HX_CSTRING(")");
    }
 
-   hx::Val __Field(const String &inString, hx::PropertyAccess inCallProp)
+   hx::Val __Field(const String &inString, hx::PropertyAccess inCallProp) HXCPP_OVERRIDE
    {
       if (inString==HX_CSTRING("_hxcpp_toString")) return _hxcpp_toString;
       if (inString==HX_CSTRING("_hxcpp_kind")) return __hxcpp_get_kind(this);
       return hx::Object::__Field(inString, inCallProp);
    }
 
-   hx::Val __SetField(const String &inName,const hx::Val &inValue, hx::PropertyAccess inCallProp)
+   hx::Val __SetField(const String &inName,const hx::Val &inValue, hx::PropertyAccess inCallProp) HXCPP_OVERRIDE
    {
       if (inName==HX_CSTRING("_hxcpp_toString"))
       {
@@ -669,7 +669,12 @@ void val_buffer(buffer inBuffer,value inValue)
 hx::Object * val_call0(hx::Object * arg1) THROWS
 {
    if (!arg1) Dynamic::ThrowBadFunctionError();
+
+#if (HXCPP_API_LEVEL>=500)
+   return hx::invoker::invoke(arg1).GetPtr();
+#else
    return arg1->__run().GetPtr();
+#endif
 }
 
 hx::Object * val_call0_traceexcept(hx::Object * arg1) THROWS
@@ -677,7 +682,11 @@ hx::Object * val_call0_traceexcept(hx::Object * arg1) THROWS
    try
    {
    if (!arg1) Dynamic::ThrowBadFunctionError();
+#if (HXCPP_API_LEVEL>=500)
+   return hx::invoker::invoke(arg1).GetPtr();
+#else
    return arg1->__run().GetPtr();
+#endif
    }
    catch(Dynamic e)
    {
@@ -692,21 +701,33 @@ hx::Object * val_call0_traceexcept(hx::Object * arg1) THROWS
 hx::Object * val_call1(hx::Object * arg1,hx::Object * arg2) THROWS
 {
    if (!arg1) Dynamic::ThrowBadFunctionError();
+#if (HXCPP_API_LEVEL>=500)
+   return hx::invoker::invoke(arg1, arg2).GetPtr();
+#else
    return arg1->__run(arg2).GetPtr();
+#endif
 }
 
 
 hx::Object * val_call2(hx::Object * arg1,hx::Object * arg2,hx::Object * arg3) THROWS
 {
    if (!arg1) Dynamic::ThrowBadFunctionError();
-   return arg1->__run(arg2,arg3).GetPtr();
+#if (HXCPP_API_LEVEL>=500)
+   return hx::invoker::invoke(arg1, arg2, arg3).GetPtr();
+#else
+   return arg1->__run(arg2, arg3).GetPtr();
+#endif
 }
 
 
 hx::Object * val_call3(hx::Object * arg1,hx::Object * arg2,hx::Object * arg3,hx::Object * arg4) THROWS
 {
    if (!arg1) Dynamic::ThrowBadFunctionError();
-   return arg1->__run(arg2,arg3,arg4).GetPtr();
+#if (HXCPP_API_LEVEL>=500)
+   return hx::invoker::invoke(arg1, arg2, arg3, arg4).GetPtr();
+#else
+   return arg1->__run(arg2, arg3, arg4).GetPtr();
+#endif
 }
 
 
@@ -724,35 +745,55 @@ hx::Object * val_callN(hx::Object * arg1,hx::Object ** arg2, int nCount) THROWS
 hx::Object * val_ocall0(hx::Object * arg1,int arg2) THROWS
 {
    if (!arg1) hx::Throw(HX_INVALID_OBJECT);
+#if (HXCPP_API_LEVEL>=500)
+   return hx::invoker::invoke(arg1->__IField(arg2)).GetPtr();
+#else
    return arg1->__IField(arg2)->__run().GetPtr();
+#endif
 }
 
 
 hx::Object * val_ocall1(hx::Object * arg1,int arg2,hx::Object * arg3) THROWS
 {
    if (!arg1) hx::Throw(HX_INVALID_OBJECT);
+#if (HXCPP_API_LEVEL>=500)
+   return hx::invoker::invoke(arg1->__IField(arg2), arg3).GetPtr();
+#else
    return arg1->__IField(arg2)->__run(arg3).GetPtr();
+#endif
 }
 
 
 hx::Object * val_ocall2(hx::Object * arg1,int arg2,hx::Object * arg3,hx::Object * arg4) THROWS
 {
    if (!arg1) hx::Throw(HX_INVALID_OBJECT);
-   return arg1->__IField(arg2)->__run(arg3,arg4).GetPtr();
+#if (HXCPP_API_LEVEL>=500)
+   return hx::invoker::invoke(arg1->__IField(arg2), arg3, arg4).GetPtr();
+#else
+   return arg1->__IField(arg2)->__run(arg3, arg4).GetPtr();
+#endif
 }
 
 
 hx::Object * val_ocall3(hx::Object * arg1,int arg2,hx::Object * arg3,hx::Object * arg4,hx::Object * arg5) THROWS
 {
    if (!arg1) hx::Throw(HX_INVALID_OBJECT);
-   return arg1->__IField(arg2)->__run(arg3,arg4,arg5).GetPtr();
+#if (HXCPP_API_LEVEL>=500)
+   return hx::invoker::invoke(arg1->__IField(arg2), arg3, arg4, arg5).GetPtr();
+#else
+   return arg1->__IField(arg2)->__run(arg3, arg4, arg5).GetPtr();
+#endif
 }
 
 
 hx::Object * val_ocallN(hx::Object * arg1,int arg2,hx::Object * arg3) THROWS
 {
    if (!arg1) hx::Throw(HX_INVALID_OBJECT);
+#if (HXCPP_API_LEVEL>=500)
+   return hx::invoker::invoke(arg1->__IField(arg2), Dynamic(arg3)).GetPtr();
+#else
    return arg1->__IField(arg2)->__run(Dynamic(arg3)).GetPtr();
+#endif
 }
 
 
@@ -997,7 +1038,10 @@ const char16_t * hxs_utf16(const String &string,hx::IStringAlloc *alloc)
 }
 
 
-EXPORT void * hx_cffi(const char *inName)
+#ifndef HXCPP_STATIC_CFFI
+EXPORT
+#endif
+void * hx_cffi(const char *inName)
 {
    #define HXCPP_PRIME
    #define DEFFUNC(name,r,b,c) if ( !strcmp(inName,#name) ) return (void *)name;
diff --git a/Sources/c_borogove/src/hx/Debug.cpp b/Sources/c_borogove/src/hx/Debug.cpp
index 25c7d4d..2ad1f96 100644
--- a/Sources/c_borogove/src/hx/Debug.cpp
+++ b/Sources/c_borogove/src/hx/Debug.cpp
@@ -7,7 +7,9 @@
 #include <hx/Thread.h>
 #include <hx/Telemetry.h>
 #include <hx/Unordered.h>
+#include <hx/thread/Thread.hpp>
 #include <hx/OS.h>
+#include <mutex>
 
 
 #if defined(HXCPP_CATCH_SEGV) && !defined(_MSC_VER)
@@ -45,7 +47,7 @@ namespace hx
 const char* EXTERN_CLASS_NAME = "extern";
 
 #ifdef HXCPP_STACK_IDS
-static HxMutex sStackMapMutex;
+static std::mutex sStackMapMutex;
 typedef UnorderedMap<int, StackContext *> StackMap;
 static StackMap sStackMap;
 #endif
@@ -127,9 +129,9 @@ public:
 
    hxSehException(int inCode) : code(inCode) { }
 
-   String __ToString() const { return  HX_CSTRING("hxSehException"); }
+   String __ToString() const HXCPP_OVERRIDE { return  HX_CSTRING("hxSehException"); }
 
-   int __GetType() const { return vtObject; }
+   int __GetType() const HXCPP_OVERRIDE { return vtObject; }
 };
 
 static hx::Object *sException = new hxSehException(1);
@@ -243,11 +245,12 @@ StackContext::~StackContext()
 void StackContext::onThreadAttach()
 {
    #ifdef HXCPP_STACK_IDS
-   mThreadId = __hxcpp_GetCurrentThreadNumber();
+    mThreadId = hx::thread::Thread_obj::id();
 
-   sStackMapMutex.Lock();
-   sStackMap[mThreadId] = this;
-   sStackMapMutex.Unlock();
+   {
+       std::lock_guard<std::mutex> guard(sStackMapMutex);
+       sStackMap[mThreadId] = this;
+   }
    #endif
 
    #ifdef HXCPP_DEBUGGER
@@ -302,9 +305,10 @@ void StackContext::onThreadDetach()
    #endif
 
    #ifdef HXCPP_STACK_IDS
-   sStackMapMutex.Lock();
-   sStackMap.erase(mThreadId);
-   sStackMapMutex.Unlock();
+   {
+       std::lock_guard<std::mutex> guard(sStackMapMutex);
+       sStackMap.erase(mThreadId);
+   }
    mThreadId = 0;
    #endif
 
@@ -317,18 +321,17 @@ void StackContext::onThreadDetach()
 void StackContext::getAllStackIds( QuickVec<int> &outIds )
 {
    outIds.clear();
-   sStackMapMutex.Lock();
+
+   std::lock_guard<std::mutex> guard(sStackMapMutex);
+
    for(StackMap::iterator i=sStackMap.begin(); i!=sStackMap.end(); ++i)
       outIds.push(i->first);
-   sStackMapMutex.Unlock();
 }
 
 StackContext *StackContext::getStackForId(int id)
 {
-   sStackMapMutex.Lock();
-   StackContext *result = sStackMap[id];
-   sStackMapMutex.Unlock();
-   return result;
+   std::lock_guard<std::mutex> guard(sStackMapMutex);
+   return sStackMap[id];
 }
 #endif
 
diff --git a/Sources/c_borogove/src/hx/Hash.h b/Sources/c_borogove/src/hx/Hash.h
index 0fde32d..6614f64 100644
--- a/Sources/c_borogove/src/hx/Hash.h
+++ b/Sources/c_borogove/src/hx/Hash.h
@@ -243,7 +243,7 @@ inline void CopyValue(String &outValue, Float inValue) {  }
 inline void CopyValue(String &outValue, const Dynamic &inValue) { outValue = inValue; }
 inline void CopyValue(int &outValue, int inValue) { outValue = inValue; }
 inline void CopyValue(int &outValue, cpp::Int64 inValue) { }
-inline void CopyValue(int &outValue, Float inValue) { outValue = inValue; }
+inline void CopyValue(int &outValue, Float inValue) { outValue = (int)inValue; }
 inline void CopyValue(int &outValue, const Dynamic &inValue) { outValue = inValue; }
 inline void CopyValue(int &outValue, const String &inValue) {  }
 inline void CopyValue(Float &outValue, Float inValue) { outValue = inValue; }
@@ -353,7 +353,7 @@ struct Hash : public HashBase< typename ELEMENT::Key >
    bool TIsWeakRefValid(String &key) { return IsWeakRefValid(key.raw_ptr()); }
 
 
-   void updateAfterGc()
+   void updateAfterGc() HXCPP_OVERRIDE
    {
       if (Element::WeakKeys && Element::ManageKeys)
       {
@@ -451,7 +451,7 @@ struct Hash : public HashBase< typename ELEMENT::Key >
       HX_OBJ_WB_GET(this, bucket);
    }
 
-   bool remove(Key inKey)
+   bool remove(Key inKey) HXCPP_OVERRIDE
    {
       if (!bucket)
          return false;
@@ -511,10 +511,10 @@ struct Hash : public HashBase< typename ELEMENT::Key >
       return 0;
    }
 
-   bool exists(Key inKey) { return find( HashCalcHash(inKey), inKey ); }
+   bool exists(Key inKey) HXCPP_OVERRIDE { return find( HashCalcHash(inKey), inKey ); }
 
 
-   HashBase<Key> *convertStore(HashStore inStore)
+   HashBase<Key> *convertStore(HashStore inStore) HXCPP_OVERRIDE
    {
       switch(inStore)
       {
@@ -545,11 +545,11 @@ struct Hash : public HashBase< typename ELEMENT::Key >
       return true;
    }
 
-   bool query(Key inKey,int &outValue) { return TQuery(inKey,outValue); }
-   bool query(Key inKey,::String &outValue) { return TQuery(inKey,outValue); }
-   bool query(Key inKey,Float &outValue) { return TQuery(inKey,outValue); }
-   bool query(Key inKey,Dynamic &outValue) { return TQuery(inKey,outValue); }
-   bool query(Key inKey,cpp::Int64 &outValue) { return TQuery(inKey, outValue); }
+   bool query(Key inKey,int &outValue) HXCPP_OVERRIDE { return TQuery(inKey,outValue); }
+   bool query(Key inKey,::String &outValue) HXCPP_OVERRIDE { return TQuery(inKey,outValue); }
+   bool query(Key inKey,Float &outValue) HXCPP_OVERRIDE { return TQuery(inKey,outValue); }
+   bool query(Key inKey,Dynamic &outValue) HXCPP_OVERRIDE { return TQuery(inKey,outValue); }
+   bool query(Key inKey,cpp::Int64 &outValue) HXCPP_OVERRIDE { return TQuery(inKey, outValue); }
 
 
    Value get(Key inKey)
@@ -616,14 +616,14 @@ struct Hash : public HashBase< typename ELEMENT::Key >
       #endif
    }
 
-   void set(Key inKey, const int &inValue) { TSet(inKey, inValue); }
-   void set(Key inKey, const ::String &inValue)  { TSet(inKey, inValue); }
-   void set(Key inKey, const Float &inValue)  { TSet(inKey, inValue); }
-   void set(Key inKey, const Dynamic &inValue)  { TSet(inKey, inValue); }
+   void set(Key inKey, const int &inValue) HXCPP_OVERRIDE { TSet(inKey, inValue); }
+   void set(Key inKey, const ::String &inValue) HXCPP_OVERRIDE { TSet(inKey, inValue); }
+   void set(Key inKey, const Float &inValue) HXCPP_OVERRIDE { TSet(inKey, inValue); }
+   void set(Key inKey, const Dynamic &inValue) HXCPP_OVERRIDE { TSet(inKey, inValue); }
    void set(Key inKey, const null &inValue)  { TSet(inKey, inValue);  }
-   void set(Key inKey, const cpp::Int64 &inValue) { TSet(inKey, inValue); }
+   void set(Key inKey, const cpp::Int64 &inValue) HXCPP_OVERRIDE { TSet(inKey, inValue); }
 
-   void clear()
+   void clear() HXCPP_OVERRIDE
    {
       bucket = 0;
       size = 0;
@@ -691,7 +691,7 @@ struct Hash : public HashBase< typename ELEMENT::Key >
          array->push(elem->key);
       }
    };
-   Array<Key> keys()
+   Array<Key> keys() HXCPP_OVERRIDE
    {
       KeyBuilder builder(getSize());
       iterate(builder);
@@ -713,7 +713,7 @@ struct Hash : public HashBase< typename ELEMENT::Key >
          array->push(elem->value);
       }
    };
-   Dynamic values()
+   Dynamic values() HXCPP_OVERRIDE
    {
       ValueBuilder builder(getSize());
       iterate(builder);
@@ -760,7 +760,7 @@ struct Hash : public HashBase< typename ELEMENT::Key >
       }
    };
 
-   String toString()
+   String toString() HXCPP_OVERRIDE
    {
       StringBuilder builder(getSize());
       iterate(builder);
@@ -768,7 +768,7 @@ struct Hash : public HashBase< typename ELEMENT::Key >
    }
 
 
-   String toStringRaw()
+   String toStringRaw() HXCPP_OVERRIDE
    {
       StringBuilder builder(getSize(),true);
       iterate(builder);
@@ -792,7 +792,7 @@ struct Hash : public HashBase< typename ELEMENT::Key >
       }
    };
 
-   void __Mark(hx::MarkContext *__inCtx)
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE
    {
       HX_MARK_ARRAY(bucket);
 
@@ -802,7 +802,7 @@ struct Hash : public HashBase< typename ELEMENT::Key >
 
 #ifdef HXCPP_VISIT_ALLOCS
 
-   void __Visit(hx::VisitContext *__inCtx)
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE
    {
       //printf(" visit hash %p\n", this);
       HX_VISIT_ARRAY(bucket);
diff --git a/Sources/c_borogove/src/hx/Lib.cpp b/Sources/c_borogove/src/hx/Lib.cpp
index 3a1d3f2..3783822 100644
--- a/Sources/c_borogove/src/hx/Lib.cpp
+++ b/Sources/c_borogove/src/hx/Lib.cpp
@@ -132,62 +132,100 @@ public:
      functionName = ("extern::cffi "+mName).makePermanent().raw_ptr();
    }
 
-   virtual int __GetType() const { return vtFunction; }
-   String __ToString() const { return mName; }
-
-   Dynamic __run()
+   int __GetType() const HXCPP_OVERRIDE { return vtFunction; }
+   String __ToString() const HXCPP_OVERRIDE { return mName; }
+#if (HXCPP_API_LEVEL<500)
+   Dynamic __run() HXCPP_OVERRIDE
    {
-      HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi",0, functionName, __FILE__, __LINE__,0);
-      if (mArgCount!=0) throw HX_INVALID_ARG_COUNT;
-      if (mProc==0) hx::Throw( HX_NULL_FUNCTION_POINTER );
-      return ((prim_0)mProc)();
+       HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi", 0, functionName, __FILE__, __LINE__, 0);
+       if (mArgCount != 0) throw HX_INVALID_ARG_COUNT;
+       if (mProc == 0) hx::Throw(HX_NULL_FUNCTION_POINTER);
+       return ((prim_0)mProc)();
    }
-   Dynamic __run(D a)
+   Dynamic __run(D a) HXCPP_OVERRIDE
    {
-      HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi",0,  functionName, __FILE__, __LINE__,0);
-      if (mArgCount!=1) throw HX_INVALID_ARG_COUNT;
-      if (mProc==0) hx::Throw( HX_NULL_FUNCTION_POINTER );
-      return ((prim_1)mProc)(a.GetPtr());
+       HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi", 0, functionName, __FILE__, __LINE__, 0);
+       if (mArgCount != 1) throw HX_INVALID_ARG_COUNT;
+       if (mProc == 0) hx::Throw(HX_NULL_FUNCTION_POINTER);
+       return ((prim_1)mProc)(a.GetPtr());
    }
-   Dynamic __run(D a,D b)
+   Dynamic __run(D a, D b) HXCPP_OVERRIDE
    {
-      HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi",0,  functionName, __FILE__, __LINE__,0);
-      if (mArgCount!=2) throw HX_INVALID_ARG_COUNT;
-      if (mProc==0) hx::Throw( HX_NULL_FUNCTION_POINTER );
-      return ((prim_2)mProc)(a.GetPtr(),b.GetPtr());
+       HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi", 0, functionName, __FILE__, __LINE__, 0);
+       if (mArgCount != 2) throw HX_INVALID_ARG_COUNT;
+       if (mProc == 0) hx::Throw(HX_NULL_FUNCTION_POINTER);
+       return ((prim_2)mProc)(a.GetPtr(), b.GetPtr());
    }
-   Dynamic __run(D a,D b,D c)
+   Dynamic __run(D a, D b, D c) HXCPP_OVERRIDE
    {
-      HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi",0,  functionName, __FILE__, __LINE__,0);
-      if (mArgCount!=3) throw HX_INVALID_ARG_COUNT;
-      if (mProc==0) hx::Throw( HX_NULL_FUNCTION_POINTER );
-      return ((prim_3)mProc)(a.GetPtr(),b.GetPtr(),c.GetPtr());
+       HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi", 0, functionName, __FILE__, __LINE__, 0);
+       if (mArgCount != 3) throw HX_INVALID_ARG_COUNT;
+       if (mProc == 0) hx::Throw(HX_NULL_FUNCTION_POINTER);
+       return ((prim_3)mProc)(a.GetPtr(), b.GetPtr(), c.GetPtr());
    }
-   Dynamic __run(D a,D b,D c,D d)
+   Dynamic __run(D a, D b, D c, D d) HXCPP_OVERRIDE
    {
-      HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi",0,  functionName, __FILE__, __LINE__,0);
-      if (mArgCount!=4) throw HX_INVALID_ARG_COUNT;
-      if (mProc==0) hx::Throw( HX_NULL_FUNCTION_POINTER );
-      return ((prim_4)mProc)(a.GetPtr(),b.GetPtr(),c.GetPtr(),d.GetPtr());
+       HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi", 0, functionName, __FILE__, __LINE__, 0);
+       if (mArgCount != 4) throw HX_INVALID_ARG_COUNT;
+       if (mProc == 0) hx::Throw(HX_NULL_FUNCTION_POINTER);
+       return ((prim_4)mProc)(a.GetPtr(), b.GetPtr(), c.GetPtr(), d.GetPtr());
    }
-   Dynamic __run(D a,D b,D c,D d,D e)
+   Dynamic __run(D a, D b, D c, D d, D e) HXCPP_OVERRIDE
    {
-      HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi",0,  functionName, __FILE__, __LINE__,0);
-      if (mArgCount!=5) throw HX_INVALID_ARG_COUNT;
-      if (mProc==0) hx::Throw( HX_NULL_FUNCTION_POINTER );
-      return ((prim_5)mProc)(a.GetPtr(),b.GetPtr(),c.GetPtr(),d.GetPtr(),e.GetPtr());
+       HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi", 0, functionName, __FILE__, __LINE__, 0);
+       if (mArgCount != 5) throw HX_INVALID_ARG_COUNT;
+       if (mProc == 0) hx::Throw(HX_NULL_FUNCTION_POINTER);
+       return ((prim_5)mProc)(a.GetPtr(), b.GetPtr(), c.GetPtr(), d.GetPtr(), e.GetPtr());
    }
 
-   Dynamic __Run(const Array<Dynamic> &inArgs)
+   Dynamic __Run(const Array<Dynamic>& inArgs) HXCPP_OVERRIDE
    {
-      HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi",0,  functionName, __FILE__, __LINE__,0);
-      if (mArgCount!=-1 && mArgCount!=inArgs->length)
-         throw HX_INVALID_ARG_COUNT;
-      if (mProc==0) hx::Throw( HX_NULL_FUNCTION_POINTER );
-      return ((prim_mult)mProc)( (hx::Object **)inArgs->GetBase(), inArgs->length );
+       HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi", 0, functionName, __FILE__, __LINE__, 0);
+       if (mArgCount != -1 && mArgCount != inArgs->length)
+           throw HX_INVALID_ARG_COUNT;
+       if (mProc == 0) hx::Throw(HX_NULL_FUNCTION_POINTER);
+       return ((prim_mult)mProc)((hx::Object**)inArgs->GetBase(), inArgs->length);
    }
+#else
+   Dynamic __Run(const Array<Dynamic>& inArgs) override
+   {
+       HX_STACK_FRAME(hx::EXTERN_CLASS_NAME, "cffi", 0, functionName, __FILE__, __LINE__, 0);
+
+       if (mArgCount != -1 && mArgCount != inArgs->length)
+       {
+           throw HX_INVALID_ARG_COUNT;
+       }
+       if (mProc == 0)
+       {
+           hx::Throw(HX_NULL_FUNCTION_POINTER);
+       }
+
+       switch (mArgCount)
+       {
+       case 0:
+           return ((prim_0)mProc)();
+
+       case 1:
+           return ((prim_1)mProc)(inArgs[0].GetPtr());
 
-   int __Compare(const hx::Object *inRHS) const
+       case 2:
+           return ((prim_2)mProc)(inArgs[0].GetPtr(), inArgs[1].GetPtr());
+
+       case 3:
+           return ((prim_3)mProc)(inArgs[0].GetPtr(), inArgs[1].GetPtr(), inArgs[2].GetPtr());
+
+       case 4:
+           return ((prim_4)mProc)(inArgs[0].GetPtr(), inArgs[1].GetPtr(), inArgs[2].GetPtr(), inArgs[3].GetPtr());
+
+       case 5:
+           return ((prim_5)mProc)(inArgs[0].GetPtr(), inArgs[1].GetPtr(), inArgs[2].GetPtr(), inArgs[3].GetPtr(), inArgs[4].GetPtr());
+
+       default:
+           return ((prim_mult)mProc)((hx::Object**)inArgs->GetBase(), inArgs->length);
+       }
+   }
+#endif
+   int __Compare(const hx::Object *inRHS) const HXCPP_OVERRIDE
    {
       const ExternalPrimitive *other = dynamic_cast<const ExternalPrimitive *>(inRHS);
       if (!other)
diff --git a/Sources/c_borogove/src/hx/Object.cpp b/Sources/c_borogove/src/hx/Object.cpp
index 64050b5..ebb0fc0 100644
--- a/Sources/c_borogove/src/hx/Object.cpp
+++ b/Sources/c_borogove/src/hx/Object.cpp
@@ -152,33 +152,35 @@ hx::Val Object::__SetField(const String &inField,const hx::Val &inValue, hx::Pro
    return null();
 }
 
+#if (HXCPP_API_LEVEL<500)
 Dynamic Object::__run()
 {
-   return __Run(Array_obj<Dynamic>::__new());
+    return __Run(Array_obj<Dynamic>::__new());
 }
 
 Dynamic Object::__run(D a)
 {
-   return __Run( Array_obj<Dynamic>::__new(0,1) << a );
+    return __Run(Array_obj<Dynamic>::__new(0, 1) << a);
 }
 
-Dynamic Object::__run(D a,D b)
+Dynamic Object::__run(D a, D b)
 {
-   return __Run( Array_obj<Dynamic>::__new(0,2) << a << b );
+    return __Run(Array_obj<Dynamic>::__new(0, 2) << a << b);
 }
 
-Dynamic Object::__run(D a,D b,D c)
+Dynamic Object::__run(D a, D b, D c)
 {
-   return __Run( Array_obj<Dynamic>::__new(0,3) << a << b << c);
+    return __Run(Array_obj<Dynamic>::__new(0, 3) << a << b << c);
 }
-Dynamic Object::__run(D a,D b,D c,D d)
+Dynamic Object::__run(D a, D b, D c, D d)
 {
-   return __Run( Array_obj<Dynamic>::__new(0,4) << a << b << c << d);
+    return __Run(Array_obj<Dynamic>::__new(0, 4) << a << b << c << d);
 }
-Dynamic Object::__run(D a,D b,D c,D d,D e)
+Dynamic Object::__run(D a, D b, D c, D d, D e)
 {
-   return __Run( Array_obj<Dynamic>::__new(0,5) << a << b << c << d << e);
+    return __Run(Array_obj<Dynamic>::__new(0, 5) << a << b << c << d << e);
 }
+#endif
 
 void Object::__GetFields(Array<String> &outFields)
 {
diff --git a/Sources/c_borogove/src/hx/Thread.cpp b/Sources/c_borogove/src/hx/Thread.cpp
index e5af49d..20adbf4 100644
--- a/Sources/c_borogove/src/hx/Thread.cpp
+++ b/Sources/c_borogove/src/hx/Thread.cpp
@@ -1,29 +1,14 @@
 #include <hxcpp.h>
 
+#if (HXCPP_API_LEVEL<500)
+
 #include <hx/Thread.h>
 #include <time.h>
-
-DECLARE_TLS_DATA(class hxThreadInfo, tlsCurrentThread);
-
-// g_threadInfoMutex allows atomic access to g_nextThreadNumber
-static HxMutex g_threadInfoMutex;
-// Thread number 0 is reserved for the main thread
-static int g_nextThreadNumber = 1;
-
-
-// How to manage hxThreadInfo references for non haxe threads (main, extenal)?
-// HXCPP_THREAD_INFO_PTHREAD - use pthread api
-// HXCPP_THREAD_INFO_LOCAL - use thread_local storage
-// HXCPP_THREAD_INFO_SINGLETON - use one structure for all threads. Not ideal.
-
-#if __cplusplus > 199711L && !defined(__BORLANDC__)
-   #define HXCPP_THREAD_INFO_LOCAL
-#elif defined (HXCPP_PTHREADS)
-   #define HXCPP_THREAD_INFO_PTHREAD
-#else
-   #define HXCPP_THREAD_INFO_SINGLETON
-#endif
-
+#include <hx/thread/ConditionVariable.hpp>
+#include <hx/thread/RecursiveMutex.hpp>
+#include <hx/thread/CountingSemaphore.hpp>
+#include "thread/ThreadImpl.hpp"
+#include <atomic>
 
 // --- Deque ----------------------------------------------------------
 
@@ -51,7 +36,7 @@ struct Deque : public Array_obj<Dynamic>
 	}
 
    #ifdef HXCPP_VISIT_ALLOCS
-  	void __Visit(hx::VisitContext *__inCtx)
+	void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE
 	{
 		Array_obj<Dynamic>::__Visit(__inCtx);
 		mFinalizer->Visit(__inCtx);
@@ -80,7 +65,7 @@ struct Deque : public Array_obj<Dynamic>
 		mSemaphore.Set();
 	}
 
-	
+
 	Dynamic PopFront(bool inBlock)
 	{
 		hx::EnterGCFreeZone();
@@ -121,7 +106,7 @@ struct Deque : public Array_obj<Dynamic>
 		mSemaphore.QSet();
 	}
 
-	
+
 	Dynamic PopFront(bool inBlock)
 	{
 		hx::EnterGCFreeZone();
@@ -169,643 +154,136 @@ Dynamic __hxcpp_deque_pop(Dynamic q,bool block)
 	return d->PopFront(block);
 }
 
-
-
 // --- Thread ----------------------------------------------------------
 
-class hxThreadInfo : public hx::Object
-{
-public:
-   HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdThreadInfo };
-
-	hxThreadInfo(Dynamic inFunction, int inThreadNumber)
-        : mFunction(inFunction), mThreadNumber(inThreadNumber), mTLS(0,0)
-	{
-		mSemaphore = new HxSemaphore;
-		mDeque = Deque::Create();
-      HX_OBJ_WB_NEW_MARKED_OBJECT(this);
-	}
-	hxThreadInfo()
-	{
-		mSemaphore = 0;
-		mDeque = Deque::Create();
-      HX_OBJ_WB_NEW_MARKED_OBJECT(this);
-	}
-    int GetThreadNumber() const
-    {
-        return mThreadNumber;
-    }
-	void CleanSemaphore()
-	{
-		delete mSemaphore;
-		mSemaphore = 0;
-	}
-	void Send(Dynamic inMessage)
-	{
-		mDeque->PushBack(inMessage);
-	}
-	Dynamic ReadMessage(bool inBlocked)
-	{
-		return mDeque->PopFront(inBlocked);
-	}
-	String toString()
-	{
-		return String(GetThreadNumber());
-	}
-	void SetTLS(int inID,Dynamic inVal) {
-      mTLS->__SetItem(inID,inVal);
-   }
-	Dynamic GetTLS(int inID) { return mTLS[inID]; }
-
-	void __Mark(hx::MarkContext *__inCtx)
-	{
-		HX_MARK_MEMBER(mFunction);
-		HX_MARK_MEMBER(mTLS);
-		if (mDeque)
-			HX_MARK_OBJECT(mDeque);
-	}
-   #ifdef HXCPP_VISIT_ALLOCS
-  	void __Visit(hx::VisitContext *__inCtx)
-	{
-		HX_VISIT_MEMBER(mFunction);
-		HX_VISIT_MEMBER(mTLS);
-		if (mDeque)
-			HX_VISIT_OBJECT(mDeque);
-	}
-   #endif
-
-
-	Array<Dynamic> mTLS;
-	HxSemaphore *mSemaphore;
-	Dynamic mFunction;
-    int mThreadNumber;
-	Deque   *mDeque;
-};
-
-
-THREAD_FUNC_TYPE hxThreadFunc( void *inInfo )
-{
-   // info[1] will the the "top of stack" - values under this
-   //  (ie info[0] and other stack values) will be in the GC conservative range
-	hxThreadInfo *info[2];
-   info[0] = (hxThreadInfo *)inInfo;
-   info[1] = 0;
-
-	tlsCurrentThread = info[0];
-
-	hx::SetTopOfStack((int *)&info[1], true);
-
-	// Release the creation function
-	info[0]->mSemaphore->Set();
-
-    // Call the debugger function to annouce that a thread has been created
-    //__hxcpp_dbg_threadCreatedOrTerminated(info[0]->GetThreadNumber(), true);
-
-	if ( info[0]->mFunction.GetPtr() )
-	{
-		// Try ... catch
-		info[0]->mFunction->__run();
-	}
-
-    // Call the debugger function to annouce that a thread has terminated
-    //__hxcpp_dbg_threadCreatedOrTerminated(info[0]->GetThreadNumber(), false);
-
-	hx::UnregisterCurrentThread();
-
-	tlsCurrentThread = 0;
-
-	THREAD_FUNC_RET
-}
-
-
-
 Dynamic __hxcpp_thread_create(Dynamic inStart)
 {
-    #ifdef EMSCRIPTEN
-    return hx::Throw( HX_CSTRING("Threads are not supported on Emscripten") );
-    #else
-    g_threadInfoMutex.Lock();
-    int threadNumber = g_nextThreadNumber++;
-    g_threadInfoMutex.Unlock();
-
-	hxThreadInfo *info = new hxThreadInfo(inStart, threadNumber);
-
-	hx::GCPrepareMultiThreaded();
-	hx::EnterGCFreeZone();
-
-    bool ok = HxCreateDetachedThread(hxThreadFunc, info);
-    if (ok)
-    {
-       info->mSemaphore->Wait();
-    }
-
-    hx::ExitGCFreeZone();
-    info->CleanSemaphore();
-
-    if (!ok)
-       throw Dynamic( HX_CSTRING("Could not create thread") );
-    return info;
-    #endif
-}
-
-#ifdef HXCPP_THREAD_INFO_PTHREAD
-static pthread_key_t externThreadInfoKey;;
-static pthread_once_t key_once = PTHREAD_ONCE_INIT;
-static void destroyThreadInfo(void *i)
-{
-   hx::Object **threadRoot = (hx::Object **)i;
-   hx::GCRemoveRoot(threadRoot);
-   delete threadRoot;
-}
-static void make_key()
-{
-   pthread_key_create(&externThreadInfoKey, destroyThreadInfo);
-}
-#elif defined(HXCPP_THREAD_INFO_LOCAL)
-struct ThreadInfoHolder
-{
-   hx::Object **threadRoot;
-   ThreadInfoHolder() : threadRoot(0) { }
-   ~ThreadInfoHolder()
-   {
-      if (threadRoot)
-      {
-         hx::GCRemoveRoot(threadRoot);
-         delete threadRoot;
-      }
-   }
-   void set(hx::Object **info) { threadRoot = info; }
-   hxThreadInfo *get() { return threadRoot ? (hxThreadInfo *)*threadRoot : nullptr; }
-   
-};
-static thread_local ThreadInfoHolder threadHolder;
-#else
-static hx::Object **sMainThreadInfoRoot = 0;
-#endif
-
-static hxThreadInfo *GetCurrentInfo(bool createNew = true)
-{
-	hxThreadInfo *info = tlsCurrentThread;
-	if (!info)
-   {
-      #ifdef HXCPP_THREAD_INFO_PTHREAD
-      pthread_once(&key_once, make_key);
-      hxThreadInfo **pp = (hxThreadInfo **)pthread_getspecific(externThreadInfoKey);
-      if (pp)
-         info = *pp;
-      #elif defined(HXCPP_THREAD_INFO_LOCAL)
-      info = threadHolder.get();
-      #else
-      if (sMainThreadInfoRoot)
-      info = (hxThreadInfo *)*sMainThreadInfoRoot;
-      #endif
-   }
-
-	if (!info && createNew)
-	{
-      // New, non-haxe thread - might be the first thread, or might be a new
-      //  foreign thread.
-		info = new hxThreadInfo(null(), 0);
-      hx::Object **threadRoot = new hx::Object *;
-      *threadRoot = info; 
-		hx::GCAddRoot(threadRoot);
-      #ifdef HXCPP_THREAD_INFO_PTHREAD
-      pthread_setspecific(externThreadInfoKey, threadRoot);
-      #elif defined(HXCPP_THREAD_INFO_LOCAL)
-      threadHolder.set(threadRoot);
-      #else
-      sMainThreadInfoRoot = threadRoot;
-      #endif
-	}
-	return info;
+	return hx::thread::Thread_obj::create(inStart);
 }
 
 Dynamic __hxcpp_thread_current()
 {
-	return GetCurrentInfo();
+	return hx::thread::Thread_obj::current();
 }
 
 void __hxcpp_thread_send(Dynamic inThread, Dynamic inMessage)
 {
-	hxThreadInfo *info = dynamic_cast<hxThreadInfo *>(inThread.mPtr);
-	if (!info)
-		throw HX_INVALID_OBJECT;
-	info->Send(inMessage);
+	hx::Throw(HX_CSTRING("Not Implemented"));
 }
 
 Dynamic __hxcpp_thread_read_message(bool inBlocked)
 {
-	hxThreadInfo *info = GetCurrentInfo();
-	return info->ReadMessage(inBlocked);
+	return hx::Throw(HX_CSTRING("Not Implemented"));
 }
 
 bool __hxcpp_is_current_thread(hx::Object *inThread)
 {
-   hxThreadInfo *info = tlsCurrentThread;
-   return info==inThread;
+   return inThread == hx::thread::Thread_obj::current();
 }
 
 // --- TLS ------------------------------------------------------------
 
 Dynamic __hxcpp_tls_get(int inID)
 {
-	return GetCurrentInfo()->GetTLS(inID);
+	return reinterpret_cast<hx::thread::ThreadImpl_obj*>(hx::thread::Thread_obj::current().GetPtr())->getSlot(inID);
 }
 
 void __hxcpp_tls_set(int inID,Dynamic inVal)
 {
-	GetCurrentInfo()->SetTLS(inID,inVal);
+	reinterpret_cast<hx::thread::ThreadImpl_obj*>(hx::thread::Thread_obj::current().GetPtr())->setSlot(inID, inVal);
 }
 
-
-
 // --- Mutex ------------------------------------------------------------
 
-class hxMutex : public hx::Object
-{
-public:
-
-	hxMutex()
-	{
-		mFinalizer = new hx::InternalFinalizer(this);
-		mFinalizer->mFinalizer = clean;
-	}
-
-   HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdMutex };
-
-   #ifdef HXCPP_VISIT_ALLOCS
-	void __Visit(hx::VisitContext *__inCtx) { mFinalizer->Visit(__inCtx); }
-   #endif
-
-	hx::InternalFinalizer *mFinalizer;
-
-	static void clean(hx::Object *inObj)
-	{
-		hxMutex *m = dynamic_cast<hxMutex *>(inObj);
-		if (m) m->mMutex.Clean();
-	}
-	bool Try()
-	{
-		return mMutex.TryLock();
-	}
-	void Acquire()
-	{
-		hx::EnterGCFreeZone();
-		mMutex.Lock();
-		hx::ExitGCFreeZone();
-	}
-	void Release()
-	{
-		mMutex.Unlock();
-	}
-
-
-   HxMutex mMutex;
-};
-
-
-
 Dynamic __hxcpp_mutex_create()
 {
-	return new hxMutex;
+	return new hx::thread::RecursiveMutex_obj();
 }
 void __hxcpp_mutex_acquire(Dynamic inMutex)
 {
-	hxMutex *mutex = dynamic_cast<hxMutex *>(inMutex.mPtr);
-	if (!mutex)
-		throw HX_INVALID_OBJECT;
-	mutex->Acquire();
+	auto mutex = inMutex.Cast<hx::thread::RecursiveMutex>();
+
+	mutex->acquire();
 }
 bool __hxcpp_mutex_try(Dynamic inMutex)
 {
-	hxMutex *mutex = dynamic_cast<hxMutex *>(inMutex.mPtr);
-	if (!mutex)
-		throw HX_INVALID_OBJECT;
-	return mutex->Try();
+	auto mutex = inMutex.Cast<hx::thread::RecursiveMutex>();
+
+	return mutex->tryAcquire();
 }
 void __hxcpp_mutex_release(Dynamic inMutex)
 {
-	hxMutex *mutex = dynamic_cast<hxMutex *>(inMutex.mPtr);
-	if (!mutex)
-		throw HX_INVALID_OBJECT;
-	return mutex->Release();
-}
-
-#if defined(HX_LINUX) || defined(HX_ANDROID)
-#define POSIX_SEMAPHORE
-#include <semaphore.h>
-#endif
+	auto mutex = inMutex.Cast<hx::thread::RecursiveMutex>();
 
-#if defined(HX_MACOS) || defined(IPHONE) || defined(APPLETV)
-#define APPLE_SEMAPHORE
-#include <dispatch/dispatch.h>
-#endif
-
-class hxSemaphore : public hx::Object {
-public:
-  hx::InternalFinalizer *mFinalizer;
-#ifdef HX_WINDOWS
-  HANDLE sem;
-#elif defined (POSIX_SEMAPHORE)
-  sem_t sem;
-#elif defined(APPLE_SEMAPHORE)
-	dispatch_semaphore_t sem;
-#endif
-  bool valid;
-
-  hxSemaphore(int value) {
-    mFinalizer = new hx::InternalFinalizer(this);
-    mFinalizer->mFinalizer = clean;
-#ifdef HX_WINDOWS
-    sem = CreateSemaphoreW(NULL, value, 0x7FFFFFFF, NULL);
-#elif defined(POSIX_SEMAPHORE)
-    sem_init(&sem, 0, value);
-#elif defined(APPLE_SEMAPHORE)
-    sem = dispatch_semaphore_create(value);
-#endif
-    valid = true;
-  }
-
-  HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdSemaphore };
-
-#ifdef HXCPP_VISIT_ALLOCS
-  void __Visit(hx::VisitContext *__inCtx) { mFinalizer->Visit(__inCtx); }
-#endif
+	mutex->release();
+}
 
-  void Acquire() {
-#if HX_WINDOWS
-	WaitForSingleObject(sem, INFINITE);
-#elif defined(POSIX_SEMAPHORE)
-    sem_wait(&sem);
-#elif defined(APPLE_SEMAPHORE)
-    dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
-#endif
-  }
-
-  bool TryAcquire(double timeout) {
-#ifdef HX_WINDOWS
-    return WaitForSingleObject(sem, (DWORD)((FLOAT)timeout * 1000.0)) == 0;
-#elif defined(POSIX_SEMAPHORE)
-    if (timeout == 0) {
-      return sem_trywait(&sem) == 0;
-    } else {
-      struct timeval tv;
-      struct timespec t;
-      double delta = timeout;
-      int idelta = (int)delta, idelta2;
-      delta -= idelta;
-      delta *= 1.0e9;
-      gettimeofday(&tv, NULL);
-      delta += tv.tv_usec * 1000.0;
-      idelta2 = (int)(delta / 1e9);
-      delta -= idelta2 * 1e9;
-      t.tv_sec = tv.tv_sec + idelta + idelta2;
-      t.tv_nsec = (long)delta;
-      return sem_timedwait(&sem, &t) == 0;
-    }
-#elif defined(APPLE_SEMAPHORE)
-    return dispatch_semaphore_wait(
-               sem,
-               dispatch_time(DISPATCH_TIME_NOW,
-                             (int64_t)(timeout * 1000 * 1000 * 1000))) == 0;
-#else
-	return false;
-#endif
-  }
-
-  void Release() {
-#if HX_WINDOWS
-	ReleaseSemaphore(sem, 1, NULL);
-#elif defined(POSIX_SEMAPHORE)
-    sem_post(&sem);
-#elif defined(APPLE_SEMAPHORE)
-    dispatch_semaphore_signal(sem);
-#endif
-  }
-
-  static void clean(hx::Object *inObj) {
-    hxSemaphore *l = dynamic_cast<hxSemaphore *>(inObj);
-    if (l) {
-      if(l->valid) {
-#ifdef HX_WINDOWS
-		CloseHandle(l->sem);
-#elif defined(POSIX_SEMAPHORE)
-		  sem_destroy(&l->sem);
-#endif
-		  l->valid = false;
-	  }
-    }
-  }
-};
+// --- Semaphore ------------------------------------------------------------
 
 Dynamic __hxcpp_semaphore_create(int value) {
-  return new hxSemaphore(value);
+	return new hx::thread::CountingSemaphore_obj(value);
 }
 void __hxcpp_semaphore_acquire(Dynamic inSemaphore) {
-  hxSemaphore *semaphore = dynamic_cast<hxSemaphore *>(inSemaphore.mPtr);
-  if (!semaphore)
-    throw HX_INVALID_OBJECT;
-  semaphore->Acquire();
+	auto semaphore = inSemaphore.Cast<hx::thread::CountingSemaphore>();
+
+	semaphore->acquire();
 }
 bool __hxcpp_semaphore_try_acquire(Dynamic inSemaphore, double timeout) {
-  hxSemaphore *semaphore = dynamic_cast<hxSemaphore *>(inSemaphore.mPtr);
-  if (!semaphore)
-    throw HX_INVALID_OBJECT;
-  return semaphore->TryAcquire(timeout);
+	auto semaphore = inSemaphore.Cast<hx::thread::CountingSemaphore>();
+
+	return semaphore->tryAcquire(timeout);
 }
 void __hxcpp_semaphore_release(Dynamic inSemaphore) {
-  hxSemaphore *semaphore = dynamic_cast<hxSemaphore *>(inSemaphore.mPtr);
-  if (!semaphore)
-    throw HX_INVALID_OBJECT;
-  semaphore->Release();
+	auto semaphore = inSemaphore.Cast<hx::thread::CountingSemaphore>();
+
+	semaphore->release();
 }
 
-class hxCondition : public hx::Object {
-public:
-#ifdef HX_WINDOWS
-#ifndef HXCPP_WINXP_COMPAT
-	CRITICAL_SECTION cs;
-	CONDITION_VARIABLE cond;
-#endif
-#else
-	pthread_cond_t *cond;
-	pthread_mutex_t *mutex;
-#endif
-  hx::InternalFinalizer *mFinalizer;
-  hxCondition() {
-    mFinalizer = new hx::InternalFinalizer(this);
-    mFinalizer->mFinalizer = clean;
-#ifdef HX_WINDOWS
-#ifndef HXCPP_WINXP_COMPAT
-    InitializeCriticalSection(&cs);
-	InitializeConditionVariable(&cond);
-#else
-	throw Dynamic(HX_CSTRING("Condition variables are not supported on Windows XP"));
-#endif
-#else
-    pthread_condattr_t cond_attr;
-    pthread_condattr_init(&cond_attr);
-    cond = new pthread_cond_t();
-    pthread_cond_init(cond, &cond_attr);
-    pthread_condattr_destroy(&cond_attr);
-    pthread_mutexattr_t mutex_attr;
-    pthread_mutexattr_init(&mutex_attr);
-    mutex = new pthread_mutex_t();
-    pthread_mutex_init(mutex, &mutex_attr);
-    pthread_mutexattr_destroy(&mutex_attr);
-#endif
-  }
+// --- Condition ------------------------------------------------------------
 
-  HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdCondition };
+Dynamic __hxcpp_condition_create(void)
+{
+	return new hx::thread::ConditionVariable_obj();
+}
+void __hxcpp_condition_acquire(Dynamic inCond)
+{
+	auto condition = inCond.Cast<hx::thread::ConditionVariable>();
 
-#ifdef HXCPP_VISIT_ALLOCS
-  void __Visit(hx::VisitContext *__inCtx) { mFinalizer->Visit(__inCtx); }
-#endif
-  static void clean(hx::Object *inObj) {
-    hxCondition *cond = dynamic_cast<hxCondition *>(inObj);
-    if (cond) {
-#ifdef HX_WINDOWS
-#ifndef HXCPP_WINXP_COMPAT
-      DeleteCriticalSection(&cond->cs);
-#endif
-#else
-      pthread_cond_destroy(cond->cond);
-      delete cond->cond;
-      pthread_mutex_destroy(cond->mutex);
-      delete cond->mutex;
-#endif
-    }
-  }
+	condition->acquire();
+}
+bool __hxcpp_condition_try_acquire(Dynamic inCond)
+{
+	auto condition = inCond.Cast<hx::thread::ConditionVariable>();
 
-  void Acquire() {
-#ifdef HX_WINDOWS
-#ifndef HXCPP_WINXP_COMPAT
-	  EnterCriticalSection(&cs);
-#endif
-#else
-	  pthread_mutex_lock(mutex);
-#endif
-  }
-
-  bool TryAcquire() {
-#ifdef HX_WINDOWS
-#ifndef HXCPP_WINXP_COMPAT
-    return (bool)TryEnterCriticalSection(&cs);
-#else
-	return false;
-#endif
-#else
-    return pthread_mutex_trylock(mutex);
-#endif
-  }
+	return condition->tryAcquire();
+}
+void __hxcpp_condition_release(Dynamic inCond)
+{
+	auto condition = inCond.Cast<hx::thread::ConditionVariable>();
 
-  void Release() {
-#ifdef HX_WINDOWS
-#ifndef HXCPP_WINXP_COMPAT
-	  LeaveCriticalSection(&cs);
-#endif
-#else
-	  pthread_mutex_unlock(mutex);
-#endif
-  }
+	condition->release();
+}
+void __hxcpp_condition_wait(Dynamic inCond)
+{
+	auto condition = inCond.Cast<hx::thread::ConditionVariable>();
 
-  void Wait() {
-#ifdef HX_WINDOWS
-#ifndef HXCPP_WINXP_COMPAT
-	  SleepConditionVariableCS(&cond,&cs,INFINITE);
-#endif
-#else
-	  pthread_cond_wait(cond, mutex);
-#endif
-  }
-
-  bool TimedWait(double timeout) {
-#ifdef HX_WINDOWS
-#ifndef HXCPP_WINXP_COMPAT
-	  return (bool)SleepConditionVariableCS(&cond, &cs, (DWORD)((FLOAT)timeout * 1000.0));
-#else
-	  return false;
-#endif
-#else
-    struct timeval tv;
-    struct timespec t;
-    double delta = timeout;
-    int idelta = (int)delta, idelta2;
-    delta -= idelta;
-    delta *= 1.0e9;
-    gettimeofday(&tv, NULL);
-    delta += tv.tv_usec * 1000.0;
-    idelta2 = (int)(delta / 1e9);
-    delta -= idelta2 * 1e9;
-    t.tv_sec = tv.tv_sec + idelta + idelta2;
-    t.tv_nsec = (long)delta;
-    return pthread_cond_timedwait(cond, mutex, &t);
-#endif
-  }
-  void Signal() {
-#ifdef HX_WINDOWS
-#ifndef HXCPP_WINXP_COMPAT
-	  WakeConditionVariable(&cond);
-#endif
-#else
-	  pthread_cond_signal(cond);
-#endif
-  }
-  void Broadcast() {
-#ifdef HX_WINDOWS
-#ifndef HXCPP_WINXP_COMPAT
-	  WakeAllConditionVariable(&cond);
-#endif
-#else
-	  pthread_cond_broadcast(cond);
-#endif
-  }
-};
+	condition->wait();
+}
+bool __hxcpp_condition_timed_wait(Dynamic inCond, double timeout)
+{
+	return hx::Throw(HX_CSTRING("Not Implemented"));
+}
+void __hxcpp_condition_signal(Dynamic inCond)
+{
+	auto condition = inCond.Cast<hx::thread::ConditionVariable>();
+
+	condition->signal();
+}
+void __hxcpp_condition_broadcast(Dynamic inCond)
+{
+	auto condition = inCond.Cast<hx::thread::ConditionVariable>();
 
-Dynamic __hxcpp_condition_create(void) {
-  return new hxCondition;
-}
-void __hxcpp_condition_acquire(Dynamic inCond) {
-  hxCondition *cond = dynamic_cast<hxCondition *>(inCond.mPtr);
-  if (!cond)
-    throw HX_INVALID_OBJECT;
-  cond->Acquire();
-}
-bool __hxcpp_condition_try_acquire(Dynamic inCond) {
-  hxCondition *cond = dynamic_cast<hxCondition *>(inCond.mPtr);
-  if (!cond)
-    throw HX_INVALID_OBJECT;
-  return cond->TryAcquire();
-}
-void __hxcpp_condition_release(Dynamic inCond) {
-  hxCondition *cond = dynamic_cast<hxCondition *>(inCond.mPtr);
-  if (!cond)
-    throw HX_INVALID_OBJECT;
-  cond->Release();
-}
-void __hxcpp_condition_wait(Dynamic inCond) {
-  hxCondition *cond = dynamic_cast<hxCondition *>(inCond.mPtr);
-  if (!cond)
-    throw HX_INVALID_OBJECT;
-  cond->Wait();
-}
-bool __hxcpp_condition_timed_wait(Dynamic inCond, double timeout) {
-  hxCondition *cond = dynamic_cast<hxCondition *>(inCond.mPtr);
-  if (!cond)
-    throw HX_INVALID_OBJECT;
-  return cond->TimedWait(timeout);
-}
-void __hxcpp_condition_signal(Dynamic inCond) {
-  hxCondition *cond = dynamic_cast<hxCondition *>(inCond.mPtr);
-  if (!cond)
-    throw HX_INVALID_OBJECT;
-  cond->Signal();
-}
-void __hxcpp_condition_broadcast(Dynamic inCond) {
-  hxCondition *cond = dynamic_cast<hxCondition *>(inCond.mPtr);
-  if (!cond)
-    throw HX_INVALID_OBJECT;
-  cond->Broadcast();
+	condition->broadcast();
 }
 
 // --- Lock ------------------------------------------------------------
@@ -823,7 +301,7 @@ public:
    HX_IS_INSTANCE_OF enum { _hx_ClassId = hx::clsIdLock };
 
    #ifdef HXCPP_VISIT_ALLOCS
-	void __Visit(hx::VisitContext *__inCtx) { mFinalizer->Visit(__inCtx); }
+	void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { mFinalizer->Visit(__inCtx); }
    #endif
 
 	hx::InternalFinalizer *mFinalizer;
@@ -921,15 +399,11 @@ void __hxcpp_lock_release(Dynamic inlock)
 
 int __hxcpp_GetCurrentThreadNumber()
 {
-    // Can't allow GetCurrentInfo() to create the main thread's info
-    // because that can cause a call loop.
-    hxThreadInfo *threadInfo = GetCurrentInfo(false);
-    if (!threadInfo) {
-        return 0;
-    }
-    return threadInfo->GetThreadNumber();
+	return hx::thread::Thread_obj::id();
 }
 
+#endif
+
 // --- Atomic ---
 
 bool _hx_atomic_exchange_if(::cpp::Pointer<cpp::AtomicInt> inPtr, int test, int  newVal )
@@ -946,5 +420,3 @@ int _hx_atomic_dec(::cpp::Pointer<cpp::AtomicInt> inPtr )
 {
    return _hx_atomic_sub(inPtr, 1);
 }
-
-
diff --git a/Sources/c_borogove/src/hx/gc/Immix.cpp b/Sources/c_borogove/src/hx/gc/Immix.cpp
index 880b51c..560b4f2 100644
--- a/Sources/c_borogove/src/hx/gc/Immix.cpp
+++ b/Sources/c_borogove/src/hx/gc/Immix.cpp
@@ -3,9 +3,13 @@
 #include <hx/GC.h>
 #include <hx/Memory.h>
 #include <hx/Thread.h>
+#include <hx/thread/Thread.hpp>
 #include "../Hash.h"
 #include "GcRegCapture.h"
 #include <hx/Unordered.h>
+#include <mutex>
+#include <thread>
+#include <condition_variable>
 
 #ifdef EMSCRIPTEN
    #include <emscripten/stack.h>
@@ -198,15 +202,13 @@ static bool sGcVerifyGenerational = false;
   #else
   enum { MAX_GC_THREADS = 2 };
   #endif
+  
+  // You can uncomment this for better call stacks if it crashes while collecting
+  #define HX_MULTI_THREAD_MARKING
 #else
   enum { MAX_GC_THREADS = 1 };
 #endif
 
-#if (MAX_GC_THREADS>1)
-   // You can uncomment this for better call stacks if it crashes while collecting
-   #define HX_MULTI_THREAD_MARKING
-#endif
-
 #ifdef PROFILE_THREAD_USAGE
 static int sThreadMarkCountData[MAX_GC_THREADS+1];
 static int sThreadArrayMarkCountData[MAX_GC_THREADS+1];
@@ -394,8 +396,8 @@ static int sgTimeToNextTableUpdate = 1;
 
 
 
-HxMutex  *gThreadStateChangeLock=0;
-HxMutex  *gSpecialObjectLock=0;
+std::recursive_mutex *gThreadStateChangeLock=nullptr;
+std::mutex *gSpecialObjectLock=nullptr;
 
 class LocalAllocator;
 enum LocalAllocState { lasNew, lasRunning, lasStopped, lasWaiting, lasTerminal };
@@ -572,24 +574,7 @@ enum AllocType { allocNone, allocString, allocObject, allocMarked };
 struct BlockDataInfo *gBlockStack = 0;
 typedef hx::QuickVec<hx::Object *> ObjectStack;
 
-
-typedef HxMutex ThreadPoolLock;
-
-static ThreadPoolLock sThreadPoolLock;
-
-#if !defined(HX_WINDOWS) && !defined(EMSCRIPTEN) && \
-   !defined(__SNC__) && !defined(__ORBIS__)
-#define HX_GC_PTHREADS
-typedef pthread_cond_t ThreadPoolSignal;
-inline void WaitThreadLocked(ThreadPoolSignal &ioSignal)
-{
-   pthread_cond_wait(&ioSignal, sThreadPoolLock.mMutex);
-}
-#else
-typedef HxSemaphore ThreadPoolSignal;
-#endif
-
-typedef TAutoLock<ThreadPoolLock> ThreadPoolAutoLock;
+static std::mutex sThreadPoolLock;
 
 // For threaded marking/block reclaiming
 static unsigned int sRunningThreads = 0;
@@ -616,20 +601,16 @@ static bool sgThreadPoolAbort = false;
 
 // Pthreads enters the sleep state while holding a mutex, so it no cost to update
 //  the sleeping state and thereby avoid over-signalling the condition
-bool             sThreadSleeping[MAX_GC_THREADS];
-ThreadPoolSignal sThreadWake[MAX_GC_THREADS];
-bool             sThreadJobDoneSleeping = false;
-ThreadPoolSignal sThreadJobDone;
+bool                         sThreadSleeping[MAX_GC_THREADS];
+std::condition_variable_any* sThreadWake[MAX_GC_THREADS];
+bool                         sThreadJobDoneSleeping = false;
+std::condition_variable_any* sThreadJobDone;
 
 
-static inline void SignalThreadPool(ThreadPoolSignal &ioSignal, bool sThreadSleeping)
+static inline void SignalThreadPool(std::condition_variable_any* ioSignal, bool sThreadSleeping)
 {
-   #ifdef HX_GC_PTHREADS
-   if (sThreadSleeping)
-      pthread_cond_signal(&ioSignal);
-   #else
-   ioSignal.Set();
-   #endif
+    if (sThreadSleeping)
+        ioSignal->notify_one();
 }
 
 static void wakeThreadLocked(int inThreadId)
@@ -1557,7 +1538,7 @@ struct GlobalChunks
 
       if (MAX_GC_THREADS>1 && sLazyThreads)
       {
-         ThreadPoolAutoLock l(sThreadPoolLock);
+         std::lock_guard<std::mutex> l(sThreadPoolLock);
 
          #ifdef PROFILE_THREAD_USAGE
            #define CHECK_THREAD_WAKE(tid) \
@@ -1731,7 +1712,7 @@ struct GlobalChunks
                      return result;
                }
             }
-            ThreadPoolAutoLock l(sThreadPoolLock);
+            std::lock_guard<std::mutex> l(sThreadPoolLock);
             completeThreadLocked(inThreadId);
          }
          return result;
@@ -1952,7 +1933,7 @@ public:
              if (obj)
              {
                 obj->__Mark(this);
-                #if HX_MULTI_THREAD_MARKING
+                #ifdef HX_MULTI_THREAD_MARKING
                 // Load balance
                 if (sLazyThreads && marking->count>32)
                 {
@@ -2388,7 +2369,7 @@ void MarkStringArray(String *inPtr, int inLength, hx::MarkContext *__inCtx)
 
 // --- Roots -------------------------------
 
-FILE_SCOPE HxMutex *sGCRootLock = 0;
+FILE_SCOPE std::mutex* sGCRootLock = nullptr;
 typedef hx::UnorderedSet<hx::Object **> RootSet;
 static RootSet sgRootSet;
 
@@ -2397,20 +2378,20 @@ static OffsetRootSet *sgOffsetRootSet=0;
 
 void GCAddRoot(hx::Object **inRoot)
 {
-   AutoLock lock(*sGCRootLock);
+   std::lock_guard<std::mutex> lock(*sGCRootLock);
    sgRootSet.insert(inRoot);
 }
 
 void GCRemoveRoot(hx::Object **inRoot)
 {
-   AutoLock lock(*sGCRootLock);
+   std::lock_guard<std::mutex> lock(*sGCRootLock);
    sgRootSet.erase(inRoot);
 }
 
 
 void GcAddOffsetRoot(void *inRoot, int inOffset)
 {
-   AutoLock lock(*sGCRootLock);
+   std::lock_guard<std::mutex> lock(*sGCRootLock);
    if (!sgOffsetRootSet)
       sgOffsetRootSet = new OffsetRootSet();
    (*sgOffsetRootSet)[inRoot] = inOffset;
@@ -2418,13 +2399,13 @@ void GcAddOffsetRoot(void *inRoot, int inOffset)
 
 void GcSetOffsetRoot(void *inRoot, int inOffset)
 {
-   AutoLock lock(*sGCRootLock);
+   std::lock_guard<std::mutex> lock(*sGCRootLock);
    (*sgOffsetRootSet)[inRoot] = inOffset;
 }
 
 void GcRemoveOffsetRoot(void *inRoot)
 {
-   AutoLock lock(*sGCRootLock);
+   std::lock_guard<std::mutex> lock(*sGCRootLock);
    OffsetRootSet::iterator r = sgOffsetRootSet->find(inRoot);
    sgOffsetRootSet->erase(r);
 }
@@ -2438,7 +2419,7 @@ void GcRemoveOffsetRoot(void *inRoot)
 class WeakRef;
 typedef hx::QuickVec<WeakRef *> WeakRefs;
 
-FILE_SCOPE HxMutex *sFinalizerLock = 0;
+FILE_SCOPE std::mutex *sFinalizerLock = 0;
 FILE_SCOPE WeakRefs sWeakRefs;
 
 class WeakRef : public hx::Object
@@ -2451,16 +2432,15 @@ public:
       mRef = inRef;
       if (mRef.mPtr)
       {
-         sFinalizerLock->Lock();
+         std::lock_guard<std::mutex> lock(*sFinalizerLock);
          sWeakRefs.push(this);
-         sFinalizerLock->Unlock();
       }
    }
 
    // Don't mark our ref !
 
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(mRef); }
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(mRef); }
    #endif
 
    Dynamic mRef;
@@ -2502,7 +2482,7 @@ InternalFinalizer::InternalFinalizer(hx::Object *inObj, finalizer inFinalizer)
    mFinalizer = inFinalizer;
 
    // Ensure this survives generational collect
-   AutoLock lock(*gSpecialObjectLock);
+   std::lock_guard<std::mutex> lock(*gSpecialObjectLock);
    sgFinalizers->push(this);
 }
 
@@ -2799,7 +2779,7 @@ void  GCSetFinalizer( hx::Object *obj, hx::finalizer f )
    if (((unsigned int *)obj)[-1] & HX_GC_CONST_ALLOC_BIT)
       throw Dynamic(HX_CSTRING("set_finalizer - invalid const object"));
 
-   AutoLock lock(*gSpecialObjectLock);
+   std::lock_guard<std::mutex> lock(*gSpecialObjectLock);
    if (f==0)
    {
       FinalizerMap::iterator i = sFinalizerMap.find(obj);
@@ -2819,7 +2799,7 @@ void  GCSetHaxeFinalizer( hx::Object *obj, HaxeFinalizer f )
    if (((unsigned int *)obj)[-1] & HX_GC_CONST_ALLOC_BIT)
       throw Dynamic(HX_CSTRING("set_finalizer - invalid const object"));
 
-   AutoLock lock(*gSpecialObjectLock);
+   std::lock_guard<std::mutex> lock(*gSpecialObjectLock);
    if (f==0)
    {
       HaxeFinalizerMap::iterator i = sHaxeFinalizerMap.find(obj);
@@ -2837,13 +2817,13 @@ void GCDoNotKill(hx::Object *inObj)
    if (((unsigned int *)inObj)[-1] & HX_GC_CONST_ALLOC_BIT)
       throw Dynamic(HX_CSTRING("doNotKill - invalid const object"));
 
-   AutoLock lock(*gSpecialObjectLock);
+   std::lock_guard<std::mutex> lock(*gSpecialObjectLock);
    sMakeZombieSet.insert(inObj);
 }
 
 hx::Object *GCGetNextZombie()
 {
-   AutoLock lock(*gSpecialObjectLock);
+   std::lock_guard<std::mutex> lock(*gSpecialObjectLock);
    if (sZombieList.empty())
       return 0;
    hx::Object *result = sZombieList.pop();
@@ -2852,13 +2832,13 @@ hx::Object *GCGetNextZombie()
 
 void RegisterWeakHash(HashBase<String> *inHash)
 {
-   AutoLock lock(*gSpecialObjectLock);
+   std::lock_guard<std::mutex> lock(*gSpecialObjectLock);
    sWeakHashList.push(inHash);
 }
 
 void RegisterWeakHash(HashBase<Dynamic> *inHash)
 {
-   AutoLock lock(*gSpecialObjectLock);
+   std::lock_guard<std::mutex> lock(*gSpecialObjectLock);
    sWeakHashList.push(inHash);
 }
 
@@ -2951,8 +2931,8 @@ public:
 
    AllocCounter() { count = 0; }
 
-   void visitObject(hx::Object **ioPtr) { count ++; }
-   void visitAlloc(void **ioPtr) { count ++; }
+   void visitObject(hx::Object **ioPtr) HXCPP_OVERRIDE { count ++; }
+   void visitAlloc(void **ioPtr) HXCPP_OVERRIDE { count ++; }
 };
 
 
@@ -3155,12 +3135,12 @@ public:
    {
       if (!gThreadStateChangeLock)
       {
-         gThreadStateChangeLock = new HxMutex();
-         gSpecialObjectLock = new HxMutex();
+         gThreadStateChangeLock = new std::recursive_mutex();
+         gSpecialObjectLock = new std::mutex();
       }
       // Until we add ourselves, the collector will not wait
       //  on us - ie, we are assumed ot be in a GC free zone.
-      AutoLock lock(*gThreadStateChangeLock);
+      std::lock_guard<std::recursive_mutex> lock(*gThreadStateChangeLock);
       mLocalAllocs.push(inAlloc);
       // TODO Attach debugger
    }
@@ -3183,7 +3163,7 @@ public:
 
    LocalAllocator *GetPooledAllocator()
    {
-      AutoLock lock(*gThreadStateChangeLock);
+      std::lock_guard<std::recursive_mutex> lock(*gThreadStateChangeLock);
       for(int p=0;p<LOCAL_POOL_SIZE;p++)
       {
          if (mLocalPool[p])
@@ -3218,19 +3198,19 @@ public:
       {
          unsigned int *blob = ((unsigned int *)inLarge) - 2;
          unsigned int size = *blob;
-         mLargeListLock.Lock();
+         mLargeListLock.lock();
          mLargeAllocated -= size;
          // Could somehow keep it in the list, but mark as recycled?
          mLargeList.qerase_val(blob);
          // We could maybe free anyhow?
          if (!largeObjectRecycle.hasExtraCapacity(1))
          {
-            mLargeListLock.Unlock();
+            mLargeListLock.unlock();
             HxFree(blob);
             return;
          }
          largeObjectRecycle.push(blob);
-         mLargeListLock.Unlock();
+         mLargeListLock.unlock();
       }
    }
 
@@ -3271,7 +3251,7 @@ public:
             {
                if (do_lock && !isLocked)
                {
-                  mLargeListLock.Lock();
+                  mLargeListLock.lock();
                   isLocked = true;
                   if (  i>=largeObjectRecycle.size() || largeObjectRecycle[i][0] != inSize )
                      continue;
@@ -3297,7 +3277,7 @@ public:
 
          if (isLocked)
          {
-            mLargeListLock.Unlock();
+            mLargeListLock.unlock();
             isLocked = false;
          }
 
@@ -3322,13 +3302,13 @@ public:
       #endif
 
       if (do_lock && !isLocked)
-         mLargeListLock.Lock();
+         mLargeListLock.lock();
 
       mLargeList.push(result);
       mLargeAllocated += inSize;
 
       if (do_lock)
-         mLargeListLock.Unlock();
+         mLargeListLock.unlock();
 
 #ifdef HXCPP_TELEMETRY
       __hxt_gc_alloc(result + 2, inSize);
@@ -3365,12 +3345,12 @@ public:
       #endif
 
       if (do_lock)
-         mLargeListLock.Lock();
+         mLargeListLock.lock();
 
       mLargeAllocated += inDelta;
 
       if (do_lock)
-         mLargeListLock.Unlock();
+         mLargeListLock.unlock();
    }
 
    // Gets a block with the 'zeroLock' acquired, which means the zeroing thread
@@ -3616,7 +3596,7 @@ public:
 
          #ifndef HXCPP_SINGLE_THREADED_APP
          hx::EnterGCFreeZone();
-         gThreadStateChangeLock->Lock();
+         gThreadStateChangeLock->lock();
          hx::ExitGCFreeZoneLocked();
 
          result = GetNextFree(inRequiredBytes);
@@ -3665,7 +3645,7 @@ public:
          mCurrentRowsInUse += result->GetFreeRows();
 
          #ifndef HXCPP_SINGLE_THREADED_APP
-         gThreadStateChangeLock->Unlock();
+         gThreadStateChangeLock->unlock();
          #endif
 
 
@@ -3897,24 +3877,24 @@ public:
          GlobalAllocator *mAlloc;
       public:
          AdjustPointer(GlobalAllocator *inAlloc) : mAlloc(inAlloc) {  }
-      
-         void visitObject(hx::Object **ioPtr)
+
+         void visitObject(hx::Object **ioPtr) HXCPP_OVERRIDE
          {
             if ( ((*(unsigned int **)ioPtr)[-1]) == IMMIX_OBJECT_HAS_MOVED )
             {
                //GCLOG("  patch object to  %p -> %p\n", *ioPtr,  (*(hx::Object ***)ioPtr)[0]);
                *ioPtr = (*(hx::Object ***)ioPtr)[0];
-               //GCLOG("    %08x %08x ...\n", ((int *)(*ioPtr))[0], ((int *)(*ioPtr))[1] ); 
+               //GCLOG("    %08x %08x ...\n", ((int *)(*ioPtr))[0], ((int *)(*ioPtr))[1] );
             }
          }
 
-         void visitAlloc(void **ioPtr)
+         void visitAlloc(void **ioPtr) HXCPP_OVERRIDE
          {
             if ( ((*(unsigned int **)ioPtr)[-1]) == IMMIX_OBJECT_HAS_MOVED )
             {
                //GCLOG("  patch reference to  %p -> %p\n", *ioPtr,  (*(void ***)ioPtr)[0]);
                *ioPtr = (*(void ***)ioPtr)[0];
-               //GCLOG("    %08x %08x ...\n", ((int *)(*ioPtr))[0], ((int *)(*ioPtr))[1] ); 
+               //GCLOG("    %08x %08x ...\n", ((int *)(*ioPtr))[0], ((int *)(*ioPtr))[1] );
             }
          }
       };
@@ -4216,7 +4196,7 @@ public:
  
    void *GetIDObject(int inIndex)
    {
-      AutoLock lock(*gSpecialObjectLock);
+      std::lock_guard<std::mutex> lock(*gSpecialObjectLock);
       if (inIndex<0 || inIndex>hx::sIdObjectMap.size())
          return 0;
       return hx::sIdObjectMap[inIndex];
@@ -4224,7 +4204,7 @@ public:
 
    int GetObjectID(void * inPtr)
    {
-      AutoLock lock(*gSpecialObjectLock);
+      std::lock_guard<std::mutex> lock(*gSpecialObjectLock);
       hx::ObjectIdMap::iterator i = hx::sObjectIdMap.find( (hx::Object *)inPtr );
       if (i!=hx::sObjectIdMap.end())
          return i->second;
@@ -4443,7 +4423,7 @@ public:
          if (mZeroListQueue + mThreadJobId < mZeroList.size())
          {
             // Wake zeroing thread
-            ThreadPoolAutoLock l(sThreadPoolLock);
+            std::lock_guard<std::mutex> l(sThreadPoolLock);
             if (!(sRunningThreads & 0x01))
             {
                #ifdef PROFILE_THREAD_USAGE
@@ -4458,7 +4438,7 @@ public:
 
    void finishThreadJob(int inId)
    {
-      ThreadPoolAutoLock l(sThreadPoolLock);
+      std::lock_guard<std::mutex> l(sThreadPoolLock);
       if (sRunningThreads & (1<<inId))
       {
          sRunningThreads &= ~(1<<inId);
@@ -4476,22 +4456,15 @@ public:
 
    void waitForThreadWake(int inId)
    {
-      #ifdef HX_GC_PTHREADS
-      {
-         ThreadPoolAutoLock l(sThreadPoolLock);
-         int count = 0;
+        std::lock_guard<std::mutex> l(sThreadPoolLock);
+        int count = 0;
 
-         // May be woken multiple times if sRunningThreads is set to 0 then 1 before we sleep
-         sThreadSleeping[inId] = true;
-         // Spurious wake?
-         while( !(sRunningThreads & (1<<inId) ) )
-            WaitThreadLocked(sThreadWake[inId]);
-         sThreadSleeping[inId] = false;
-      }
-      #else
-      while( !(sRunningThreads & (1<<inId) ) )
-         sThreadWake[inId].Wait();
-      #endif
+        // May be woken multiple times if sRunningThreads is set to 0 then 1 before we sleep
+        sThreadSleeping[inId] = true;
+        // Spurious wake?
+        sThreadWake[inId]->wait(sThreadPoolLock, [&inId]() { return sRunningThreads & (1 << inId); });
+        
+        sThreadSleeping[inId] = false;
    }
 
 
@@ -4544,29 +4517,29 @@ public:
       }
    }
 
-   static THREAD_FUNC_TYPE SThreadLoop( void *inInfo )
+   static void SThreadLoop( void *inInfo )
    {
       sGlobalAlloc->ThreadLoop((int)(size_t)inInfo);
-      THREAD_FUNC_RET;
    }
 
    void CreateWorker(int inId)
    {
       void *info = (void *)(size_t)inId;
 
-      #ifdef HX_GC_PTHREADS
-         pthread_cond_init(&sThreadWake[inId],0);
-         sThreadSleeping[inId] = false;
-         if (inId==0)
-            pthread_cond_init(&sThreadJobDone,0);
-
-         pthread_t result = 0;
-         int created = pthread_create(&result,0,SThreadLoop,info);
-         bool ok = created==0;
-      #elif defined(EMSCRIPTEN)
+      #if defined(EMSCRIPTEN)
          // Only one thread
       #else
-         bool ok = HxCreateDetachedThread(SThreadLoop, info);
+         sThreadWake[inId] = new std::condition_variable_any();
+         if (0 == inId)
+         {
+             sThreadJobDone = new std::condition_variable_any();
+         }
+
+         sThreadSleeping[inId] = false;
+
+         std::thread thread(SThreadLoop, info);
+
+         thread.detach();
       #endif
    }
 
@@ -4581,7 +4554,7 @@ public:
             sgThreadPoolAbort = true;
             if (sgThreadPoolJob==tpjAsyncZeroJit)
             {
-               ThreadPoolAutoLock l(sThreadPoolLock);
+               std::lock_guard<std::mutex> l(sThreadPoolLock);
                // Thread will be waiting, but not finished
                if (sRunningThreads & 0x1)
                {
@@ -4593,16 +4566,10 @@ public:
          }
 
 
-         #ifdef HX_GC_PTHREADS
-         ThreadPoolAutoLock lock(sThreadPoolLock);
+         std::lock_guard<std::mutex> l(sThreadPoolLock);
          sThreadJobDoneSleeping = true;
-         while(sRunningThreads)
-             WaitThreadLocked(sThreadJobDone);
+         sThreadJobDone->wait(sThreadPoolLock, []() { return sRunningThreads == false; });
          sThreadJobDoneSleeping = false;
-         #else
-         while(sRunningThreads)
-            sThreadJobDone.Wait();
-         #endif
          sgThreadPoolAbort = false;
          sAllThreads = 0;
          sgThreadPoolJob = tpjNone;
@@ -4625,10 +4592,7 @@ public:
             CreateWorker(i);
       }
 
-      #ifdef HX_GC_PTHREADS
-      ThreadPoolAutoLock lock(sThreadPoolLock);
-      #endif
-
+      std::lock_guard<std::mutex> l(sThreadPoolLock);
 
       sgThreadPoolJob = inJob;
 
@@ -4648,15 +4612,9 @@ public:
       if (inWait)
       {
          // Join the workers...
-         #ifdef HX_GC_PTHREADS
          sThreadJobDoneSleeping = true;
-         while(sRunningThreads)
-            WaitThreadLocked(sThreadJobDone);
+         sThreadJobDone->wait(sThreadPoolLock, []() { return sRunningThreads == false; });
          sThreadJobDoneSleeping = false;
-         #else
-         while(sRunningThreads)
-            sThreadJobDone.Wait();
-         #endif
 
          sAllThreads = 0;
          sgThreadPoolJob = tpjNone;
@@ -4866,12 +4824,12 @@ public:
       {
          if (inLocked)
          {
-            gThreadStateChangeLock->Unlock();
+            gThreadStateChangeLock->unlock();
 
             hx::PauseForCollect();
 
             hx::EnterGCFreeZone();
-            gThreadStateChangeLock->Lock();
+            gThreadStateChangeLock->lock();
             hx::ExitGCFreeZoneLocked();
          }
          else
@@ -4890,7 +4848,7 @@ public:
       this_local = (LocalAllocator *)(hx::ImmixAllocator *)hx::tlsStackContext;
 
       if (!inLocked)
-         gThreadStateChangeLock->Lock();
+         gThreadStateChangeLock->lock();
 
       for(int i=0;i<mLocalAllocs.size();i++)
          if (mLocalAllocs[i]!=this_local)
@@ -5408,7 +5366,7 @@ public:
          }
 
          if (!inLocked)
-            gThreadStateChangeLock->Unlock();
+            gThreadStateChangeLock->unlock();
       #else
         #ifdef HXCPP_SCRIPTABLE
         hx::gMainThreadContext->byteMarkId = hx::gByteMarkID;
@@ -5625,7 +5583,7 @@ public:
    volatile int mZeroListQueue;
 
    LargeList mLargeList;
-   HxMutex    mLargeListLock;
+   std::mutex mLargeListLock;
    hx::QuickVec<LocalAllocator *> mLocalAllocs;
    LocalAllocator *mLocalPool[LOCAL_POOL_SIZE];
    hx::QuickVec<unsigned int *> largeObjectRecycle;
@@ -5902,7 +5860,7 @@ public:
          EnterGCFreeZone();
       #endif
 
-      AutoLock lock(*gThreadStateChangeLock);
+      std::lock_guard<std::recursive_mutex> lock(*gThreadStateChangeLock);
 
       #ifdef HX_WINDOWS
       mID = 0;
@@ -6129,7 +6087,7 @@ public:
       if (!mGCFreeZone)
          CriticalGCError("GCFree Zone mismatch");
 
-      AutoLock lock(*gThreadStateChangeLock);
+      std::lock_guard<std::recursive_mutex> lock(*gThreadStateChangeLock);
       mReadyForCollect.Reset();
       mGCFreeZone = false;
       #endif
@@ -6192,7 +6150,7 @@ public:
    #endif // }  HXCPP_EXPLICIT_STACK_EXTENT
 
 
-   void SetupStackAndCollect(bool inMajor, bool inForceCompact, bool inLocked=false,bool inFreeIsFragged=false)
+   void SetupStackAndCollect(bool inMajor, bool inForceCompact, bool inLocked=false,bool inFreeIsFragged=false) HXCPP_OVERRIDE
    {
       #ifndef HXCPP_SINGLE_THREADED_APP
         #if HXCPP_DEBUG
@@ -6254,7 +6212,7 @@ public:
    }
 
 
-   void *CallAlloc(int inSize,unsigned int inObjectFlags)
+   void *CallAlloc(int inSize,unsigned int inObjectFlags) HXCPP_OVERRIDE
    {
       #ifndef HXCPP_SINGLE_THREADED_APP
       #if HXCPP_DEBUG
@@ -6605,8 +6563,8 @@ void InitAlloc()
    sgAllocInit = true;
    sGlobalAlloc = new GlobalAllocator();
    sgFinalizers = new FinalizerList();
-   sFinalizerLock = new HxMutex();
-   sGCRootLock = new HxMutex();
+   sFinalizerLock = new std::mutex();
+   sGCRootLock = new std::mutex();
    hx::Object tmp;
    void **stack = *(void ***)(&tmp);
    sgObject_root = stack[0];
@@ -6619,7 +6577,7 @@ void InitAlloc()
    ExitGCFreeZone();
 
    // Setup main thread ...
-   __hxcpp_thread_current();
+   hx::thread::Thread_obj::current();
 
    gMainThreadContext->onThreadAttach();
 }
@@ -6913,7 +6871,7 @@ int GcGetThreadAttachedCount()
 class GcFreezer : public hx::VisitContext
 {
 public:
-   void visitObject(hx::Object **ioPtr)
+   void visitObject(hx::Object **ioPtr) HXCPP_OVERRIDE
    {
       hx::Object *obj = *ioPtr;
       if (!obj || IsConstAlloc(obj))
@@ -6926,7 +6884,7 @@ public:
       (*ioPtr)->__Visit(this);
    }
 
-   void visitAlloc(void **ioPtr)
+   void visitAlloc(void **ioPtr) HXCPP_OVERRIDE
    {
       void *data = *ioPtr;
       if (!data || IsConstAlloc(data))
@@ -7041,13 +6999,13 @@ void __hxcpp_set_finalizer(Dynamic inObj, void *inFunc)
 
 void __hxcpp_add_member_finalizer(hx::Object *inObject, _hx_member_finalizer f, bool inPin)
 {
-   AutoLock lock(*gSpecialObjectLock);
+   std::lock_guard<std::mutex> lock(*gSpecialObjectLock);
    hx::sFinalizableList.push( hx::Finalizable(inObject, f, inPin) );
 }
 
 void __hxcpp_add_alloc_finalizer(void *inAlloc, _hx_alloc_finalizer f, bool inPin)
 {
-   AutoLock lock(*gSpecialObjectLock);
+   std::lock_guard<std::mutex> lock(*gSpecialObjectLock);
    hx::sFinalizableList.push( hx::Finalizable(inAlloc, f, inPin) );
 }
 
diff --git a/Sources/c_borogove/src/hx/libs/regexp/Build.xml b/Sources/c_borogove/src/hx/libs/regexp/Build.xml
index 4ead482..46a1fba 100644
--- a/Sources/c_borogove/src/hx/libs/regexp/Build.xml
+++ b/Sources/c_borogove/src/hx/libs/regexp/Build.xml
@@ -4,7 +4,7 @@
 
 <set name="PCRE_DIR" value="${HXCPP}/project/thirdparty/pcre2-10.42/src" />
 
-<files id="pcre2-8" >
+<files id="pcre2-8" tags="" >
   <depend files="hxcpp-depends"/>
   <depend name="${this_dir}/Build.xml" dateOnly="true" />
   <cache value="true" asLibrary="true" />
@@ -15,7 +15,7 @@
   <include name="${this_dir}/pcre2_sources.xml" />
 </files>
 
-<files id="pcre2-16" >
+<files id="pcre2-16" tags="" >
   <depend files="hxcpp-depends"/>
   <depend name="${this_dir}/Build.xml" dateOnly="true" />
   <cache value="true" asLibrary="true" />
@@ -42,4 +42,4 @@
   <files id="pcre2-16" if="hxcpp_smart_strings" />
 </target>
 
-</xml>
\ No newline at end of file
+</xml>
diff --git a/Sources/c_borogove/src/hx/libs/regexp/RegExp.cpp b/Sources/c_borogove/src/hx/libs/regexp/RegExp.cpp
index 9c66167..09d1808 100644
--- a/Sources/c_borogove/src/hx/libs/regexp/RegExp.cpp
+++ b/Sources/c_borogove/src/hx/libs/regexp/RegExp.cpp
@@ -133,9 +133,9 @@ struct pcredata : public hx::Object
       #endif
    }
 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER(string); HX_MARK_MEMBER(expr); }
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER(string); HX_MARK_MEMBER(expr); }
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(string); HX_VISIT_MEMBER(expr); }
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(string); HX_VISIT_MEMBER(expr); }
    #endif
 
    static void finalize(Dynamic obj)
@@ -143,7 +143,7 @@ struct pcredata : public hx::Object
       ((pcredata *)(obj.mPtr))->destroy();
    }
 
-   String toString() { return expr; }
+   String toString() HXCPP_OVERRIDE { return expr; }
 };
 
 
diff --git a/Sources/c_borogove/src/hx/libs/sqlite/Build.xml b/Sources/c_borogove/src/hx/libs/sqlite/Build.xml
index ff957e7..b17ca54 100644
--- a/Sources/c_borogove/src/hx/libs/sqlite/Build.xml
+++ b/Sources/c_borogove/src/hx/libs/sqlite/Build.xml
@@ -14,7 +14,7 @@
   <file name="Sqlite.cpp"/>
 
   <depend name="${SQLITE_DIR}/sqlite3.h" />
-  <file name="${SQLITE_DIR}/sqlite3.c"/>
+  <file name="${SQLITE_DIR}/sqlite3.c" tags="" />
 </files>
 
 <target id="haxe">
diff --git a/Sources/c_borogove/src/hx/libs/sqlite/Sqlite.cpp b/Sources/c_borogove/src/hx/libs/sqlite/Sqlite.cpp
index 4b4f97e..972d8b1 100644
--- a/Sources/c_borogove/src/hx/libs/sqlite/Sqlite.cpp
+++ b/Sources/c_borogove/src/hx/libs/sqlite/Sqlite.cpp
@@ -98,7 +98,7 @@ struct result : public hx::Object
       }
    }
 
-   String toString() { return HX_CSTRING("Sqlite Result"); }
+   String toString() HXCPP_OVERRIDE { return HX_CSTRING("Sqlite Result"); }
 
  //static void finalize_result( result *r, int exc, bool throwError = true )
 };
@@ -158,12 +158,12 @@ struct database : public hx::Object
       HX_OBJ_WB_GET(this, last.mPtr);
    }
 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER(last); }
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER(last); }
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(last); }
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(last); }
    #endif
 
-   String toString() { return HX_CSTRING("Sqlite Databse"); }
+   String toString() HXCPP_OVERRIDE { return HX_CSTRING("Sqlite Databse"); }
 };
 
 static void sqlite_error( sqlite3 *db ) {
@@ -200,8 +200,9 @@ result *getResult(Dynamic handle, bool inRequireStatement)
 Dynamic _hx_sqlite_connect(String filename)
 {
    sqlite3 *sqlDb = 0;
+   const char *filenameUtf8 = filename.utf8_str();
    __hxcpp_enter_gc_free_zone();
-   int err = sqlite3_open(filename.utf8_str(),&sqlDb);
+   int err = sqlite3_open(filenameUtf8,&sqlDb);
    __hxcpp_exit_gc_free_zone();
    if (err != SQLITE_OK)
       sqlite_error(sqlDb);
diff --git a/Sources/c_borogove/src/hx/libs/ssl/SSL.cpp b/Sources/c_borogove/src/hx/libs/ssl/SSL.cpp
index f76ba18..9a03daa 100644
--- a/Sources/c_borogove/src/hx/libs/ssl/SSL.cpp
+++ b/Sources/c_borogove/src/hx/libs/ssl/SSL.cpp
@@ -617,6 +617,50 @@ Array<unsigned char> _hx_ssl_read( Dynamic hssl ) {
 	return result;
 }
 
+#ifdef NEKO_WINDOWS
+static int verify_callback(void* param, mbedtls_x509_crt *crt, int depth, uint32_t *flags) {
+	if (*flags == 0 || *flags & MBEDTLS_X509_BADCERT_CN_MISMATCH) {
+		return 0;
+	}
+
+	HCERTSTORE store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG, NULL);
+	if(store == NULL) {
+		return MBEDTLS_ERR_X509_FATAL_ERROR;
+	}
+	PCCERT_CONTEXT primary_context = {0};
+	if(!CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING, crt->raw.p, crt->raw.len, CERT_STORE_ADD_REPLACE_EXISTING, &primary_context)) {
+		CertCloseStore(store, 0);
+		return MBEDTLS_ERR_X509_FATAL_ERROR;
+	}
+	PCCERT_CHAIN_CONTEXT chain_context = {0};
+	CERT_CHAIN_PARA parameters = {0};
+	if(!CertGetCertificateChain(NULL, primary_context, NULL, store, &parameters, 0, NULL, &chain_context)) {
+		CertFreeCertificateContext(primary_context);
+		CertCloseStore(store, 0);
+		return MBEDTLS_ERR_X509_FATAL_ERROR;
+	}
+	CERT_CHAIN_POLICY_PARA policy_parameters = {0};
+	CERT_CHAIN_POLICY_STATUS policy_status = {0};
+	if(!CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_SSL, chain_context, &policy_parameters, &policy_status)) {
+		CertFreeCertificateChain(chain_context);
+		CertFreeCertificateContext(primary_context);
+		CertCloseStore(store, 0);
+		return MBEDTLS_ERR_X509_FATAL_ERROR;
+	}
+	if(policy_status.dwError == 0) {
+		*flags = 0;
+	} else {
+		// if we ever want to read the verification result,
+		// we need to properly map dwError to flags
+		*flags |= MBEDTLS_X509_BADCERT_OTHER;
+	}
+	CertFreeCertificateChain(chain_context);
+	CertFreeCertificateContext(primary_context);
+	CertCloseStore(store, 0);
+	return 0;
+}
+#endif
+
 Dynamic _hx_ssl_conf_new( bool server ) {
 	int ret;
 	sslconf *conf = new sslconf();
@@ -627,6 +671,9 @@ Dynamic _hx_ssl_conf_new( bool server ) {
 		conf->destroy();
 		ssl_error( ret );
 	}
+#ifdef NEKO_WINDOWS
+	mbedtls_ssl_conf_verify(conf->c, verify_callback, NULL);
+#endif
 	mbedtls_ssl_conf_rng( conf->c, mbedtls_ctr_drbg_random, &ctr_drbg );
 	return conf;
 }
@@ -1071,3 +1118,4 @@ void _hx_ssl_init() {
 }
 
 #endif
+
diff --git a/Sources/c_borogove/src/hx/libs/std/File.cpp b/Sources/c_borogove/src/hx/libs/std/File.cpp
index 57a364f..a883187 100644
--- a/Sources/c_borogove/src/hx/libs/std/File.cpp
+++ b/Sources/c_borogove/src/hx/libs/std/File.cpp
@@ -7,6 +7,7 @@
 
 #ifdef NEKO_WINDOWS
 #   include <windows.h>
+#   include <io.h>
 #endif
 
 /**
@@ -47,9 +48,9 @@ struct fio : public hx::Object
       name = String();
    }
 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER(name); }
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER(name); }
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(name); }
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(name); }
    #endif
 
    static void finalize(Dynamic inObj)
@@ -57,7 +58,7 @@ struct fio : public hx::Object
       ((fio *)(inObj.mPtr))->destroy();
    }
 
-   String toString() { return HX_CSTRING("fio:") + name; }
+   String toString() HXCPP_OVERRIDE { return HX_CSTRING("fio:") + name; }
 
 };
 
@@ -146,7 +147,44 @@ int _hx_std_file_write( Dynamic handle, Array<unsigned char> s, int p, int n )
    if( p < 0 || len < 0 || p > buflen || p + len > buflen )
       return 0;
 
-   hx::EnterGCFreeZone();
+   hx::AutoGCFreeZone zone;
+#ifdef HX_WINDOWS
+   if (_isatty(_fileno(f->io))) {
+      fflush(f->io);
+      HANDLE win_handle = (HANDLE)_get_osfhandle(_fileno(f->io));
+      static const int MAX_BUFFER_SIZE = 8192;
+      wchar_t buf[MAX_BUFFER_SIZE / 2];
+      int result = MultiByteToWideChar(CP_UTF8, 0, (char *)&s[p], len, buf, MAX_BUFFER_SIZE / 2);
+      DWORD written = 0;
+      if(!WriteConsoleW(win_handle, buf, result, &written, NULL)) {
+         file_error("file_write", f->name);
+      }
+      if (written == result) {
+         return len;
+      } else {
+         auto first_code_unit_remaining = buf[written];
+         if (first_code_unit_remaining > 0xDCEE && first_code_unit_remaining <= 0xDFF) {
+            DWORD tmp;
+            WriteConsoleW(win_handle, &buf[written], 1, &tmp, NULL);
+            written += 1;
+         }
+         int count = 0;
+         for (int i = 0; i < written; i++) {
+            wchar_t ch = buf[i];
+            if (ch >= 0 && ch <= 0x7F) {
+               count += 1;
+            } else if (ch >= 0x0080 && ch <= 0x07FF) {
+               count += 2;
+            } else if (ch >= 0xDCEE && ch <= 0xDFF) {
+               count += 1;
+            } else {
+               count += 3;
+            }
+         }
+         return count;
+      }
+   }
+#endif
    while( len > 0 )
    {
       POSIX_LABEL(file_write_again);
@@ -159,7 +197,6 @@ int _hx_std_file_write( Dynamic handle, Array<unsigned char> s, int p, int n )
       p += d;
       len -= d;
    }
-   hx::ExitGCFreeZone();
    return n;
 }
 
diff --git a/Sources/c_borogove/src/hx/libs/std/Process.cpp b/Sources/c_borogove/src/hx/libs/std/Process.cpp
index d9f020e..498dbfa 100644
--- a/Sources/c_borogove/src/hx/libs/std/Process.cpp
+++ b/Sources/c_borogove/src/hx/libs/std/Process.cpp
@@ -11,7 +11,7 @@
 #   include <memory.h>
 #   include <errno.h>
 #   include <signal.h>
-#   if defined(ANDROID) || defined(BLACKBERRY) || defined(EMSCRIPTEN)
+#   if defined(ANDROID) || defined(BLACKBERRY) || defined(EMSCRIPTEN) || defined(NEKO_BSD)
 #      include <sys/wait.h>
 #   elif !defined(NEKO_MAC)
 #      include <wait.h>
@@ -97,7 +97,7 @@ struct vprocess : public hx::Object
       ((vprocess *)(obj.mPtr))->destroy();
    }
 
-   String toString() { return HX_CSTRING("vprocess"); }
+   String toString() HXCPP_OVERRIDE { return HX_CSTRING("vprocess"); }
 };
 
 vprocess *getProcess(Dynamic handle)
diff --git a/Sources/c_borogove/src/hx/libs/std/Random.cpp b/Sources/c_borogove/src/hx/libs/std/Random.cpp
index af59c15..14888b3 100644
--- a/Sources/c_borogove/src/hx/libs/std/Random.cpp
+++ b/Sources/c_borogove/src/hx/libs/std/Random.cpp
@@ -39,7 +39,7 @@ struct rnd  : public hx::Object
    unsigned long seeds[NSEEDS];
    unsigned long cur;
 
-   String toString() { return HX_CSTRING("rand"); }
+   String toString() HXCPP_OVERRIDE { return HX_CSTRING("rand"); }
 };
 
 static unsigned long mag01[2]={ 
diff --git a/Sources/c_borogove/src/hx/libs/std/Socket.cpp b/Sources/c_borogove/src/hx/libs/std/Socket.cpp
index 1417e7b..8cbb678 100644
--- a/Sources/c_borogove/src/hx/libs/std/Socket.cpp
+++ b/Sources/c_borogove/src/hx/libs/std/Socket.cpp
@@ -9,7 +9,9 @@
 
 #ifdef __GNUC__
    // Mingw / gcc on windows
+   #ifndef _WIN32_WINNT
    #define _WIN32_WINNT 0x0501
+   #endif
    #include <winsock2.h>
    #include <ws2tcpip.h>
 #else
@@ -19,14 +21,9 @@
    #include <Ws2tcpip.h>
 #endif
 
-
 #define DYNAMIC_INET_FUNCS 1
-typedef WINSOCK_API_LINKAGE  INT (WSAAPI *inet_pton_func)( INT Family, PCSTR pszAddrString, PVOID pAddrBuf);
-typedef WINSOCK_API_LINKAGE  PCSTR (WSAAPI *inet_ntop_func)(INT  Family, PVOID pAddr, PSTR pStringBuf, size_t StringBufSize);
-
-
-
-
+typedef INT (WSAAPI *inet_pton_func)( INT Family, PCSTR pszAddrString, PVOID pAddrBuf);
+typedef PCSTR (WSAAPI *inet_ntop_func)(INT  Family, PVOID pAddr, PSTR pStringBuf, size_t StringBufSize);
 
 #   define FDSIZE(n)   (sizeof(u_int) + (n) * sizeof(SOCKET))
 #   define SHUT_WR      SD_SEND
@@ -72,7 +69,7 @@ struct SocketWrapper : public hx::Object
 
    SOCKET socket;
 
-   int __GetType() const { return socketType; }
+   int __GetType() const HXCPP_OVERRIDE { return socketType; }
 };
 
 
@@ -98,6 +95,29 @@ SOCKET val_sock(Dynamic inValue)
 }
 
 
+void reset_sock(Dynamic inValue)
+{
+   if (inValue.mPtr)
+   {
+      int type = inValue->__GetType();
+      if (type==vtClass)
+      {
+         inValue = inValue->__Field( HX_CSTRING("__s"), hx::paccNever );
+         if (inValue.mPtr==0)
+            return;
+         type = inValue->__GetType();
+      }
+
+      if (type==socketType) {
+         static_cast<SocketWrapper *>(inValue.mPtr)->socket = INVALID_SOCKET;
+         return;
+      }
+   }
+
+   hx::Throw(HX_CSTRING("Invalid socket handle"));
+}
+
+
 /**
    <doc>
    <h1>Socket</h1>
@@ -190,9 +210,10 @@ void _hx_std_socket_close( Dynamic handle )
 {
    SOCKET s = val_sock(handle);
    POSIX_LABEL(close_again);
-   if( closesocket(s) ) {
+   if( s != INVALID_SOCKET && closesocket(s) ) {
       HANDLE_EINTR(close_again);
    }
+   reset_sock(handle);
 }
 
 /**
@@ -363,7 +384,7 @@ int _hx_std_host_resolve( String host )
       struct hostent *h = 0;
       hx::strbuf hostBuf;
 
-#   if defined(NEKO_WINDOWS) || defined(NEKO_MAC) || defined(BLACKBERRY) || defined(EMSCRIPTEN)
+#   if defined(NEKO_WINDOWS) || defined(NEKO_MAC) || defined(BLACKBERRY) || defined(EMSCRIPTEN) || defined(NEKO_BSD)
       h = gethostbyname(host.utf8_str(&hostBuf));
 #   else
       struct hostent hbase;
@@ -501,7 +522,7 @@ String _hx_std_host_reverse( int host )
    struct hostent *h = 0;
    unsigned int ip = host;
    hx::EnterGCFreeZone();
-   #if defined(NEKO_WINDOWS) || defined(NEKO_MAC) || defined(ANDROID) || defined(BLACKBERRY) || defined(EMSCRIPTEN)
+   #if defined(NEKO_WINDOWS) || defined(NEKO_MAC) || defined(ANDROID) || defined(BLACKBERRY) || defined(EMSCRIPTEN) || defined(NEKO_BSD)
    h = gethostbyaddr((char *)&ip,4,AF_INET);
    #else
    struct hostent htmp;
@@ -522,7 +543,7 @@ String _hx_std_host_reverse_ipv6( Array<unsigned char> host )
 
    struct hostent *h = 0;
    hx::EnterGCFreeZone();
-   #if defined(NEKO_WINDOWS) || defined(NEKO_MAC) || defined(ANDROID) || defined(BLACKBERRY) || defined(EMSCRIPTEN)
+   #if defined(NEKO_WINDOWS) || defined(NEKO_MAC) || defined(ANDROID) || defined(BLACKBERRY) || defined(EMSCRIPTEN) || defined(NEKO_BSD)
    h = gethostbyaddr((char *)&host[0],16,AF_INET6);
    #else
    struct hostent htmp;
@@ -686,7 +707,7 @@ static void make_array_result_inplace(Array<Dynamic> a, fd_set *tmp)
 static struct timeval *init_timeval( double f, struct timeval *t ) {
    if (f<0)
       return 0;
-   t->tv_usec = (f - (int)f ) * 1000000;
+   t->tv_usec = (int)(  (f - (int)f ) * 1000000 );
    t->tv_sec = (int)f;
    return t;
 }
@@ -1101,19 +1122,19 @@ struct polldata : public hx::Object
       }
    }
 
-   void __Mark(hx::MarkContext *__inCtx) { HX_MARK_MEMBER(ridx); HX_MARK_MEMBER(widx); }
+   void __Mark(hx::MarkContext *__inCtx) HXCPP_OVERRIDE { HX_MARK_MEMBER(ridx); HX_MARK_MEMBER(widx); }
    #ifdef HXCPP_VISIT_ALLOCS
-   void __Visit(hx::VisitContext *__inCtx) { HX_VISIT_MEMBER(ridx); HX_VISIT_MEMBER(widx); }
+   void __Visit(hx::VisitContext *__inCtx) HXCPP_OVERRIDE { HX_VISIT_MEMBER(ridx); HX_VISIT_MEMBER(widx); }
    #endif
 
-   int __GetType() const { return pollType; }
+   int __GetType() const HXCPP_OVERRIDE { return pollType; }
 
    static void finalize(Dynamic obj)
    {
       ((polldata *)(obj.mPtr))->destroy();
    }
 
-   String toString() { return HX_CSTRING("polldata"); }
+   String toString() HXCPP_OVERRIDE { return HX_CSTRING("polldata"); }
 };
 
 polldata *val_poll(Dynamic o)
diff --git a/Sources/c_borogove/src/hx/libs/std/Sys.cpp b/Sources/c_borogove/src/hx/libs/std/Sys.cpp
index 371addf..d522429 100644
--- a/Sources/c_borogove/src/hx/libs/std/Sys.cpp
+++ b/Sources/c_borogove/src/hx/libs/std/Sys.cpp
@@ -30,7 +30,7 @@
    #include <limits.h>
    #ifndef ANDROID
       #include <locale.h>
-      #if !defined(BLACKBERRY) && !defined(EPPC) && !defined(GCW0) && !defined(__GLIBC__)
+      #if !defined(BLACKBERRY) && !defined(EPPC) && !defined(GCW0) && !defined(__GLIBC__) && !defined(NEKO_BSD)
          #include <xlocale.h>
       #endif
    #endif
@@ -52,7 +52,7 @@
    #include <string>
 #endif
 
-#ifdef HX_ANDROID
+#if defined(HX_ANDROID) || defined(NEKO_BSD)
  #include <sys/wait.h>
 #endif
 
diff --git a/Sources/c_borogove/src/hx/thread/ConditionVariable.cpp b/Sources/c_borogove/src/hx/thread/ConditionVariable.cpp
new file mode 100644
index 0000000..3bfe2c1
--- /dev/null
+++ b/Sources/c_borogove/src/hx/thread/ConditionVariable.cpp
@@ -0,0 +1,55 @@
+#include <hxcpp.h>
+#include "hx/thread/ConditionVariable.hpp"
+#include <mutex>
+#include <condition_variable>
+#include <chrono>
+
+struct hx::thread::ConditionVariable_obj::Impl
+{
+	std::mutex mutex;
+	std::condition_variable_any condition;
+};
+
+hx::thread::ConditionVariable_obj::ConditionVariable_obj() : impl(new Impl())
+{
+	GCSetFinalizer(this, [](hx::Object* obj)
+	{
+		auto condition = reinterpret_cast<ConditionVariable_obj*>(obj);
+
+		delete condition->impl;
+	});
+}
+
+void hx::thread::ConditionVariable_obj::acquire()
+{
+	hx::AutoGCFreeZone zone;
+
+	impl->mutex.lock();
+}
+
+bool hx::thread::ConditionVariable_obj::tryAcquire()
+{
+	return impl->mutex.try_lock();
+}
+
+void hx::thread::ConditionVariable_obj::release()
+{
+	impl->mutex.unlock();
+}
+
+void hx::thread::ConditionVariable_obj::wait()
+{
+	hx::AutoGCFreeZone zone;
+
+	impl->condition.wait(impl->mutex);
+}
+
+void hx::thread::ConditionVariable_obj::signal()
+{
+	impl->condition.notify_one();
+}
+
+void hx::thread::ConditionVariable_obj::broadcast()
+{
+	impl->condition.notify_all();
+}
diff --git a/Sources/c_borogove/src/hx/thread/CountingSemaphore.apple.cpp b/Sources/c_borogove/src/hx/thread/CountingSemaphore.apple.cpp
new file mode 100644
index 0000000..766ef5d
--- /dev/null
+++ b/Sources/c_borogove/src/hx/thread/CountingSemaphore.apple.cpp
@@ -0,0 +1,48 @@
+#include <hxcpp.h>
+#include <dispatch/dispatch.h>
+#include <hx/thread/CountingSemaphore.hpp>
+
+struct hx::thread::CountingSemaphore_obj::Impl
+{
+	dispatch_semaphore_t semaphore;
+
+	static void finalise(hx::Object* obj)
+	{
+		delete reinterpret_cast<hx::thread::CountingSemaphore_obj*>(obj)->impl;
+	}
+};
+
+hx::thread::CountingSemaphore_obj::CountingSemaphore_obj(int value) : impl(new Impl())
+{
+	impl->semaphore = dispatch_semaphore_create(value);
+
+	hx::GCSetFinalizer(this, Impl::finalise);
+}
+
+void hx::thread::CountingSemaphore_obj::acquire()
+{
+	hx::EnterGCFreeZone();
+
+	if (0 != dispatch_semaphore_wait(impl->semaphore, DISPATCH_TIME_FOREVER))
+	{
+		hx::ExitGCFreeZone();
+		hx::Throw(HX_CSTRING("Failed to wait for semaphore"));
+	}
+
+	hx::ExitGCFreeZone();
+}
+
+void hx::thread::CountingSemaphore_obj::release()
+{
+	dispatch_semaphore_signal(impl->semaphore);
+}
+
+bool hx::thread::CountingSemaphore_obj::tryAcquire(Null<double> timeout)
+{
+	hx::AutoGCFreeZone zone;
+
+	return
+		(0 == dispatch_semaphore_wait(
+			impl->semaphore,
+			dispatch_time(DISPATCH_TIME_NOW, static_cast<int64_t>(timeout.Default(0)) * 1000 * 1000 * 1000)));
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/src/hx/thread/RecursiveMutex.cpp b/Sources/c_borogove/src/hx/thread/RecursiveMutex.cpp
new file mode 100644
index 0000000..67a141e
--- /dev/null
+++ b/Sources/c_borogove/src/hx/thread/RecursiveMutex.cpp
@@ -0,0 +1,35 @@
+#include <hxcpp.h>
+#include "hx/thread/RecursiveMutex.hpp"
+#include <mutex>
+
+struct hx::thread::RecursiveMutex_obj::Impl
+{
+	std::recursive_mutex mutex;
+};
+
+hx::thread::RecursiveMutex_obj::RecursiveMutex_obj() : impl(new Impl())
+{
+	GCSetFinalizer(this, [](hx::Object* obj)
+	{
+		auto mutex = reinterpret_cast<RecursiveMutex_obj*>(obj);
+
+		delete mutex->impl;
+	});
+}
+
+void hx::thread::RecursiveMutex_obj::acquire()
+{
+	hx::AutoGCFreeZone zone;
+
+	impl->mutex.lock();
+}
+
+void hx::thread::RecursiveMutex_obj::release()
+{
+	impl->mutex.unlock();
+}
+
+bool hx::thread::RecursiveMutex_obj::tryAcquire()
+{
+	return impl->mutex.try_lock();
+}
diff --git a/Sources/c_borogove/src/hx/thread/Scratch.cpp b/Sources/c_borogove/src/hx/thread/Scratch.cpp
new file mode 100644
index 0000000..d6ca33c
--- /dev/null
+++ b/Sources/c_borogove/src/hx/thread/Scratch.cpp
@@ -0,0 +1,74 @@
+#include <hxcpp.h>
+#include <hx/thread/Scratch.hpp>
+#include "ThreadImpl.hpp"
+
+hx::thread::Scratch hx::thread::Scratch::alloc(int bytes)
+{
+	auto current = reinterpret_cast<hx::thread::ThreadImpl_obj*>(hx::thread::Thread_obj::current().GetPtr());
+	auto required = bytes + sizeof(int);
+
+	// If there is not enough space in the thread array then do a standard malloc.
+	// Maybe we want some warning log message so the user knows it's hitting a slower path?
+	if (required > static_cast<uint64_t>(current->scratch->length) - current->cursor)
+	{
+		auto alloc   = std::malloc(required);
+		auto storage = new(alloc) int;
+		auto view    = cpp::marshal::View<uint8_t>(static_cast<uint8_t*>(alloc) + sizeof(int), bytes);
+
+		std::memset(alloc, 0, required);
+
+		return
+			hx::thread::Scratch(storage, view, [](cpp::marshal::View<uint8_t> view) {
+				std::free(view.ptr.ptr - sizeof(int));
+			});
+	}
+	else
+	{
+		auto storage = new(current->scratch->GetBase() + current->cursor) int;
+		auto view    = cpp::marshal::View<uint8_t>(current->scratch->GetBase() + current->cursor + sizeof(int), bytes);
+
+		current->cursor += bytes + sizeof(int);
+
+		return
+			hx::thread::Scratch(storage, view, [](cpp::marshal::View<uint8_t> view) {
+				view.fill(0);
+
+				auto current = reinterpret_cast<hx::thread::ThreadImpl_obj*>(hx::thread::Thread_obj::current().GetPtr());
+
+				current->cursor -= view.length + sizeof(int);
+			});
+	}
+}
+
+hx::thread::Scratch::Scratch(int* _count, cpp::marshal::View<uint8_t> _view, ReleaseFunc _release) : count(_count), view(_view), release(_release)
+{
+	(*count)++;
+}
+
+hx::thread::Scratch::Scratch(const Scratch& _other) : count(_other.count), view(_other.view), release(_other.release)
+{
+	(*count)++;
+}
+
+hx::thread::Scratch::~Scratch()
+{
+	if (0 == --(*count))
+	{
+		release(view);
+	}
+}
+
+hx::thread::Scratch& hx::thread::Scratch::operator=(const Scratch& _other)
+{
+	auto old = *count;
+
+	count = _other.count;
+	(*count)++;
+
+	if (0 == (--old))
+	{
+		release(view);
+	}
+
+	return *this;
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/src/hx/thread/ThreadImpl.cpp b/Sources/c_borogove/src/hx/thread/ThreadImpl.cpp
new file mode 100644
index 0000000..1714eac
--- /dev/null
+++ b/Sources/c_borogove/src/hx/thread/ThreadImpl.cpp
@@ -0,0 +1,188 @@
+#include <hxcpp.h>
+#include <thread>
+#include <array>
+#include <atomic>
+#include <hx/thread/CountingSemaphore.hpp>
+#include "ThreadImpl.hpp"
+
+namespace
+{
+	struct ThreadInfoHolder
+	{
+		hx::Object** root = nullptr;
+
+		~ThreadInfoHolder()
+		{
+			if (root)
+			{
+				hx::GCRemoveRoot(root);
+
+				delete root;
+			}
+		}
+
+		void set(hx::Object** _root)
+		{
+			root = _root;
+		}
+
+		hx::thread::ThreadImpl_obj* get() const
+		{
+			return root ? reinterpret_cast<hx::thread::ThreadImpl_obj*>(*root) : nullptr;
+		}
+	};
+
+	thread_local ThreadInfoHolder tls;
+
+	std::atomic_int nextThreadnumber(0);
+
+	void run(hx::thread::ThreadImpl thread, hx::thread::Thread_obj::CreateFunction job, hx::thread::CountingSemaphore semaphore)
+	{
+		// info[1] will the the "top of stack" - values under this
+		// (ie info[0] and other stack values) will be in the GC conservative range
+		// 
+		// I'm assuming the array of two elements is some trick to ensure it's on the stack.
+		// Maybe we could use OS specific functions to get the stack range?
+
+		auto root = new hx::Object* { thread.GetPtr() };
+
+		hx::GCAddRoot(root);
+
+		tls.set(root);
+
+		auto info = std::array<hx::thread::ThreadImpl_obj*, 2>{ thread.GetPtr(), nullptr };
+
+		hx::SetTopOfStack(reinterpret_cast<int*>(&info[1]), true);
+
+		// Release the creation function
+		semaphore->release();
+
+		job();
+
+		hx::UnregisterCurrentThread();
+	}
+}
+
+hx::thread::Thread hx::thread::Thread_obj::create(CreateFunction job)
+{
+#ifdef EMSCRIPTEN
+	return hx::Throw(HX_CSTRING("Threads are not supported on Emscripten"));
+#else
+
+	auto semaphore = new hx::thread::CountingSemaphore_obj(0);
+	auto obj       = new ThreadImpl_obj(nextThreadnumber++, job, semaphore);
+
+	hx::GCSetFinalizer(obj, ThreadImpl_obj::finalise);
+	hx::GCPrepareMultiThreaded();
+	
+	semaphore->acquire();
+
+	return hx::thread::Thread{ obj };
+#endif
+}
+
+String hx::thread::ThreadImpl_obj::toString()
+{
+	return String(id);
+}
+
+hx::thread::Thread hx::thread::Thread_obj::current()
+{
+	auto info = tls.get();
+	if (nullptr == info)
+	{
+		// Threads created from Haxe have the TLS set, and the GC sets the TLS for the main thread.
+		// So, if the TLS is null then we are in a attached foreign thread, which will just get assigned the next Id.
+		// 
+		// The C++ std has no way of getting the native handle of the current thread, so we need to use OS specific
+		// apis to get that so we can get and set thread names.
+		info = new ThreadImpl_obj(nextThreadnumber++);
+
+		auto root = new hx::Object* { info };
+
+		hx::GCSetFinalizer(info, ThreadImpl_obj::finalise);
+		hx::GCAddRoot(root);
+
+		tls.set(root);
+	}
+
+	return Thread{ info };
+}
+
+int hx::thread::Thread_obj::id()
+{
+	auto info = tls.get();
+
+	if (nullptr == info)
+	{
+		return 0;
+	}
+	else
+	{
+		return info->id;
+	}
+}
+
+hx::thread::ThreadImpl_obj::ThreadImpl_obj(const int _id)
+	: id(_id)
+	, native(new Native())
+	, scratch(std::numeric_limits<uint16_t>::max(), std::numeric_limits<uint16_t>::max())
+	, slots(0, 0) { }
+
+hx::thread::ThreadImpl_obj::ThreadImpl_obj(const int _id, Thread_obj::CreateFunction _job, CountingSemaphore _semaphore)
+	: id(_id)
+	, native(new Native(_job, this, _semaphore))
+	, scratch(std::numeric_limits<uint16_t>::max(), std::numeric_limits<uint16_t>::max())
+	, slots(0, 0)
+{
+}
+
+hx::thread::ThreadImpl_obj::Native::Native(Thread_obj::CreateFunction _job, ThreadImpl _thread, CountingSemaphore _semaphore)
+	: thread(run, _thread, _job, _semaphore)
+	, handle(thread.native_handle())
+{
+	// Only Windows implements thread name getting and setting currently, and this requires the thread to be attached.
+	// Threads are normally only detached once the thread object is finalised and this was causing the 32bit linux tests to hit OS resource limits.
+	// This does feel like a bit of a bodge and something which will actually need to be addressed to add name setting on Linux.
+
+#ifndef HX_WINDOWS
+	thread.detach();
+#endif
+}
+
+Dynamic hx::thread::ThreadImpl_obj::getSlot(const int id)
+{
+	return slots[id];
+}
+
+void hx::thread::ThreadImpl_obj::setSlot(const int id, const Dynamic& obj)
+{
+	slots->__SetItem(id, obj);
+}
+
+void hx::thread::ThreadImpl_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_MEMBER(scratch);
+	HX_MARK_MEMBER(slots);
+}
+
+#ifdef HXCPP_VISIT_ALLOCS
+
+void hx::thread::ThreadImpl_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER(scratch);
+	HX_VISIT_MEMBER(slots);
+}
+
+void hx::thread::ThreadImpl_obj::finalise(hx::Object* obj)
+{
+	auto thread = reinterpret_cast<ThreadImpl_obj*>(obj);
+	auto native = std::unique_ptr<ThreadImpl_obj::Native>{ thread->native };
+
+	if (native->thread.joinable())
+	{
+		native->thread.detach();
+	}
+}
+
+#endif
\ No newline at end of file
diff --git a/Sources/c_borogove/src/hx/thread/ThreadImpl.hpp b/Sources/c_borogove/src/hx/thread/ThreadImpl.hpp
new file mode 100644
index 0000000..72bfbc2
--- /dev/null
+++ b/Sources/c_borogove/src/hx/thread/ThreadImpl.hpp
@@ -0,0 +1,58 @@
+#pragma once
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+#include <hx/thread/Thread.hpp>
+#include <hx/thread/CountingSemaphore.hpp>
+#include <array>
+#include <thread>
+
+HX_DECLARE_CLASS2(hx, thread, ThreadImpl)
+
+namespace hx
+{
+	namespace thread
+	{
+		class ThreadImpl_obj final : public Thread_obj
+		{
+			int cursor;
+			Array<uint8_t> scratch;
+			Array<Dynamic> slots;
+
+		public:
+			friend class Scratch;
+
+			struct Native
+			{
+				std::thread thread;
+				std::thread::native_handle_type handle;
+
+				Native();
+				Native(Thread_obj::CreateFunction _job, ThreadImpl _thread, CountingSemaphore _semaphore);
+			};
+
+			Native* native;
+			const int id;
+
+			ThreadImpl_obj(const int _id);
+			ThreadImpl_obj(const int _id, Thread_obj::CreateFunction _run, CountingSemaphore _semaphore);
+
+			String getName() HXCPP_OVERRIDE;
+			void setName(const String& name) HXCPP_OVERRIDE;
+
+			Dynamic getSlot(const int id);
+			void setSlot(const int id, const Dynamic& obj);
+
+			String toString() HXCPP_OVERRIDE;
+
+			void __Mark(HX_MARK_PARAMS) HXCPP_OVERRIDE;
+#ifdef HXCPP_VISIT_ALLOCS
+			void __Visit(HX_VISIT_PARAMS) HXCPP_OVERRIDE;
+#endif
+
+			static void finalise(hx::Object* obj);
+		};
+	}
+}
diff --git a/Sources/c_borogove/src/hx/thread/ThreadImpl.noop.cpp b/Sources/c_borogove/src/hx/thread/ThreadImpl.noop.cpp
new file mode 100644
index 0000000..cdc9c76
--- /dev/null
+++ b/Sources/c_borogove/src/hx/thread/ThreadImpl.noop.cpp
@@ -0,0 +1,15 @@
+#include <hxcpp.h>
+#include <hx/thread/Thread.hpp>
+#include "ThreadImpl.hpp"
+
+String hx::thread::ThreadImpl_obj::getName()
+{
+	return null();
+}
+
+void hx::thread::ThreadImpl_obj::setName(const String& name)
+{
+	//
+}
+
+hx::thread::ThreadImpl_obj::Native::Native() : thread(), handle() {}
\ No newline at end of file
diff --git a/Sources/c_borogove/src/hx/thread/ThreadLocal.cpp b/Sources/c_borogove/src/hx/thread/ThreadLocal.cpp
new file mode 100644
index 0000000..aabf280
--- /dev/null
+++ b/Sources/c_borogove/src/hx/thread/ThreadLocal.cpp
@@ -0,0 +1,67 @@
+#include <hxcpp.h>
+#include <atomic>
+#include <mutex>
+#include <list>
+#include <hx/thread/Thread.hpp>
+#include <hx/thread/RecursiveMutex.hpp>
+#include <hx/thread/ThreadLocal.hpp>
+#include "ThreadImpl.hpp"
+
+struct hx::thread::ThreadLocal_obj::Impl
+{
+	static std::mutex slotLock;
+	static std::list<Impl*> slots;
+	static int counter;
+
+	const int slot;
+
+	Impl(const int _slot) : slot(_slot) {}
+
+	static Impl* get()
+	{
+		std::lock_guard<std::mutex> lock(slotLock);
+
+		if (slots.empty())
+		{
+			return new Impl(counter++);
+		}
+
+		auto recycled = slots.front();
+
+		slots.pop_front();
+
+		return recycled;
+	}
+
+	static void finalise(hx::Object* obj)
+	{
+		std::lock_guard<std::mutex> lock(slotLock);
+
+		slots.emplace_back(reinterpret_cast<hx::thread::ThreadLocal_obj*>(obj)->impl);
+	}
+};
+
+std::mutex hx::thread::ThreadLocal_obj::Impl::slotLock;
+
+std::list<hx::thread::ThreadLocal_obj::Impl*> hx::thread::ThreadLocal_obj::Impl::slots;
+
+int hx::thread::ThreadLocal_obj::Impl::counter = 0;
+
+hx::thread::ThreadLocal_obj::ThreadLocal_obj() : impl(Impl::get())
+{
+	hx::GCSetFinalizer(this, Impl::finalise);
+}
+
+Dynamic hx::thread::ThreadLocal_obj::get()
+{
+	auto current = reinterpret_cast<hx::thread::ThreadImpl_obj*>(Thread_obj::current().GetPtr());
+
+	return current->getSlot(impl->slot);
+}
+
+void hx::thread::ThreadLocal_obj::set(Dynamic obj)
+{
+	auto current = reinterpret_cast<hx::thread::ThreadImpl_obj*>(Thread_obj::current().GetPtr());
+
+	current->setSlot(impl->slot, obj);
+}
\ No newline at end of file
diff --git a/Sources/c_borogove/src/sys/FileSystem.cpp b/Sources/c_borogove/src/sys/FileSystem.cpp
index 5f913eb..d43c6b7 100644
--- a/Sources/c_borogove/src/sys/FileSystem.cpp
+++ b/Sources/c_borogove/src/sys/FileSystem.cpp
@@ -15,6 +15,7 @@
 #endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_4ebd30807fe7ed8d_31_exists,"sys.FileSystem","exists",0xf55bed9e,"sys.FileSystem.exists","/usr/local/lib/haxe/std/cpp/_std/sys/FileSystem.hx",31,0x1f6d7d6f)
+HX_LOCAL_STACK_FRAME(_hx_pos_4ebd30807fe7ed8d_35_rename,"sys.FileSystem","rename",0x3aa2fb40,"sys.FileSystem.rename","/usr/local/lib/haxe/std/cpp/_std/sys/FileSystem.hx",35,0x1f6d7d6f)
 HX_LOCAL_STACK_FRAME(_hx_pos_4ebd30807fe7ed8d_38_stat,"sys.FileSystem","stat",0xa630df16,"sys.FileSystem.stat","/usr/local/lib/haxe/std/cpp/_std/sys/FileSystem.hx",38,0x1f6d7d6f)
 HX_LOCAL_STACK_FRAME(_hx_pos_4ebd30807fe7ed8d_61_fullPath,"sys.FileSystem","fullPath",0xc6463316,"sys.FileSystem.fullPath","/usr/local/lib/haxe/std/cpp/_std/sys/FileSystem.hx",61,0x1f6d7d6f)
 HX_LOCAL_STACK_FRAME(_hx_pos_4ebd30807fe7ed8d_64_absolutePath,"sys.FileSystem","absolutePath",0x5973f4fe,"sys.FileSystem.absolutePath","/usr/local/lib/haxe/std/cpp/_std/sys/FileSystem.hx",64,0x1f6d7d6f)
@@ -66,6 +67,14 @@ HXDLIN(  31)		return _hx_std_sys_exists(_hx_tmp);
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(FileSystem_obj,exists,return )
 
+void FileSystem_obj::rename(::String path,::String newPath){
+            	HX_STACKFRAME(&_hx_pos_4ebd30807fe7ed8d_35_rename)
+HXDLIN(  35)		_hx_std_sys_rename(path,newPath);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(FileSystem_obj,rename,(void))
+
  ::Dynamic FileSystem_obj::stat(::String path){
             	HX_STACKFRAME(&_hx_pos_4ebd30807fe7ed8d_38_stat)
 HXLINE(  39)		::String s;
@@ -180,6 +189,7 @@ bool FileSystem_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx
 		break;
 	case 6:
 		if (HX_FIELD_EQ(inName,"exists") ) { outValue = exists_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"rename") ) { outValue = rename_dyn(); return true; }
 		break;
 	case 8:
 		if (HX_FIELD_EQ(inName,"fullPath") ) { outValue = fullPath_dyn(); return true; }
@@ -205,6 +215,7 @@ static ::hx::StaticInfo *FileSystem_obj_sStaticStorageInfo = 0;
 
 static ::String FileSystem_obj_sStaticFields[] = {
 	HX_("exists",dc,1d,e0,bf),
+	HX_("rename",7e,2b,27,05),
 	HX_("stat",d4,e3,5b,4c),
 	HX_("fullPath",d4,6e,65,5e),
 	HX_("absolutePath",bc,e7,6e,f7),
diff --git a/Sources/c_borogove/src/sys/io/File.cpp b/Sources/c_borogove/src/sys/io/File.cpp
index ba4f76d..828dbcd 100644
--- a/Sources/c_borogove/src/sys/io/File.cpp
+++ b/Sources/c_borogove/src/sys/io/File.cpp
@@ -1,9 +1,6 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_haxe_io_Bytes
-#include <haxe/io/Bytes.h>
-#endif
 #ifndef INCLUDED_haxe_io_Input
 #include <haxe/io/Input.h>
 #endif
@@ -20,7 +17,6 @@
 #include <sys/io/FileOutput.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_3a0a066c26bdae40_44_saveBytes,"sys.io.File","saveBytes",0x6700fb83,"sys.io.File.saveBytes","/usr/local/lib/haxe/std/cpp/_std/sys/io/File.hx",44,0x3272313d)
 HX_LOCAL_STACK_FRAME(_hx_pos_3a0a066c26bdae40_51_read,"sys.io.File","read",0x203d07e1,"sys.io.File.read","/usr/local/lib/haxe/std/cpp/_std/sys/io/File.hx",51,0x3272313d)
 HX_LOCAL_STACK_FRAME(_hx_pos_3a0a066c26bdae40_55_write,"sys.io.File","write",0xfec8a9f4,"sys.io.File.write","/usr/local/lib/haxe/std/cpp/_std/sys/io/File.hx",55,0x3272313d)
 namespace sys{
@@ -43,16 +39,6 @@ bool File_obj::_hx_isInstanceOf(int inClassId) {
 	return inClassId==(int)0x00000001 || inClassId==(int)0x645a6147;
 }
 
-void File_obj::saveBytes(::String path, ::haxe::io::Bytes bytes){
-            	HX_STACKFRAME(&_hx_pos_3a0a066c26bdae40_44_saveBytes)
-HXLINE(  45)		 ::sys::io::FileOutput f = ::sys::io::File_obj::write(path,null());
-HXLINE(  46)		f->write(bytes);
-HXLINE(  47)		f->close();
-            	}
-
-
-STATIC_HX_DEFINE_DYNAMIC_FUNC2(File_obj,saveBytes,(void))
-
  ::sys::io::FileInput File_obj::read(::String path,::hx::Null< bool >  __o_binary){
             		bool binary = __o_binary.Default(true);
             	HX_GC_STACKFRAME(&_hx_pos_3a0a066c26bdae40_51_read)
@@ -98,9 +84,6 @@ bool File_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::Prop
 		break;
 	case 5:
 		if (HX_FIELD_EQ(inName,"write") ) { outValue = write_dyn(); return true; }
-		break;
-	case 9:
-		if (HX_FIELD_EQ(inName,"saveBytes") ) { outValue = saveBytes_dyn(); return true; }
 	}
 	return false;
 }
@@ -113,7 +96,6 @@ static ::hx::StaticInfo *File_obj_sStaticStorageInfo = 0;
 ::hx::Class File_obj::__mClass;
 
 static ::String File_obj_sStaticFields[] = {
-	HX_("saveBytes",ee,0f,45,4c),
 	HX_("read",56,4b,a7,4b),
 	HX_("write",df,6c,59,d0),
 	::String(null())
diff --git a/Sources/c_borogove/src/tink/core/OutcomeTools.cpp b/Sources/c_borogove/src/tink/core/OutcomeTools.cpp
new file mode 100644
index 0000000..d09a702
--- /dev/null
+++ b/Sources/c_borogove/src/tink/core/OutcomeTools.cpp
@@ -0,0 +1,100 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_tink_core_Outcome
+#include <tink/core/Outcome.h>
+#endif
+#ifndef INCLUDED_tink_core_OutcomeTools
+#include <tink/core/OutcomeTools.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_a4f72dfe848dfefe_92_map,"tink.core.OutcomeTools","map",0x09306b6a,"tink.core.OutcomeTools.map","tink/core/Outcome.hx",92,0x825b551f)
+namespace tink{
+namespace core{
+
+void OutcomeTools_obj::__construct() { }
+
+Dynamic OutcomeTools_obj::__CreateEmpty() { return new OutcomeTools_obj; }
+
+void *OutcomeTools_obj::_hx_vtable = 0;
+
+Dynamic OutcomeTools_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< OutcomeTools_obj > _hx_result = new OutcomeTools_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool OutcomeTools_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x2617517e;
+}
+
+ ::tink::core::Outcome OutcomeTools_obj::map( ::tink::core::Outcome outcome, ::Dynamic transform){
+            	HX_STACKFRAME(&_hx_pos_a4f72dfe848dfefe_92_map)
+HXDLIN(  92)		switch((int)(outcome->_hx_getIndex())){
+            			case (int)0: {
+HXLINE(  94)				return ::tink::core::Outcome_obj::Success(transform(outcome->_hx_getObject(0)));
+            			}
+            			break;
+            			case (int)1: {
+HXLINE(  96)				return ::tink::core::Outcome_obj::Failure(outcome->_hx_getObject(0));
+            			}
+            			break;
+            		}
+HXLINE(  92)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(OutcomeTools_obj,map,return )
+
+
+OutcomeTools_obj::OutcomeTools_obj()
+{
+}
+
+bool OutcomeTools_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"map") ) { outValue = map_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *OutcomeTools_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *OutcomeTools_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class OutcomeTools_obj::__mClass;
+
+static ::String OutcomeTools_obj_sStaticFields[] = {
+	HX_("map",9c,0a,53,00),
+	::String(null())
+};
+
+void OutcomeTools_obj::__register()
+{
+	OutcomeTools_obj _hx_dummy;
+	OutcomeTools_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("tink.core.OutcomeTools",3c,c2,61,dd);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &OutcomeTools_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(OutcomeTools_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< OutcomeTools_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = OutcomeTools_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = OutcomeTools_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace tink
+} // end namespace core
diff --git a/Sources/c_borogove/src/tink/http/ContentType.cpp b/Sources/c_borogove/src/tink/http/ContentType.cpp
new file mode 100644
index 0000000..7d3cedc
--- /dev/null
+++ b/Sources/c_borogove/src/tink/http/ContentType.cpp
@@ -0,0 +1,219 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
+#ifndef INCLUDED_tink_http_ContentType
+#include <tink/http/ContentType.h>
+#endif
+#ifndef INCLUDED_tink_http__Header_HeaderValue_Impl_
+#include <tink/http/_Header/HeaderValue_Impl_.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_5315a3ae75e09cad_29_new,"tink.http.ContentType","new",0x4afa26fb,"tink.http.ContentType.new","tink/http/Header.hx",29,0xf5720e67)
+HX_LOCAL_STACK_FRAME(_hx_pos_5315a3ae75e09cad_44_toString,"tink.http.ContentType","toString",0x3e61a831,"tink.http.ContentType.toString","tink/http/Header.hx",44,0xf5720e67)
+HX_LOCAL_STACK_FRAME(_hx_pos_5315a3ae75e09cad_46_ofString,"tink.http.ContentType","ofString",0xaa2440cd,"tink.http.ContentType.ofString","tink/http/Header.hx",46,0xf5720e67)
+namespace tink{
+namespace http{
+
+void ContentType_obj::__construct(){
+            	HX_GC_STACKFRAME(&_hx_pos_5315a3ae75e09cad_29_new)
+HXLINE(  35)		this->subtype = HX_("*",2a,00,00,00);
+HXLINE(  34)		this->type = HX_("*",2a,00,00,00);
+HXLINE(  40)		this->extensions =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+            	}
+
+Dynamic ContentType_obj::__CreateEmpty() { return new ContentType_obj; }
+
+void *ContentType_obj::_hx_vtable = 0;
+
+Dynamic ContentType_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< ContentType_obj > _hx_result = new ContentType_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool ContentType_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x67f0ac31;
+}
+
+::String ContentType_obj::toString(){
+            	HX_STACKFRAME(&_hx_pos_5315a3ae75e09cad_44_toString)
+HXDLIN(  44)		return this->raw;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(ContentType_obj,toString,return )
+
+ ::tink::http::ContentType ContentType_obj::ofString(::String s){
+            	HX_GC_STACKFRAME(&_hx_pos_5315a3ae75e09cad_46_ofString)
+HXLINE(  47)		 ::tink::http::ContentType ret =  ::tink::http::ContentType_obj::__alloc( HX_CTX );
+HXLINE(  49)		ret->raw = s;
+HXLINE(  50)		::Array< ::Dynamic> parsed = ::tink::http::_Header::HeaderValue_Impl__obj::parse(s);
+HXLINE(  51)		::String value = ( (::String)(parsed->__get(0)->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) );
+HXLINE(  52)		{
+HXLINE(  52)			int _g = value.indexOf(HX_("/",2f,00,00,00),null());
+HXDLIN(  52)			if ((_g == -1)) {
+HXLINE(  54)				ret->type = value;
+            			}
+            			else {
+HXLINE(  56)				ret->type = value.substring(0,_g);
+HXLINE(  57)				ret->subtype = value.substring((_g + 1),null());
+            			}
+            		}
+HXLINE(  59)		ret->extensions = ( ( ::haxe::ds::StringMap)(parsed->__get(0)->__Field(HX_("extensions",14,7c,70,89),::hx::paccDynamic)) );
+HXLINE(  61)		return ret;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(ContentType_obj,ofString,return )
+
+
+::hx::ObjectPtr< ContentType_obj > ContentType_obj::__new() {
+	::hx::ObjectPtr< ContentType_obj > __this = new ContentType_obj();
+	__this->__construct();
+	return __this;
+}
+
+::hx::ObjectPtr< ContentType_obj > ContentType_obj::__alloc(::hx::Ctx *_hx_ctx) {
+	ContentType_obj *__this = (ContentType_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(ContentType_obj), true, "tink.http.ContentType"));
+	*(void **)__this = ContentType_obj::_hx_vtable;
+	__this->__construct();
+	return __this;
+}
+
+ContentType_obj::ContentType_obj()
+{
+}
+
+void ContentType_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(ContentType);
+	HX_MARK_MEMBER_NAME(type,"type");
+	HX_MARK_MEMBER_NAME(subtype,"subtype");
+	HX_MARK_MEMBER_NAME(extensions,"extensions");
+	HX_MARK_MEMBER_NAME(raw,"raw");
+	HX_MARK_END_CLASS();
+}
+
+void ContentType_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(type,"type");
+	HX_VISIT_MEMBER_NAME(subtype,"subtype");
+	HX_VISIT_MEMBER_NAME(extensions,"extensions");
+	HX_VISIT_MEMBER_NAME(raw,"raw");
+}
+
+::hx::Val ContentType_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"raw") ) { return ::hx::Val( raw ); }
+		break;
+	case 4:
+		if (HX_FIELD_EQ(inName,"type") ) { return ::hx::Val( type ); }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"subtype") ) { return ::hx::Val( subtype ); }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"toString") ) { return ::hx::Val( toString_dyn() ); }
+		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"extensions") ) { return ::hx::Val( extensions ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+bool ContentType_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 8:
+		if (HX_FIELD_EQ(inName,"ofString") ) { outValue = ofString_dyn(); return true; }
+	}
+	return false;
+}
+
+::hx::Val ContentType_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"raw") ) { raw=inValue.Cast< ::String >(); return inValue; }
+		break;
+	case 4:
+		if (HX_FIELD_EQ(inName,"type") ) { type=inValue.Cast< ::String >(); return inValue; }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"subtype") ) { subtype=inValue.Cast< ::String >(); return inValue; }
+		break;
+	case 10:
+		if (HX_FIELD_EQ(inName,"extensions") ) { extensions=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+void ContentType_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("type",ba,f2,08,4d));
+	outFields->push(HX_("subtype",3a,5c,33,30));
+	outFields->push(HX_("extensions",14,7c,70,89));
+	outFields->push(HX_("raw",e8,d5,56,00));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo ContentType_obj_sMemberStorageInfo[] = {
+	{::hx::fsString,(int)offsetof(ContentType_obj,type),HX_("type",ba,f2,08,4d)},
+	{::hx::fsString,(int)offsetof(ContentType_obj,subtype),HX_("subtype",3a,5c,33,30)},
+	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(ContentType_obj,extensions),HX_("extensions",14,7c,70,89)},
+	{::hx::fsString,(int)offsetof(ContentType_obj,raw),HX_("raw",e8,d5,56,00)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo *ContentType_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String ContentType_obj_sMemberFields[] = {
+	HX_("type",ba,f2,08,4d),
+	HX_("subtype",3a,5c,33,30),
+	HX_("extensions",14,7c,70,89),
+	HX_("raw",e8,d5,56,00),
+	HX_("toString",ac,d0,6e,38),
+	::String(null()) };
+
+::hx::Class ContentType_obj::__mClass;
+
+static ::String ContentType_obj_sStaticFields[] = {
+	HX_("ofString",48,69,31,a4),
+	::String(null())
+};
+
+void ContentType_obj::__register()
+{
+	ContentType_obj _hx_dummy;
+	ContentType_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("tink.http.ContentType",89,8d,8e,eb);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &ContentType_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(ContentType_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(ContentType_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< ContentType_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = ContentType_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = ContentType_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace tink
+} // end namespace http
diff --git a/Sources/c_borogove/src/tink/http/Header.cpp b/Sources/c_borogove/src/tink/http/Header.cpp
index 07c6675..82f4975 100644
--- a/Sources/c_borogove/src/tink/http/Header.cpp
+++ b/Sources/c_borogove/src/tink/http/Header.cpp
@@ -10,9 +10,15 @@
 #ifndef INCLUDED_tink_core_Outcome
 #include <tink/core/Outcome.h>
 #endif
+#ifndef INCLUDED_tink_core_OutcomeTools
+#include <tink/core/OutcomeTools.h>
+#endif
 #ifndef INCLUDED_tink_core_TypedError
 #include <tink/core/TypedError.h>
 #endif
+#ifndef INCLUDED_tink_http_ContentType
+#include <tink/http/ContentType.h>
+#endif
 #ifndef INCLUDED_tink_http_Header
 #include <tink/http/Header.h>
 #endif
@@ -23,6 +29,7 @@
 HX_DEFINE_STACK_FRAME(_hx_pos_f98482948a03ab7e_70_new,"tink.http.Header","new",0x865074c9,"tink.http.Header.new","tink/http/Header.hx",70,0xf5720e67)
 HX_LOCAL_STACK_FRAME(_hx_pos_f98482948a03ab7e_81_get,"tink.http.Header","get",0x864b24ff,"tink.http.Header.get","tink/http/Header.hx",81,0xf5720e67)
 HX_LOCAL_STACK_FRAME(_hx_pos_f98482948a03ab7e_89_byName,"tink.http.Header","byName",0x1a376ef9,"tink.http.Header.byName","tink/http/Header.hx",89,0xf5720e67)
+HX_LOCAL_STACK_FRAME(_hx_pos_f98482948a03ab7e_102_contentType,"tink.http.Header","contentType",0x38bff1fc,"tink.http.Header.contentType","tink/http/Header.hx",102,0xf5720e67)
 HX_LOCAL_STACK_FRAME(_hx_pos_f98482948a03ab7e_119_getContentLength,"tink.http.Header","getContentLength",0x2e277e80,"tink.http.Header.getContentLength","tink/http/Header.hx",119,0xf5720e67)
 HX_LOCAL_STACK_FRAME(_hx_pos_f98482948a03ab7e_143_toString,"tink.http.Header","toString",0x03988fa3,"tink.http.Header.toString","tink/http/Header.hx",143,0xf5720e67)
 namespace tink{
@@ -97,6 +104,14 @@ HXLINE(  89)		return null();
 
 HX_DEFINE_DYNAMIC_FUNC1(Header_obj,byName,return )
 
+ ::tink::core::Outcome Header_obj::contentType(){
+            	HX_STACKFRAME(&_hx_pos_f98482948a03ab7e_102_contentType)
+HXDLIN( 102)		return ::tink::core::OutcomeTools_obj::map(this->byName(HX_("content-type",8e,f1,71,89)),::tink::http::ContentType_obj::ofString_dyn());
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Header_obj,contentType,return )
+
  ::tink::core::Outcome Header_obj::getContentLength(){
             	HX_GC_STACKFRAME(&_hx_pos_f98482948a03ab7e_119_getContentLength)
 HXDLIN( 119)		 ::tink::core::Outcome _g = this->byName(HX_("content-length",ba,f0,cc,86));
@@ -183,6 +198,9 @@ void Header_obj::__Visit(HX_VISIT_PARAMS)
 	case 8:
 		if (HX_FIELD_EQ(inName,"toString") ) { return ::hx::Val( toString_dyn() ); }
 		break;
+	case 11:
+		if (HX_FIELD_EQ(inName,"contentType") ) { return ::hx::Val( contentType_dyn() ); }
+		break;
 	case 16:
 		if (HX_FIELD_EQ(inName,"getContentLength") ) { return ::hx::Val( getContentLength_dyn() ); }
 	}
@@ -216,6 +234,7 @@ static ::String Header_obj_sMemberFields[] = {
 	HX_("fields",79,8e,8e,80),
 	HX_("get",96,80,4e,00),
 	HX_("byName",c2,2b,4e,0e),
+	HX_("contentType",93,3c,7b,2a),
 	HX_("getContentLength",89,70,23,df),
 	HX_("toString",ac,d0,6e,38),
 	::String(null()) };
diff --git a/Sources/c_borogove/src/tink/http/_Header/HeaderValue_Impl_.cpp b/Sources/c_borogove/src/tink/http/_Header/HeaderValue_Impl_.cpp
index 8b4b3fc..e832cf4 100644
--- a/Sources/c_borogove/src/tink/http/_Header/HeaderValue_Impl_.cpp
+++ b/Sources/c_borogove/src/tink/http/_Header/HeaderValue_Impl_.cpp
@@ -4,19 +4,39 @@
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
+#ifndef INCLUDED_StringTools
+#include <StringTools.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
 #ifndef INCLUDED_haxe_crypto_Base64
 #include <haxe/crypto/Base64.h>
 #endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
 #ifndef INCLUDED_haxe_io_Bytes
 #include <haxe/io/Bytes.h>
 #endif
 #ifndef INCLUDED_haxe_io_Encoding
 #include <haxe/io/Encoding.h>
 #endif
+#ifndef INCLUDED_tink_core_NamedWith
+#include <tink/core/NamedWith.h>
+#endif
 #ifndef INCLUDED_tink_http__Header_HeaderValue_Impl_
 #include <tink/http/_Header/HeaderValue_Impl_.h>
 #endif
+#ifndef INCLUDED_tink_url__Portion_Portion_Impl_
+#include <tink/url/_Portion/Portion_Impl_.h>
+#endif
+#ifndef INCLUDED_tink_url__Query_QueryStringParser
+#include <tink/url/_Query/QueryStringParser.h>
+#endif
 
+HX_LOCAL_STACK_FRAME(_hx_pos_9cfb9724f4bad04f_164_parse,"tink.http._Header.HeaderValue_Impl_","parse",0x539c735d,"tink.http._Header.HeaderValue_Impl_.parse","tink/http/Header.hx",164,0xf5720e67)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cfb9724f4bad04f_174_parseWith,"tink.http._Header.HeaderValue_Impl_","parseWith",0x2c678803,"tink.http._Header.HeaderValue_Impl_.parseWith","tink/http/Header.hx",174,0xf5720e67)
 HX_LOCAL_STACK_FRAME(_hx_pos_9cfb9724f4bad04f_188_basicAuth,"tink.http._Header.HeaderValue_Impl_","basicAuth",0x97e8e560,"tink.http._Header.HeaderValue_Impl_.basicAuth","tink/http/Header.hx",188,0xf5720e67)
 HX_LOCAL_STACK_FRAME(_hx_pos_9cfb9724f4bad04f_196_ofInt,"tink.http._Header.HeaderValue_Impl_","ofInt",0xc364cf42,"tink.http._Header.HeaderValue_Impl_.ofInt","tink/http/Header.hx",196,0xf5720e67)
 namespace tink{
@@ -40,6 +60,67 @@ bool HeaderValue_Impl__obj::_hx_isInstanceOf(int inClassId) {
 	return inClassId==(int)0x00000001 || inClassId==(int)0x58df80d2;
 }
 
+::Array< ::Dynamic> HeaderValue_Impl__obj::parse(::String this1){
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
+            		 ::haxe::ds::StringMap _hx_run(::String _, ::Dynamic params){
+            			HX_GC_STACKFRAME(&_hx_pos_9cfb9724f4bad04f_164_parse)
+HXDLIN( 164)			 ::haxe::ds::StringMap _g =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXDLIN( 164)			while(( (bool)(params->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 164)				 ::tink::core::NamedWith p = ( ( ::tink::core::NamedWith)(params->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 164)				{
+HXDLIN( 164)					::String key = ( (::String)(p->name) );
+HXDLIN( 164)					::String value;
+HXDLIN( 164)					::String _g1 = ::tink::url::_Portion::Portion_Impl__obj::toString(( (::String)(p->value) ));
+HXLINE( 165)					if (::hx::IsEq( _g1.charCodeAt(0),34 )) {
+HXDLIN( 164)						value = _g1.substr(1,(_g1.length - 2));
+            					}
+            					else {
+HXDLIN( 164)						value = _g1;
+            					}
+HXDLIN( 164)					_g->set(key,value);
+            				}
+            			}
+HXDLIN( 164)			return _g;
+            		}
+            		HX_END_LOCAL_FUNC2(return)
+
+            	HX_STACKFRAME(&_hx_pos_9cfb9724f4bad04f_164_parse)
+HXDLIN( 164)		return ::tink::http::_Header::HeaderValue_Impl__obj::parseWith(this1, ::Dynamic(new _hx_Closure_0()));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(HeaderValue_Impl__obj,parse,return )
+
+::Array< ::Dynamic> HeaderValue_Impl__obj::parseWith(::String this1, ::Dynamic parseExtension){
+            	HX_GC_STACKFRAME(&_hx_pos_9cfb9724f4bad04f_174_parseWith)
+HXDLIN( 174)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 174)		{
+HXDLIN( 174)			int _g1 = 0;
+HXDLIN( 174)			::Array< ::String > _g2 = this1.split(HX_(",",2c,00,00,00));
+HXDLIN( 174)			while((_g1 < _g2->length)){
+HXDLIN( 174)				::String v = _g2->__get(_g1);
+HXDLIN( 174)				_g1 = (_g1 + 1);
+HXLINE( 175)				v = ::StringTools_obj::trim(v);
+HXLINE( 176)				int i;
+HXDLIN( 176)				int _g3 = v.indexOf(HX_(";",3b,00,00,00),null());
+HXDLIN( 176)				if ((_g3 == -1)) {
+HXLINE( 176)					i = v.length;
+            				}
+            				else {
+HXLINE( 176)					i = _g3;
+            				}
+HXLINE( 180)				::String value = v.substr(0,i);
+HXLINE( 181)				_g->push( ::Dynamic(::hx::Anon_obj::Create(2)
+            					->setFixed(0,HX_("extensions",14,7c,70,89),parseExtension(value, ::tink::url::_Query::QueryStringParser_obj::__alloc( HX_CTX ,v,HX_(";",3b,00,00,00),HX_("=",3d,00,00,00),(i + 1))))
+            					->setFixed(1,HX_("value",71,7f,b8,31),value)));
+            			}
+            		}
+HXLINE( 174)		return _g;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(HeaderValue_Impl__obj,parseWith,return )
+
 ::String HeaderValue_Impl__obj::basicAuth(::String username,::String password){
             	HX_STACKFRAME(&_hx_pos_9cfb9724f4bad04f_188_basicAuth)
 HXDLIN( 188)		return (HX_("Basic ",d2,a1,bf,89) + ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofString((((HX_("",00,00,00,00) + username) + HX_(":",3a,00,00,00)) + password),null()),null()).toString());
@@ -65,9 +146,11 @@ bool HeaderValue_Impl__obj::__GetStatic(const ::String &inName, Dynamic &outValu
 {
 	switch(inName.length) {
 	case 5:
+		if (HX_FIELD_EQ(inName,"parse") ) { outValue = parse_dyn(); return true; }
 		if (HX_FIELD_EQ(inName,"ofInt") ) { outValue = ofInt_dyn(); return true; }
 		break;
 	case 9:
+		if (HX_FIELD_EQ(inName,"parseWith") ) { outValue = parseWith_dyn(); return true; }
 		if (HX_FIELD_EQ(inName,"basicAuth") ) { outValue = basicAuth_dyn(); return true; }
 	}
 	return false;
@@ -81,6 +164,8 @@ static ::hx::StaticInfo *HeaderValue_Impl__obj_sStaticStorageInfo = 0;
 ::hx::Class HeaderValue_Impl__obj::__mClass;
 
 static ::String HeaderValue_Impl__obj_sStaticFields[] = {
+	HX_("parse",33,90,55,bd),
+	HX_("parseWith",d9,c7,9e,d6),
 	HX_("basicAuth",36,25,20,42),
 	HX_("ofInt",18,ec,1d,2d),
 	::String(null())
diff --git a/Sources/c_borogove/src/tink/streams/StreamBase.cpp b/Sources/c_borogove/src/tink/streams/StreamBase.cpp
index 380c66e..205f201 100644
--- a/Sources/c_borogove/src/tink/streams/StreamBase.cpp
+++ b/Sources/c_borogove/src/tink/streams/StreamBase.cpp
@@ -53,6 +53,7 @@
 HX_DEFINE_STACK_FRAME(_hx_pos_8f94e574d4603fbe_340_new,"tink.streams.StreamBase","new",0x386d305a,"tink.streams.StreamBase.new","tink/streams/Stream.hx",340,0x006f1625)
 HX_LOCAL_STACK_FRAME(_hx_pos_8f94e574d4603fbe_343_get_depleted,"tink.streams.StreamBase","get_depleted",0x971bed9a,"tink.streams.StreamBase.get_depleted","tink/streams/Stream.hx",343,0x006f1625)
 HX_LOCAL_STACK_FRAME(_hx_pos_8f94e574d4603fbe_373_regroup,"tink.streams.StreamBase","regroup",0x3c70eba6,"tink.streams.StreamBase.regroup","tink/streams/Stream.hx",373,0x006f1625)
+HX_LOCAL_STACK_FRAME(_hx_pos_8f94e574d4603fbe_376_map,"tink.streams.StreamBase","map",0x386c6a96,"tink.streams.StreamBase.map","tink/streams/Stream.hx",376,0x006f1625)
 HX_LOCAL_STACK_FRAME(_hx_pos_8f94e574d4603fbe_390_prepend,"tink.streams.StreamBase","prepend",0xf3c27c08,"tink.streams.StreamBase.prepend","tink/streams/Stream.hx",390,0x006f1625)
 HX_LOCAL_STACK_FRAME(_hx_pos_8f94e574d4603fbe_399_decompose,"tink.streams.StreamBase","decompose",0x5e885b2b,"tink.streams.StreamBase.decompose","tink/streams/Stream.hx",399,0x006f1625)
 HX_LOCAL_STACK_FRAME(_hx_pos_8f94e574d4603fbe_404_idealize,"tink.streams.StreamBase","idealize",0xe17680a5,"tink.streams.StreamBase.idealize","tink/streams/Stream.hx",404,0x006f1625)
@@ -87,6 +88,7 @@ bool StreamBase_obj::_hx_isInstanceOf(int inClassId) {
 static ::tink::streams::StreamObject_obj _hx_tink_streams_StreamBase__hx_tink_streams_StreamObject= {
 	( bool (::hx::Object::*)())&::tink::streams::StreamBase_obj::get_depleted,
 	( ::Dynamic (::hx::Object::*)( ::Dynamic))&::tink::streams::StreamBase_obj::regroup,
+	( ::Dynamic (::hx::Object::*)( ::Dynamic))&::tink::streams::StreamBase_obj::map,
 	( ::Dynamic (::hx::Object::*)( ::Dynamic))&::tink::streams::StreamBase_obj::idealize,
 	( ::Dynamic (::hx::Object::*)(::Dynamic))&::tink::streams::StreamBase_obj::prepend,
 	( void (::hx::Object::*)(::Array< ::Dynamic>))&::tink::streams::StreamBase_obj::decompose,
@@ -121,6 +123,14 @@ HXDLIN( 373)		return  ::tink::streams::_Stream::RegroupStream_obj::__alloc( HX_C
 
 HX_DEFINE_DYNAMIC_FUNC1(StreamBase_obj,regroup,return )
 
+::Dynamic StreamBase_obj::map( ::Dynamic f){
+            	HX_STACKFRAME(&_hx_pos_8f94e574d4603fbe_376_map)
+HXDLIN( 376)		return this->regroup(f);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(StreamBase_obj,map,return )
+
 ::Dynamic StreamBase_obj::prepend(::Dynamic other){
             	HX_STACKFRAME(&_hx_pos_8f94e574d4603fbe_390_prepend)
 HXDLIN( 390)		if (this->get_depleted()) {
@@ -255,6 +265,9 @@ StreamBase_obj::StreamBase_obj()
 ::hx::Val StreamBase_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
 {
 	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"map") ) { return ::hx::Val( map_dyn() ); }
+		break;
 	case 6:
 		if (HX_FIELD_EQ(inName,"reduce") ) { return ::hx::Val( reduce_dyn() ); }
 		break;
@@ -290,6 +303,7 @@ static ::hx::StaticInfo *StreamBase_obj_sStaticStorageInfo = 0;
 static ::String StreamBase_obj_sMemberFields[] = {
 	HX_("get_depleted",d4,1c,20,af),
 	HX_("regroup",ac,06,8f,80),
+	HX_("map",9c,0a,53,00),
 	HX_("prepend",0e,97,e0,37),
 	HX_("decompose",b1,c3,a7,7a),
 	HX_("idealize",df,0a,b0,37),
diff --git a/Sources/c_borogove/src/tink/streams/StreamObject.cpp b/Sources/c_borogove/src/tink/streams/StreamObject.cpp
index 48116d1..291ed81 100644
--- a/Sources/c_borogove/src/tink/streams/StreamObject.cpp
+++ b/Sources/c_borogove/src/tink/streams/StreamObject.cpp
@@ -18,6 +18,7 @@ namespace streams{
 static ::String StreamObject_obj_sMemberFields[] = {
 	HX_("get_depleted",d4,1c,20,af),
 	HX_("regroup",ac,06,8f,80),
+	HX_("map",9c,0a,53,00),
 	HX_("idealize",df,0a,b0,37),
 	HX_("prepend",0e,97,e0,37),
 	HX_("decompose",b1,c3,a7,7a),
diff --git a/Sources/c_borogove/src/tink/streams/_Stream/Handler_Impl_.cpp b/Sources/c_borogove/src/tink/streams/_Stream/Handler_Impl_.cpp
index b774556..51ae241 100644
--- a/Sources/c_borogove/src/tink/streams/_Stream/Handler_Impl_.cpp
+++ b/Sources/c_borogove/src/tink/streams/_Stream/Handler_Impl_.cpp
@@ -4,26 +4,10 @@
 #ifndef INCLUDED_tink_core__Future_FutureObject
 #include <tink/core/_Future/FutureObject.h>
 #endif
-#ifndef INCLUDED_tink_core__Future_SyncFuture
-#include <tink/core/_Future/SyncFuture.h>
-#endif
-#ifndef INCLUDED_tink_core__Lazy_Computable
-#include <tink/core/_Lazy/Computable.h>
-#endif
-#ifndef INCLUDED_tink_core__Lazy_LazyConst
-#include <tink/core/_Lazy/LazyConst.h>
-#endif
-#ifndef INCLUDED_tink_core__Lazy_LazyObject
-#include <tink/core/_Lazy/LazyObject.h>
-#endif
-#ifndef INCLUDED_tink_streams_Handled
-#include <tink/streams/Handled.h>
-#endif
 #ifndef INCLUDED_tink_streams__Stream_Handler_Impl_
 #include <tink/streams/_Stream/Handler_Impl_.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_815929985b86a838_493_ofSafeSync,"tink.streams._Stream.Handler_Impl_","ofSafeSync",0xfa6f1a89,"tink.streams._Stream.Handler_Impl_.ofSafeSync","tink/streams/Stream.hx",493,0x006f1625)
 HX_LOCAL_STACK_FRAME(_hx_pos_815929985b86a838_502_ofUnknown,"tink.streams._Stream.Handler_Impl_","ofUnknown",0x42579a69,"tink.streams._Stream.Handler_Impl_.ofUnknown","tink/streams/Stream.hx",502,0x006f1625)
 namespace tink{
 namespace streams{
@@ -46,21 +30,6 @@ bool Handler_Impl__obj::_hx_isInstanceOf(int inClassId) {
 	return inClassId==(int)0x00000001 || inClassId==(int)0x065ceae4;
 }
 
- ::Dynamic Handler_Impl__obj::ofSafeSync( ::Dynamic f){
-            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,f) HXARGC(1)
-            		 ::tink::core::_Future::FutureObject _hx_run( ::Dynamic i){
-            			HX_GC_STACKFRAME(&_hx_pos_815929985b86a838_493_ofSafeSync)
-HXDLIN( 493)			return  ::tink::core::_Future::SyncFuture_obj::__alloc( HX_CTX , ::tink::core::_Lazy::LazyConst_obj::__alloc( HX_CTX ,f(i)));
-            		}
-            		HX_END_LOCAL_FUNC1(return)
-
-            	HX_STACKFRAME(&_hx_pos_815929985b86a838_493_ofSafeSync)
-HXDLIN( 493)		return  ::Dynamic(new _hx_Closure_0(f));
-            	}
-
-
-STATIC_HX_DEFINE_DYNAMIC_FUNC1(Handler_Impl__obj,ofSafeSync,return )
-
  ::Dynamic Handler_Impl__obj::ofUnknown( ::Dynamic f){
             	HX_STACKFRAME(&_hx_pos_815929985b86a838_502_ofUnknown)
 HXDLIN( 502)		return f;
@@ -79,9 +48,6 @@ bool Handler_Impl__obj::__GetStatic(const ::String &inName, Dynamic &outValue, :
 	switch(inName.length) {
 	case 9:
 		if (HX_FIELD_EQ(inName,"ofUnknown") ) { outValue = ofUnknown_dyn(); return true; }
-		break;
-	case 10:
-		if (HX_FIELD_EQ(inName,"ofSafeSync") ) { outValue = ofSafeSync_dyn(); return true; }
 	}
 	return false;
 }
@@ -94,7 +60,6 @@ static ::hx::StaticInfo *Handler_Impl__obj_sStaticStorageInfo = 0;
 ::hx::Class Handler_Impl__obj::__mClass;
 
 static ::String Handler_Impl__obj_sStaticFields[] = {
-	HX_("ofSafeSync",7f,1a,8f,e0),
 	HX_("ofUnknown",33,4b,92,ef),
 	::String(null())
 };
diff --git a/Sources/c_borogove/src/tink/streams/_Stream/Mapping_Impl_.cpp b/Sources/c_borogove/src/tink/streams/_Stream/Mapping_Impl_.cpp
new file mode 100644
index 0000000..d57bb0f
--- /dev/null
+++ b/Sources/c_borogove/src/tink/streams/_Stream/Mapping_Impl_.cpp
@@ -0,0 +1,125 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_tink_core__Future_FutureObject
+#include <tink/core/_Future/FutureObject.h>
+#endif
+#ifndef INCLUDED_tink_core__Future_SyncFuture
+#include <tink/core/_Future/SyncFuture.h>
+#endif
+#ifndef INCLUDED_tink_core__Lazy_Computable
+#include <tink/core/_Lazy/Computable.h>
+#endif
+#ifndef INCLUDED_tink_core__Lazy_LazyConst
+#include <tink/core/_Lazy/LazyConst.h>
+#endif
+#ifndef INCLUDED_tink_core__Lazy_LazyObject
+#include <tink/core/_Lazy/LazyObject.h>
+#endif
+#ifndef INCLUDED_tink_streams_RegroupResult
+#include <tink/streams/RegroupResult.h>
+#endif
+#ifndef INCLUDED_tink_streams_RegroupStatus
+#include <tink/streams/RegroupStatus.h>
+#endif
+#ifndef INCLUDED_tink_streams_StreamObject
+#include <tink/streams/StreamObject.h>
+#endif
+#ifndef INCLUDED_tink_streams__Stream_Mapping_Impl_
+#include <tink/streams/_Stream/Mapping_Impl_.h>
+#endif
+#ifndef INCLUDED_tink_streams__Stream_Stream_Impl_
+#include <tink/streams/_Stream/Stream_Impl_.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_ad09e466a4d1510c_305_ofPlain,"tink.streams._Stream.Mapping_Impl_","ofPlain",0xe5ad256d,"tink.streams._Stream.Mapping_Impl_.ofPlain","tink/streams/Stream.hx",305,0x006f1625)
+HX_LOCAL_STACK_FRAME(_hx_pos_ad09e466a4d1510c_304_ofPlain,"tink.streams._Stream.Mapping_Impl_","ofPlain",0xe5ad256d,"tink.streams._Stream.Mapping_Impl_.ofPlain","tink/streams/Stream.hx",304,0x006f1625)
+namespace tink{
+namespace streams{
+namespace _Stream{
+
+void Mapping_Impl__obj::__construct() { }
+
+Dynamic Mapping_Impl__obj::__CreateEmpty() { return new Mapping_Impl__obj; }
+
+void *Mapping_Impl__obj::_hx_vtable = 0;
+
+Dynamic Mapping_Impl__obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< Mapping_Impl__obj > _hx_result = new Mapping_Impl__obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool Mapping_Impl__obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x28df8128;
+}
+
+ ::Dynamic Mapping_Impl__obj::ofPlain( ::Dynamic f){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,f) HXARGC(2)
+            		 ::tink::core::_Future::FutureObject _hx_run(::cpp::VirtualArray i, ::tink::streams::RegroupStatus _){
+            			HX_GC_STACKFRAME(&_hx_pos_ad09e466a4d1510c_305_ofPlain)
+HXLINE( 305)			return  ::tink::core::_Future::SyncFuture_obj::__alloc( HX_CTX , ::tink::core::_Lazy::LazyConst_obj::__alloc( HX_CTX ,::tink::streams::RegroupResult_obj::Converted(::tink::streams::_Stream::Stream_Impl__obj::single(f(i->__get(0))),null())));
+            		}
+            		HX_END_LOCAL_FUNC2(return)
+
+            	HX_STACKFRAME(&_hx_pos_ad09e466a4d1510c_304_ofPlain)
+HXDLIN( 304)		return  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("apply",6e,85,3b,24), ::Dynamic(new _hx_Closure_0(f))));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Mapping_Impl__obj,ofPlain,return )
+
+
+Mapping_Impl__obj::Mapping_Impl__obj()
+{
+}
+
+bool Mapping_Impl__obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"ofPlain") ) { outValue = ofPlain_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *Mapping_Impl__obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *Mapping_Impl__obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class Mapping_Impl__obj::__mClass;
+
+static ::String Mapping_Impl__obj_sStaticFields[] = {
+	HX_("ofPlain",73,b5,f0,27),
+	::String(null())
+};
+
+void Mapping_Impl__obj::__register()
+{
+	Mapping_Impl__obj _hx_dummy;
+	Mapping_Impl__obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("tink.streams._Stream.Mapping_Impl_",68,46,e3,a6);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &Mapping_Impl__obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(Mapping_Impl__obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< Mapping_Impl__obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = Mapping_Impl__obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = Mapping_Impl__obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace tink
+} // end namespace streams
+} // end namespace _Stream
diff --git a/Sources/c_borogove/src/tink/url/_Portion/Portion_Impl_.cpp b/Sources/c_borogove/src/tink/url/_Portion/Portion_Impl_.cpp
new file mode 100644
index 0000000..46b8b53
--- /dev/null
+++ b/Sources/c_borogove/src/tink/url/_Portion/Portion_Impl_.cpp
@@ -0,0 +1,131 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_StringTools
+#include <StringTools.h>
+#endif
+#ifndef INCLUDED_tink_url__Portion_Portion_Impl_
+#include <tink/url/_Portion/Portion_Impl_.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_286a68bcdf9148f2_29_toString,"tink.url._Portion.Portion_Impl_","toString",0x0e57a43e,"tink.url._Portion.Portion_Impl_.toString","tink/url/Portion.hx",29,0x2f7775f4)
+HX_LOCAL_STACK_FRAME(_hx_pos_286a68bcdf9148f2_35_ofString,"tink.url._Portion.Portion_Impl_","ofString",0x7a1a3cda,"tink.url._Portion.Portion_Impl_.ofString","tink/url/Portion.hx",35,0x2f7775f4)
+namespace tink{
+namespace url{
+namespace _Portion{
+
+void Portion_Impl__obj::__construct() { }
+
+Dynamic Portion_Impl__obj::__CreateEmpty() { return new Portion_Impl__obj; }
+
+void *Portion_Impl__obj::_hx_vtable = 0;
+
+Dynamic Portion_Impl__obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< Portion_Impl__obj > _hx_result = new Portion_Impl__obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool Portion_Impl__obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x38058d4a;
+}
+
+::String Portion_Impl__obj::toString(::String this1){
+            	HX_STACKFRAME(&_hx_pos_286a68bcdf9148f2_29_toString)
+HXDLIN(  29)		if (::hx::IsNull( this1 )) {
+HXDLIN(  29)			return null();
+            		}
+            		else {
+HXLINE(  31)			try {
+            				HX_STACK_CATCHABLE( ::Dynamic, 0);
+HXLINE(  31)				return ::StringTools_obj::urlDecode(this1);
+            			} catch( ::Dynamic _hx_e) {
+            				if (_hx_e.IsClass<  ::Dynamic >() ){
+            					HX_STACK_BEGIN_CATCH
+            					 ::Dynamic _g = _hx_e;
+HXLINE(  32)					{
+HXLINE(  32)						null();
+            					}
+HXDLIN(  32)					return HX_("",00,00,00,00);
+            				}
+            				else {
+            					HX_STACK_DO_THROW(_hx_e);
+            				}
+            			}
+            		}
+HXLINE(  29)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Portion_Impl__obj,toString,return )
+
+::String Portion_Impl__obj::ofString(::String s){
+            	HX_STACKFRAME(&_hx_pos_286a68bcdf9148f2_35_ofString)
+HXDLIN(  35)		::String v;
+HXDLIN(  35)		if (::hx::IsNull( s )) {
+HXDLIN(  35)			v = HX_("",00,00,00,00);
+            		}
+            		else {
+HXDLIN(  35)			v = ::StringTools_obj::urlEncode(s);
+            		}
+HXDLIN(  35)		return v;
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Portion_Impl__obj,ofString,return )
+
+
+Portion_Impl__obj::Portion_Impl__obj()
+{
+}
+
+bool Portion_Impl__obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 8:
+		if (HX_FIELD_EQ(inName,"toString") ) { outValue = toString_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"ofString") ) { outValue = ofString_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *Portion_Impl__obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *Portion_Impl__obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class Portion_Impl__obj::__mClass;
+
+static ::String Portion_Impl__obj_sStaticFields[] = {
+	HX_("toString",ac,d0,6e,38),
+	HX_("ofString",48,69,31,a4),
+	::String(null())
+};
+
+void Portion_Impl__obj::__register()
+{
+	Portion_Impl__obj _hx_dummy;
+	Portion_Impl__obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("tink.url._Portion.Portion_Impl_",1c,47,5c,35);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &Portion_Impl__obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(Portion_Impl__obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< Portion_Impl__obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = Portion_Impl__obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = Portion_Impl__obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace tink
+} // end namespace url
+} // end namespace _Portion
diff --git a/Sources/c_borogove/src/tink/url/_Query/QueryStringParser.cpp b/Sources/c_borogove/src/tink/url/_Query/QueryStringParser.cpp
new file mode 100644
index 0000000..b7e3401
--- /dev/null
+++ b/Sources/c_borogove/src/tink/url/_Query/QueryStringParser.cpp
@@ -0,0 +1,249 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_tink_core_NamedWith
+#include <tink/core/NamedWith.h>
+#endif
+#ifndef INCLUDED_tink_url__Portion_Portion_Impl_
+#include <tink/url/_Portion/Portion_Impl_.h>
+#endif
+#ifndef INCLUDED_tink_url__Query_QueryStringParser
+#include <tink/url/_Query/QueryStringParser.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_bde4a567013990e9_87_new,"tink.url._Query.QueryStringParser","new",0xa0bc4fe0,"tink.url._Query.QueryStringParser.new","tink/url/Query.hx",87,0xf3864d33)
+HX_LOCAL_STACK_FRAME(_hx_pos_bde4a567013990e9_98_hasNext,"tink.url._Query.QueryStringParser","hasNext",0xa3a4e4ed,"tink.url._Query.QueryStringParser.hasNext","tink/url/Query.hx",98,0xf3864d33)
+HX_LOCAL_STACK_FRAME(_hx_pos_bde4a567013990e9_100_next,"tink.url._Query.QueryStringParser","next",0x04099573,"tink.url._Query.QueryStringParser.next","tink/url/Query.hx",100,0xf3864d33)
+HX_LOCAL_STACK_FRAME(_hx_pos_bde4a567013990e9_118_trimmedSub,"tink.url._Query.QueryStringParser","trimmedSub",0x96b985b6,"tink.url._Query.QueryStringParser.trimmedSub","tink/url/Query.hx",118,0xf3864d33)
+namespace tink{
+namespace url{
+namespace _Query{
+
+void QueryStringParser_obj::__construct(::String s,::String sep,::String set,int pos){
+            	HX_STACKFRAME(&_hx_pos_bde4a567013990e9_87_new)
+HXLINE(  88)		::String _hx_tmp;
+HXDLIN(  88)		if (::hx::IsNull( s )) {
+HXLINE(  88)			_hx_tmp = HX_("",00,00,00,00);
+            		}
+            		else {
+HXLINE(  88)			_hx_tmp = s;
+            		}
+HXDLIN(  88)		this->s = _hx_tmp;
+HXLINE(  92)		this->sep = sep;
+HXLINE(  93)		this->set = set;
+HXLINE(  94)		this->pos = pos;
+            	}
+
+Dynamic QueryStringParser_obj::__CreateEmpty() { return new QueryStringParser_obj; }
+
+void *QueryStringParser_obj::_hx_vtable = 0;
+
+Dynamic QueryStringParser_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< QueryStringParser_obj > _hx_result = new QueryStringParser_obj();
+	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2],inArgs[3]);
+	return _hx_result;
+}
+
+bool QueryStringParser_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x78240256;
+}
+
+bool QueryStringParser_obj::hasNext(){
+            	HX_STACKFRAME(&_hx_pos_bde4a567013990e9_98_hasNext)
+HXDLIN(  98)		return (this->pos < this->s.length);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(QueryStringParser_obj,hasNext,return )
+
+ ::tink::core::NamedWith QueryStringParser_obj::next(){
+            	HX_GC_STACKFRAME(&_hx_pos_bde4a567013990e9_100_next)
+HXLINE( 101)		int next = this->s.indexOf(this->sep,this->pos);
+HXLINE( 103)		if ((next == -1)) {
+HXLINE( 104)			next = this->s.length;
+            		}
+HXLINE( 106)		int split = this->s.indexOf(this->set,this->pos);
+HXLINE( 107)		int start = this->pos;
+HXLINE( 109)		this->pos = (next + this->sep.length);
+HXLINE( 112)		bool _hx_tmp;
+HXDLIN( 112)		if ((split != -1)) {
+HXLINE( 112)			_hx_tmp = (split > next);
+            		}
+            		else {
+HXLINE( 112)			_hx_tmp = true;
+            		}
+HXDLIN( 112)		if (_hx_tmp) {
+HXLINE( 113)			::String _hx_tmp1 = ::tink::url::_Portion::Portion_Impl__obj::toString(::tink::url::_Query::QueryStringParser_obj::trimmedSub(this->s,start,next));
+HXDLIN( 113)			return  ::tink::core::NamedWith_obj::__alloc( HX_CTX ,_hx_tmp1,::tink::url::_Portion::Portion_Impl__obj::ofString(HX_("",00,00,00,00)));
+            		}
+            		else {
+HXLINE( 115)			::String _hx_tmp2 = ::tink::url::_Portion::Portion_Impl__obj::toString(::tink::url::_Query::QueryStringParser_obj::trimmedSub(this->s,start,split));
+HXDLIN( 115)			return  ::tink::core::NamedWith_obj::__alloc( HX_CTX ,_hx_tmp2,::tink::url::_Query::QueryStringParser_obj::trimmedSub(this->s,(split + this->set.length),next));
+            		}
+HXLINE( 112)		return null();
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(QueryStringParser_obj,next,return )
+
+::String QueryStringParser_obj::trimmedSub(::String s,int start,int end){
+            	HX_STACKFRAME(&_hx_pos_bde4a567013990e9_118_trimmedSub)
+HXLINE( 120)		if ((start >= s.length)) {
+HXLINE( 120)			return HX_("",00,00,00,00);
+            		}
+HXLINE( 122)		while((s.cca(start) < 33)){
+HXLINE( 123)			start = (start + 1);
+            		}
+HXLINE( 125)		if ((end < (s.length - 1))) {
+HXLINE( 126)			while((s.cca((end - 1)) < 33)){
+HXLINE( 127)				end = (end - 1);
+            			}
+            		}
+HXLINE( 129)		return s.substring(start,end);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(QueryStringParser_obj,trimmedSub,return )
+
+
+::hx::ObjectPtr< QueryStringParser_obj > QueryStringParser_obj::__new(::String s,::String sep,::String set,int pos) {
+	::hx::ObjectPtr< QueryStringParser_obj > __this = new QueryStringParser_obj();
+	__this->__construct(s,sep,set,pos);
+	return __this;
+}
+
+::hx::ObjectPtr< QueryStringParser_obj > QueryStringParser_obj::__alloc(::hx::Ctx *_hx_ctx,::String s,::String sep,::String set,int pos) {
+	QueryStringParser_obj *__this = (QueryStringParser_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(QueryStringParser_obj), true, "tink.url._Query.QueryStringParser"));
+	*(void **)__this = QueryStringParser_obj::_hx_vtable;
+	__this->__construct(s,sep,set,pos);
+	return __this;
+}
+
+QueryStringParser_obj::QueryStringParser_obj()
+{
+}
+
+void QueryStringParser_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(QueryStringParser);
+	HX_MARK_MEMBER_NAME(s,"s");
+	HX_MARK_MEMBER_NAME(sep,"sep");
+	HX_MARK_MEMBER_NAME(set,"set");
+	HX_MARK_MEMBER_NAME(pos,"pos");
+	HX_MARK_END_CLASS();
+}
+
+void QueryStringParser_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(s,"s");
+	HX_VISIT_MEMBER_NAME(sep,"sep");
+	HX_VISIT_MEMBER_NAME(set,"set");
+	HX_VISIT_MEMBER_NAME(pos,"pos");
+}
+
+::hx::Val QueryStringParser_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 1:
+		if (HX_FIELD_EQ(inName,"s") ) { return ::hx::Val( s ); }
+		break;
+	case 3:
+		if (HX_FIELD_EQ(inName,"sep") ) { return ::hx::Val( sep ); }
+		if (HX_FIELD_EQ(inName,"set") ) { return ::hx::Val( set ); }
+		if (HX_FIELD_EQ(inName,"pos") ) { return ::hx::Val( pos ); }
+		break;
+	case 4:
+		if (HX_FIELD_EQ(inName,"next") ) { return ::hx::Val( next_dyn() ); }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"hasNext") ) { return ::hx::Val( hasNext_dyn() ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+bool QueryStringParser_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 10:
+		if (HX_FIELD_EQ(inName,"trimmedSub") ) { outValue = trimmedSub_dyn(); return true; }
+	}
+	return false;
+}
+
+::hx::Val QueryStringParser_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 1:
+		if (HX_FIELD_EQ(inName,"s") ) { s=inValue.Cast< ::String >(); return inValue; }
+		break;
+	case 3:
+		if (HX_FIELD_EQ(inName,"sep") ) { sep=inValue.Cast< ::String >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"set") ) { set=inValue.Cast< ::String >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"pos") ) { pos=inValue.Cast< int >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+void QueryStringParser_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("s",73,00,00,00));
+	outFields->push(HX_("sep",9e,9b,57,00));
+	outFields->push(HX_("set",a2,9b,57,00));
+	outFields->push(HX_("pos",94,5d,55,00));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo QueryStringParser_obj_sMemberStorageInfo[] = {
+	{::hx::fsString,(int)offsetof(QueryStringParser_obj,s),HX_("s",73,00,00,00)},
+	{::hx::fsString,(int)offsetof(QueryStringParser_obj,sep),HX_("sep",9e,9b,57,00)},
+	{::hx::fsString,(int)offsetof(QueryStringParser_obj,set),HX_("set",a2,9b,57,00)},
+	{::hx::fsInt,(int)offsetof(QueryStringParser_obj,pos),HX_("pos",94,5d,55,00)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo *QueryStringParser_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String QueryStringParser_obj_sMemberFields[] = {
+	HX_("s",73,00,00,00),
+	HX_("sep",9e,9b,57,00),
+	HX_("set",a2,9b,57,00),
+	HX_("pos",94,5d,55,00),
+	HX_("hasNext",6d,a5,46,18),
+	HX_("next",f3,84,02,49),
+	::String(null()) };
+
+::hx::Class QueryStringParser_obj::__mClass;
+
+static ::String QueryStringParser_obj_sStaticFields[] = {
+	HX_("trimmedSub",36,15,4b,3a),
+	::String(null())
+};
+
+void QueryStringParser_obj::__register()
+{
+	QueryStringParser_obj _hx_dummy;
+	QueryStringParser_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("tink.url._Query.QueryStringParser",ee,1f,27,ed);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &QueryStringParser_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(QueryStringParser_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(QueryStringParser_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< QueryStringParser_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = QueryStringParser_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = QueryStringParser_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace tink
+} // end namespace url
+} // end namespace _Query