Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

run advanced scripting against .pbix #530

Closed
m-kovalsky opened this issue Jul 15, 2020 · 12 comments
Closed

run advanced scripting against .pbix #530

m-kovalsky opened this issue Jul 15, 2020 · 12 comments
Labels
question General questions on how to do certain things in Tabular Editor
Milestone

Comments

@m-kovalsky
Copy link

Is it possible to run a c# (advanced script) against a .pbix file via the command line? Instead of using a .bim file or a server/database, one would enter in the location of the .pbix file. Thanks!

@otykier
Copy link
Collaborator

otykier commented Jul 15, 2020

.pbit yes, .pbix no. The latter does not hold the model metadata in the .bim file format, so it can’t be loaded in Tabular Editor.

@m-kovalsky
Copy link
Author

ah, that's right - .pbit has the bim file. what is the cmd line code format for this?

@otykier
Copy link
Collaborator

otykier commented Jul 21, 2020

Ah - I just realised there is currently no option to save a .pbit back as a .pbit from the CLI. The -B switch always creates a .bim file. While it's possible to add a new switch for saving as a .pbit, this would only work when the model was loaded from a .pbit in the first place. I.e. no .bim to .pbit or database.json to .pbit conversion is possible, as the .pbit file contains a lot of Power BI-specific stuff, which we can't create from scratch (so we carry it over from the original .pbit).

Could you elaborate on the scenario you had in mind, where this would be useful?

@otykier otykier added the question General questions on how to do certain things in Tabular Editor label Jul 21, 2020
@m-kovalsky
Copy link
Author

An example would be to run a master model script against the .pbit file. However, this may be tricky at the moment as external tools such as tabular editor only have functionality for modifying measures, perspectives, and translations with regard to .pbix/pbit files. Just want to give an option for folks who do development in pbi desktop to implement master model or such automation tasks. thanks!

@Mimiix
Copy link

Mimiix commented Aug 10, 2020

@otykier

For me, a usecase would be to add measures dynamically and automatically to a PBIXfile. Currently, we can download and upload the PBIX file, but adding measures with a CLI would be beneficial to add. But currently, the above issue prevents that.

The PBIT workaround might work for us, but do you have any information on how to make this work?

Thanks in advance!

@otykier
Copy link
Collaborator

otykier commented Aug 10, 2020

Hi @Mimiix and @m-kovalsky

There are no documented ways to do this today, but there is an undocumented workaround.

Since we can execute scripts using the CLI (which I assume you wanted to use anyway, in order to add the measures in the first place), we can add a few additional lines of code to our script, in order to cause the script to save the model metadata back to the source.

There are two ways this can work:

1) Save back to a .pbix file loaded in Power BI Desktop

If Tabular Editor loads the model metadata directly from the AS instance running inside Power BI Desktop, then we have to save the metadata back to that instance. There is no way to save a .pbix directly from Tabular Editor, but Power BI Desktop will detect that changes have been made, and prompt the user to save the file accordingly. This could be useful for example when creating your own "External Tools" for Power BI Desktop, as you could have a button that would launch Tabular Editor using the CLI and then run the script below. Once you click the button inside Desktop, a command prompt would appear for a couple of seconds, while Tabular Editor does its thing. Then, the prompt closes and Power BI Desktop should show the new measures that were added through the script.

In your External Tools .pbitool.json file, you would have something like the following:

{
    "name": "Add measures with TE",
    "path": "c:\\Program Files (x86)\\Tabular Editor\\TabularEditor.exe",
    "arguments": "\"%server%\" \"%database%\" -S \"c:\\path_to_my\\script.cs\""
}

Replace c:\path_to_my\script.cs with the actual location of the script below. Note the extra backslashes () used to escape the JSON.

2) Open and save from a .pbit file

If you want to integrate this in some kind of CI/CD pipeline, then you can use the CLI to open a .pbit file and make modifications to it with the script. Although the CLI cannot save the model back as a .pbit file today, you can again use a similar hack, so that the script itself saves the model back as a .pbit file.

Script

