Forum
    • Categories
    • Register
    • Login

    Optimal Midi Architecture

    Scheduled Pinned Locked Moved General Questions
    25 Posts 5 Posters 52 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      Bart @David Healey
      last edited by

      @David-Healey

      Do you mean making a Hise Tree Module via a Script Processor?

      David HealeyD 1 Reply Last reply Reply Quote 0
      • David HealeyD
        David Healey @Bart
        last edited by

        @Bart Correct

        Free HISE Bootcamp Full Course for beginners.
        YouTube Channel - Public HISE tutorials
        My Patreon - HISE tutorials

        B 1 Reply Last reply Reply Quote 0
        • B
          Bart @David Healey
          last edited by

          @David-Healey

          Please tell me more, is there an example somewhere?

          Its probably beyond my capabilities, but willing to consider attempting it.

          David HealeyD 1 Reply Last reply Reply Quote 0
          • David HealeyD
            David Healey @Bart
            last edited by

            @Bart I've not done it. You're basically building a one track sequencer via scripting. It's not a small project.

            Free HISE Bootcamp Full Course for beginners.
            YouTube Channel - Public HISE tutorials
            My Patreon - HISE tutorials

            B 1 Reply Last reply Reply Quote 0
            • B
              Bart @David Healey
              last edited by

              @David-Healey

              Ohhh, so you don't mean scripting an actual Hise Module with a pop out UI like the current MIDI Player Hise Module... You just mean a normal script processor for managing the MIDI data?

              Guess the script can have an interface within the Interface Designer anyway..

              David HealeyD 1 Reply Last reply Reply Quote 0
              • David HealeyD
                David Healey @Bart
                last edited by

                @Bart said in Optimal Midi Architecture:

                Ohhh, so you don't mean scripting an actual Hise Module with a pop out UI like the current MIDI Player Hise Module... You just mean a normal script processor for managing the MIDI data?

                They're the same thing ;) that's why they show up in the MIDI processor list. For example here's the C++ for the arpeggiator, you'll see it's the same stuff as a regular script (on init, on note on, on note off, etc).

                Here's a video that shows how to create a reusable keyswitcher module and connect it to the UI. This is the kind of pattern you'll need to use.

                https://www.youtube.com/watch?v=Vte7D9ti-9A

                Free HISE Bootcamp Full Course for beginners.
                YouTube Channel - Public HISE tutorials
                My Patreon - HISE tutorials

                Christoph HartC B 2 Replies Last reply Reply Quote 1
                • Christoph HartC
                  Christoph Hart @David Healey
                  last edited by

                  What limitations do you run into with the Midi Player?

                  It does in fact do a lot of heavy lifting to ensure sample accuracy so you would have to script a LOT to get its basic functionality up and running.

                  B 1 Reply Last reply Reply Quote 1
                  • B
                    Bart @David Healey
                    last edited by

                    @David-Healey

                    Oh my goodness I feel so dumb,,, you know what..... I've never seen that Interface tab in the popup module for script processors, because I only ever click the open in workspace icon, or jump straight to the midi callback tabs..

                    You're right, they're the exact same thing! 👈

                    Hise is AWESOME!

                    But I still don't know the answers to questions at the top of this thread..
                    Do you think @ulrik may know some things about midi and automation sample accurate playback and optimal data management. (without using the Midi Player Module)

                    HISEnbergH 1 Reply Last reply Reply Quote 0
                    • B
                      Bart @Christoph Hart
                      last edited by Bart

                      @Christoph-Hart

                      Don't know if MIDI Players can be dynamically added and removed via the final exported plugin
                      Don't think it handles parameter automations
                      Don't think they can playback and display more than one Sequence and or Track at a time
                      Couldn't get them to output MIDI to anything other than MIDI channel 1,
                      Using the MIDI Channel Setter Module would be fine, but couldn't get it working with stuck notes
                      MIDI Player doesn't seem to immediately update it's Sequence and Track when changing them

                      Would be great if a single MIDI Player could manage everything:

                      Sample accurate playback for MIDI events (already does) and automations (doesn't do)
                      MIDI 2.0 per note parameter modulation (Hise Events may already be capable??)
                      Manage parameter automations with sample rate accuracy and MIDI 2.0 resolution
                      Playback more than one Sequence and or Track together from the single MIDI Player

                      So basically a single MIDI Player Module that handles it all, and then you can utilize the Floating Tiles and custom Piano Roll Panels to view any of the content within the one MIDI Player Module.
                      So Floating Tile 1 might display Sequence 5 Track 2, while scripted Panel displays piano roll for Sequence 10 Tracks 1 2 3 4 all from the one MIDI Player.

                      Having the option to use a single MIDI Player would then help declutter plugins when many MIDI tracks are needed, but not necessarily wanted clogging up the module tree.

                      More things I'm sure 😁

                      A single MIDI Player that can handle it all optimally and accurately, something like that 👈

                      1 Reply Last reply Reply Quote 0
                      • HISEnbergH
                        HISEnberg @Bart
                        last edited by HISEnberg

                        @Bart Sounds to me like the Midi Player is exactly what you need here as Christoph suggests. The only aspect really missing is CC control, but you can manage that with other custom MIDI processors.

                        I had a project a few years back attempting to create a full MIDI browser and piano roll (credits go to @ustk here). It is A LOT of scripting. You can in fact display many MIDI tracks (including those not used) at any time in a panel. HISE doesn't support MIDI 2.0 yet (as far as I am aware, @Christoph-Hart is that on your radar btw?)

                        You're welcome to poke around the project. Apologies it is quite a mess as the project was abandoned early on. The tools you mention, isn't that the purpose of using a DAW?

                        HiseSnippet 20417.3oc681EbibjsdffRBiDfjZ0Zl4d26t1w5R7NiLP2ffnv+noZ0DjDraNM+AhfcK0WFz8TDn.P0rPUPUUf+zZ3czMr8ZuQb209QOuMO4m8i1OY4vwtQru4M76NlG7aaDdmW1m1H16lmLqexr9CE.A5grEolAMPUYdxSdxSdxu7jmLSwyMDU5H14k5JRCGJZDK1BuaSM01h55pZwVH4AWLTL1BeT7VWnXze89BRJw1ZiXK7gwaJInntuprbr0tXnfttXmXKrv69XHAKj38hg+6O9n0DjETZK57nXwdtpTawskFHY37zlq9TIY4ME5Hdfz.pTWb0sZqprtpr5HDy7twyEanP6SD5Itq.jr2IdrmHn2O1B2KtP6B74xUrbmBGKHbbm70J1UrP4xE4KzsVthB0DJmqV4bE4isvOoQGICUsVFBFh5wV38VSsyEs5qdlBo.dtjtzwxhvO3i0BUxjGuopbGnJBOM158kj6XKkzQxr6PIydWhL6mGeGoNR1O2Q1cW7K3bxAs.bg2gk8dWF1iml8xQwd9vRKPwRuGgk9z3sZqIMzv4Mj1xsTLD05JfZmnYERZi8N6mH95pnTnXjcfvIhapg9gcNRwmiOWFtJ4xkdkjIShUSx1Qrqn15BxxGiZszSYnMRD8VDQzUkEy1VVTPKEjbIk1xi5HlZwMDQOTSvPBkjruReQ3kKur8qaJnHJiDfJn+w581urgxohxpCEsdAU9LyBN6dxmrPWu4XOi9hZs5KY38U6LR1PpMghtoUSrJ4oR8DPMcteIzZull5Y5h99pmJdwwpBZcrp2ND0pGl0aRPyNaKz8ktyJpuhtA2oBZbCUjeIP7MjzGJKbgN2C4rZC6IZTWVdc0ACUUP+VO0htRrIWHKoHx0cjRanUgafy6atepdZBC6K0VOCWaK5jgCdmn1VHqImmN42kjC8mU5x1E08FUpoxcdNy+PEBjB7GxpsEjwEQSLMPb6N1+P+PJBezJzYPVBUceHUFgJ2tpFh6K11PPomLxNitQpCQJn4nXUHUesTGi9oR65oOQTpWeiToOhl6j5xkhpHjzaLXnwEoRy8vGxki6y+bBejUVTomQetujKWZb1HR.5pmBvZH9kOekUb+RgyMeYNmWY+ktpZboTf2KoPJsz1uyoXbnFjzcGM.QM3aGxezJLIxgS1Q.0aE8yTlOJiUVS6JG1rGIGBmmx7Q9kiK8VCb3q8QsKLDhOiM4Wxh0R6V9LD5BSZcP4021L2YQ3TAIYAjsxVnwLfRjlFKSjmDl49b7dxM7V6xylWKlwMYuGWtrkSOCZyT0j5IoHH+hfZ0r3KsABxRuVrSSUnWcJm74H8PUO6ZmeDQSbf.Zv9Njxhlf2iKEsXZIJ4fKUBleX2OWWzfLZMpm9lalK+lUxW1UFYrIru5H.8gc+0TGhq64NJiCSRTwNL+QYn3FzO3ylyiR2ktMpLDKkXsP.eCFYBUgk.iantx2yWqCqjLfJG4ezydFZjBQ2IqilvYaiLdlBU1Y3vejKat.rzXUMtLYRrFiD1D.mD2W3wFtoEFzKu+8sLvpI1inWC52tR+gRGQYECmprcDLDxRYOEkMIOIBUOah.qXfZbLf5g0f.o541xlqQExvYzWRm7omhxTLcIsoUZq7RGkEM9kBRS3.U7H1DMQyj6JkHVbewg.StmhUyHLZeOQKzFHAZR6QuTw8K1C0RijaIPuiy8q51022ACZpgFBVTy2WCnU0BKioTFM3XQsLnAkkQrkUBQHxXg4EOXXdznPaSFCmJgpJaoHYr2PQkfvlFybfeDjvmaxUnjZfAD9SMADJ144RhmMTUyHlDB62GG+zguzBuULLqSifOlMY9IDx7mYRl5i5Ho90BmJhTkGfozch203kVOg2Ko.kjXKrR7keFBcj9xhZJh5FKugn9IFpCWFSOtVBCFJKpub0bU4.3P3u8To1mj8LgSioAM5HwHh0WH9B.MwOogRGqeGycs9Nlr6ZiLLTUv74GF+XCkWtyHCQ9vpuii.PK0jPfVxRcD0LIvIJG+RX9SrD36+c+2y+CQg.IwD.0ywCC7y8l+6ZleDLviUWS8byFq1CN9kjd887Pk+3il1187A0tWaBa20UDzDmKs54ups54ups54c0p+6JOYs5dX.tooU2a0X0osUuPPs5e4D1p2WvXo1xpnYkNWZ5KbUa5KbUa5YIve3u6u6e3j0z6lA9gmMMM8dpFevT2zWLnl9uXJZ5QSsWYtzvW7p1vW7p1vWzce9IzRuGFnxzzv6gJ2cpa3KETCe0Irgusrvv4RidoqZidoqZiNKAVsa2kmrF8RgMvbjaz8Pke9T2nWdV0nOTTq8boQu7UsQu7UsQmk.+9u+28u6e+D0n6gA9Klld5doxT2nWInF8JSXitg5f4RadkqZadkqZa9TR.617nj+w2l6gJ+8m517pA0l+fIEGeegSD0lKM6UupM6UupM6UuhM6UmIM6dnB2T2rWaV0UWSZ9zUu1UsMu1UsMu1UrMu1LoM2CUVbRZy+DFW0jaVMm8iUU5oNCa1+HGO0ja5Z2+HGW0ja5Z29HGe0j6pn5.NqI2z1z+ILdqwCY9ESRa+ciy7rqwNpKQbxOrYwIOq4m9rVX5yZwH.a2GEkeNVQogxo0MLDZeB3vYWsN+k+1+aQhR+YrTZawSEkmReUdGKR8DU4Ntow+7+yqFEZ7IVzXCw1BWvRje++w+C+yhDQ9TKhzZjtgGWm9q69udseXhHy9hxhB5d7A7+0+UqNER30GocpKR8G9p+s+WlrlcrzwGJMgixsCsvI5JueJwTIteMrfESAItKlD1wx.+DzMfhJ2gPEYgKfEBZ55JQzZerlTmVRuVLL7QAyG+bh.QVZHPmFJvBAeUpQ.U1U7bioqs0gFM0DOc5nwGaKYE03u5jH+Uol.sssPiAMcz3O2lFlQay5fSi8gVOaqMfQyhsvBlKMVSM0ghZFRvJwsvFhmJ0VjDvTIhaNBWrE9.6HlI1BuOgG9XSdXqAB8DwrvGDG+c9XmSWfWP+iyfkV19A+K+WrZe7JAa+j+v+zU6JIaFfa+Ew+tl6u2upw5G7xM2a6MZr+kG2K6Pkdf7vlaRvxM30N0jafkDdsdWMtw.odZEAdIiyWtRkJ44KESxPb.4w4A.Q4KwWtT07Eyki5MtdQjX5ODyz0GoIDrT7Eqxx2+9+Wcy249aV0ECVLekp70xkqpaFrPtREJVpPAdjpKcv0AZG1raRV1cagiskw3uSyq+gWuJEudfKd86O0MuhRRWjdH1nj8y9BrbO1B+8hat95blqGKGXGlaHnwMTPCwbTbIsrCHIQIJQbMwdijEzXZ.9jIXEfOmNhLCocnom1gumtcfzLfDz7EpVoTri64iZkdaX41WSP6f9HfiHPlntj+j34ykMWLAYodJCvL+GD+XUT+9AwDFYn9DjEdRSFSSdh3777UKVkOV.ZvmhpvVwNvK.N9U09+6+s0++8+6GYqF3n7wnL7QAo69yvxePrAFVPC4hF4I.c36dwOvJ6927+hO5vdZgYaWhRWSV4B429J4kUaehUDttvGRUlePPU26XWcUX6Afl7wEz+fsl9C+sd5A7Mdqo9IKEjkUOyNtRAVZcYjVhN2dJxnBLIsfZBiLAGle0Wwx7Cshkhsvn42VEFqf2amOWRCW8565SudmlkBPWC9J774qTNWAdpFnDwKUpFx5YoXQyNLXlqP0hEymOl6Nd0JVqbk70JwXF3CiTHQDPS62W2USKx7f6pYwUGmjhXn6ciui6QN3KjqbE9JEJ6sRhpKnJewZTRJyGmiGIBmnpHInMBR6c2YYUrkqpHe0pEqTqX47E7VEQuIeQzacUEqTMe9hH8Dlp3mFovJgpJtAcU7KcWE2vSUb2wVEcqsYOZKot+Shi2Z.CT6XBqpsDLD5.5sKvK9gABLlK0MDGRMr3u+286928H8Qc6JgRU73bcVCk+NcjEsrh6j27+fjdS4Q8jTZJngFEzPTiXYaH6CIiP9AXlaId+FfL7Hs4b59yugEowiiXASIp42CQZ9hUcIMwyTwRZ9tw2NPYYLFwRfiF7Si6J.DYjNWD1HB+geqOVGiReJerGRyq2wvbmXP30MkUE.mkc.BesyX.XNFMA.Z1826hcMmmvAlPlfrr2ohZPXOhq+LCnxiLXi5W6SymGCyVc0KWfuT4x4igmWxB6FGhvxEa5LvyhOfaQmHfjewLv6wQUI5M4v+ZSUXvwuVU6DcHvjQOuqfrtXxKcMRzp9IqcIK8VCJv77w0z3i0WuHmuSb4ii.5gX1FP.OIRCB7mDWVrqQL20luzGzz4bCB+vwpdMN7yANAlOwFDNDUlLUr+Qg0I.0LL4cBBGQDy7Y7oQIJQAHEvneMK6iMuDegjdlF42+Uq5sQAzkPLXw37KkOYgkJlrzRkSVYopIqsDetj77KwmOIegk3KljuzR7kSxWYI9pI4qsTdK6cuS7wp3MRWb8Q5nIFzTc3ngVQD6jBkMef3cN75OT17SJT17iQpl+OcPYqVCg1oVYeLkVqR4ZnhXhgxledBkM+0Bnr4mmPYyO2gx9IQJVYmiPYyesCJ6DhJM+7DUZ9a5nRyOOQkleliJM+MFTo4udiJM+TfJM+XQk99waA6Ig2TvRyOVXoePzfkledBKM+L.3Y9aR.OyOi.dVHH8MDPtq8.OKLo.OKLFoZg2l.dVXdB7rv0BfmElm.OKbs.3Yg4IvyB2zAdVXdB7rvMcfmElm.OKLyAdV3FCvyBWuAdVXJ.dVXr.OuSbbzszg6IR8ELdSg+rvrB+Yg4I9yBy.7mEtIg+rvLB+YwfT6905W+weVbRweNtNtEeaB+Yw4I9yhWKveVbdh+r30B7mEmm3OKdSG+Yw4I9yh2zweVbdh+r3LG+YwaL3OKd8F+Ywo.+Ywwh+7ihCv3dyh9r3rB8Yw4I5yhy.zmEuIg9r3LB8YofT5Pc+eCg9LwTi9rzjh9rzXjpkdaB8Yo4I5yRWKPeVZdh9rz0BzmklmnOKcSG8Yo4I5yR2zQeVZdh9rTTPeFMjOkhPfHttrvv2TXdJMqv7TZdh4ozL.ySoaRXdJMVLOIhDlmxAotg5E7lAyC6dda5A.UdRA.UdLh3xuMA.p77D.T4qE.fJOOA.U9ZA.nxyS.PkuoC.p77D.T4a5.fJOOA.Ud1A.pbD..0TTq8aJ.PkmU.fJOOA.UdF..p7MI.PkmQ.fpDj51c+GeCC.TkIE.TkwHhq71D.nJyS.PUtV..px7D.TkqE.fpLOA.U4lN.nJyS.PUtoC.px7D.TkYG.nJiE.T73G.G8HuYv+TYVg+ox7D+SkY.9mJ2jv+TYFg+oZPZa49e5FF9mpSJ9mpiQDW8sI7OUmm3epds.+S04I9mpWKv+Tcdh+o5Mc7OUmm3epdSG+S04I9mpyN7OUGK9mOHdK7A39aJHPUmUPfpNOg.UcF.Ap5MIHPUmQPfpEjBWy+mugAAp1jBAp1XDw0daBBTs4IDnZWKf.UadBAp10BHP0lmPfpcSGBTs4IDnZ2zg.UadBAp1rCBTsH3Bn8kdi4BnZyJ7O0lm3epMCv+T6lD9mZSO9mOg4XKKWPpaC+au9C.x80FSDQ.kz5fzMmWoraoyMdLPL2YMyVPPtkU+oCEDy0pyrEFTPUx273fXt4els.gbWIuYhDh9hMZ1BEZBkOWyvB8y7b53laFCFxuNISKZnOg4rYMWDNFr1QRuc14HfH20toFQzcYOdVyMigD4lOmJLQtuZutdCJxcUdp2MXerMgp2oCUkN22ReTX8aiFfGWMdWrpaDP+OXh.JC2STOUTi6y41PSnWOjD2iR6VqFRuFG9+u.yFvskDbGcXyJLGAv0npJ+vW6VEyy8mw+o+lUmoWxCi6ps3CC29kyMAkJa0J6ODx0JiuUKOMhAJ8nE.Qth5Q7rv6ErJnyE3yOMtzfdLUyHe443asz4p74W54p7AURzED9d8I.UaV49DLfCHF86RtX3Yz60fQqFox00kEz26t9tpXPJq9oiMA2FgQ99KxOVJp2eG9IvboZwyW100GTh37kpTKWg7wz6qd11HEVcuF7RF9XQ9Zn36OkctASQCz2+234134aW0cmGO8SBpE7mDoIA3b8LFXal6A6EV0q4VMAT6+i0TggObfiMPEOzhFpsDNEAZpJo.CP9DAkNlOE0caftAhmH8nW3uu26OKCkFJm5eeMOMG5sEjE2TnMXFvlO9COJ1DIJnOIKQU1IUTLdtbVIr9ezOgUSIi18whqYhvf9XU56+1qwBi+A9IL1TR1PTa1IMX1l+u9Zrz3umuRiyipjHvKLqjXFF0gL52+N9LYn+QQPR3F82mDutrLmyC7EDAssPlaPIWdWnPsR0JVtH5SOyJsZwRExmOenGBbNxiO0lsQxjmpbLyUuVV5QD5Fg573FbDMq2oc3.eEWL2Qh2cxtRaCZ3BtUsh4.RpMmQ+OINjsXzyg+e9+4PmCe73bn49Dvr3W8egWwo21BWcIetmgWe9pzNWhG6mP9Bk7KzcyWfuZtJdtEEqVpXU31HrbDudm7+R88bZV5BZSFVSWGmPuNOZ14snHHNc4Olw5SnMlSR26F064XJw5Iq5iN5OINjteTpgd2HeOOeN8gJnOBw2ONNg21OeLWz0A4SHK4Xh3lI85bu7qEZndu8uo5n+c9KaMS5OJ0RuyDdAnGznQ+hUCRw5OP448eooL9OO9tnojKHiDncf8eJhU.noVFMvkUrIVr8FbXl6LYW16Au3.+nRpkXLW7xLyt9PZDxa514pc7YJTDAwciS7iBm4EGdLuqQQwUmXWykbL94FUFGnN7Jb4bipuyTmCy3hzDiKh9bOJzP1Ys4c0GbcvG9q861MlVvXApBJI+lI622dUeD29vveJYkosanBty0tq5e4PXkO1RMAHRrwv8hJBGKKBK321hBZJDwtGQfWoTrH0FbWbUpojfh59pxrW+3eOaMJRR4OJNlVb.whBWN9liOHPd+NDdWV3BP5DXaQQaT0sLP7YDXpwTSi4MrVB7nH8ignZ4.UUCYCogAdqr7O0kNM2eqOQy.ygU5chiHJPS2GToIhWnb0hEywtMG9v3UqjuHeIjIyvmZ9GEuPwB0JjuFxtarM8X8J0pvylx0JEZk7tVHS3EAeNuWD71KXuOWg0luYg2IJ1SIK.ocmgHaQ82+OY1vkA3IFJ4Fycqd7nH5+yXqSdk+uHr0pNmGW+G6uNn0p1QtMNejMAGomOU7hiUEz5D4KEdu3WQb73XnwViBY7AOSy+wZRcv8ZB5TH8u1zfzGFGRJGNsDTVeX7CDQkSqKTZyN6p79NIff.vs3pSTEJXKr+bx.dxRCANsAdjHpp0ObL65oO1VhujsluMRadxj82IJlaifNCiszjwsyAaLcUsXkx0J3Zk59v3EKkuVUDFSdei.NhiccuVy3S.52o4Bji.ZT480frZwGvUnTVxA8rY37rWaCgSE2czfiE0rNrmwuea0yPYC8nxjz+DIxOqVD+SRjR7XMgg8kZqyjyMD6JLR1n9vgH.DBJNGhz32tlLpK.hT6ijjpvwNc1x3mefZudHbGH8RljCFiLCQCzy4wO6Y5hOWD7aOUwanMRz5kaJKXzx3BYWTpYCK4t6m2xPPyvoTxa87FJcnJ6xdNDr8Y0Mhf4p.CslDg6dcPTXAz2QU6O9OY0PFp3GzdSMTwBeXzGd.eFjKXXHpo.cLCrii6gm+9u0csg6rfb4.szZRFf38GeivykDOyU3wvv1+0iks8CdqW1NZPpIvRA43tfwtfb16AtmV4t9f4yB4JlRR56nBwDmf1EDD.yAVtol3oAhNahXYLktprbvyE6isA+GRK+220MGuUfbLvc9sLmqGEMi.MgDsJ.ysn4tScEH+bnBLtoeADoEZDqnCP6qBDV.ZFZBA6FofzQBlC+ys4Py7gupqBrG4DvouO4VyZJYUuNg5mgiSVHaaZFnW7AF0yGDk1SKA5IRHHVicPxhqFItjr2lZJzSbKktpAsCMPhMRo+Iwgjxwyo1kqXV2Nsvmvf8Wr5rRd9ems7zLasPPeZ2OPY5uX7gIwWZu.xlzJJ7p8c8QrEduCLiSWDjJzLmQCQifxHoDaqMfGBwfu4K.n7qcwPAccXldK7taAPUQP7ufF5+BuCYXdDRICbnhslZmKZ0W8LEhkrmS2eF1KEV8r6KI2wlqziEYV7SiiifG+4w2wGdLVr4BO9tGX1j2naWDlSGF78hu42vH2lKE+Oyp3wQVHIF.wEuS.ARyC3sVgsH4+ziVSPF.fSKkdtpTawskFHQoqMb0mJIKuoPGQ75AQ0Ocq1pJzyq.lp3Nj0kyV2.2PcfFBIEDCxTu.3Pxj35PyA6qpZrqpAEMVcUhCJw3vQjmI0hmJpoyRgMsiN0UhuLBvul9xHnjh5FKugn9IFpCWFKt3HTUe4p4ph8PH9aOEYhJ6YBmRVgu3K.DzLbzguJiXZLeP+.zDAr94BuKay76EbyLOUy7lpxcr7jh2l7EdOupb+b78Cj8yo68BufyIGyEsvEVfhkdeBK8Qwct8fvrxGS8.VMw0GoAlqZI9siDYz.+iOx7UXMlwptfTuPTGfo2ZnH6Kb2R7tQqkvmNbVCDhq1V+.kZnJ9NwMuNk9+LNeo7YUNn7SqtNegrG735Yexvu54Epq0XsSyWpLZt6418UO4YO84c1RIWo941K2ye9KJe9AOu6f8W+48yu19UZyWYa9WOTBoe80Ba7Uau21mrV6seF+Eke0qun0S0Ome+m95cFp85Rm9MEq7Wskd0dmsYVsJ0unkR201O6Fx670UFr9AMW6YYW6U827j1q+Mmt0VuPoXoGW4qWe+re8qe9W0buN+pxO4UekRA9y2ZWgcJV1Xa4CpHjs+dupJ+NG2riVgmWoUVptQK4IN41YmlK0Xml4WZMU0AqILrvR0Jc7vAYG.C2s.XlnkTOEAiQZv5Hu6HTZPhR6Vm6t5tpn9WBLAW2cWcCQE+d71N84b5jusU+NmVbr2pfG7aG9u4YuyO70qdCX.Ol9QeBgGe+30exFs1GyZeX7FJmJJirky1AZGUE0g8UUjZyZMzPSpWOQMZd02J.0RYa93+vW8u8+xibVpVZxZFiZlO4u729e6QTwkEcBwAJDUrBPh4EyHv3+3+g+YqZE7FjG8q69udsevJlCrx1+0+Uq1nsp6QQl.Ad38lWHdDUJ9XyPyiCOn20OHP2wh+HsBW+XvOhDxSWWkeehUjDcsU.dGq3w45pHLTT3u6a0nvYra+AV3eZIAHJerUw+93wUBCCdrXaHJKvHg9Z14k9hU8Ak9VnwDzLZpJKn4V9NqP8vf4Lbk.nJwcsd5h+z3Xw70clD2ze8lIuKrmy+SDKZtyg2Q.AxAlPFBVYKzTOaKZtJL5vjvdGvGijemyZRYsDU5f+weG5OqczK76ELeIu0KeiTFSxD3y+1vD3aM0Sfu1DNAdcEAMwam99re564i1z2+4qd8d56wCZ566EuTIyYu2+om0Ha1c9pF+Uupd1rY+lrYqmsIZls625fsx+WkEdzwOoYye0Fun9ZOt6Z0OPpYV0lupwSNN6uZilYqb+mlkdxyeV.pvDU0HNg4+3ilqSX1ZCmEKHwy1wKUvT7reySPhmC1pYqC5s4K.wwlHwS1MNsnxq23YmquI5Im9qxlcquBKR1eilMVqQ16e+0.w3upUwsnjMYbIa1V5XMAsKVdcg18Q8qexVsZrrAhIuoHlleZQEijgPjXR5lkh07Shcqt0OVzsdaxKe4myd4ybNmi2Ke.5vn3kuX+BFu7gioHVu7Yxyrd4CQ8a8x2sd46Vu7cqW9tNuV6Sk6.dmvbGv6dkbGPg2FbGPyo1c.e4D5Nf9BFK0FBMpN25SfYuOAJ7VtOAdQ7xVS5878yglW6q9UgMo2l6r9Za9pFe0y6dZ8u4qx9rmbP1rpe0l0e88Gk8Tz6OXO4FkadhRkMnzn+GDfFMRy8lxDSdSHldaaxbyI+orbDESoxm9VOO8VkB0ahNg4iteBtFZ95sIuDT3VuDbqWBt0KA25kfa8RvMVuD7dg4kf3WIuDT7G2dI3KlBuDfDaJ25ifYuOBJFMeDD6ZtOBdmaWUtaWGyamgRzmgRwamgxsyP41Ynb6LTtcFJ2XmgxOIrYn79WoYnT5G2yPo5DNCk1xBCuc1Iy9YmTJhyNI105Ym7VEvwR2Bb7Vfi2Bb7Vfi2Bb7FKvwOHLfiItR.GK+1.vw0diAbDIwZeKvwYOvwx2Bb75Fvwx2Bb7Vfi2Bb7Vfi2Bb7FKvwjgAb7CuR.Gq71.vwcmZfiUlPfiFpCtE23rG2XkawMdcC2XkawMdKtwawMdKtwawMdiE23GEFtwO9Jgar5OtWo5GLoG.W8ENQT6VniydniUuE530MniUuE53sPGuE53sPGuE53MVni2ILniexUB5XsebCcbRc4nlzstbbNfar1s3Futgar1s3FuE23s3FuE23s3Fuwha7tgga7SmJbiIstz9x8iafiS5g9+wpJ8TuE53rA53cnuy9xcK1wqGXG+HmqAtb2Bd7Vvi2Bd7Vvi2Bd7FK3weZXfG+Yi6Ro5y7sLt6U5Rox7k4oyYdWur.cNK35kEoyYQWurDcNK45kkoyYYWurBcNq35kUoyYUWurFcNq4VHvHh38HiXERtkR7LhId2xIdFAEuaIEOinh2srhmQXwaKsPHZaqo9RD1cCMUYXDrO.+DjloBF1bh36.+liO1oBxiXF3FNyadY61rjxSFyOsYrvzlwhSaFKMsYr7zlwJSaFqN9LBXUqOxPc.w3IB7ZyFjCKoErAOuv6FSbvwhcPS4nUaMogFfFv62Ee.K8Nv+PJ0OEFrUVTCSI8ruROFnvfflG6cdZx3KuL2R99WRzad716sV8s4dd882p9Za2nUxvRMhp5FbcQzdewdHq9ZbOjqgROIEwrxpBc1D8h55oVz88FMjA8k2A9TTCwjKYl6rFFcWLC2hZjetX5URlLzxma8mTe2carcKtl0ebiPRJgQOEwfmN7kV1KQL65DwR1dhFqqNXnpB5GoVjJM.O3j4gJx32.YCMphnVfjvSJ8mPdYi5xx1jQ2gNnDhn.mOjndmNikKPoAKLcx8IJG+RXdNgW5Vohk4gm1THBYEkH1bdrgxK2YDZr1PypUp7lWXL3wmWHUr4sqwK+ZgSE6ppMH7rSkPVJHKz8kOUQ8Xpb2VSDAaXa01BxnI3dRckNaJJJmxS1VajggpRjxX3J6M184M1dulMhTmSllK8Whl33XatPowkVp.Rs6wZpiFNdkTOYVT4TyrxgxbqKTL5alUarinrZMgV2ZXpGaWtGdz3DLGrWSt02a2Cpu0tM1ORxDrJFbq7FXWG6T3iVH12S.zwvyNU57RjlRBJpfmqBmFNIyGRHKbA1iQgR.yDAYOTgHXAMZJTPyMT2fZls8M9PMB4M4dsGBbIAOdnjxIYKN1dL6r2FOKpcSbb3EVoyVg044oVjxoXKlNSxD3+3FSRyG8jVH5IsXzSZonmzxQOoUhdRqF8jVK5IkO2hoQlFLSr8+FtkhF6zbu8qu+K3db88WKpXFnFUHX0b5D4U4t9HMgv6hfSg+YbughJiOy3TwR.ruxGOqylLDIbKSC3eiEyCxy6X6hRVXmb2Gfc9Pu+AM.anIzqGfvkC6qSbOW0Q5hbBJc3fQc04VWPVF7UL2my0DY.wfiLaXwjAP0j.6nOTnsHmECk76RhFJhK3Fby2tc8McFgEUdjEIQOBY1QvuMh0v2i2OGP8iGALe1bq3JUqgpTsjdsnUhPopf2Tsojrr4D.33HoheEeJuwkFnzzoSjcZ7isLPycnMopiSZty2byFqmKW87atoeT9IpmJpYmdyLTN25k7lbg1FRmJRRKuE6l67ZkJyWN2FE7O4TzmmP80WeS7etSujhmB.ROeNZxGMUALhOLPDIkdQHKRJxnFBttiTZCy7hSWUy.o9gUgSkFmDhRH7mL..jSYz.ajNCEzzE2B0izBxVVT2pdF84VlqZ5UryHpWJWJXT+bqvIw8ENj.8y6e+z1oyonbJtdPBMAUQ+VLMeEgluBQypn+glVdoG7GlZYGNRuuMKenD283pxcetWcTZ1h3Rle4.wijeLonxAI0W5zXwJKmjVwGKqdLpp2DPy5x5wj2jZh0solm1SvPlngn1.H8D4rjRGwyS5SKvVvKPR6k3CtYkB8sodPnsuRc4RYzWBoG8P5rdnzQQpUzhijVwy6OFMekSBpsz4a.CPSJn1wVzZhFizTbnjKIyYnhGpAvnSXimonzGHIoOURdhnTu9FoRysDGu6zcJU5vVW8RJ0tc0EMPoiwJr6TIaYHGkPVi5tS4PgNcPVIPoqj6WcrJZFfCZZmf74bmBcYUfURcFpxjG0AxjXoQ878Psyc+fNG6otc7qb0G2zXCLnH7lEIqVD3rEXU5f+Eu7LvWLWHD3qlq3vhdHDzaeOsNXGfbXtLb4yvUHCWwLbk7Iov32OjpC+gNZIdR8POySto.qhvvrsQLkF8iX5BpIbFL2S7P9bsgEujJq5P..rq3YsFcLltlx4LHEqkraAWxUC1Rb4xVhp3ftI3Fr6wc5g4NBYqyLmNI4zC4Oh6KQ+Swi3dj8S6.tOHUe11X2EWZzqRwidJPizNDm6ASMcJRSGZI42NRnC3jv1Gnl5bjtVdphaYnQchXVmuW9nzTkXFtyyf3YJIHR+jX0+P7aNJsWU55npHsh84b2mRpm+H5pAzIEpAQuTXoVAf0yuxrV9ZVUvTC8wRPsJXo+Rz7CRxSxA5S6hoBRpNQxRJE0h9q.bUkbkNJRUnRGEZOLbkZR5Axvegjwi7yHAdbgNBFBYQjQrsAXbB8M2saBHqO.lLXHj0TGozQOEuejqW1iE6IorMd5oFZiDoRTurnYFIWWVNk0fQoV73dDfoKllIg5vLxfmSkTICwA9jXlQbolcPPHCvD+wZBcjPVUgzm5P+KiLb4H+uyykifsF+y92KakRtQyQpZDinYvBKZva9JmBuJlmoNBUMpI0j1UYiTyNitry3LPcXiKXzWEMqxigIBwTRzSMJHona3YkbgFyerUR.NHGMt9vrX3dDivv0rmRy8.Ould1Xo8BPyDkw4DEYDhOXTokLQ3DXxuvI47gkbLc2AIrypInzSL0wn9b1V1OyNifITmdh9vk3BjlNWPQm9APGOVc8RWu3YwplMjkkFpKl5Pfegxxg7ze+nwQQ+f55QwRV3XzbKNqunBGtIF3bbSs4B0lzMJcZ0gOiEoreSaSeT2tRmuh2t0d5PYHdtgO1Lry.rlborWgsLb74ckJKzrZBCf.wD0lgQMdnKt9H+xE7Z6FYvlYJL5uCsgK5gJGQgP2Ei3VLg5HU.00gHJPkxhbcVaQTmEpGLPeQ+XKRqyCopT2mawGfR+8Ib78CP9BVYpKK0SQryAHwZJLcxfA7hAGf92yPXeygFcaw1HaqZhcVCqrtXXSjcxluJwQX1t+5JOw0cZG4IthLTpK1gCkWi9XnzPvcRlaIQIN8OVlZ6UZ9oSwbS0EwqtZ9b4lQyxzerCS4r0grJdJLCMRGyO+y49LxuQcX5EtgL78vtNLWW9b4xkMmecWQCJsUmyCxXv.nCw2fH.oHCOcuvNcW3WIYzQk6gdADtxLXfeSChRc69MVVDENVOksK9PEMYf5z3A6LepYcJsOCJARcB49BKoXZOIxKef8MpsPGSfU7MQDot+cStzySDkQVkbXIj5yDxSPdskJlBCLLDWxhKPyj7K3XRIgSCL4o8s7FWUjoRYkPTadDnF+3DXWF93ZAqvqINDbWYJOCmvvseFUmwf584sPWheRKPeL.zVVp8InwH9M+FtwaAvS1hVenmpbL1LotOts1ZDSDVNXLJhulfNrziXgMyE.wip2oBxX.N+9OFV35+10JK2mC3jjbfCsqp1.AYoWK1IkeVC71izoE9TKokcYDli3Y9g9YPH75Ah53ZnZCgkbtGDXGcRqtdeotFandlhi5hFLD45f1f+8y9t.684eC1gkOB.45VB5V1fRFBzmiF62rLLha5UlhRqceXxLcREPluLPCMyl5atnUeyMapu7QqzvFlcJsWLkkVtwJcCmUmplFePDZqgy6uFd.bP9nIrxOAMMAWRiotFVsJej62Ni5iVIZBlJyFc1J+IuOZgnUeKLapuElCJ9ElHE+hQq9VbBrRDbIcET7KNQ0pRQqVU5p2ctzzTqt7p6vAbzNrNwgU1dbXJ7zfpBNLdPnOzMoVp1VAaTFNrbx+XgHP+G3uqJNquDBqBwgEsIAVnNF3m41dDlFLHhylLLzaQ2MDtiQBplODvMKBDgvl.Lsxj4Ce0Q3oPYIkhJHxw4diP5AD1LTb4afOyquA7gvyv.AXxVxX6E68gNwbbnKwL1AVrdRJjjKXfTmN1Ln0OLelBYJloTlxYpjoZlZ9SbemtBsNbcccodltUybm7vpidBQK6DRj3bRv5jVUdv1TcKNMkCOe3IGkgyzIrg3qUJ1ld9HmL14i3zpiIgsIxTTTjdw6wIxk0sIwTEkjiwMoVlqPF.T4ZHfrKfedDH5D4axuisl3z6GUuwQVjo+YSYYLLUufcfPncwohyHJosaQICCfcUrkfvgCvCFEYtve1.7ZrW1XJa37cbFncqtrrY3dJoPZDer8T2mrFwvLr+cIuBFz+t.BhMhQbxJxfqX1sCdGMzmEG3xj9DKsePbYgtLQQ6eyuHtqMWheaqkntwTXB62oH+PsOej2WKO7gAD8uq8rCNXuca8.tcd1AM39btV6s8dbAmCmsTSVMwdR5Hz.aZopuHrhMGn1qmrHIIKlgyomXFvQaoMCCXbjkR78VVXEjWw9ovXoBnIe57jKvOgm5ImgeRdpmzG+jBTOAbxV4U3RZ+.I88TLKQLHHXjQdmzCq1hY.z9PRZeDNsTKQN2Cb8DT1SjLADuzvVWGV1yjInWWPGZhZERPVXz8gElSry9hsMPlgkEwAQwE3kxpOZvBbJwzrvFbxf+YfXeMg2fHfvhIS.7+g4NOe9b3+vAywEjfHf9IHXw8QsFBnoUcD2CnxlUjFL9rAa.tIsRfFkPW+Bj0kgHTGckEw5BISf8aJTCRmLw2QXFnMnGjZxB2fZD5ycOtbYKtB489DFE9y9zOAw9TzzohXQx.pKnrwSxMOYM1ymglNV0vKIJW1SU86RFRLe3Gyx1nwJqMMMkLTF0sPOIS3VHdtQR2KUMn.6rH0lEC0RSuCxFCdWgRu3zPaCjo5jfx4vycDNPYSzKbubsVkTF6r5rNs38Nzk3MXp4XGn9O1aOQh8dIfo7XNyw9Cja1Li2ehQNyvXmV+ElAxmt6dqgLOZtWW41t9K16YGDtARXTz.LOtupgf1Esjk5Hp8mByi1OBF9vtqVwbNoEuL61uAVFSasJwtvD+fbxA0EXFd33zJEz+tXNtgRmi5LjloLn0Yv5KNELEC1FpWP+tyvc5KQ8Fn9AZaTLrqjnYsDen4klhoDRSRJpGbQppNt2C9vnxJiM2BmvJTDEmnFJcXRR9r4cmDPx5Pu6ykxNiKQ8BfQrG4wALOcOVjHTuuPG0y7zmM24EMMJa2ekIDaZCQ6mFprQloPhKx2KhrHPh1FMq.sgYeUzE1bN8LMQkL.iVLg7G03dnx4bqxJSPIh62fsGmG+e1439z4.BXO7ONJrZlcIEXMZeoAb8QM33AL8Q9YY50tT.02nUJHyfYyQUTlinAqKirvEiUvk67R1iH4mLidDqoWBg0dqUxt425mv23yVy9KzxLz7skZC6CXbv6YqTiiQ6MPVtfy2NjxMgX7Tp8hJc779ZEn5egIArt6sgdz3dOsU0IcLfNBLEwJrYCBY.rL.mMcTG5wkMD6DRYQwrLYIjxgIKHXLjc0jovxFhHnras9qOBucq1byZ0xkCARj7CxliJAKhPWzg.KDTFgnsLEQvkAWkxXJOv+B8YdrVHAUEUPuAishG+CG9IvxPp0AMjXWNEUCNlE50ZPbJ7UHPlgN.ODlUNYAa814mTVu6HoOD0YvbiYjzxKTVH..j1KhOMBbASxJQD73eg6k6mlrrw0lclfH+dwsoB6L5fHvjte4zR28cQ2vHxhquH8rx8ASXDKU3GzwC2kIcKlO.KRI0PpH..9IY4hQ5iLEFYZKPKwJSLdP5PULaNF6mzf8nXsfv6Y6rh.rjh5HnoBGETjdhKkKa0LbGRrIdDoihWyrIH1PKTxBHMk8vRb2mOGiIQxSrxDeot3+xPrc3NSLOIYhiblBWjGd5RVLp1m5G.LuDACQEFeFxs67Bm5GQNqQ.Ya8mswV6w800ediM2a+cBGRKi2JBZp+8GM3XEAI40DZeROrts+PbS3Z34M2zFdSBpn1m4EXY4DyI6ORNHb1IX4gx4XfHXg0F5ebdSUcIH2La6wD067pQ5jHeYnhrNJ4CMSmMEr2kakMAXu78bbXFDmmbM2c6VDqSIFB7SpEOGwtmaGO1oW4dKS0mCOLw434KlKi8zCvaYER2yoTLAdDN.wj24hvH4L2e1YETLj91Qhm0Gg.DZGWdYBG6cVqBj3g.0QAl1BLORtL34qfpzExfmmBLka.4Er21LmpHVxO40LvhzzLOKmH8L+Jfwp8FBYWPlaffVOvYOZnQaE6zSLoGSpVRDKQw3rnxNocXAzLGSG+c0gKgCSGt1pZJhZAX+0Yx1A3oYKotcH+aJ6o9c9ibB7eXqDFHsVDyPKZosM4MJvdGwmFENTqR.MKI70iJHyC42rR9xYvSIlTmxvwH+0GndhHo1QTsnrii2BK3MyD5KN8lb7MQzNuFBzXLSBQDzwZN8IhT5vrm6lDQwYEOfqU8cZtcCtFar0A6se310wdQ9J4qBD44yxsFrj9Cfi7115beN2wHDLlJqtaLyX6ehL9311MbMW99oYmm+F3wjKf6StunNZRzK2BI2DY8jfox9YKSlQ7Csz16eOrCEs367Y8LuaSbVsQ4wwjkmw4uWd7GT7FgDAs8YMecVTmKKvCPgv.mB3jV3jsoFDH4nLRxUFLCQoWKYzut7v9B1VZNVFMfaF7b9RCLFBzBYeR.ekYhxExx0ZjxIhJbZVmoBXtm7rGhKorhmOT.rYmh..pPNZiXALO2nxbjRB2a07qntrQfJ8zDAWllMOhFbNTAu4QveOOMEcdbgih7boI4fRXULK2diP8J3NV70lKlIdkBfeEfrJ+LRVkCUMwkCVRQ9VzDT1jfmhDH4A4q4onl8Cm.YDNCThnRY4pq0lUYRPq8A8QSKwt2Zt7qP+x8E5fOTPH9jHWI1Wh5zAujfsljZyNdV+f7uPWPquQY+33d.+fou+8DwI.5Hh9mTlEXFtkxCcYPeTI8JAOftsv1i6vPUxpoY5NiKObgkg66tLisTgxlAZNeDlMrMcuo+JpadPs.LJ.dJatB2C8064qSEI4SNnJZUrOEpGoZZJ6oU9a9MTS3L8i73sO2KNV9L79HQHrkGQhk9T4rTdm7yc7om9UnSEFGfUOBWlxCI6PswZ2BSbBn0DEmXuzQYq2dYtrLfflc7n111OxU5JY+vopB1ZwkC1.B4aQy.hMMfJrMMrVIMrEDKxY+vIvBBNCTBiigC76.DFUlMBCTWyLjxwzZ5oSt0zbknnA1x4o1lSO0wb5oi2bJsqmwYHioiFxUjpiPkrTNnsipgiMxbX6.lqIw8fEs.0Shm5QdVjBH8nrAqMAbTFHjKvUivFAz91VnQ5RTO+avO2iuVSeO.oQU3HSXepT+BRpc6lUuo9MhMHFW2.NXEbqZm8gARfOogIUMK25HUMzP+8zTUO0AcI4m9qtVnzrYr+hPWWb4P56R95D14kmlHP+Tx2ySSPmGOI8ew4fRVUKK211th1wax84rWBepg+MDvCt6LcMKuL2m3c49TCka3wMmjlee1SLOJBtSkIC95RTx7y267K5IpPu72QveotmOtA1Ont7.p6E715P6ZL9zCOEMhS87ILk9owaJzSbWgSk5A1JXBXo+Od23IS5M9foOXRCNDg+Na+36DtLtcfOMkHduxf3ukEaYnNbQKsD+hQLpC7ynD8uTIGhNLvYyoxEv97FuF.QlSgmtXHmuaWMFUGIG7kQubkjt4IuwtlOsTfL0+lT74kaXsmInNYsIxfSIWwBKZknU.1J.xScd5FZg3+AN6jWdNm8tis3bNTZCqXrkQAKqoEgoIMPTU6fymWYiYtcpDgz.6thZ5mG5+7oiO49pZMM0yzEY61++Ss3Nm+lTIBDW30O7gyx+vTb881o4d61X2C31uwlM1uwtqiO7NcNprmCEK7edOCiQyx.Mtsxi0j5L1CxXpzBV.7gZOWR7rwc5JSktEIKQK6AEMP9lZhmF5AEsUhbwGVuZWxZ9Ed9gD4S9MOudG64TsE+6WtyGgbm2SsW9XhzwT+qkHZFe8CjR9lZWbDjFX7tsT5pFJgrRjO425VICNJR3GK2XmRyZmlXOyyDUGK8V6AjbqPdu4Ve1IA.5bpwE7M+GYl4dnVx8QR.HrrndDBvA7nBlOxP0PPtkrJ97yxNK2yNorbBHMn3OcQHRLE6Xp+SumevuGivJ3WSU877tA3KWOwSQ8GVWncenT+tKWYtY2Ymms8AasTysq+hF6y05EsNnwNyiRxyIKKdiZefJ0Qi8PmVRmfZEPOQ8BtuD0F.GXGzOyODFoIY2jJveAoxQQoUbR8Tq.ZucYr+VPMndSYXZU9vXg8dJ8UukiOVuoO4DrS2ngcv9RiXHf4Ud5byBIbWUNShy0xrRsXZe4EOBZzLhQ3qZabfJdGvjx0.DoCqQBXh8IUj8TrVy40w6VGqi1tDDviItbt0i5w6u0Fba9rcW+fs1a2VuI5L0ClrLxpknrr4I8mDauHyytFUvMQjiFoeIscNmjngWAF7TA6JqppQHD2x1oNMSxaiJQqSWV+TpbNngnHgGJXGOUAPB6CJ2kssSyPCmUZ1JT2IeR1kdbGRovfj.2ihqcV8Vmz.hf6QyW9kHGR3bRuAQtBaJLI.SRHo3nUL0.8oobcmdvlBB3r2lsoDGYaV8+o6xeOpw0bIjHjxbW8Q+FbWGniL3eYcGBR0ux7RL.Rz1R5NVIHe5dBeTr.YhdtsESJ3AT1vnpP2G1InInivMmD9Et4VVy8tJFx1LiTuIaKPWuDuV7cMo0hOvMwOztfOJiOYDlhPnYJq9ni0Mfk1Ik2riYtfyJti2dcSs3kKl997Y3ldBjc..N2a9S6WcpGdSIhIAppYSN1TdIsQ3Kc9JNl8hVCgxHYYenxk9z+0Jig0kAFWsyNNCzlxLSdLABI7oh3Ez1W7.2mawWtHtKON+YojGLp7l6+FR.82Ik6w3OzpfNJsWseeG1BZCs35rVpjYv9RzbKsvL7KYmCC6LRn+XP8YaXkfT9O3q8YjAjFqCqebzdFTqXvUT.ViOJTXxqizkrKG+T6vToCJUXemxprME5ZSOWd3QWc1yOk3f4nfTqAGhRoQukBL7dpdZBC6K0VOikFZF7HMjg8cqsepzqIu.L5yNzD44VwQluuiOj2gizoh9+NRvmQMPmivfpSXmMHm0lg160SWNmrlkzjYozRNpyR3dC56orUTMD227PS1Wnmn4s4zs4.0cMSONLVz8V9YbDxgOlncAy5BT21FrSl4of68enSAf2zRd0v.4hapS0I1mgcUfZEbvukuhGaJCDN27szyc.WafBA75tcgErYBGg8tifslK7M7NrxU2TKNwNfkLeTFq7l1cVrYORVDNOk4i7MKW5mUOJMAXlAzzBMPqUIrjE64uoyoShnpI0SRQP9EAJSrXNqkTrI9BCLkSFc3KDdX6JguTQSbfvvgh3spgiVDteMaAbOtTNuG2+sX5UBpE0FttsTKOUu.H6KapPhkt2mimrIxJ6ljr+xxxFSLEWspcLE6eh8eachEsvBjYKAHZG3UuyoN.AHq+fP70hr6oC6xZ6UAGsceOf55Vx11hRxo7GvKRF6fxNsKj98DM2gCKhmS.fmIE8jDvMIHjNbpcwuzpbsHCk2+XlVuEkSux7b9yMquE3E78d1Aas67wu29MOyvN.LrZmoCrdqcdLqUeRfOaOSqflM2Ua1S3fzzd7VRw3d9+zp0TLE9XigvEnAXBDSnUp+LjUJ.ndfV0HGK.Vt3wg5z3lgwl8yyVq3GodBwwofeJf74ieTC0HBv7N7iOS5w0VVnLI7mcadwdOPYyPikTEK5ukJVbp9m2BEX0kBv.o+F6bzDxvUHbJD.jR+wRNFdgc2mDfUZmXBniXWgQx38Dumpo0dmyAqJCB0Ld.k5ArYtLrfSwGp4dXF2gXfktJLO9LTb.aLGDQo.Uu.xlYjnYg2LikKGj7w282ASKp+CQM1Y.w1.wyOqY.XLRxx43x+rAaHUvwPp.kgzbN6L6DVSYpG2.4PlVKCnb73nGRt3Obc5lmwyYY9Q9LkBOkfjdiACMtHUZ7rJfUa.yMgBsFzgY.VmIJHowzMbqqWSwPawZSLBZ66kYaXjdOu4YRrvoBRxvMaRK7pw+Plb6Ao4JdYQu3UqlwMUwmcAQ.neDZvFODeBic0.3i2MGTv68fmmVJsDkbHbKZ1MqPPjiLDGUfz9vcjsdgKBQNySbXb7Oi.AY+kPPGsCtRkuiW5vW1aI7nVRatYipv+EwRxRPFgxAeDiXEp1SfLibx5P24iRieYDdfiVIrJTgb9OtP.UHFNz5XcXBjd0v+4sv7cPHFommByOWsgMsnF3DufuAAMj05BlBlVpm6CiD9w3rnDEb1HonhKCG9ibYy4c3F6V9KSO+VA+FOGhZnmTe2M1tw9yo3Dx9FMF6ZL8.mBU3GgezmTUS5rjbeocXeDrKdtjg2wiCI.LBwM3VQFaP12i1T0BHySyT27xg3Pff0CtH.JVu6KdnGu6x501O+y8egjLu8IbQbdJhegKh6EItOyQ567uznliILOTelmo6+7u8TZE+yg4Q6ZBuGZrIB3m9Bxw8UJg+9d00UBgaMwnqy3CXhIUWYtpmLGzQBnKx37VQz7UwXTBCHZaBdk+7bHb6MTbhdlGKIi3RCRGVKdthPBMHcnm9a5IhKcOkO+hcnvtZVFW+xf5BeYHSCE151hWLtwmVWUQez.wNnj1TSTWWT25HP46V7DwKVWsCrh9kKjuPwKyfO1W0f3AYawtF9mr7zI6YCsjXtSVI5jsO9L1x2zUfNcvUVf2jwW3Rqig4FvFrw7fUIvprUU06nxjSL.mHsiroL02Ts8HcRPSE9JpMYCiiMmQduoO0.CYVcbB1QejOgiaK7QxTeHNZLSM2EhFlmxSbBFb47LoduED4r718Rw6CCkySUUA7XFSD23Nat4XRyHpoS+Ab3S5jAvVeBNTJHXXrOKqfyabjx6wpmm1oN.sFlM6.eiUJASsAwyfeIfR0QYEufhikqI2+3I7b1O4prKEVYSOrFPuzjyTNa87HxI2ORbR9PkBOzIV0.l3YCmPYgqvTKLFovDHRXXJmd1QVv3hs7pigUtFfxrotFY0pHZZY35np7OzfSVUnC2NaswVTqbrUg+YAW5P71ZMNrU5cCZarXusx3JjVEGliDQh3YtZNlL9DtM5fvrrDBRgG.w0yHjotKHUVp6QKzirraXVaBuElG275WkAegBvHU7IUgHfB.hieDw24qfpv6hZzMaggpnsbCbjD1YXfsDNAkNtaymZjOSLZmqR.O4FUyzgjwaDOGFhkfTzLAX3+drxZWmD7NrhNR1c1GfTVNvKIquNUlJAKszJyr32Nn021oFsKd+YNY0nfB2jqxxhO6VZbW.Cvx7uvgpKwwG7Dwnxy8uuKHoQsoXLgS+kdhK802a+8ar9An+ciF90TslydNZJaobtu7X1FF4RuRf5GNEZ9YagxaWnQYCdE7NAzU2QfpQYGeENAo5MDNAs2CX9SOuMYQgb4GO4xSQt4jSF2Z2sNXq5au0eUcXWMLOJjoYifLUa.DucCuLvsH5mh2hnnoPcrpfVGl8H5+6eZb1c6nUpBcqNZkHXkko+MY7LTiq5Y1WELvFoAtRQbd.ruVcJTrOW1B6ZnFJ8PcUMO7a.V1xLpUZvNzO0RXuuSQB7oc.hGvq5NbVAlAN1qKkgqRFtZY33g0txI0JiFXl17EoeNF3B3tbMLc7d3J.9Pmu5laVeSvQ4ER62QwEaZJllojGhmrdmnWFkiPYTEJijvpMKKnaPhJbvCwvSjzwtxdKEcI.MHIBrWwNw6Xc4LCo2y1uVReM3nn.QwTH7jl6nMxlb2IL5f6GJyWx8K43MOhGLCWXxBNhAJ7a9MbV+n.8OJS+ipz+.GgEHcZ25WAFeSeWR2Q2D0wFp8A1I97nW7h.W2VX0JIJHqPmdq8Gju2739d42XQE+txaLIp8jJL0HQiei9+T2fXVmq+Rb2ygoYesYqD9xJwa6k6zRbWTGq6ianKk8sQkclvyLnVM24kJnlXTqPX.cpKgbop6t1as.g4v2H.Vx3LTsNH4wQAbymaVYC5zWf9lbgbQtXUyeD0cah4Yzcd7erWEW9c8snk1cZ7c8EMqZjirzfCzFZFZyMKkC9OSFpPY3+bkab7EoNr0HstjHH3vhjSm67NBOjDqJq.r5QQhmcHLIPYX7dp2PSyNbxB+xwKnJLicPv85Of13K5A9bgKNoB6KCnB3o17Y1b1jTcXB2sHxqGlmzfQ29TjowC8qBG4sE3x.t2wmBkeVQetiL03Zf+a92EXdqKkystTtYhtTv0AVchJUXN7nGS.p4TdQnS2zplhrlf+yGwf23awGETd2JnEOJxBT5fTgOTYpmiU+wWsJg+alUsxOqqVW5+.WLnkL2vO9WocWgKi+yuwTHAmZcMIAYDZ6p9LvgJh2O000MfMmrryQbUvgY5hqCwXOgNY7Wj5wVFODyUKJK10XQ+N4i.P7tQ2EdnW3bZcKoXufxTqTbNWqNrKzZzKwKapufN0NgvmcqG1Tkh09Sy0sWgKP1vLzVwMXG5HajBtGUTOkC7.nFPGiTo7fJ05NZ9B.fpm2dOKHjoSmN..ST38+rGZSr.T8vEfNEvPWpGLSdvjVqLNMemqiYSHi.iXMmEzSr9pqK5VVNCNGsfnJLkYpceCphl+L909yyjYGgd2JALhpegBQ.WImytRZ.HIe1vwVkCqjnumluL7Kfj.lTnakkqZSw34M2tp9R+NSyrkyJzGEcdm8hBNNmAWCjjIROfDYqIqjgq0EJnNbNTMCW4hoC3.HytFpvNwWSB66rnLuR4n4Ry4S41tAgSfo6tW2tqcQCRhsxDkzz25AwIHVmgb93zm6D29.EiwiO+ekI9x2a42V+KYxDvpDws6dGXcv2iLX1bq56tG296s81ISTejQeUsGv8rVG7TvQi6Te2mUe6GjLwRbanN5XYQt0gd9vMgqPmNK2QTVzPjS.6WBHQfBgNbe2w0Q5TTOnNjqnAMQQv9sg9CR.C3wkXouDuVlISX+2.oNcPjGdCbcQ2Vx3Bp2RtcGfW1Yjl.Y0CWha8c1.QeX67RtT0GHfFQ1PRe.9kGr+13Bg7NrmSPrslnr.bp.rrvw5pxiPOz9BIAUeQRFtWz3.6y1Ey5NwehsD+1QhvE5kde0Qxc35Jozwg1GeAQWjaqMxvc7HCDR6yLkSbBJnmh+A2NHXpB8DehpbGQsGwgFLCYF.DXBiLTGfXs13U1DtQTPoGVwnjIV6YOtElOpy0dzfQjJ.GFnBDpDhZZnoxLP3D5pZGMotv0hJmNNbdQjTPm6LQR7IHAbmlzqgSdPnzRgueVzTQMvCPl.QTQvv4pdmzfhrJzF0dhXJHwZDbejayvLb5pbcDaKM.0++XQAiVRuVjhgPR3uAx3wv8dOb.x2AWs1Zml6u2yarSicOvr50grLlvsDqHdUMw2qqKw03bT2yN3EHmqOAREhb74qfqq53EAEyef5l.G393gpZFVz7IK+btWqB27Wpbh3i.Qq2fEUfIAT+fgfEATESVFAmwf6LbaLhkUjZi0b5CfDQsjp3a4D3IPMjr1rFpnNE1dGdSDqCx9CfpAndBMpPU9sYSKAemaDo+31nw5aWee7ZOz5JPmjrdr21LO4nuLTG26JsKxbaRiOAKkkFBqVTCEXakD5o8GaRYIE9JtB8NbujfHBchvKJfyoUoMeBmUkNjE5YCKRZfmT9IrRA4.uWS8rTGhuELPebDbWXjMu02g6i.7K3ImSxQIyUuJYF+87WkLW0+LSKgzv2EJgKibRyTIkhP1CSNwbvRh3qMLGsC6QykKlwYDQ3FkwZ.RNthKmJ+83yBm+5Eg6yE32Ki+sUZWNOZXId3cnONfIm714jGmSdW4rHNmEwevlST8vNu3JI4Y14Gm8p3rWE+g6rmmN+4sHPdaJfI.eYLE3KS9zMM3YHBuMU3sIClJEHBfB4Ie5lJ4JyPF3mYbdClPGsBlPkIxixEIedf0AdIZVlD3OIHKdF4gN6UmDOzOKRdWdELQrx9wqgl1KWhDrmykXKGIbNqJQICornS+H6ggodlNZfnSNP07Xe0bpMtNhXa03qdFbxzZcHhQ+t01t95O8k.5wVDOGULSkL0xfWBwDj+6pMFvSZrcyF66bx5wcEWR61xhBJq2WRtilnh2ncf40lG1CIvKUUa3g.Xh.ZwvYBul0jUgMMnMgyDZNaf8Jx0SDrx0oLi6AWE1J1xKD4NPBYa2PXvvsTHmRx59dFX4MYvtSZKkllmCfIHy.6XrtvC4LeGRqxRY.UnnxLg4JPZthxHBaRsMU09pQHX5hZX0oTXBYG1FVL6tj8O5whZnz2TU+E9xqdRUpKLYRyRm5DHL035WrD2EV6TRms3ncXzPNQeHHGI.5vkKfPyFeWv7H5koTrYVpnkl5.tAF5Ez3WbcXA6W+uD9bC7G3u1.9XS7G3e+X7G3uVG+A9qqsH6gxmetczgQHNdjJvcYYGycdJlyNjJWfiSOx1Wjqvb.UYkgYxQ6g07GaVGtv2WhCuxyblK8L2U8n6vsxv3N5NRPux1c6VLWw1kZmFGGpvcKAWpuFhBBxrERS5DfdEnPna0kW5g7qvI8Ed7t3xzZclamGbQl.7hAkIQHXVfCxc8TR+RTSG1j.NcttDMKXuYVA1ir.0Xa9loE6Vcw1jc7tO95T5dNbjO6GdpcXKzKIAzViqvtXitcIKsKIQT2bl9sI6YKS1eAiWiIxk1B19Bxc4NFMx0i3RFZ4RK4MGDyVFSySR2yEKsrYpAlIvW4610DgOIsocPBydVeUDXdfa8gWsWeHO7JJ8QmUQIN.NE+lvXzKSOiFb0UGVxl8b80lG8UG+dDMAkSuwNVB6WI6tVVaRc.8huClX4i9UrRsg9dJlo1mgIoQ97H6EAYIyAgFn1wZK0kwdrxzbOvJgLkR2tPwfKt6GPoYSB67AWeSIH2vslcFga4Pf5oPeApd12BD3w.xfKfLjxKCj8zVcwlY5CtKXtY44UbTqUz3VT37GgLhVN3svHmRnjsCb.8Yoh.+K0iszEf+k8w1Mdc6R8BbqC54n+EdJtqHK8MMXXFtyf6rdHE7IZPSHETK0.n3gkehF8kMEdgegW0RbovBp6iOO0Xg6Xl0yLi0pnT5c6RW7vgTLhyMqJJQNbDMSq8dpGHBdGw+hLDtIiaNkXWkAQfMUBbTbmN9BThF7k8i4VgMWVySPlDIB+tvBVP3iyIV73hl1UwMljchxifiY.HvNxVoTZqw97OreBfEr2w+jNxj.0v5Th0o3zgqocZT.3cGGbNf3JMvRyrHLmgEgH76ybwvvEUO086onBh28kBDOOrHUxOlbu1a8SxtFgv3Ir4nysD19xPOhKWPkmkW5gD4Zbs6kKKZPSTF897xkqXxAVszGdtemqODR3yo6CE6GtRPa+Z6gap9GPPrXxFAz3KP0J6K.pfudw5HncB4lXMBke.Q+hf4QhgEXEewuYgx09clg5fRGADflcTUTct+rMIg0MnM8Rr3yEykMeiu48rtVrgaZbxsGM0MEsqSRK1hww85l2T2sEI6mU+JU5IjwZBN834Aq3nfpSYfZ0LHysuiqs7xXFaGoB5cl86cqFllRyvdAqCoWoKy.NdIrtlHzIfxsggTnDMV1LChEuwxwR9cjKwVecHSFW7iSc6RJy4V3EsrjOFLdjZq6d.VADA9W1sVjfRBVukVFj6DWynLXPGXaTh527Yz.3d.sirvShJvEBDM3WegSkP8X3R0Z6sZtLbyMj1pLkzwkWcqUBztbMzjgBlPaXcD+1QBJFHQjN3TA7xPkhrzhVKmn7EfJ.r+FGZEHZTphTF0kzqSPHYGdMll4QE0PMjxdaCNgdvzHM35Jf2Pwfb2ZmeZt1bvBxMP3DX88vqFmIWfOabZC6EBy0Ezd8DSAKQltp4pUAiLAqjJjJAyMiok9I84KwWvkxslE9RbDMinzD+m5Qm2rOFQcyUrbDHAgQEBlf1iz3Pz.SqY+Me5c9YrG+K9lcvJLdbbFCItO8OnkTgOxHpM1mld+poZFOGeCuxX5kTeS3hYs0frhlJ1WacJi0jfR0RbmZwyMsO5eZeASZuH3zFXv9SORoiXCAMRSn2dJxWDAImi4YyDlvbW4aVYniGr.pw2myITp9F.PMsgkG4YBe3jwNoubVFZIBdS.drVJPMrTz0rAMgCiZ8M5YXZ9L5B69LyMvtDcpzu3gbAzZQWOegOyjE+bOHysKBqfXyFUuM2YVvQ3jVzGJ5Lqo.l2tI0sbrIaFwyaKnovaxfo8KWno0MlrgjWNZ23YsrnE+eIqopP6QynaxzWk0OtjuR1SZd6luDca2xDfd.RsJS.KQCrftyxYLmTi91Ow5hwgpG.iTU2QFglg2jJvYL3fJkyXpS3OXCmFbNBz9gc7+EnQPq0wxcNc4WISgjYb04yZzDIFyyNH2AijkW1cVujqpGZpuwFlG8aGrG0ByMacSCwKTJLdhAKWY2vgzgsDohqhgA5zEOEkSYnRf4koJY++Z9rCtXnH6CrziRQ4BGp2+byNfob7XSZFexnh0HGKK2s633YRJbwzjGh457LOwG1taWKNypEibc3nRpOtdHI0yH8km0bi5GzX9no3pqgk9xxKCm2RpxhYGpAcIVDjsO.ejyS6iN3jn+2v0BeL9bPKl2a5IU38MPXT89VTKK40Hk.l2QoDfjaG7jsZwg9edCgOKe2O.lEpkvgYUbFjkYvJxwBLspA973.Q3udu8e5V693LbsdxdOa6M3NX+5q+Tt0dgY2zs1fEiix3A3LHb0eSSOWZ562YidB95qqUiCN.UUZMS0RLuoeYB9ovOFARvFTB32.8HP+eujJjKWX+JRKOk6kKoitpwve8bhTK5Hx4PbZvtixJ5KdnU3ZbO6fz.dss+WCL9Obt.8rVCLhVseImdrGPHQWS7W73ScEBo6DwhIhT16zQrSKEwygiXC8Xwh8+ODagQrK
                        

                        ScreenRecording2026-05-17at7.56.19AM-ezgif.com-video-to-gif-converter.gif

                        Sonic Architect && Software Mercenary

                        Christoph HartC B 2 Replies Last reply Reply Quote 3
                        • Christoph HartC
                          Christoph Hart @HISEnberg
                          last edited by

                          HISE doesn't support MIDI 2.0

                          I'm living under a rock here. How wide is the DAW industry adoption of this? All of the hosts I'm using don't care at all about MIDI 2.0.

                          HISEnbergH B 2 Replies Last reply Reply Quote 1
                          • B
                            Bart @HISEnberg
                            last edited by

                            @HISEnberg

                            Wow COOL! 🤟

                            I think the MIDI Player is whats needed also... it just wants an upgrade into the MIDI 2.0 future 👑

                            DAW's do in fact purpose Sequencers and Piano Rolls effectively, but I think they're a little lacking in realm of fun easy fast inspirational music composition, so I want to fill the void.

                            Took a video but the files too large, next time 👾

                            Screenshot (435).png

                            1 Reply Last reply Reply Quote 0
                            • HISEnbergH
                              HISEnberg @Christoph Hart
                              last edited by

                              @Christoph-Hart Lol it's a fairly interesting yet comical story from what I know. Long story short - no one is using it. JUCE announced they will start supporting it soon and there is a handful of controllers on the market that use it.

                              I think the MMA (not the wrestlers, the Midi Manufacturing Association) has been trying to make it industry standard for quite a number of years now. MIDI 1.0 was only ever adopted because the major music companies of the 80s (Yamaha, Roland, etc.) came together and standardized it. Companies don't want to collaborate like that anymore, so we are stuck in a limbo of MIDI 2.0 always coming soon and never arriving.

                              So probably something to keep on your radar but not worth the time to investigate just yet. I'd be more interested to know if there are any plans for CLAP and ARA support in the distant future but that's another topic and is also not a huge deal immediately. All that being said is MIDI 2.0 sounds awesome and should be adopted....

                              Sonic Architect && Software Mercenary

                              1 Reply Last reply Reply Quote 0
                              • B
                                Bart @Christoph Hart
                                last edited by Bart

                                @Christoph-Hart said in Optimal Midi Architecture:

                                I'm living under a rock here. How wide is the DAW industry adoption of this? All of the hosts I'm using don't care at all about MIDI 2.0.

                                It's only just being rolled out across operating systems and will indeed take some time for DAW's to catch up, although predicting Bitwig will be all over it soon enough.

                                I guess for me it's always been a fantasy to have more control and resolution, particularly regarding per note automation, next level music... MPE has always been a limited workaround.

                                Internal synths could could make use of the upgrade 👏

                                Oh look Bitwig are already in the game.... yas

                                Screenshot (436).png

                                David HealeyD 1 Reply Last reply Reply Quote 1
                                • David HealeyD
                                  David Healey @Bart
                                  last edited by David Healey

                                  @Bart said in Optimal Midi Architecture:

                                  Oh look Bitwig are already in the game.... yas

                                  I don't trust AI "search" results. No DAW yet supports MIDI 2 from what I've seen.

                                  Free HISE Bootcamp Full Course for beginners.
                                  YouTube Channel - Public HISE tutorials
                                  My Patreon - HISE tutorials

                                  B 1 Reply Last reply Reply Quote 0
                                  • B
                                    Bart @David Healey
                                    last edited by

                                    @David-Healey

                                    Rule #1

                                    Dont trust anything AI 🧐

                                    B 1 Reply Last reply Reply Quote 1
                                    • ulrikU
                                      ulrik @Bart
                                      last edited by ulrik

                                      @Bart Hi Bart, my experience with midi is that you can work without the MidiPlayer module, this is a video on one of my projects where you can have several independent sequences running in parallel.
                                      The whole concept is built around the TransportHandler (internal or external clock), synced or independent to a daw clock.

                                      video

                                      So I set the TransportHandler to trigger the clock every 1/64T note (the lowest value available)
                                      and based on that, I can make calculations for each note value for position and length etc.. using this function

                                      TH.setEnableGrid(true, 23); // 1/96
                                      TH.setOnGridChange(true, gridChange);
                                      
                                      //  nv = note value (part of a quarter note), wheel = sequence
                                      inline function gridChange(clock, arg2, arg3)
                                      {
                                      	if (!ENABLEPLUGIN.EnablePluginPnl.getValue())
                                      		return;
                                      	local nv = NVLookUpNum[Canvas.getValue().notevalue];
                                      	
                                      	for (wheel in Canvas.getValue().wheels)
                                      	{
                                      		local steps = wheel.steps;
                                      		local length = nv * steps;
                                      		
                                      		local beat = clock % (96*length);
                                      		local idx = Canvas.getValue().wheels.indexOf(wheel);
                                      		
                                      		Canvas.data["beat"+idx] = Math.floor(clock / (96*nv)) % steps;
                                      		
                                      		if (clock % (96*nv) == 0)
                                      		{
                                      			play(wheel, Canvas.data["beat"+idx], clock/96*4);
                                      		}
                                      		
                                      		local cycle = beat / (96*nv*steps);
                                      		Canvas.data["pointer"+idx] = cycle;
                                      		Canvas.changed();
                                      	}
                                      };
                                      

                                      The video is a tutorial for setting up key switches you can skip to around 3.00 to see at least 8 independent sequences running

                                      Hise Develop branch
                                      MacOs 15.6.1, Xcode 16.2
                                      http://musikboden.se

                                      B 1 Reply Last reply Reply Quote 1
                                      • B
                                        Bart @Bart
                                        last edited by

                                        I'm hitting the pillow anyway, guess this projects on hold for now. Sounds like working without the MIDI Player to achieve the objectives might be too much to take on myself atm.

                                        Cheers doods.

                                        1 Reply Last reply Reply Quote 0
                                        • B
                                          Bart @ulrik
                                          last edited by

                                          @ulrik

                                          Oh wow, thanks ulrik 👈

                                          I'll have a look in the morrow, my eyes are falling out right now.

                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post

                                          17

                                          Online

                                          2.3k

                                          Users

                                          13.7k

                                          Topics

                                          119.1k

                                          Posts