In both cases, use the script below. Add your own code to add/remove/edit measures at the top of the file. Uncomment the handler.SaveDB() or handler.Save(... lines depending on what you need.

// Make a change to the current model:
Model.Tables["Internet Sales"].AddMeasure("Hello");

// Below is a hack to access the internal "Handler" field, which points to the TabularModelHandler
// object, which contains methods for saving the model metadata back to the source.
var handler = typeof(TabularObject).GetField("Handler", 
    System.Reflection.BindingFlags.Public | 
    System.Reflection.BindingFlags.NonPublic | 
    System.Reflection.BindingFlags.Instance).GetValue(Model) as TabularModelHandler;

//// (1) Use this method when the model was loaded from an instance of AS, and we want to save the
//// updated metadata back to that same instance:
//handler.SaveDB();

//// (2) Use this method when the model was loaded from a .pbit file, and we want to save the updated
//// metadata back to a .pbit file (possibly overwriting the source file):
//handler.Save("c:\\Test\\MyNewFile.pbit", 
//    SaveFormat.PowerBiTemplate, 
//    TabularEditor.TOMWrapper.Serialization.SerializeOptions.Default);

Let me know if this technique is useful. In that case, I will consider providing a more script-friendly way of saving the model metadata back to the source from within the script itself.

@Mimiix
Copy link

Mimiix commented Aug 10, 2020

Hi @otykier,

Thanks for your explanation. I think i have to elaborate a bit on this. The plans for us are to download a PBIX file from powerbi.com, modify that with the new measures and re-upload it. The measures are read from a CSV file that is downloaded by a powershell script.

This enables to update the PBIX files from CLI solely without any user interaction. For now, we might be able to download the PBIX, unzip it, use TabularEditor to edit the model.bim and then repack and upload to Powerbi.com. This would work, but requires 2 tools in which the first is experimental. Ideally, TabularEditor would run on it's own.

My current workflow is not preffered but it does enable us to do this headless and provide users with the latest versions and measures.

Thank you,
Dennis

@otykier
Copy link
Collaborator

otykier commented Aug 10, 2020

I see - thanks for clarifying. Again, there is no way that it will ever be possible for a tool like Tabular Editor to make direct modifications to a .pbix file, because the format is proprietary and the file contains data alongside metadata. Also, the .pbix file does not contain a model.bim, so you can't simply unzip it like you describe. Even if you manage to locate something within the file and apply the changes you need, there are checksums and a lot of other stuff in the format, so it's never guaranteed to work once you pack it again. The few times I've tried, I always ended up with a corrupt .pbix file.

With a .pbit file, it's possible and you can use script option #2 I provided above, but I don't think there's any way to download a .pbit file from the service or publish a .pbit file to the service. Maybe -- maybe -- you can use some kind of automation tool to open a .pbix file in Desktop, then export that file as a .pbit, but at that point, you may be hitting some issues with the PBI Desktop EULA...

Are you on Power BI Premium capacity? In that case, you should have better luck connecting Tabular Editor directly to the XMLA endpoint in order to make your modifications. On Power BI shared capacity, this is unfortunately not possible.

@Mimiix
Copy link

Mimiix commented Aug 11, 2020

I think i might be confused with the pbit in this case. Sorry about that. However, that wouldn't matter in our usecase. We are able to read out the model.bim (in the pbit called DataModelSchema, unzipped).

It is possible to get a report and reupload those.

In our case, we decided we are going to make a internal tool on powerbi, because having to work with 2 tools is complicated.

Thanks for clarifying 👍 !!

Maar, moet nog wat info bij.

@otykier
Copy link
Collaborator

otykier commented Aug 11, 2020

I'm confused - the link you provided explicitly says that the API is used to download a .pbix file. Are you able to somehow convert that to a .pbit?

But as long as you found a solution that works for you, that's good :-)

@Mimiix
Copy link

Mimiix commented Aug 11, 2020

We have some internal tooling for that, but i am unfamiliar on how that works.

Thanks for your colaboration in this matter!

@otykier otykier added this to the 2.11.8 milestone Aug 21, 2020
otykier pushed a commit that referenced this issue Aug 24, 2020
@otykier
Copy link
Collaborator

otykier commented Aug 24, 2020

Tabular Editor 2.12.0 is out now. With this release, the command-line -D switch without any following parameters will save the model back to the AS instance or the source file from which the metadata came.

This allows you to run a script against a .pbit, such as:

start /wait TabularEditor.exe "path-to-my.pbit" -S "path-to-my-script.cs" -D

Or, you could take this one step further, and create a new external tool for Power BI Desktop, that executes a script against the currently loaded .pbix in Desktop. To do this, create a new .pbitool.json file and put it in your %commonprogramfiles(x86)%\microsoft shared\Power BI Desktop\External Tools folder. Use below as a template for your .pbitool.json file (this assumes you that c:\Test\MyCustomScript.cs is a valid Tabular Editor script):

{
    "version": "1.0",
    "name": "Custom Script",
    "description": "Uses Tabular Editor to run a custom script against your model",
    "path": "C:\\Program Files (x86)\\Tabular Editor\\TabularEditor.exe",
    "arguments": "\"%server%\" \"%database%\" -S \"c:\\Test\\MyCustomScript.cs\" -D",
    "iconData": "image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAgAElEQVR4Xu1dd3wURfv/7l066T1AAgRCb6FIrxEE6YJIEREUGyBIUVBesSEqVVCQV6SDijRRpDcDAqFJJxBIqGmQkB4Skvt9Zndnb3Zu93IhCeD7c/7J5W525pmnP888MyuYTCYT5JaYmIjCwkLxPy8vLzg5OYmfc3NzkZqaKn42GAwICAigjyA+Pl75TL4nv5NG+pPnSCPjkPFII+OTeWgLCgpSPpfG/IIAZGZm4dTJw7h44Swi/zqJm3FncDEmEWSpOdlpyM3Nw/28AmVe8sHRwQgnJwc4OLrCzs4ONasFICS0Idq2boTKoTVRqVIVuLq6ARDg7+//xK6/uPgX/ukMcOvmdZw49he279iJnbv24WrsNRQUqIlrMAgiYxIie3m6wNvTCRCMAOEW0kQZKERaWi7upGSJzEEYtbBQkQ2xm9FoRPlAXzzb7Vk816cnWrbuiMzMHEVongQB+J9nACKdSYm38fXcmVi/8TekpqYp0mg0GhBS0QttWlRDh9bVUKtmBdSuGQR7ezs4ONipJL6of/LyHiA//wGiLyfiUkwi9kZGY8+f0bh2IxUFBZKWJM3T0w1dnumM4cOHoUPHLiKTPE4NWGwGSEhIUNjcx8dHUeHp6em4f/++uBhHR0e4u7srKvzu3bsKAvz8/JTP5HtqQkh/8hxpZBwyHmkEQDIPbcnJycpnvfmJCYm7egkfTf0AW7buxgOZAC4uDmjRpAqGDmqBTh1rw9+PqOiybykpmdi9/wJW/XwEeyIvIzs7T16bgHZtW+P99yejVat2cHCUTGhJ11+W+Bdu376tMMCTpMLu3buHjIw0TJ82FStW/oTsHIkZA/zc8OpLrTDi5TaoWMFb0eJlT3btGYj1iE+4hzVrD2HhkoOIuy4Jh6OjPV4d/iI+nDoNbu5eT6wP9UQywJnTRzHitbcQFXVMRKZrOQe8Pqwt3hn5NIICPR4XrW2aNy0tB4t+2I0vvt6NtHTJCa5Tqyq+nrcAdeo2kJj4CXKihZycHEUDEK+dBgUODg6KPSNOVV6epOYEQVCiA/J/Tk6OghiiqsnvpJH+1BkjdpGMRxoZn0YH5H9nZ2fl+RPHj+Dll4ci5so18bv6tcvj21n90bJ5DZuQ/6R1+vv0dYydtBaRh65IhPf3xaJFC9GufSfFVLLrfxz4fyKigDOnovBc3+dx5ep1UaX36FIfi+YOhr+/5Hf809u9e1mY8skGLFp+SIws/Hy9sHLVatSvH47AwEBleaURBhfbCXycYWBuThaGDh2CAwcPi0jo3a0+li0cCjc3l386zTXhz87Jw7tT1mHRsgMiI9SuVRV//LETIZWqiP0fCwM8DhOQk5ONWTO/wPQvZooLb9OiKtatfAO+Pq7/k4TnF5WVlYsXRyzF5q2nxZ+GDxuCBQsXIzs7+5Gb4EfuBF6/dgXdu/fA3ZR78Pd1w7YNo9GgXvD/C8Lzi4y+nICufefj2o0UuDg7YsuWzWjXvrPY7VFlUh8ZA2RkZGDqh5Pw3aIlop3/8L1u+M+73RSn8f8lB8iL/u/SfRg5Ya1oFgb074FVazYhLY2krMs+lS48ikTQneQkNGvWGNeu30ZoZR/8uXXiEx/OPWqGTE/PQYfuM/H3mdvw9PTA3j27EBgkacYyTQSVtRN47Mg+9O47WLRt77zVATOn9X/UuP1Hzff1gl0YP2W9uOm06LuFeHXE62W6GVdmYSBRYZ9/NhkzZi2EndGAgzsmoEkjydv9t1nHAPENmkd8ifSMXAwcOACLFy8ByYySVtq7sWXCAKbCQvTo0Rl/bN0tqvqzhz+Ep8f/ZmhXVsx8/34+Wnf+CidO30S9ujWxY+c+MXlU6gxQ+nsBBWjTpg2uXr2KiHY1sG3DGJDt2H/bw2Fg2BtLseLnKFSsEICzZ8/D1c2zVOspSjUKuHE9Fi2aN8HthBSMHtEWc78a+HCr/vcpFQY+/XILPvridzEFHxsbp6SRSaeSFtSUGgOkp6citEolpKRmiCHe1End/yVjKWJg1Y+HMPStFWJEcPr0Gbi6SkmzEjNAQUGBshn0sPv5efezER7eQCT+tzP6441XO5Ti0v8dimLg9z9Ootfg/4pMEBd3DaQWw5Z6CmthZCk4gbfRtHE9Ue1/81V/vDni0RCfpFOXrfoLDg5GDB3cqtgVP6XFVg8eFOLzmVvw84bj6PVsfXwypRfs7KSqoLJou/f8jc59F4nmID7+FrKzpToJ0h6mnqNEDEC8/bDqYaLD9yjV/o5dZ9HthQVKzZ6jgx2i9k1G3VrlywLnumPm5uYjtP4HSEzOUPr4eJdD3NnP4eIsbX+XRaPmICjACyf+vlCimkQhJSVFMQHF2c8n4cjgQX3FUO9ROnyxcckIa/ShVMfJNKIJkq/MhKurVIb1KFqtplNxKSbJYqoGdSrgxIEpZQoCdQzr1qmJI1HHIQgGMWFU3HqOh3YC587+VEzykFBvx6axZbpYdvBKdSbj5m0pKcK3dq3CsOf3cY8EluWrD2L4qFW6c21a/QZ6PCtVAJVVe3PsKvx3+UExWbR69Y8PtZ38UAzw268/oU/fwWKS5/q56Y8szl+/6Rj6D/vBKj6vnvoMlULMRadlgXwiZe4VxoLs7+s1X+9ySLwibXeXZWve8QscPXkN/130HXr07F3scx3FNgGZmWkICAiC0SAg8cqMR5rhC641CbcTzGXgWoh9oXcDrFn6RlniHNt2nkW3/t8WOcepg1NQt3aFIvuVpENefgECqk5ARkYuoo5GITS0mjicrSV9xXICid1v3qyRuKt3ZPe7jzS3f+v2PYTUmVwkrsjZgOyEeWXqiT/VYTqO/329SFi6PVMXm38aWWS/knaIjUtCWKOpYuk+CQvt7BxsricoFgN8+skUcT9/9GvtMffLF0oKd7Gef/c/6zHrm102PRO5dQJaNq9qU9/idnrwoACOfqNseowcRiHMSAtlbXroITuRXcRxH6xHn17PYv3GLbYzgK2JoNOnjqNFyzYIruCJuLPTHxLMh3/MmvPHjzpscAss/ualIibjwgg+rNB6WhAQdSwOLTp9ZfNCbp6fjqBAemCFzkn2RtjPGsOx8NDu4pYK3VcxSUOIVdgCIBjQtP3nOHHqBrZt/R1PNWtl08Eem5xAR0cH1KheDSmp93Dj/BdyMYe8AAVQERp5YezmD4dofq3keWVhdAzSSf5sKkT+AwHOgaMtQj89KpATQvHRX4jn/VRNgZUjAEGiAof8hPg/c3aQnCU0FWD8Bxsw97t9NjPANzNewJvDW5n7i3MRuBhCir/K/9PfBQPTj+KFPEeSTNJZRukZ81oyswvhW2U8DAajeGTOSS65t3a41yYG+Gb+bLGAc+qkbvjw3WclAFjCUwQqyyQcyeFI7E+ZgZwgZpFA+/JMJP1/5nwiGraZZjPSicrNTZwHOyPHADaPQOEgi2DgFAyo3uhjXIm7Y/NIvbrUwYbVrzGEYtdIh2GQRZiDEJ/iWMQtwy8KqrhxZGZdu/E0Br66BC8PHYwlS6UwtUQMkJWVgRo1asLPxxW3L02HYCInb1nEsBLOLURUTdwitRZIJUD5jazfTLwfVvyF18b9YjPSScf46Gnw9yE1CKy0U5VJTwTL/9N5VWbAUhuZYIBbxQnIyc23GRbRZJ76SGb+IrShMiqr3lnhYE2AhSqVvhCMqNtiOi5cSkR09CWEhYVZZ4CiSsLatmkh1u2f2D8JDeoEcEeqtSSWl25+0RxBWPUnfraUkD5DSAn1GZuRTjr++uMb6N6pOmNKGJWuaCJ2SMZ8iQxB1auZGfMeAM5BE4oFB6mFyE+aLZoPUbJFxmaZS8MUiKDIfcTPrLrX0JycBr6VmI2Quh8irFol/Bl5RAwJ9e5nsBoFXI4+jQbhzdC6eVXs/32UBIiIGAKcTGiVraQEZG0asxjynMq28f1lItHFy6gObfSZeCy7OO2rj3pi/Mi2jLaS1arKT2HNEoWZt89mrRYTl44aTT8tDhgiujJufAlnR2q7tfQ5O2RRv7MCJAkXTf8S0yeRQ8BLb67B6nUn8cvPK9Hx6W4PxwCNwmvjYnQsEi99Dh9PO9kn4h08MqmJCXUIUHQ3rFABTo018yIloKWFmBlZGk/8XjDCJ3QK0jKkEmlbW5/uDbFu6SBVd+YyFNX3emEa7wdGHr6BDj3n2wqC0u/Olc/h5W6+n0CCg3WYqZbU0o56zjWrLelUhHklwcy5b4BnpUlwc3NFbNwNeHhIh2r5G1p0y8IPH4pE6zbt0bNrPWxY/qLZJosOCp2ITqwFuB6eeA4nxDboMAoZwwDn8u8h/0HxHLquETXw24/DZCB4ZGshlZcsS9W8YMlRvD2JVOwWr109PgkhwfKpZnFq2byIGlXT6pknoBpX5BFL3InfaWlVwYBJn+7CzPm7sWzJIjzTtZc4Jn8/g24UUD2sCmKuxCEx+hP4eNpLACnAyqEM9VYpbArYVJWzQFNAKbdTG0fHkr1dDrcmGGEf8G7xMA6gYd3yOLabZOGo6meHoAthJU9rCjWjzFhwGJM/3lxsWA5tG42mDYn/JN2fJDV5bOrs0pBT9P6ZbkqISkNVNjRl0wnympgl5eUb4FZpCtxcXXDhwmUUmkwWRaWaDEDO5zdo+BR6dq2PDcsGqAFWQUecGtm5UWC2jE/NMTYrVfQzK3n8Z6CwoBAO5Yu/tRpWxRcXDo1lnFYKF+dnsA4XTxw1JfDh9O34/OvIYjPAzvWvoUOrEAaPrDTpfdZjUtn/EqMxJqpRoFL7aJM+24+Z3+zG+nVr0LxFe0sG4A+HknF69+qKPyMP4/b5D+HvLUs/q6sUpMmzKsZbJqqS7KCL471YCi3DBArtqWNGQkgBGVkmeIX+p9hIJ5dBJV+cxIqS/JmFhXzFMywBRP6OdQIgYPTk7Vi49ECxYVm/fCh6dQ5lHGgZL6rkEyPBIlqopGvlS+jPnNSrhFDSfLl5AtyrfITgihVw4eJli/sZLKKA3JxsVAkNFS9nOLHnTTkhQZMTrAZjEyScWlKAp9Im99UVdt6kmNVdRlYhvKqSOLp4zdvLBUnnWdOh5V1rGWAa4bBhmMSUo9/f/VAMsHn1MDzbsRJn7CnxGBtOTYQSbfFrZhBIcxai/ZdzM6oEktnc9B2+Hr9uPYOYmBhUrlxFVVZuwQBz53yJL7+ag10bXkf7FmyJlRYCGbWqsrWcbVXF1RomguV2Lv7OyDHCq+rU4lEfQNXKPoj+6y3pOjgi0dT5YtOwit1lGIGqVkm/qog2+oO9D8UAkVveQotwpkbBInNa7OVR1VuEByl1uxmfhcqNZ6NPnz745Zd1agZgTQC5zapC+QAUFhYgM26KmbPY5IyIUMY5Uu0FULhowkPnf63snCo0os8ZkZNbCLcqnxQbQ00aBOPw1peL/Zy1B774ei+mfFl8E3DuwATUCDVfhVOqQNk0mIBKjecgISkLaWnk9jdzIYvKCUxKuInwxk9h/Ftt8eWUdjYNXdadCk0CHCoUnwG6dwrDpuXUgS0dKGd8dwKTP9lS7MGSL0yElwetVWRdfHkoi51INrSj01F/ifyvMYYFVGotvHDlBYyetBGrVy3FwEFmwVAxALnWbOv2Pbh5ehICfanzp7deHggWQPoMG0axi5UXaBWVkvotNBnhWPFjm3cC6ZDP92qIHxfIG1d6O28WKVk2RLW0vyvWx2D422uLzQAplz+Au4ucx1AcS9YhYobkmYE1F6rdSSYspGNaeTbrvhGe1aahdq0aOHP2ojKhkggiCYIK5QNByppvnXqb27JkuY4N5Vg7aQUvIoDcDpdNaBREEnlXn4mMLP36O62h5k17Fm8NrW/+SbH3cm5ddJ5kgotIpptcrN1nGRk4deEuGndabBPktJOB7EzemAQDvzUtdqDzS1vNUs6CxzUTFWlKORMtKFvJ1EzTHIgkiOGdluLMhSTk5uaIVUMi9ehm0Lmzp1CvfkO8NyYC0yY2kYsMZC5TgOKRoyHh0rCcmtLhdmVBrINp6ZlXCF+gqr23hQIbVwxFj47kUmuaqyDjMmGnQhA23CJdZP9FSdqYt76vJz5AaJM5tkyv9Cnn4oC0S++Y91FsKTyxwIuWA24LGOrnVm6MwbC3iRlYgvYduqgZ4LVXh2DxklWIPTYWwYHsoQaWw2QO5bd0VbBoAKvyeinXMxIo8ox+3Nvr5Q3Yslu6a8/WdvPUeAR6MxKlSLwW0zJajd2S5iYrMBngGGJ7NRB5vGaYH87uGapjt7UERUsDUEC0BInNpNIdT15LS89nZJvgVWM2OrRvjVWrJVOmaAAfH0+Qa9vSY8ZDULYsWQywTgULiBZ36nEs4zdwSRZzjQEzp9xn+jen8J8vbasHpLyUHTsR9kaqPjUQqFL/fPUP1Xw0FyD9b4IA79rzkZFpuzka+UoLfD21hYoBzNjR14xmNjXjTIBkEtkmfcf7Llr5DYJhAf4NFiE7pwCxsdfEjSHRCSwsyEdwSCVEtKmK7aulTQNma079uVjSbqu8aswnCoJEwP1HUxHRd5nNgwX6ueDmcVIaLqGGR4eeu6pdekOnlUZq1v1nnDh922ZY9q0fiFZNA+SSM85xY/FcrNwAv6+ihtEcJRCYmW1wQcCoKQewaMUx3LxxHeUrBEsMcOLYAfTo1R/L5/fBoF6VlTjfzJ+2hB224oTWxMn9WeeMH0JmgJw8IzzC5tgU/JAhBvWph+VzO3K7Z1pr0GINvh9lIanv/GUXMG7qTlsXi/RLY+HsSB1MdmxWTWurbM1JWI+fjwokyZWzt2wBjHmkqFOpaNVzFebPm4ORo8ZKDDDt0ylY8N0S3Do5Ev7e7L36rNoXRZJSjctA8Quz9j+rjumYRSOjQuMlSLqTZRPid/w8CB2aM5k3lbnh56dRAaMX2FCNZjHl724m5KFKs0U2weHnUw63j9MtaVbLsfihUspKMf2dL2KhTir5nd8jKIqZJUbOzBHgVesbRHRogZ27/4JAysJr1QxDzJWryIt725J7eOSpMn/Sho3YLPqxu29shSsn+TQ1a+Eoqsd+d9phzPleuj3cWiMlWJmXR8FeLAgtKvrgVWdRo0sFKu41vrOpLvC9kU/hs4lNreNUCZFlYVAknNtr0Yv1FX7mzQtjJjgt699gCQpNBkRfioVQWFhgIjVjgf4uiDtEaull7lOpGjmfTsvAFFXDagVqs2UuZataLRIxlGG4vXp2g4PTNnG38hDWqugYvFXTitj3S08uxqeRByflPPLYxJCFTTZ7E299cADfrzlbFLfg9okR8POi1VFaap6XWi2PheZP2DpFtp+s9vk6Rm4r21zOJyBi4FYcOHIdN27cgJCenm7y8HDHkL61sGRme2lRSoUJI62816xRvKmudWcXRyuIOPuqG3Kp7a6sYhDUeCXupGRbRXzUlkEIr82+OYTdaWQfZZBoEZFwQiDyuVmjpKQVIiDc+iHVOtU98fc25k5EhaHMMYCEa5Yp5WwhDVlVv7F1DDb6ZGzoy9D0/ZlnQIpbzpw6DOHQwd2mlq0j8P2Mzni5H7nHj/WR5SSIhZrnbLaK+5gzA0o1C8vFNDanzqC1SiEpCpAY0oQt++6g9/ANugxQIdAdcX+R/L9lsGTpv0gl1Opq3SKFWunQfsB2HIzSPx/49/YBqBP2aF5hYzvUUs/9Ucl4esAm/LppI4TFi+aYRrzxDg5tHogm9dyZenxb7Wdxpy9Bf8GAOh3X4lKsdoXw6Z2DUavqo7mP8F4G0QJLLN4sRlbXu3Ml/PKddOlzyRqv6mV1rzsow/isxhY1mPm35NR8lG+yAm+Peh3CSy8NMa1cuRL3zg1HOeeyu9umZIgQVyAOkXS3ACHNl4G520r8/pPxzTB5ZH3VgZKi5+SjGvYJ7WQKq0l+35uEPq/+rpqmehV3nNk1AAaQwyPMGCpzZ23eoqG26KFnwijhOX8mJ98OHrUXo0e3zhCeiWhi2rX3ODKiX4ODkQLNTmHN3ugthNcefDjD2UFlOv57LadIQGJKISIG/IroK6niuwDnTG2DEQNC1apfJQFaKVfGvFmRFk1yKCVvAs5fyUX/t3aI7xsc1CsMM6c0gwEk7mdxozWK9trMPbVwq+c0UgFhD+XwoTUdTwo7XWqugJ9/AITgiuVNCYkJyIkeJttDdgOId1I4b1ozRGSIqJndYhbG/876GiImtFQgVYNSapbYccH0gPFdZL9BfJ4igf7Vqk1kd8wo+nmP3Yo5LGp7V0+gtXITfJJHL+mjgKlRKawXyXDbyt4Nf4K9gxOEoKBAU0pKMrIuDAVUiGSRwXKPHpJkhKvKnHUQp5mY0cGU6rwg6wlrMGdRDGVRrEqTMzqFlyrNxMOnn1CWemqt3ZpfpRHaaaKE1yxaGprVFFSQ1IPV6fw7biZkQ/D0cDa5lXNAbGQvjRoAVgr11Bi/WHaRkrpRN161kf5ahz60EMwuRkvF8QvX6q/FwMQcWGECPl2ttaWrVaxhgTI9ta9nEjVwXqw9A23ik28b99qB0xfuQnBxtjNVDXHByS091UkgqoLFGkAr3M6c4lVtIKlgZ9Uy+wMZV4/QerrTlu+1mMzG0FAl9eqCCsuZKYNrrc+atFtLCtmyPrmPNTMi0p4x2SzTCgIa996D0+eTIBgMgqleDS8c3/wMMzMPvDVHkGoAFnAtZOtJLyuRDOF0S6OLQBC3UCVFzaac6RB8hbCWDVbA4y924OHQ8lf0HDGe6SkDUYGg/2udtNZxaFUmh9OEbP2GCLaA3m9GYcueOOkMZv2a3ji+ubOcz+cqesX+MsB6qk/re6pBNDdjWQax5nBRpGp5v5TxtBCidcKXV7N6Dia7r8GOrYd4hhH4fL1ydE5+lo82RJmQz1xo/qYjwZQmugxbtEnpM/I4ft8dyzDApo7qtKQFRyliw7G+pd0llTNGgQBBbTtTtaIMwxVh8ItiVZjKajDMqGQamQIOzfSnjgnjU96aysVWBqUajmdWPU2hpTEZJhMLUIy4fLMAZAs39kaGWNARGuKCGlXcUCvUES5OOs4eaxp4jSgzXZ9Rp3gGIJc8U4eMVUVU0rS9zfg7BVj04xVs3HEdV69nIv9BgRK9BfiWQ+9nquCL8TXg7KjnZLHcquXhatlSHsmcpOqZD2XnjVuL3k4by2CUIXXz8xwDsLWFChG4U0Cs/ySi2Vwmd/h0NiKG7EJennwGkBc7AQgu747pE8PRv4tPEQkwSxz2GfU3ft8dR51AZ5wUTQA9YsRJjIaqSboHdB66H+cupRRhlAF/HyfcOvisUuGjLJRJqChco1S28qZIR7I0pdiaA1YkuE9Eh+6vH8X2P2/ZBEuNqt44sakdHOyK8tXMwzXpG4lT5+9C8HBzNLm7OSF2D62gKXrOtCwBgc034cED2yasVMEdMbsidAoji57vye7Bh3Zaqp1+p8GYOv7Tyej7aNFvh0XKWw8Xrw0Ixbcf1mF+1hICM70aP/cXTl9MgeDv72fKzrqHe8fJGz5sI+ipSzlo0mu7MpnRKMDDzQkp96Q3idvbGfD64Lq4l54HVxc7fDSqknjDiNUmIoI3Bzq22yJDSPvRRbPjWLPJWuaHmjyq0qknrgU9Cx9rPvWcXBs1k2yqSNGG+ToeAQ177cGFGOmq3PZP+eLwqXvIvU+yoEDkz53QvJ6jatNHCcs1cgd1ukfiZkIOhPLlg0zJyYnIOdNd/bCyXi1PWMDcFbfwzcpotGrkje8+bYT9x9LR49U94lNkvrzzvWWTwksIiyiKZAa5vAMj4phBtFb62VpyxMJR5ApQFeHUCvNYn4S99ILCbU3KtJiX97H4o+p8ZKLu79t8F9IypBdEfDCyPj54PQTR1/JRpbw9yjmRsfQiG0tH1rvZLjg5u0Po2Lahaf/BU8g41UvaDFIpAe1LmywlFbiVXIDK7c1a4e6x3nB3JuXTek4cT3zeAaSUIQtjK5L4RRaVxtWZX3XhFe/06ukqfiyt0FLvDkQ6JnMDCM8jIgq0blch3woo13Ab8mWzu/m7Vujamq030IKFfKdxQ4pggEuDbfDxDYAwfNjLpqXLluHe8W4o58QdT1JJm/XYMjPHAK8m5oOTF7Z1QrVgvsCUuZFT19poMIIK78yDFg4gz+kaGkaVl7BmlHhi8ypej9B6TMIv2EZzIINIKqPdG21VAD6/rQvCKtJqY/NNYdoropduSfjIe2APt0bb0L5tEwhLFs8zvTLibfy1rhOa1mSqdXT9AdbOUvUsxawuDbeDvEOHtJUzm2FAF08ZHi3uJD+R+dgzeXoEY783j8Xe+mVZXc4yg5YfwO9R6F9CpZtc1DlPohU92upfqQloZpKoc/loPWC/8nP23525m1CtMZQa/xlZBfBpvhfDhw2FsGfPDlNERGesmt0SL3QmryKjnM4QV8SAlk1Tc1ZY1yhcu5kuAtm7UwWsnV2Lc+y0+JOqKZbI7GL0TAM7lp4Dxs+nJdWcnVcKX7XWq8WgRZkLfi3suPzcWvBKc37+fRI+micVoro4GXHvKKnf5MyhMhzrzzB9RM4E/jyZi6eH/iWeERSuXr1qqlo1FMP7VcJ3U8M0VqOrq7m+At74+AqWrIsVv/fxdER8ZGumD0dIlbNHK14p02kgWsthF3GrhURN42o+4cTtjYtAKkzO2WCVE6mnoXhHVw9n1qTUuklo/PwpnImWci7NG/rgzxXk5DOZh86tpeW0BW7a4rv4eN5ZXDx/EkJ8/G1TcHAwQso7I3pLU8tjYJrl0SyhKFIERJ68j4ihfymzph/vBCd7rjRKU2BYIrJOndaiqLTz1S9s5TFPEMZsiT/pSbeeNNPvWcJq+Ru8VtJiBJbQDBxs9lJJvMm4FYxwbrgPBYXSeDPeq40xg/2sb2FbLEW+t9lkQpc3LmHvoQRkZGRASExMNDVtXB+3E5KRc5JcrarF5XQ0HmD2PLuAnPsCPJ/aqwjluq8bomcH2Q/g78PTSr+qNp3MAIuz821+jJYAABRtSURBVL+xcCp3DxTjMIVu9ZFWCTtPbPK/Lc4ey8AsXrXMAivJ1B+RPPgrNwtQq5tZsK7tboUgXwoTB4e1MFnGU0Dbo8i9b0JGZo50OvjNN4Zj0X+XIuFAe3i7yepYlaHi1Sy125wNIpczdTmGG/FSQqhFuB/2L6upoaZkDaIcu2JvIePmUvL3LEtbU7EyovndNTqOwohaF0gyc/CIVMwEf8SLOcHE9lExLWUq/rSSTERVpRJzLkPeGxjzVTwWrrkqAufkYEB6VEvmCIa+82pejZmB8wrs4Nr4TzRuVB+bf9smMcDO7ZvwTNc+WDOzHvp1IhLLINjqRgkfg5swe2UqJs26IM5NXiyVcawN7AxskaRMfGq7+MUXpYUf+nfrNlYalutj027hQwNk44MCfFpHISNTuqK+V6dg/DIj2MZnLbtFnTeh9aBD+OqLjzF4yAiJAbKy0uHm5oFeEQH4ZVbJ3rVzN92IoLbm2zTXz62HHu2fzAMSD41FzQetOaNaURStStaov2BS4ufiDAjvY1b/x9c9hXpV+StnNZjXAkYJhgmz4jFv1XUcPxaFwKCK0ulgcj9QWFhVoDAXKX81t3lPQA+BVbueVMxAaLALLv7W0Aqu2beP0G62SCvtSxEvO4Wi1JLftIpCeDB4wrD2n3fW2FNSVKXqqHRxmqIiAXl81uETh2XmNQFdR8Zi96FkcURnJzukHWosL4JmFPUcTXatZuYMeeYMUtMeICs7R3y1jHJL2NjRI/DLhi24trs1grxpCrcYC1HOpQM/7cjBS5PML3i4uKUlQss/UJ8gVrxxGTjFnaAfiF9Ajm7R83L0MmkmTFPCQNar10N8SeVdaw5r8+qFhnrMbTkWudnLu2WUcpP6e69Wxqdv+UoL0fJR6PciH1neIpb3wAC3p6LQsmULRB6QtIrCABfP/42ITs/ii3FhGPcizeBRBqBeL/s/dw0sg1/yahXXZkeRny8Rr10Td+z8L3EGWYnRC8WKQpxWGMWr3yI0iM4WrHbpG68l9G7n4HAjnlnQUgTseCzcPIMWYuLXafh6heT8kXb3QBO4Odvi9LGCa8bz5sgH6Df2NFavWoaBg8i9RZDuBxC7FxbC0ckBQX4OiN1az1y8QTOAqrBJKx5WL+A/C5Lw5Q83lC+v7WiMIN03uhYltXoEtYZMNlLhEWIN8Vq/MUypTCkjVpREqpW56/AkFKtEQ32CmmcauSt5EXS+EZ4tjytnD9s/5YMdC0M0zm7qhaMsPSRcNB8ahxPn7uHG9TjY2UsXV6ruCo7o2BZ790Ui+c8m8ChnLu2ShlLbJvO/DBEYlZybb4BHy+NKTqBluBf2La7CvHaGIo09nEE/85lnDWQrNNWQfpVp4Ldx5QfltKi0Dp4BeQbX8lM4ieXpwCs4XrEpj7Pa1Tzmm9OT8MN6811EMX+EI8Rfln6L2gkGFgoH+xdA3gM7uLc8ieCK5fHXoaPm2dmXRm3d+hu6deuJaWNCMXGIq5xl1CA8C7wVWzRlYQq+WnJT6X3s53qoTz1Y1XMytrRO9kj6SefwCCdcyr8aBFTRi6MWZQaxD6/ytaRUS6pZCrOTFWGOVHZCGiMx1Q7BnU8qg7Rt6oNdC8jF3bzG0xpbm/N+2Z2DwZNisHzZD3i6U1czBVNSUhRsOTs5wsvbE472JtzZW1sPuxzrc9qBKSzNLzDCq80ZkBcckxbg64Qb26rrFJ5YQzyvzrTuxqN9uJdAKgzEOUa0u2bCSM8/4ZauBbLIL9wFTXxNJe2jxZSCgFbDb+HoGekIPOHNG9vrw9+TvJiDakLuIgkV42szXP0B1xEdm4XExAS4urqbGYCEgfS/gIAAvPnGMHy/eAWifqyPhtWYsm4by8V47lj6WxZe/0TaICJt8ivl8fEb3tqlSxqsZf6KV/VMxkz35JKWXi5KO/BA6FFZgymtwq9wnBwh8vclS2Hdun35GPRejDLS2CEV8dVoN2azijGPlLkt9muYdQsCktPsUKHTGbRr0wI/rd0IQmdFXHgGuHsnEQGB5RHRzAtb5wcytl/jcmLzMFz2kE3tGlC7Xyxirptv+Dq7sQGql7/PvJtPI8ZmnStJFuTZ+L5shQ2zDapyzNgTz8zLLKktVXIHvBpn5mTnV30uSnOxv5PxWC9ebbBTsxxQodM5PCiQ+pRzMeLu7jAYDBpOsqpIgcGPkjqn/gLw9uw0fLc2EZH7d6Fa9bpqBmBNgJOTk3hSpFF4HVyMvoqkPXXhWU4+eq3pLPEsTxdIHRsJ8Jt3jKja/Zzia3m62eH2jupyilgGnr5Bq8RnBXn7TJHDIFFLJasEmukrql2ZiJrHy9hwmK3t12AmVdpb7aWR0Ln+gDhEx5lfj/fn0upoXkuD+Cq0W/ExBAPyHhjh0fYivL08cOlyrJhTIHRWNIDWm0MvnD+Npzt1wat9A7DgXSYnoEgl45UrI3HSwvWd90seJsw0mwIxrJnvq3GggR2HXam86cIfphDpq5VO1dPHLMKKctBs0uml0mnkjFR8v978TuJX+lbAwoklv+5m1posTJ53Gz+uWY4XBrxk+d5ALQYgqeH69WribkoaUvfVhLODVHpcsiag48hkHDhuvt9n9IuVMGsUezF1yWb4pz69alsOhn9kjpYq+Nvjyq+hMAi2Jn20V05etuHV/gpgcEBmZpao3S1eHEkTQWSIu3fvih1Ii9y/Df0HvIw3+gdh3jhSKlbyRqKCgE6XkZltPu40Z0J5jOxXruSD/0NH2HnMgG6johXo7e0EXPujBnzdtY+EFWeZ367PxTszbmDmjM8w9p3J4qOEvoTOiuLmnUAi/aSlpaWJLx9OSU1Hyt7qcBHP9pW83U5xQLUeFxRHh4y4Ylo1DIiwMfQqOQhPzAhHLjqh7bCzqrem7l9SAy1qlxzXBYUCvDrEAIID7ty5K9KTNEJfq1EAZYDU1FQcPHgAPXv2RN9OfvjxU3Z/oGQ4PHIuH21eiVMN8v+NCQ5fdEL7YWfFt3nStmxabQyKsP3V9Nao8N6CHMxZcRMrli1Gv/6DQehZbAYgbxF7OqI1zl+4gsu/hqGSOXwsGQcA2HLYHn3GnleNM2tcIEb3/9+vHdiwPx8DJ8WpMtAzxlfBmOeLOD5nI9bTsw3wj7gEb28PJCWlIPf+fX0G0HICyTzkffMkXIiLvYLQqtVQvZILzv5cscS1AuwathyxQ58xUvUQba88F4SF79HEh40r/gd1+2x5Hj5ZeE0F8cdvVcTkl0rvtXKdRyVi37F07NuzA2E16op0JPQkzcIJLIoByEPDh72IZctXY9F/KmFYt9L12g+eykOH19UIqRvmioNLKsHZ3vY3czzpPEAOer7wwT38uidRBer8D6rj9R5Fxfq2r27HUaD76Mvo2L4lVq1Zr8T9JWKA3Jwc+Ph6iS8cTNpVA+4uJfdQ2SWduAy0HX5V2TMgv5Hix1/nVkaHRk/y7aW2EebyTQHtRlzDnVTpYCdpJCTbNDsYXVs42jaIDb0eFBrg0/EK8vJNiI2NhdEomRSrGiAhIUFhPx8fH9FLJC09nbxhUgLY0dERf588go4RXdCwRjlELa9QqqaAzHEvE2gw8Abik82ZMPL9wGeDsPgDd/n+fxuw8AR1MZkMeO+be5i7Wi31ruXscXJNFVQKKD3JJ8vuNzkdm/cm4tt5X+LlV0aLdCON0JHQkzRCX0JnhRH1wkDiNebmSsSgHPR83+5Yv3ELZk2shtF9Sz9sK4QBL32YgLU7pJCFNkcHA5Z8FILnOxLzU7pIKyt+OXgW6P3ONaRlqM1Yw1qeOLg4oNQZ+rcD+eg7IQ5NGodj829/wNPTU0n5Ejo+VBTAMwBxIHx8vERuurihGqoElT4TEIJsPlCIgZNikS8fNKVEqhjogl++CEDjmqXjLZcF8a/GCxgw+Sb+vmj5XoMZ4ypiTH+S3i1dJk5Ot0dIlwuwszMi+lIM7O0dFCeerNEqA7AvjyYd6Ylb8hYRo1GyvwUFBcjLkzj51s1YNGjQGG6uDri1LRSOdqXrD1CiZOUa8Ny78dgbJakutlWt6ID5k0PxdGN6KUJZkLI4Ywo4GSNg1Be3cfRshsWDNSo7Y893wfDzLF3Ck4mIc1mtdxxuJt7H/r3b0bSZdLqL0IvQjTRCR0JP0gh9qWCT/y1eH09TwTQM1OKgTRs34M233kJ4bU8cWeqvU+BRHATq9z10rhC9x91AapplROBWzoCJL/lh1AtecBXvNni0jZS9rdmei6kL45F41xI+Zycjfpgagn4dyHuYS5/4ZLW9J97BH5GpGDP6Vcyas0jx4bRMuMgwhYXq18fbEgZqqZABA17A2rVrMaRnBfzwPsnll80CRa6FgFXb7mPMV7eQma29MRVW2RVjBvrg+afLwUvcwi4beMj5x02RBZj3YwpOnE/VfKm10WjAR6/7YuIQTxjE+xLLpn2+9B4+WpSMp5rUw6+/7YSfn1/xGaC4JoCEL8QpNJkK0bBhA1y+HIPP366ICYNKL5Ghhy6JEfIwbtZtC+eKfcbD1Yh2TdzQ72lPtGvkhABvUhNbfHNhMglIyTDh0NkCrP4jFX+eyEJyin5ugkj8+8N9MW6wF+yNZauRNkUWov/EK6hY3g9nz8eI6p7WcxTLBBQnCuBVCAkpGjWshfjEVCydVhuDSymPXbS8CDh0HiCl55HH7xX5anlSh+Hq4gBvDwFVQ7xQI5hUI9nD3Y185yzmH24nZorX5V++5YCYuFSkZgDpmfdtGrtWqAtmjiuPiMZGCJo3nxe9ouL02HM8D11GXhPDvKTEeLi5S1m+xMREZTfXmgm3eTOIjwK0bIi9vR1CQkJEx2L7ApK4Ifbu0TVy2mXtXhPmrryFs5ezVZsrZQUFYaiQIBeMGuCPYT2c4e5cGvUStkF7MsaIFi9Fg5iZ40ePoG59elTsIRnA1kSQu7tUScrvJxO7QzgvNLSKmHB4HExAUZdXYMCxi4VYuSUNOw9l4EZCTpESbBvaAX9ve0Q098TQ7p5oUdcIZ4eyVfFacBHit3wpWiyP/HPfLoRWqyPafdrYeg5CL5sSQQ/rBNJJ4+PjxY9kvzk8vKHIBD/PrI0+rUtnW9NWAmn1I3V2yWkCzlwBrt5Ix66jD5CamoWbd+2Qlp6L7BwzjI6OdvByd0JFv3y4u5VDu8blUKOyExqGCfD3JN5HyffoS7KWPcdy0WXUDZBLOY9FHUKD8GbicBT/5DNR7ex2vi0a/KHCQNaGsAAQ7RAWVk00B5+ProAJg0te01YSpP2vPEsdPnt7o7jD16IVudZXak8UAxDGSEm5izq1qiH5bjpGDgzGnDEkOii7UOh/hch666ChHlHnR48chF9ARVVFT4kZoCRRAAE6KChIgd3shRaiffv2YojYOtwd2+cHwd7u8arQfxqjEKPTZ2KymOQpH+iLs+ei4enlbZHI0ca/uZ6DrLvU9gKoE0gITZseAJ6eHnhx8EBs3LQZvp72OLKyCoL9/tUEtjAiye03G3JFTO+SJM+OXQfAOuG24P+RhYFFceD8eXMwZuw4kNe6fz+1MoY8U3ZpUVuQ+6T3Ibt6/d+9Jl4JR9K7k97/TMzj6xV0FIX/IjWAXlm4rWFEcrJ0fQlpevUEcXFX0bnzM+K9dOSyiM2zg+Ds8K9JYJmRFHMM+OCeuJ/v6GCHHdu3oFWbp8Uu1vbzbcE/8R/0wvhSjQKshSGuri7o3as7tm7bJb5PYPX0Kujdhr+v90mXz7KB78j5AnQdGYfMnEJxP3/d+o3w9w+waT+/xE5gaeUBCGpsiUO3bF6Lfv1fxP28fITXcsevs4MQ6PX/UxuQ6t1+78aLBZxky3b2zGl4/oWh4patrTa8xAygdTiUENPW/WRnZ/MmkC31BGQziWiAFwcPwK+/Sdefj3jOF7PH+cPR7vEnj8pGxtWjkj38yQuz8PXKW2LqulXLp/DjT+vg4+Mr1gqWNf5Vh0PLJgy0LQw5d/YkunTphlu348UM14cj/PDuS54wah2HfhSUKeM5yFm9hRtyMXneTeTeL4SvjweWLluOxo2biVJviwbl9/NL7AQ+TgYg+E5ISMDunVswcvQYpKdnwc5OwOThAXhvqLf8OvsypsojGF4ifA7en3cbOfelbdu5c+dgxIjXxfXT9lgY4HGYAFYF5eRI9woTG7hh3RqMHjMeWVnZYtjYv7MvPh/phYr/0PwBiec//f4Ovt9wBwUFhXB0sMenn7yPN0eOh9Eo7ZrS9ZPPD7Of/zAmuMj7AQgwj8oJ4VUYmXvXjt8x8b0pinQEBzph+tuB6N3WCQ5lVINYWoqAhHN/HCrElG/jcfFqpjisr48nPp/+JV55ZYSo6kszkVNiJ/BRRwHFsWHX4mIwfvwYbNu+V7wvj2iFhjXdMO5F7yeKGQjR95wAZq1IwJ/H08V3/RFnrkmTxpg5YzrqN2gCDw/pcG1x1k8l1Voqt8QM8CgSQdYSEbbsZ2dlZWDThnWYPv0zXLxkPlUc6OeE/p08MaSbG2pVtoODWIZV9ulmcvT6arwRa3fl4Pv18YhPuq/MGhJcHhMnjEW/5wdLV93KB2us1VNQ7fMw+/klTgQ9biewuByck52FtT+vwcKF3+DkqfPIzzdX4/h52SG8tjfahDujTbgD6oUKcHIwyvV5xWUMAfkFgnjM6vRV4MjZB4g6m4EDJ9KQeCdPITipxa9XpybGvjMG7do9DXsH6f6dx2VCbanqLtWSsJKGIcVlAFaFkpA5MyMNW37fiFWrf8b58xeQm2smDiEEMRvktBup/QvwKoBgMCKkvIcYbfh6SzeT3LmbCfLO6+u302AqLEBiqhEpaTkgl6UQ00MbidCNdnaoXr0anuvTB926PYsmTVso5ycepiavJOsncJUU/8pl0WSwxxGGlCYCkpKScP9+LpLiryL60lXs3B2J2JgzuHTlFnJz0pGVlWtx2oh3/ojt9nB3Ft+qWTHIAzXrNEXHto1Qp14T1KkbDidnlyfKiSspA/wfxVSkJTUciboAAAAASUVORK5CYII="
}

@otykier otykier closed this as completed Aug 24, 2020
SergioMurru pushed a commit to SergioMurru/TabularEditor that referenced this issue Feb 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question General questions on how to do certain things in Tabular Editor
Projects
None yet
Development

No branches or pull requests

3 participants