diff --git a/README.md b/README.md index 8b10e6960..6864725ce 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# odex25-standard-moduless +# odex25-standard-modules This Repo contains general standard modules for all projects. diff --git a/odex-event/README.md b/odex-event/README.md new file mode 100644 index 000000000..f86728193 --- /dev/null +++ b/odex-event/README.md @@ -0,0 +1 @@ +# takaful-project \ No newline at end of file diff --git a/odex-event/event_custom/__init__.py b/odex-event/event_custom/__init__.py new file mode 100644 index 000000000..cde864bae --- /dev/null +++ b/odex-event/event_custom/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models diff --git a/odex-event/event_custom/__manifest__.py b/odex-event/event_custom/__manifest__.py new file mode 100644 index 000000000..1e79e55bc --- /dev/null +++ b/odex-event/event_custom/__manifest__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +{ + 'name': 'Events Custom', + 'version': '1.0', + 'website': 'https://www.odoo.com/page/events', + 'category': 'Odex25-Event/Odex25-Event', + 'summary': 'Add Extra Features to Event stander module', + 'description': """ +Events Custom. +============== + +Key Features +------------ +* Edit in Email Schedule Add appility to send emails to Attendees after change in tracks +* ... +""", + 'depends': ['website_event_track','dms','project'], + 'data': [ + 'data/email_template_data.xml', + 'views/dms_file_view.xml', + 'views/event_views.xml', + 'report/event_cards.xml', + ], + 'installable': True, + 'auto_install': False, +} diff --git a/odex-event/event_custom/data/email_template_data.xml b/odex-event/event_custom/data/email_template_data.xml new file mode 100644 index 000000000..165bba382 --- /dev/null +++ b/odex-event/event_custom/data/email_template_data.xml @@ -0,0 +1,56 @@ + + + + + Event: Change in Tracks + + ${(object.event_id.organizer_id.email or object.event_id.user_id.email or '')|safe} + ${object.partner_id.email or object.email|safe} + ${object.partner_id.lang} + + Some event Tracks has been changed : ${object.event_id.name} + +% set date_begin = format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%SZ') +% set date_end = format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%SZ') + + + + + + + + + +
+ + ${object.company_id.name} + + + +

Details of the event Track changes

+
    +% for line in object.event_id.event_mail_ids: +% if line.interval_type == 'after_change_tracks': +% for rec in line.mail_track_ids: +% if not rec.mail_sent: + +
  • + Track ${rec.track_id.name} changed From ${rec.change_date_from} To ${rec.change_date_to} +
  • +% endif +% endfor +% endif +% endfor +
+
+ % if 'website_url' in object.website_url and object.event_id.website_url: + View Event + % endif +
+ + ]]>
+
+ +
+
diff --git a/odex-event/event_custom/i18n/ar_SY.po b/odex-event/event_custom/i18n/ar_SY.po new file mode 100644 index 000000000..ae1c60ae8 --- /dev/null +++ b/odex-event/event_custom/i18n/ar_SY.po @@ -0,0 +1,495 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * event_custom +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-10 21:22+0000\n" +"PO-Revision-Date: 2023-02-10 21:22+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: event_custom +#: model:mail.template,body_html:event_custom.event_subscription +msgid "\n" +"
\n" +"% set date_begin = format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%SZ')\n" +"% set date_end = format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%SZ')\n" +" \n" +" \n" +" \n" +" \n" +" \n" +"\n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \"${object.company_id.name}\"\n" +" \n" +" \n" +"\n" +"

Details of the event Track changes

\n" +"
    \n" +"% for line in object.event_id.event_mail_ids:\n" +"% if line.interval_type == 'after_change_tracks':\n" +"% for rec in line.mail_track_ids:\n" +"% if not rec.mail_sent:\n" +"\n" +"
  • \n" +" Track ${rec.track_id.name} changed From ${rec.change_date_from} To ${rec.change_date_to}\n" +"
  • \n" +"% endif\n" +"% endfor\n" +"% endif\n" +"% endfor\n" +"
\n" +"
\n" +" % if 'website_url' in object.website_url and object.event_id.website_url:\n" +" View Event\n" +" % endif\n" +"
\n" +"
\n" +" " +msgstr "\n" +"
\n" +"% set date_begin = format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%SZ')\n" +"% set date_end = format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%SZ')\n" +" \n" +" \n" +" \n" +" \n" +" \n" +"\n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \"${object.company_id.name}\"\n" +" \n" +" \n" +"\n" +"

Details of the event Track changes

\n" +"
    \n" +"% for line in object.event_id.event_mail_ids:\n" +"% if line.interval_type == 'after_change_tracks':\n" +"% for rec in line.mail_track_ids:\n" +"% if not rec.mail_sent:\n" +"\n" +"
  • \n" +" Track ${rec.track_id.name} changed From ${rec.change_date_from} To ${rec.change_date_to}\n" +"
  • \n" +"% endif\n" +"% endfor\n" +"% endif\n" +"% endfor\n" +"
\n" +"
\n" +" % if 'website_url' in object.website_url and object.event_id.website_url:\n" +" View Event\n" +" % endif\n" +"
\n" +"
\n" +" " + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_event_benefit_club_id +msgid "Benefit Club" +msgstr "نادي المستفيدين" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.view_event_search +msgid "Cancelled" +msgstr "ملغى " + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_sponsor_event_type_id +msgid "Category" +msgstr "النوع" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.print_event_card1 +#: model:ir.ui.view,arch_db:event_custom.print_event_card2 +#: model:ir.ui.view,arch_db:event_custom.print_event_card3 +#: model:ir.ui.view,arch_db:event_custom.print_event_card4 +msgid "Company Logo" +msgstr "شعار الشركة" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_sponsor_type_sponsor_cost +msgid "Cost" +msgstr "التكلفة" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_create_uid +msgid "Created by" +msgstr "أنشئ بواسطة" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_create_date +msgid "Created on" +msgstr "أنشئ في" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_display_name +msgid "Display Name" +msgstr "الاسم المعروض" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.view_event_search +msgid "Done" +msgstr "منتهي" + +#. module: event_custom +#: model:ir.model,name:event_custom.model_event_event +#: model:ir.model.fields,field_description:event_custom.field_muk_dms_file_event_id +msgid "Event" +msgstr "الحدث" + +#. module: event_custom +#: model:ir.model,name:event_custom.model_event_mail +msgid "Event Automated Mailing" +msgstr "إرسال رسائل الفعاليات تلقائيًا" + +#. module: event_custom +#: code:addons/event_custom/models/event.py:79 +#, python-format +msgid "Event Files" +msgstr "Event Files" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_event_image +#: model:ir.ui.view,arch_db:event_custom.print_event_card1 +#: model:ir.ui.view,arch_db:event_custom.print_event_card2 +#: model:ir.ui.view,arch_db:event_custom.print_event_card3 +#: model:ir.ui.view,arch_db:event_custom.print_event_card4 +msgid "Event Image" +msgstr "Event Image" + +#. module: event_custom +#: code:addons/event_custom/models/event.py:98 +#, python-format +msgid "Event Mails" +msgstr "Event Mails" + +#. module: event_custom +#: model:ir.model,name:event_custom.model_event_sponsor +msgid "Event Sponsor" +msgstr "Event Sponsor" + +#. module: event_custom +#: model:ir.model,name:event_custom.model_event_sponsor_type +msgid "Event Sponsor Type" +msgstr "Event Sponsor Type" + +#. module: event_custom +#: model:ir.model,name:event_custom.model_event_track +msgid "Event Track" +msgstr "Event Track" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_sponsor_date +msgid "Event date" +msgstr "Event date" + +#. module: event_custom +#: model:ir.ui.menu,name:event_custom.menu_event_sponsor +msgid "Events Sponsor" +msgstr "Events Sponsor" + +#. module: event_custom +#: model:ir.ui.menu,name:event_custom.menu_event_track +msgid "Events Tracks" +msgstr "فقرات الفعالية" + +#. module: event_custom +#: model:ir.actions.act_window,name:event_custom.action_event_sponsor_view +msgid "Events sponsor" +msgstr "Events sponsor" + +#. module: event_custom +#: model:ir.actions.act_window,name:event_custom.action_event_track_view +msgid "Events track" +msgstr "Events track" + +#. module: event_custom +#: model:ir.model,name:event_custom.model_muk_dms_file +msgid "File" +msgstr "الملف" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_event_count_files +#: model:ir.model.fields,field_description:event_custom.field_event_event_event_dms_file_ids +#: model:ir.ui.view,arch_db:event_custom.view_event_form +msgid "Files" +msgstr "الملفات" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_id +msgid "ID" +msgstr "المعرف" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track___last_update +msgid "Last Modified on" +msgstr "آخر تعديل في" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.view_event_search +#: model:ir.ui.view,arch_db:event_custom.view_event_sponsor_search +#: model:ir.ui.view,arch_db:event_custom.view_event_track_search +msgid "Last Month" +msgstr "آخر شهر" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_write_uid +msgid "Last Updated by" +msgstr "آخر تحديث بواسطة" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_write_date +msgid "Last Updated on" +msgstr "آخر تحديث في" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.view_event_search +#: model:ir.ui.view,arch_db:event_custom.view_event_sponsor_search +#: model:ir.ui.view,arch_db:event_custom.view_event_track_search +msgid "Last Year" +msgstr "السنة السابقة" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_track_location_location_url +msgid "Location URL" +msgstr "موقع الحدث" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_scheduler_id +msgid "Mail Scheduler" +msgstr "مجدول رسائل البريد" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_mail_sent +msgid "Mail Sent" +msgstr "تم إرسال الرسالة" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_mail_track_ids +msgid "Mail Track" +msgstr "Mail Track" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_event_count_mails +#: model:ir.ui.view,arch_db:event_custom.view_event_form +msgid "Mails" +msgstr "Mails" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_event_directory_id +msgid "Main directory" +msgstr "ملفات المسابقة" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_change_date_to +msgid "New Time" +msgstr "New Time" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_change_date_from +msgid "Old Time" +msgstr "Old Time" + +#. module: event_custom +#: model:ir.actions.report,name:event_custom.hr_event_print_card2 +msgid "Print female Organizer card" +msgstr "Print female Organizer card" + +#. module: event_custom +#: model:ir.actions.report,name:event_custom.hr_event_print_card4 +msgid "Print female volunteer card" +msgstr "Print female volunteer card" + +#. module: event_custom +#: model:ir.actions.report,name:event_custom.hr_event_print_card1 +msgid "Print male Organizer card" +msgstr "Print male Organizer card" + +#. module: event_custom +#: model:ir.actions.report,name:event_custom.hr_event_print_card3 +msgid "Print male volunteer card" +msgstr "Print male volunteer card" + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_event_project_id +msgid "Project" +msgstr "المشروع" + +#. module: event_custom +#: model:mail.template,subject:event_custom.event_subscription +msgid "Some event Tracks has been changed : ${object.event_id.name}" +msgstr "Some event Tracks has been changed : ${object.event_id.name}" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.event_sponsor_view_pivot +msgid "Sponsor" +msgstr "كفيل" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.view_event_search +#: model:ir.ui.view,arch_db:event_custom.view_event_sponsor_search +#: model:ir.ui.view,arch_db:event_custom.view_event_track_search +msgid "This Month" +msgstr "هذا الشهر" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.view_event_search +#: model:ir.ui.view,arch_db:event_custom.view_event_sponsor_search +#: model:ir.ui.view,arch_db:event_custom.view_event_track_search +msgid "This Year" +msgstr "هذه السنة" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.event_track_view_pivot +msgid "Track" +msgstr "مسار" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.view_event_mail_form +msgid "Track Changes Mails" +msgstr "Track Changes Mails" + +#. module: event_custom +#: model:ir.model,name:event_custom.model_event_track_location +msgid "Track Location" +msgstr "موقع المسار " + +#. module: event_custom +#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_track_id +msgid "Tracks" +msgstr "فقرات الفعالية" + +#. module: event_custom +#: model:ir.model,name:event_custom.model_event_mail_track +msgid "Tracks change Mail Scheduler" +msgstr "Tracks change Mail Scheduler" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.print_event_card1 +#: model:ir.ui.view,arch_db:event_custom.print_event_card2 +#: model:ir.ui.view,arch_db:event_custom.print_event_card3 +#: model:ir.ui.view,arch_db:event_custom.print_event_card4 +msgid "sponsor Image" +msgstr "sponsor Image" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.print_event_card3 +msgid "متطوع" +msgstr "متطوع" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.print_event_card4 +msgid "متطوعة" +msgstr "متطوعة" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.print_event_card1 +msgid "منظم" +msgstr "منظم" + +#. module: event_custom +#: model:ir.ui.view,arch_db:event_custom.print_event_card2 +msgid "منظمة" +msgstr "منظمة" + +#. module: event +#: model:event.type,name:event.event_type_data_online +#: model:ir.ui.view,arch_db:event.view_event_form +msgid "Online" +msgstr "عن بُعد" + +#. module: website_event +#: model:ir.model.fields,field_description:website_event.field_event_event_website_menu +msgid "Dedicated Menu" +msgstr "حضوري" + +#. module: website_event_track +#: model:ir.model.fields,field_description:website_event_track.field_event_track_partner_id +msgid "Speaker" +msgstr "المتحدث" + +#. module: website_event_track +#: model:ir.model.fields,field_description:website_event_track.field_event_track_partner_name +msgid "Speaker Name" +msgstr "اسم المتحدث" + +#. module: website_event_track +#: model:ir.model.fields,field_description:website_event_track.field_event_track_partner_phone +msgid "Speaker Phone" +msgstr "هاتف المتحدث" + +#. module: website_event_track +#: code:addons/website_event_track/models/event_track.py:159 +#: model:ir.model.fields,field_description:website_event_track.field_event_track_partner_email +#, python-format +msgid "Speaker Email" +msgstr "البريد الالكتروني للمتحدث" + +#. module: website_event_track +#: model:ir.actions.act_window,name:website_event_track.action_event_sponsor_from_event +#: model:ir.actions.act_window,name:website_event_track.action_event_track +#: model:ir.actions.act_window,name:website_event_track.action_event_track_from_event +#: model:ir.ui.menu,name:website_event_track.menu_event_track +#: model:ir.ui.view,arch_db:website_event_track.view_event_track_calendar +#: model:ir.ui.view,arch_db:website_event_track.view_event_track_search +msgid "Event Tracks" +msgstr "فقرات الفعالية" + +#. module: event +#: model:ir.ui.menu,name:event.menu_event_mail_schedulers +msgid "Mail Schedulers" +msgstr "الرسائل المجدولة للفعالية" + +#. module: website_event_track +#: model:ir.model.fields,field_description:website_event_track.field_event_event_track_count +#: model:ir.model.fields,field_description:website_event_track.field_event_event_track_ids +#: model:ir.model.fields,field_description:website_event_track.field_event_track_tag_track_ids +#: model:ir.ui.view,arch_db:website_event_track.view_event_track_graph +msgid "Tracks" +msgstr "فقرات الفعالية" + +#. module: sale_timesheet +#: model:ir.model.fields,field_description:sale_timesheet.field_project_task_sale_line_id +#: model:ir.ui.view,arch_db:sale_timesheet.view_sale_service_inherit_form2 +msgid "Sales Order Item" +msgstr "تكلفة تنفيذ المهمة" + +#. module: project +#: model:ir.ui.view,arch_db:project.project_planner +msgid "Tasks analysis" +msgstr "تقرير مالي للفعالية" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/xml/base.xml:508 code:addons/web/static/src/xml/base.xml:535 +#, python-format +msgid "Measures" +msgstr "عناصر فرز التقرير" + +#. module: project +#: model:ir.actions.act_window,name:project.action_project_task_user_tree +#: model:ir.actions.act_window,name:project.action_project_task_user_tree_filtered +#: model:ir.ui.menu,name:project.menu_project_report_task_analysis +#: model:ir.ui.view,arch_db:project.view_task_project_user_graph +#: model:ir.ui.view,arch_db:project.view_task_project_user_pivot +#: model:ir.ui.view,arch_db:project.view_task_project_user_search +msgid "Tasks Analysis" +msgstr "تقرير مالي للفعالية" + diff --git a/odex-event/event_custom/models/__init__.py b/odex-event/event_custom/models/__init__.py new file mode 100644 index 000000000..0060e6962 --- /dev/null +++ b/odex-event/event_custom/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- + +from . import event +from . import event_mail +from . import dms_file diff --git a/odex-event/event_custom/models/dms_file.py b/odex-event/event_custom/models/dms_file.py new file mode 100644 index 000000000..cd4fe0fbe --- /dev/null +++ b/odex-event/event_custom/models/dms_file.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- + +from odoo import models, api, fields, tools + + + +class File(models.Model): + _inherit = 'dms.file' + + event_id = fields.Many2one('event.event', 'Event') \ No newline at end of file diff --git a/odex-event/event_custom/models/event.py b/odex-event/event_custom/models/event.py new file mode 100644 index 000000000..e68bcce55 --- /dev/null +++ b/odex-event/event_custom/models/event.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- + +from odoo import _, api, fields, models + +class Track(models.Model): + _inherit = "event.track" + + + # @api.multi + def write(self, vals): + if 'date' in vals: + onchange_schedulers = self.event_id.event_mail_ids.filtered(lambda s: s.interval_type == 'after_change_tracks') + onchange_schedulers.with_context(track_change={'id':self.id,'change_date_from':self.date,'change_date_to':vals['date']}).execute() + res = super(Track, self).write(vals) + return res + +class EventEvent(models.Model): + _inherit = 'event.event' + + directory_id = fields.Many2one('muk_dms.directory', 'Main directory') + benefit_club_id = fields.Many2one('benefit.club', 'Benefit Club',domain =[('state', '=', 'approve')]) + event_dms_file_ids = fields.One2many('dms.file', 'event_id', string='Files', copy=False) + count_files = fields.Integer( + compute='_compute_count_files', + store=True, + string="Files") + event_mail_ids = fields.One2many('event.mail', 'event_id', string='Mails', copy=False) + count_mails = fields.Integer( + compute='_compute_count_mail', + store=True, + string="Mails") + image = fields.Binary("Event Image", attachment=True) + project_id = fields.Many2one('project.project',string='Project',index=True,tracking=True) + + # @api.multi + def write(self, vals): + res = super(EventEvent, self).write(vals) + for benifit in self.benefit_club_id.benefit_ids: + values = { + 'email': benifit.email, + 'event_id': self.id, + 'name': benifit.name, + 'phone': benifit.phone} + registration_exist = self.env['event.registration'].search( + [('email', '=', benifit.email), ('event_id', '=', self.id)], limit=1) + if registration_exist: + continue; + else: + self.env['event.registration'].create(values) + return res + + # @api.onchange('benefit_club_id') + # def onchange_benefit_club_id(self): + # for record in self: + # for benifit in record.benefit_club_id.benefit_ids: + # values = { + # 'email': benifit.email, + # 'event_id': self._origin.id, + # 'name': benifit.name, + # 'phone': benifit.phone } + # record.env['event.registration'].create(values) + # # record.write({'registration_ids':values}) + + @api.depends('event_dms_file_ids') + def _compute_count_files(self): + for record in self: + record.count_files = len(record.event_dms_file_ids) + + @api.depends('event_mail_ids') + def _compute_count_mail(self): + for record in self: + record.count_mails = len(record.event_mail_ids) + + @api.model + def create(self, vals): + res = super(EventEvent, self).create(vals) + if not res.directory_id: + directory = self.env['muk_dms.directory'].sudo().create({ + 'name': res.name, + 'is_root_directory': True, + #TODO review how to get settings + 'settings': self.env['muk_dms.settings'].search([],limit=1).id, + }) + res.directory_id = directory.id + return res + + # @api.multi + def action_open_files(self): + """ + """ + ctx = dict( + default_event_id=self.id, + default_directory=self.directory_id.id, + ) + return { + 'name': _('Event Files'), + 'type': 'ir.actions.act_window', + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'dms.file', + 'target': 'current', + 'context': ctx, + 'domain':[("event_id", "=", self.id)] + } + + # @api.multi + def action_open_mail(self): + """ + """ + ctx = dict( + default_event_id=self.id, + default_directory=self.directory_id.id, + ) + return { + 'name': _('Event Mails'), + 'type': 'ir.actions.act_window', + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'event.mail', + 'target': 'current', + 'context': ctx, + 'domain': [("event_id", "=", self.id)] + } + + +class Sponsor(models.Model): + _inherit = "event.sponsor" + + date = fields.Datetime(string='Event date', related="event_id.date_begin",store=True) + event_type_id = fields.Many2one('event.type', string='Category',related="event_id.event_type_id",store=True) + +class SponsorType(models.Model): + _inherit = "event.sponsor.type" + + sponsor_cost = fields.Float("Cost") + +class TrackLocation(models.Model): + _inherit = "event.track.location" + + location_url = fields.Char("Location URL") + + diff --git a/odex-event/event_custom/models/event_mail.py b/odex-event/event_custom/models/event_mail.py new file mode 100644 index 000000000..2dbd18de4 --- /dev/null +++ b/odex-event/event_custom/models/event_mail.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- + +from datetime import datetime +from dateutil.relativedelta import relativedelta + +from odoo import api, fields, models, tools +from odoo.tools import exception_to_unicode +from odoo.tools.translate import _ + +import random +import logging +_logger = logging.getLogger(__name__) + +_INTERVALS = { + 'hours': lambda interval: relativedelta(hours=interval), + 'days': lambda interval: relativedelta(days=interval), + 'weeks': lambda interval: relativedelta(days=7*interval), + 'months': lambda interval: relativedelta(months=interval), + 'now': lambda interval: relativedelta(hours=0), +} + + + +class EventMailScheduler(models.Model): + _inherit = 'event.mail' + + interval_type = fields.Selection(selection_add = [('after_change_tracks', 'After Change in Tracks')],ondelete={'after_change_tracks': 'set default'}) + mail_track_ids = fields.One2many('event.mail.track', 'scheduler_id') + + # @api.one + @api.depends('mail_sent', 'interval_type', 'event_id.registration_ids','mail_track_ids','mail_track_ids.mail_sent', 'mail_registration_ids') + def _compute_done(self): + """ + overwrite to include new interval type After Change in Tracks + """ + if self.interval_type in ['before_event', 'after_event']: + self.done = self.mail_sent + elif self.interval_type in ['after_sub']: + self.done = len(self.mail_registration_ids) == len(self.event_id.registration_ids) and all(mail.mail_sent for mail in self.mail_registration_ids) + else: + self.done = all(mail.mail_sent for mail in self.mail_track_ids) + + # @api.one + def execute(self): + """ + inherit to include new interval type After Change in Tracks + """ + result = super(EventMailScheduler, self).execute() + now = fields.Datetime.now() + if self.interval_type == 'after_change_tracks' and self._context.get('track_change',False): + # update Tracks change lines + track_change = self._context.get('track_change',False) + lines = [ + (0, 0, {'track_id': track_change['id'],'change_date_from':track_change['change_date_from'],'change_date_to':track_change['change_date_to']}) + ] + if lines: + self.write({'mail_track_ids': lines}) + # execute scheduler on registrations + self.mail_track_ids.execute() + return result + + + +class EventMailRegistration(models.Model): + _name = 'event.mail.track' + _description = 'Tracks change Mail Scheduler' + _rec_name = 'scheduler_id' + _order = 'change_date_to DESC' + + scheduler_id = fields.Many2one('event.mail', 'Mail Scheduler', required=True, ondelete='cascade') + track_id = fields.Many2one('event.track', 'Tracks', required=True, ondelete='cascade') + change_date_from = fields.Datetime('Old Time') + change_date_to = fields.Datetime('New Time') + mail_sent = fields.Boolean('Mail Sent') + + # @api.one + def execute(self): + if not self.mail_sent: + for registration in self.track_id.event_id.registration_ids: + self.scheduler_id.template_id.send_mail(registration.id) + self.write({'mail_sent': True}) diff --git a/odex-event/event_custom/report/event_cards.xml b/odex-event/event_custom/report/event_cards.xml new file mode 100644 index 000000000..7088d3c4c --- /dev/null +++ b/odex-event/event_custom/report/event_cards.xml @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odex-event/event_custom/views/dms_file_view.xml b/odex-event/event_custom/views/dms_file_view.xml new file mode 100644 index 000000000..df58b3693 --- /dev/null +++ b/odex-event/event_custom/views/dms_file_view.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + diff --git a/odex-event/event_custom/views/event_views.xml b/odex-event/event_custom/views/event_views.xml new file mode 100644 index 000000000..8e3149e14 --- /dev/null +++ b/odex-event/event_custom/views/event_views.xml @@ -0,0 +1,208 @@ + + + + + + event.mail.form + event.mail + + + + + + + + + + + + + + + + + + + event.track.location_inherit + event.track.location + + + + + + + + + + sponsor_type_inherit + event.sponsor.type + + + + + + + + + + sponsor_type_list_inherit + event.sponsor.type + + + + + + + + + + event.event.form + event.event + + + + + + + + + + + + + + + + + + + event.event.search + event.event + + + + + + + + + + + + + + + + + + + + + + event.track.search + event.track + + + + + + + + + + + + + + + event.event.view.pivot + event.event + + + + + + + + + + + + + + + + + + + + + event.track.view.pivot + event.track + + + + + + + + + + Events track + ir.actions.act_window + event.track + + pivot + + + + + website_event_track.view_event_sponsor_search.search + event.sponsor + + + + + + + + + + + + + + + event.sponsor.view.pivot + event.sponsor + + + + + + + + + + + + Events sponsor + ir.actions.act_window + event.sponsor + + pivot + + + + + + + + + diff --git a/odex-event/event_website_custom/__init__.py b/odex-event/event_website_custom/__init__.py new file mode 100644 index 000000000..153a9e31e --- /dev/null +++ b/odex-event/event_website_custom/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import controllers diff --git a/odex-event/event_website_custom/__manifest__.py b/odex-event/event_website_custom/__manifest__.py new file mode 100644 index 000000000..86311f834 --- /dev/null +++ b/odex-event/event_website_custom/__manifest__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +{ + 'name': 'Events Website Custom', + 'version': '1.0', + 'website': 'https://www.odoo.com/page/events', + 'category': 'Odex25-Event/Odex25-Event', + 'summary': 'Add Extra Features to Event stander module', + 'description': """ +Events Custom. +============== + +Key Features +------------ +* Edit in Email Schedule Add appility to send emails to Attendees after change in tracks +* ... +""", + 'depends': ['event_custom'], + 'data': [ + "views/events.xml", + "views/event_details.xml" + ], + 'installable': True, + 'auto_install': False, +} diff --git a/odex-event/event_website_custom/controllers/__init__.py b/odex-event/event_website_custom/controllers/__init__.py new file mode 100644 index 000000000..457bae27e --- /dev/null +++ b/odex-event/event_website_custom/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import controllers \ No newline at end of file diff --git a/odex-event/event_website_custom/controllers/controllers.py b/odex-event/event_website_custom/controllers/controllers.py new file mode 100644 index 000000000..f1c907cec --- /dev/null +++ b/odex-event/event_website_custom/controllers/controllers.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from odoo import http,_ +from odoo.http import request +import json + + +class Event_sponsor(http.Controller): + @http.route('/sponser/form', type='http', auth='public', methods=['GET']) + def get_sponser_form(self): + sponsoring_types = request.env['event.sponsor.type'].sudo().search([]) + li = ['sequence','name'] + if sponsoring_types: + data = {'status': True, 'msg': (_('Sponsoring Types Found')), 'data':sponsoring_types.read(li)} + else: + data = {'status': False, 'msg': (_('Sponsoring Types Not Found')), 'data': {}} + return json.dumps(data) + + @http.route('/sponsor/submit', type='http', auth='public', csrf=False,methods=['POST']) + def sponsor_submit(self,id,**kw): + values = {} + for field_name, field_value in kw.items(): + values[field_name] = field_value + if field_name == 'event_id': + field_value = request.env['event.event'].browse(int(id)).id + values[field_name] = field_value + sponsor = request.env['event.sponsor'].sudo().create(values) + li = ['event_id','partner_id', 'url', 'sponsor_type_id'] + if sponsor: + data = {'status': True, 'msg': (_('sponsor Registered')), 'data': sponsor.read(li)} + else: + data = {'status': False, 'msg': (_('sponsor Not Registered')), 'data': {}} + return json.dumps(data) + + diff --git a/odex-event/event_website_custom/static/description/icon.png b/odex-event/event_website_custom/static/description/icon.png new file mode 100644 index 000000000..4141f52da Binary files /dev/null and b/odex-event/event_website_custom/static/description/icon.png differ diff --git a/odex-event/event_website_custom/static/fonts/Cairo-Bold.ttf b/odex-event/event_website_custom/static/fonts/Cairo-Bold.ttf new file mode 100644 index 000000000..6b851bd65 Binary files /dev/null and b/odex-event/event_website_custom/static/fonts/Cairo-Bold.ttf differ diff --git a/odex-event/event_website_custom/static/fonts/Cairo-Regular.ttf b/odex-event/event_website_custom/static/fonts/Cairo-Regular.ttf new file mode 100644 index 000000000..d64275177 Binary files /dev/null and b/odex-event/event_website_custom/static/fonts/Cairo-Regular.ttf differ diff --git a/odex-event/event_website_custom/static/fonts/Cairo-SemiBold.ttf b/odex-event/event_website_custom/static/fonts/Cairo-SemiBold.ttf new file mode 100644 index 000000000..57fe37982 Binary files /dev/null and b/odex-event/event_website_custom/static/fonts/Cairo-SemiBold.ttf differ diff --git a/odex-event/event_website_custom/static/icons/arrow.png b/odex-event/event_website_custom/static/icons/arrow.png new file mode 100644 index 000000000..13bd93e73 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/arrow.png differ diff --git a/odex-event/event_website_custom/static/icons/avatars/girl.png b/odex-event/event_website_custom/static/icons/avatars/girl.png new file mode 100644 index 000000000..1e6f2d59b Binary files /dev/null and b/odex-event/event_website_custom/static/icons/avatars/girl.png differ diff --git a/odex-event/event_website_custom/static/icons/avatars/man.png b/odex-event/event_website_custom/static/icons/avatars/man.png new file mode 100644 index 000000000..fb13a5995 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/avatars/man.png differ diff --git a/odex-event/event_website_custom/static/icons/avatars/man2.png b/odex-event/event_website_custom/static/icons/avatars/man2.png new file mode 100644 index 000000000..a77618f9b Binary files /dev/null and b/odex-event/event_website_custom/static/icons/avatars/man2.png differ diff --git a/odex-event/event_website_custom/static/icons/login/logo-1.png b/odex-event/event_website_custom/static/icons/login/logo-1.png new file mode 100644 index 000000000..e3b9e6da9 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/login/logo-1.png differ diff --git a/odex-event/event_website_custom/static/icons/logo.png b/odex-event/event_website_custom/static/icons/logo.png new file mode 100644 index 000000000..c253f93f7 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/logo.png differ diff --git a/odex-event/event_website_custom/static/icons/logo2.png b/odex-event/event_website_custom/static/icons/logo2.png new file mode 100644 index 000000000..a93e42942 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/logo2.png differ diff --git a/odex-event/event_website_custom/static/icons/logo3.png b/odex-event/event_website_custom/static/icons/logo3.png new file mode 100644 index 000000000..407d1c54a Binary files /dev/null and b/odex-event/event_website_custom/static/icons/logo3.png differ diff --git a/odex-event/event_website_custom/static/icons/odex_base/1.png b/odex-event/event_website_custom/static/icons/odex_base/1.png new file mode 100644 index 000000000..1457d7858 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/odex_base/1.png differ diff --git a/odex-event/event_website_custom/static/icons/odex_base/10.png b/odex-event/event_website_custom/static/icons/odex_base/10.png new file mode 100644 index 000000000..846fd5038 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/odex_base/10.png differ diff --git a/odex-event/event_website_custom/static/icons/odex_base/11.png b/odex-event/event_website_custom/static/icons/odex_base/11.png new file mode 100644 index 000000000..ce3d05027 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/odex_base/11.png differ diff --git a/odex-event/event_website_custom/static/icons/odex_base/2.png b/odex-event/event_website_custom/static/icons/odex_base/2.png new file mode 100644 index 000000000..0d9911f4e Binary files /dev/null and b/odex-event/event_website_custom/static/icons/odex_base/2.png differ diff --git a/odex-event/event_website_custom/static/icons/odex_base/3.png b/odex-event/event_website_custom/static/icons/odex_base/3.png new file mode 100644 index 000000000..96779f579 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/odex_base/3.png differ diff --git a/odex-event/event_website_custom/static/icons/odex_base/4.png b/odex-event/event_website_custom/static/icons/odex_base/4.png new file mode 100644 index 000000000..eaf077931 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/odex_base/4.png differ diff --git a/odex-event/event_website_custom/static/icons/odex_base/5.png b/odex-event/event_website_custom/static/icons/odex_base/5.png new file mode 100644 index 000000000..01e9eeeeb Binary files /dev/null and b/odex-event/event_website_custom/static/icons/odex_base/5.png differ diff --git a/odex-event/event_website_custom/static/icons/odex_base/6.png b/odex-event/event_website_custom/static/icons/odex_base/6.png new file mode 100644 index 000000000..340b4cab5 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/odex_base/6.png differ diff --git a/odex-event/event_website_custom/static/icons/odex_base/7.png b/odex-event/event_website_custom/static/icons/odex_base/7.png new file mode 100644 index 000000000..0adc2ba39 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/odex_base/7.png differ diff --git a/odex-event/event_website_custom/static/icons/odex_base/8.png b/odex-event/event_website_custom/static/icons/odex_base/8.png new file mode 100644 index 000000000..ff52802f7 Binary files /dev/null and b/odex-event/event_website_custom/static/icons/odex_base/8.png differ diff --git a/odex-event/event_website_custom/static/icons/odex_base/9.png b/odex-event/event_website_custom/static/icons/odex_base/9.png new file mode 100644 index 000000000..02cbe53ae Binary files /dev/null and b/odex-event/event_website_custom/static/icons/odex_base/9.png differ diff --git a/odex-event/event_website_custom/static/src/css/event_details.css b/odex-event/event_website_custom/static/src/css/event_details.css new file mode 100644 index 000000000..74d06b2a1 --- /dev/null +++ b/odex-event/event_website_custom/static/src/css/event_details.css @@ -0,0 +1,347 @@ +/*event single page */ +@font-face { + font-family: "cairo"; + src: url(/event_website_custom/static/fonts/Cairo-Bold.ttf); + font-weight: 700; +} +@font-face { + font-family: "cairo"; + src: url(/event_website_custom/static/fonts/Cairo-Regular.ttf); + font-weight: normal; +} +@font-face { + font-family: "cairo"; + src: url(/event_website_custom/static/fonts/Cairo-SemiBold.ttf); + font-weight: 600; +} +.events_details_row { + display: flex; + flex-wrap: wrap; + font-family: "cairo"; +} +.events_details_row .event_div { + flex-basis: 50%; + padding: 0 15px; + display: flex; +} +@media (max-width: 575px) { + .events_details_row .event_div { + padding: 0; + } +} +@media (max-width: 991px) { + .events_details_row .event_div { + flex-basis: 100%; + margin-bottom: 24px; + } +} +.events_details_row .event_div .wrapper { + background-color: #fff; + border-radius: 12px; + border: 1px solid #ccc; + width: 100%; + padding: 24px 32px; +} +@media (max-width: 575px) { + .events_details_row .event_div .wrapper { + padding: 16px; + } +} +.events_details_row .event_div .wrapper h4 { + font-weight: bold; + display: inline-block; + -webkit-margin-end: 8px; + margin-inline-end: 8px; + margin-bottom: 16px; + text-transform: capitalize; + color: #353a47; + font-size: 20px; +} +@media (max-width: 575px) { + .events_details_row .event_div .wrapper h4 { + font-size: 16px; + } +} +.events_details_row .event_div .wrapper .google_maps { + font-size: 16px; + font-weight: bold; + text-decoration: underline; + color: #3c5c95; +} +.events_details_row .event_div .wrapper .location, +.events_details_row .event_div .wrapper .date, +.events_details_row .event_div .wrapper .name { + display: flex; + margin-bottom: 16px; + color: #b0a9a8; + flex-wrap: wrap; +} +.events_details_row .event_div .wrapper .location svg, +.events_details_row .event_div .wrapper .date svg, +.events_details_row .event_div .wrapper .name svg { + -webkit-margin-end: 8px; + margin-inline-end: 8px; +} +.events_details_row .event_div .wrapper .location br, +.events_details_row .event_div .wrapper .location i, +.events_details_row .event_div .wrapper .date br, +.events_details_row .event_div .wrapper .date i, +.events_details_row .event_div .wrapper .name br, +.events_details_row .event_div .wrapper .name i { + display: none; +} +@media (max-width: 991px) { + .events_details_row .event_div:last-of-type { + margin-bottom: 0px; + } +} + +/*sponsors_container*/ +.sponsors_container { + padding: 0 30px; +} +@media (max-width: 575px) { + .sponsors_container { + padding: 0 15px; + } +} +.sponsors_container .sponsors_wrapper { + background-color: #fff; + border-radius: 12px; + border: 1px solid #ccc; + padding: 24px 32px; +} +@media (max-width: 575px) { + .sponsors_container .sponsors_wrapper { + padding: 16px; + } +} +.sponsors_container .sponsors_wrapper .row { + display: flex; +} +@media (max-width: 575px) { + .sponsors_container .sponsors_wrapper .row { + flex-wrap: wrap; + justify-content: center; + } + .sponsors_container .sponsors_wrapper .row .oe_sponsor { + margin-bottom: 24px; + } +} +.sponsors_container .sponsors_wrapper h4 { + font-weight: bold; + display: inline-block; + margin-bottom: 32px; + text-transform: capitalize; + color: #353a47; + font-size: 20px; + font-family: "cairo"; +} +@media (max-width: 575px) { + .sponsors_container .sponsors_wrapper h4 { + font-size: 16px; + } +} + +.join_us_container { + display: flex; + flex-wrap: wrap; + gap: 30px; +} + +/*details_container*/ +.join_us { + padding: 0px 15px; +} +@media (max-width: 575px) { + .join_us { + padding: 0; + } +} +.join_us .oe_structure { + display: none; +} +.join_us .wrapper { + background-color: #fff; + padding: 24px 32px; + border-radius: 16px; + border: 1px solid #ccc; + margin-bottom: 32px; +} +@media (max-width: 575px) { + .join_us .wrapper { + padding: 16px; + } +} +.join_us .wrapper h4 { + text-align: center; + font-weight: bold; + margin-bottom: 16px; +} +@media (max-width: 575px) { + .join_us .wrapper h4 { + font-size: 16px; + } +} +.join_us #registration_form, .join_us .row.mt32.mb32 { + margin: 0 !important; +} +.join_us .col-md-8 { + width: 100%; + flex: 1; + max-width: 100%; +} +.join_us .col-md-8 .col-md-3 { + flex: 1; + max-width: 100%; +} +.join_us .col-md-8 .panel-default, +.join_us .col-md-8 .panel-footer { + border: none; + box-shadow: none; +} +.join_us .col-md-8 .panel-footer { + text-align: center; + background-color: transparent; + padding: 0; +} +.join_us .css_noprint, +.join_us .panel-heading, +.join_us hr { + display: none; +} +.join_us .col-lg-offset-9 { + margin-left: auto !important; + margin-right: auto !important; + width: 100% !important; +} +.join_us .col-lg-offset-9 button { + display: inline !important; + width: -moz-fit-content; + width: fit-content; +} + +/*global calsses */ +.o_website_event .container.mt32.mb16.hidden-print { + display: none; +} + +.d-none { + display: none !important; +} + +.number_of_attendance { + float: none; + margin: auto; + width: 100%; +} +@media (max-width: 425px) { + .number_of_attendance { + width: 100%; + } +} +.number_of_attendance .my_label { + display: inline-block; + margin-bottom: 12px; + font-weight: bold; +} + +.event_div .col-md-3 { + width: 100% im !important; +} + +/*register modal */ +.custom_modal .modal-content .modal-header { + border: none; + min-height: auto; + padding-bottom: 0; +} +.custom_modal .modal-content .modal-header .modal-title { + margin: 0; + text-align: start; + display: none; +} +.custom_modal .modal-content .modal-body { + height: 275px; + overflow: auto; + /* Track */ + /* Handle */ +} +@media (max-width: 575px) { + .custom_modal .modal-content .modal-body { + width: 100%; + } +} +.custom_modal .modal-content .modal-body::-webkit-scrollbar { + width: 4px; +} +.custom_modal .modal-content .modal-body::-webkit-scrollbar-track { + background: #f1f1f1; +} +.custom_modal .modal-content .modal-body::-webkit-scrollbar-thumb { + background: #3c5c95; +} +.custom_modal .modal-content .modal-body .attendans_wrapper label { + display: none; +} +.custom_modal .modal-content .modal-body .page-header { + border: none; + margin-bottom: 16px; + text-align: start; + position: relative; + width: -moz-fit-content; + width: fit-content; + padding-bottom: 16px; + margin-bottom: 24px; +} +@media (max-width: 575px) { + .custom_modal .modal-content .modal-body .page-header { + font-size: 14px; + } +} +.custom_modal .modal-content .modal-body .page-header::after { + content: ""; + position: absolute; + left: 0; + bottom: -5px; + width: 60%; + height: 4px; + background-color: #3c5c95; +} +.custom_modal .modal-content .modal-body .panel-body, .custom_modal .modal-content .modal-body .panel-footer { + display: none !important; +} +/*crumb*/ +.crumb { + padding: 0 15px; +} +@media (max-width: 575px) { + .crumb { + padding: 0; + } +} +.crumb .breadcrumb { + background-color: #fff; + margin: 16px 0 16px 0 !important; + border-radius: 8px; + border: 1px solid #ccc; + box-shadow: none; + padding: 12px; +} + +.sponsors_wrapper { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} +.sponsors_wrapper .btn-block { + display: block; + width: -moz-fit-content; + width: fit-content; + padding: 8px 40px; +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #f5f5f5; +}/*# sourceMappingURL=event_details.css.map */ \ No newline at end of file diff --git a/odex-event/event_website_custom/static/src/css/event_details.css.map b/odex-event/event_website_custom/static/src/css/event_details.css.map new file mode 100644 index 000000000..ff299cc26 --- /dev/null +++ b/odex-event/event_website_custom/static/src/css/event_details.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["event_details.scss","event_details.css"],"names":[],"mappings":"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","file":"event_details.css"} \ No newline at end of file diff --git a/odex-event/event_website_custom/static/src/css/event_details.scss b/odex-event/event_website_custom/static/src/css/event_details.scss new file mode 100644 index 000000000..a068e8440 --- /dev/null +++ b/odex-event/event_website_custom/static/src/css/event_details.scss @@ -0,0 +1,349 @@ +/*event single page */ + +@font-face { + font-family: "cairo"; + src: url(/event_website_custom/static/fonts/Cairo-Bold.ttf); + font-weight: 700; +} + +@font-face { + font-family: "cairo"; + src: url(/event_website_custom/static/fonts/Cairo-Regular.ttf); + font-weight: normal; +} + +@font-face { + font-family: "cairo"; + src: url(/event_website_custom/static/fonts/Cairo-SemiBold.ttf); + font-weight: 600; +} + +$cairo :"cairo"; + +.events_details_row { + display: flex; + flex-wrap: wrap; + font-family: $cairo ; + + .event_div { + flex-basis: 50%; + padding: 0 15px; + display: flex; + @media(max-width:575px){ + padding: 0; + } + @media(max-width:991px){ + flex-basis:100%; + margin-bottom:24px + } + .wrapper { + background-color: #fff; + border-radius: 12px; + border: 1px solid #ccc; + width: 100%; + padding: 24px 32px; + @media(max-width:575px){ + padding: 16px; + } + + h4 { + font-weight: bold; + display: inline-block; + margin-inline-end: 8px; + margin-bottom: 16px; + text-transform: capitalize; + color: #353a47; + font-size: 20px; + @media(max-width:575px){ + font-size:16px + } + } + + .google_maps { + font-size: 16px; + font-weight: bold; + text-decoration: underline; + color: #3c5c95; + } + + .location, + .date, + .name { + display: flex; + margin-bottom: 16px; + color: #b0a9a8; + flex-wrap:wrap; + + svg { + margin-inline-end: 8px; + } + + br, + i { + display: none; + } + } + } + } + .event_div:last-of-type{ + @media(max-width:991px){ + margin-bottom:0px + } + } +} + +/*sponsors_container*/ + +.sponsors_container { + padding: 0 30px; + @media(max-width:575px){ + padding: 0 15px; + } + + .sponsors_wrapper { + background-color: #fff; + border-radius: 12px; + border: 1px solid #ccc; + padding: 24px 32px; + @media(max-width:575px){ + padding: 16px; + } + .row{ + display:flex; + @media(max-width:575px){ + flex-wrap: wrap; + justify-content: center; + .oe_sponsor{ + margin-bottom: 24px; + } + } + } + + h4 { + font-weight: bold; + display: inline-block; + margin-bottom: 32px; + text-transform: capitalize; + color: #353a47; + font-size: 20px; + font-family: $cairo; + @media(max-width:575px){ + font-size:16px + } + } + } +} + + +.join_us_container{ + display: flex; + flex-wrap: wrap; + gap: 30px; +} +/*details_container*/ +.join_us { + padding: 0px 15px ; + @media(max-width:575px){ + padding: 0; + } + .oe_structure{ + display: none; + } + .wrapper{ + background-color: #fff; + padding: 24px 32px; + border-radius: 16px; + border: 1px solid #ccc; + margin-bottom: 32px; + @media(max-width:575px){ + padding: 16px; + } + h4{ + text-align: center; + font-weight: bold; + margin-bottom: 16px; + @media(max-width:575px){ + font-size:16px + } + } + } + + #registration_form, .row.mt32.mb32{ + margin: 0 !important; + } + .col-md-8 { + width: 100%; + flex: 1; + max-width: 100%; + .col-md-3{ + flex: 1; + max-width: 100%; + } + + .panel-default, + .panel-footer { + border: none; + box-shadow: none; + } + .panel-footer{ + text-align:center; + background-color: transparent; + padding:0; + } + } + + .css_noprint, + .panel-heading, + hr { + display: none + } + + .col-lg-offset-9 { + margin-left: auto !important; + margin-right: auto !important; + width: 100% !important; + button{ + display: inline !important; + width: fit-content; + } + + } +} + +/*global calsses */ +.o_website_event { + .container.mt32.mb16.hidden-print{ + display: none; + } +} + +.d-none{ + display:none !important +} + +.number_of_attendance{ + float:none; + margin:auto; + width: 100%; + @media(max-width:425px){ + width: 100%; + } + .my_label{ + display: inline-block; + margin-bottom: 12px; + font-weight: bold; + } +} + + +.event_div .col-md-3{ + width: 100% im !important; +} +/*register modal */ + +.custom_modal{ + + .modal-content{ + .modal-header{ + border:none; + min-height:auto; + padding-bottom:0; + .modal-title{ + margin:0; + text-align:start; + display: none; + } + } + .modal-body{ + height:275px; + overflow:auto; + @media(max-width:575px){ + width:100%; + + } + &::-webkit-scrollbar { + width: 4px; + } + + /* Track */ + &::-webkit-scrollbar-track { + background: #f1f1f1; + } + + /* Handle */ + &::-webkit-scrollbar-thumb { + background: #3c5c95; + } + .attendans_wrapper{ + label{ + display:none; + } + } + .page-header{ + border:none; + margin-bottom: 16px; + text-align: start; + position: relative; + width:fit-content; + padding-bottom: 16px; + margin-bottom: 24px; + @media(max-width:575px){ + font-size:14px + } + &::after { + content: ''; + position: absolute; + left: 0; + bottom: -5px; + width: 60%; + height: 4px; + background-color: #3c5c95; + } + } + .panel-body, .panel-footer{ + display:none !important + } + + } + .modal-footer{ + + } + } + +} + + + +/*crumb*/ + +.crumb{ + padding: 0 15px; + @media(max-width:575px){ + padding: 0; + } + .breadcrumb { + background-color: #fff; + margin: 16px 0 16px 0 !important; + border-radius: 8px; + border: 1px solid #ccc; + box-shadow: none; + padding: 12px; + } +} + +.sponsors_wrapper{ + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + .btn-block{ + display: block; + width: fit-content; + padding: 8px 40px; + } +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{ + + background-color: #f5f5f5; +} \ No newline at end of file diff --git a/odex-event/event_website_custom/static/src/css/events.css b/odex-event/event_website_custom/static/src/css/events.css new file mode 100644 index 000000000..987ff01a4 --- /dev/null +++ b/odex-event/event_website_custom/static/src/css/events.css @@ -0,0 +1,136 @@ +body { + background-color: #f5f5f5; +} + +.events_title { + color: #353a47; + font-weight: bold; + position: relative; + width: -moz-fit-content; + width: fit-content; + margin-bottom: 16px; +} +.events_title::after { + content: ""; + position: absolute; + left: 0; + bottom: -5px; + width: 50%; + height: 4px; + background-color: #3c5c95; +} + +.main_events_container .breadcrumb { + -webkit-padding-start: 0; + padding-inline-start: 0; +} +.main_events_container .events_row { + display: flex; + flex-wrap: wrap; +} +@media (max-width: 1200px) { + .main_events_container #middle_column { + width: 70%; + } +} +@media (max-width: 991px) { + .main_events_container #middle_column { + width: 100%; + } +} +.main_events_container .events_list { + display: flex; + flex-wrap: wrap; + padding: 0; + background-color: #fff; + padding: 24px 9px 0; + border-radius: 16px; + margin: 0; + height: 100%; +} +.main_events_container .events_list .single_event { + flex-basis: 50%; + padding: 0 15px; + margin: 0; + display: flex; + list-style: none; +} +@media (max-width: 767px) { + .main_events_container .events_list .single_event { + width: 100%; + flex-basis: 100%; + } +} +.main_events_container .events_list .single_event .event_content { + padding: 16px; + background-color: #f8f8f8; + margin-bottom: 24px; + border: 1px solid #eaeaea; + border-radius: 8px; + width: 100%; +} +.main_events_container .events_list .single_event .event_content h4 { + margin-bottom: 16px; +} +.main_events_container .events_list .single_event .event_content h4 a { + color: #353a47; + font-weight: bold; + -webkit-margin-end: 6px; + margin-inline-end: 6px; + text-transform: capitalize; +} +.main_events_container .events_list .single_event .event_content .event_data { + margin-bottom: 12px; + color: #b0a9a8; +} +.main_events_container .events_list .single_event .event_content .event_data i { + -webkit-margin-end: 4px; + margin-inline-end: 4px; +} +.main_events_container .events_list .single_event .event_content .event_data:last-of-type { + margin-bottom: 0; +} + +/*categories */ +@media (max-width: 1200px) { + .events_categories { + width: 30%; + } +} +@media (max-width: 991px) { + .events_categories { + width: 100%; + margin-bottom: 24px; + } +} +.events_categories .nav-pills { + background-color: #fff; + height: 100%; + overflow: hidden; + border-radius: 16px; +} +.events_categories .nav-pills li a { + color: #b6bab7; + transition: 0.3s all ease-in-out; + padding: 8px 16px; + font-weight: 600; + margin-bottom: 8px; +} +.events_categories .nav-pills li.active a { + background-color: #e1e6ef; + color: #3c5c95; +} + +/*media */ +@media (max-width: 767px) { + .single_event { + flex-basis: 100%; + } + .single_event .event_content h4 { + font-size: 16px; + } +} +/*global styles */ +.fa-fw { + width: unset; +}/*# sourceMappingURL=events.css.map */ \ No newline at end of file diff --git a/odex-event/event_website_custom/static/src/css/events.css.map b/odex-event/event_website_custom/static/src/css/events.css.map new file mode 100644 index 000000000..2cde48f81 --- /dev/null +++ b/odex-event/event_website_custom/static/src/css/events.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["events.scss","events.css"],"names":[],"mappings":"AAAA;EACI,yBAAA;ACCJ;;ADEA;EACI,cAAA;EACA,iBAAA;EACA,kBAAA;EACA,uBAAA;EAAA,kBAAA;EACA,mBAAA;ACCJ;ADCI;EACI,WAAA;EACA,kBAAA;EACA,OAAA;EACA,YAAA;EACA,UAAA;EACA,WAAA;EACA,yBAAA;ACCR;;ADII;EACI,wBAAA;UAAA,uBAAA;ACDR;ADII;EACI,aAAA;EACA,eAAA;ACFR;ADMQ;EADJ;IAEQ,UAAA;ECHV;AACF;ADIQ;EAJJ;IAKQ,WAAA;ECDV;AACF;ADGI;EACI,aAAA;EACA,eAAA;EACA,UAAA;EACA,sBAAA;EACA,mBAAA;EACA,mBAAA;EACA,SAAA;EACA,YAAA;ACDR;ADGQ;EACI,eAAA;EACA,eAAA;EACA,SAAA;EACA,aAAA;EACA,gBAAA;ACDZ;ADEY;EANJ;IAOQ,WAAA;IACA,gBAAA;ECCd;AACF;ADEY;EACI,aAAA;EACA,yBAAA;EACA,mBAAA;EACA,yBAAA;EACA,kBAAA;EACA,WAAA;ACAhB;ADEgB;EACI,mBAAA;ACApB;ADEoB;EACI,cAAA;EACA,iBAAA;EACA,uBAAA;UAAA,sBAAA;EACA,0BAAA;ACAxB;ADIgB;EACI,mBAAA;EACA,cAAA;ACFpB;ADIoB;EACI,uBAAA;UAAA,sBAAA;ACFxB;ADMgB;EACI,gBAAA;ACJpB;;ADaA,cAAA;AAEI;EADJ;IAEQ,UAAA;ECVN;AACF;ADWI;EAJJ;IAKQ,WAAA;IACA,mBAAA;ECRN;AACF;ADSI;EACI,sBAAA;EACA,YAAA;EACA,gBAAA;EACA,mBAAA;ACPR;ADUY;EACI,cAAA;EACA,gCAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;ACRhB;ADYQ;EACI,yBAAA;EACA,cAAA;ACVZ;;ADgBA,SAAA;AAEA;EACI;IACI,gBAAA;ECdN;EDiBU;IACI,eAAA;ECfd;AACF;ADoBA,iBAAA;AAEA;EACI,YAAA;ACnBJ","file":"events.css"} \ No newline at end of file diff --git a/odex-event/event_website_custom/static/src/css/events.scss b/odex-event/event_website_custom/static/src/css/events.scss new file mode 100644 index 000000000..88bf6f59a --- /dev/null +++ b/odex-event/event_website_custom/static/src/css/events.scss @@ -0,0 +1,152 @@ +body { + background-color: #f5f5f5; +} + +.events_title { + color: #353a47; + font-weight: bold; + position: relative; + width: fit-content; + margin-bottom: 16px; + + &::after { + content: ''; + position: absolute; + left: 0; + bottom: -5px; + width: 50%; + height: 4px; + background-color: #3c5c95; + } +} + +.main_events_container { + .breadcrumb { + padding-inline-start: 0 + } + + .events_row { + display: flex; + flex-wrap: wrap; + } + + #middle_column{ + @media(max-width:1200px){ + width:70%; + } + @media(max-width:991px){ + width:100%; + } + } + .events_list { + display: flex; + flex-wrap: wrap; + padding: 0; + background-color: #fff; + padding: 24px 9px 0; + border-radius: 16px; + margin: 0; + height: 100%; + + .single_event { + flex-basis: 50%; + padding: 0 15px; + margin: 0; + display: flex; + list-style: none; + @media(max-width:767px){ + width:100%; + flex-basis:100%; + + } + + .event_content { + padding: 16px; + background-color: #f8f8f8; + margin-bottom: 24px; + border: 1px solid #eaeaea; + border-radius: 8px; + width: 100%; + + h4 { + margin-bottom: 16px; + + a { + color: #353a47; + font-weight: bold; + margin-inline-end: 6px; + text-transform: capitalize; + } + } + + .event_data { + margin-bottom: 12px; + color: #b0a9a8; + + i { + margin-inline-end: 4px; + } + } + + .event_data:last-of-type { + margin-bottom: 0; + } + } + } + + } +} + + +/*categories */ +.events_categories { + @media(max-width:1200px){ + width:30% + } + @media(max-width:991px){ + width:100%; + margin-bottom: 24px; + } + .nav-pills { + background-color: #fff; + height: 100%; + overflow: hidden; + border-radius: 16px; + + li { + a { + color: #b6bab7; + transition: .3s all ease-in-out; + padding: 8px 16px; + font-weight: 600; + margin-bottom: 8px + } + } + + li.active a { + background-color: #e1e6ef; + color: #3c5c95 + } + } +} + + +/*media */ + +@media(max-width:767px) { + .single_event { + flex-basis: 100%; + + .event_content { + h4 { + font-size: 16px + } + } + } +} + +/*global styles */ + +.fa-fw { + width: unset; +} \ No newline at end of file diff --git a/odex-event/event_website_custom/static/src/js/sponsors.js b/odex-event/event_website_custom/static/src/js/sponsors.js new file mode 100644 index 000000000..3975d26d6 --- /dev/null +++ b/odex-event/event_website_custom/static/src/js/sponsors.js @@ -0,0 +1,48 @@ +$(document).ready(function () { + $('.trigger_sponsors_modal').click(function () { + $('#sponsors_modal').modal('show'); + }) + // integrate the sponsors types API + let typeURL = "/sponser/form"; + fetch(typeURL) + .then(response => response.json()) + .then(res => { + typeList = res.data; + console.log(typeList); + typeList.forEach(function (index) { + $('#sponsprs_types').append(``); + }) + }); + + + let create_sponsor = "/sponsor/submit"; + $('form#sponsors_form_reg').on('submit', function (evt) { + console.log('form is submitting now !!'); + evt.preventDefault(); + var sponsors_data = { + id: $('#sponsors_form_reg #eid').val(), + sponsor_type_id: $('#sponsprs_types').val(), + partner_id: $('#userId').val(), + event_id: $('#eventId').val(), + url: $('#url').val() + } + $.ajax({ + url: `${create_sponsor}?id=${sponsors_data.id}&sponsor_type_id=${sponsors_data.sponsor_type_id}&partner_id=${sponsors_data.partner_id}&event_id=${sponsors_data.event_id}&url="${sponsors_data.url}"`, + type: "POST", + data: sponsors_data, + success: function (response) { + console.log(response); + console.log('data sent successfully !!!'); + $('.new_sponsor').append(`

${response.msg}

`) + setTimeout(function () { + $('.new_sponsor').hide(); + location.reload(); + }, 4000); + }, + error: function (err) { + console.log(err); + } + }); + }); +}); + diff --git a/odex-event/event_website_custom/views/event_details.xml b/odex-event/event_website_custom/views/event_details.xml new file mode 100644 index 000000000..fcdf320e0 --- /dev/null +++ b/odex-event/event_website_custom/views/event_details.xml @@ -0,0 +1,395 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odex-event/event_website_custom/views/events.xml b/odex-event/event_website_custom/views/events.xml new file mode 100644 index 000000000..a84f93238 --- /dev/null +++ b/odex-event/event_website_custom/views/events.xml @@ -0,0 +1,101 @@ + + + + + + + + diff --git a/odex-event/muk_autovacuum/LICENSE b/odex-event/muk_autovacuum/LICENSE new file mode 100644 index 000000000..153d416dc --- /dev/null +++ b/odex-event/muk_autovacuum/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/odex-event/muk_autovacuum/README.rst b/odex-event/muk_autovacuum/README.rst new file mode 100644 index 000000000..d81dcd908 --- /dev/null +++ b/odex-event/muk_autovacuum/README.rst @@ -0,0 +1,120 @@ +============== +MuK Autovacuum +============== + +Allows the administrator to create rules to automatically garbage collect +a certain model. Every rule can have a different time interval additional +constraints. An extra constraint can be for example to only delete inactive +records. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI `_). + +To install our modules using the package manager make sure +`odoo-autodiscover `_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo-addon-`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository `_ +and find a more detailed installation guide on our `website `_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT `_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +To configure this module, you need to: + +#. Go to *Settings* while being in debug mode. +#. Afterwards go to *Technical -> Automation -> Auto Vacuum Rules*. +#. And create a new rule. + +Usage +============= + +This module has no direct visible effect on the system. The garbage collections +happens during the autovacuum cron job. + +Credits +======= + +Contributors +------------ + +* Mathias Markl + +Images +------------ + +Some pictures are based on or inspired by the icon set of Font Awesome: + +* `Font Awesome `_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH `_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_autovacuum/__init__.py b/odex-event/muk_autovacuum/__init__.py new file mode 100644 index 000000000..57c50e8ca --- /dev/null +++ b/odex-event/muk_autovacuum/__init__.py @@ -0,0 +1,23 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Autovacuum +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +from . import models diff --git a/odex-event/muk_autovacuum/__manifest__.py b/odex-event/muk_autovacuum/__manifest__.py new file mode 100644 index 000000000..ab525fb9e --- /dev/null +++ b/odex-event/muk_autovacuum/__manifest__.py @@ -0,0 +1,56 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Autovacuum +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +{ + 'name': 'MuK Autovacuum', + 'summary': 'Configure automatic garbage collection', + 'version': '12.0.3.0.1', + 'category': 'Extra Tools', + 'license': 'LGPL-3', + 'author': 'MuK IT', + 'website': 'https://www.mukit.at', + 'live_test_url': 'https://mukit.at/r/SgN', + 'contributors': [ + 'Mathias Markl ', + ], + 'depends': [ + 'muk_utils', + ], + 'data': [ + 'security/ir.model.access.csv', + 'views/rules.xml', + 'data/rules.xml', + ], + 'qweb': [ + 'static/src/xml/*.xml', + ], + 'images': [ + 'static/description/banner.png' + ], + 'external_dependencies': { + 'python': [], + 'bin': [], + }, + 'application': False, + 'installable': True, + 'auto_install': False, +} \ No newline at end of file diff --git a/odex-event/muk_autovacuum/data/rules.xml b/odex-event/muk_autovacuum/data/rules.xml new file mode 100644 index 000000000..c2cea2d79 --- /dev/null +++ b/odex-event/muk_autovacuum/data/rules.xml @@ -0,0 +1,38 @@ + + + + + + + + Delete Logs after 2 Weeks + + + + time + weeks + 2 + + + + \ No newline at end of file diff --git a/odex-event/muk_autovacuum/doc/changelog.rst b/odex-event/muk_autovacuum/doc/changelog.rst new file mode 100644 index 000000000..75ffd703c --- /dev/null +++ b/odex-event/muk_autovacuum/doc/changelog.rst @@ -0,0 +1,20 @@ +`2.1.0` +------- + +- Added Python Expressions + +`2.0.0` +------- + +- Migrated to Python 3 + +`1.1.0` +------- + +- Add field selector + + +`1.0.0` +------- + +- Init version diff --git a/odex-event/muk_autovacuum/doc/index.rst b/odex-event/muk_autovacuum/doc/index.rst new file mode 100644 index 000000000..d81dcd908 --- /dev/null +++ b/odex-event/muk_autovacuum/doc/index.rst @@ -0,0 +1,120 @@ +============== +MuK Autovacuum +============== + +Allows the administrator to create rules to automatically garbage collect +a certain model. Every rule can have a different time interval additional +constraints. An extra constraint can be for example to only delete inactive +records. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI `_). + +To install our modules using the package manager make sure +`odoo-autodiscover `_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo-addon-`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository `_ +and find a more detailed installation guide on our `website `_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT `_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +To configure this module, you need to: + +#. Go to *Settings* while being in debug mode. +#. Afterwards go to *Technical -> Automation -> Auto Vacuum Rules*. +#. And create a new rule. + +Usage +============= + +This module has no direct visible effect on the system. The garbage collections +happens during the autovacuum cron job. + +Credits +======= + +Contributors +------------ + +* Mathias Markl + +Images +------------ + +Some pictures are based on or inspired by the icon set of Font Awesome: + +* `Font Awesome `_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH `_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_autovacuum/i18n/ar.po b/odex-event/muk_autovacuum/i18n/ar.po new file mode 100644 index 000000000..b23e93315 --- /dev/null +++ b/odex-event/muk_autovacuum/i18n/ar.po @@ -0,0 +1,402 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_autovacuum +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:43+0000\n" +"PO-Revision-Date: 2019-07-12 23:43+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Warning: Warning Exception to use with raise" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "b64encode, b64decode: Base64 converter" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "date_format, datetime_format: server date and time formats" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "env: Odoo Environment on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "logger.info(message): Python logging framework" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "model: Odoo Model of the record on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "time, datetime, dateutil, timezone: useful Python libraries" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "uid, user: User on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active +msgid "Active" +msgstr "نشط" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "All" +msgstr "الكل" + +#. module: muk_autovacuum +#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule +#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules +#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree +msgid "Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum +msgid "Automatic Vacuum" +msgstr "تفريغ تلقائي" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Code Based" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Code Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code which will be executed during the clean up." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid +msgid "Created by" +msgstr "أنشئ بواسطة" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date +msgid "Created on" +msgstr "أنشئ في" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Days" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Delete all records which match the domain." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Delete older data than x." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Delete records with am index greater than x." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name +msgid "Display Name" +msgstr "اسم العرض" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Do not delete starred records.\n" +" Checks for the following fields:\n" +" - starred\n" +" - favorite\n" +" - is_starred\n" +" - is_favorite" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Domain" +msgstr "النطاق" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Domain Based" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Domain Settings" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Enter Python code here. Help about Python expression is available in the help tab of this document." +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,size_type:0 +msgid "Fixed Value" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64 +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74 +#, python-format +msgid "GC domain: %s" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71 +#, python-format +msgid "GC domain: [] order: %s limit: %s" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87 +#, python-format +msgid "GC'd %s %s records" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83 +#, python-format +msgid "GC'd %s attachments from %s entries" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Group By" +msgstr "تجميع حسب" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help" +msgstr "المساعدة" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help with Python expressions" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Hours" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id +msgid "ID" +msgstr "المعرف" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:290 +#, python-format +msgid "Import Template for Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update +msgid "Last Modified on" +msgstr "آخر تعديل في" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid +msgid "Last Updated by" +msgstr "آخر تحديث بواسطة" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date +msgid "Last Updated on" +msgstr "آخر تحديث في" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Minutes" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Model" +msgstr "النموذج" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name +msgid "Model Name" +msgstr "إسم النموذج" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model +msgid "Model on which the rule is applied." +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Months" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name +msgid "Name" +msgstr "الاسم" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only Archived" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only Attachments" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only delete archived records." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only delete record attachments." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Order by which the index is defined." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Protect Starred" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state +msgid "Rule Type" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:330 +#, python-format +msgid "Rule validation has failed!" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence +msgid "Sequence" +msgstr "التسلسل" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size +msgid "Size" +msgstr "الحجم" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Size Based" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Size Order" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Size Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type +msgid "Size Type" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Size Value" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter +#: selection:muk_autovacuum.rules,size_type:0 +msgid "System Parameter" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Time" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Time Based" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field +msgid "Time Field" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Time Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type +msgid "Time Unit" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Various fields may use Python code or Python expressions. The following variables can be used:" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Weeks" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Years" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "e.g. Delete Logs after 30 Days" +msgstr "" + diff --git a/odex-event/muk_autovacuum/i18n/de.po b/odex-event/muk_autovacuum/i18n/de.po new file mode 100644 index 000000000..cf9d8de6d --- /dev/null +++ b/odex-event/muk_autovacuum/i18n/de.po @@ -0,0 +1,408 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_autovacuum +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:43+0000\n" +"PO-Revision-Date: 2019-07-12 23:43+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Warning: Warning Exception to use with raise" +msgstr "Warnung: Warnausnahme, die bei einer Erhöhung Anwendung findet" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "b64encode, b64decode: Base64 converter" +msgstr "b64encode, b64decode: Base64 Converter" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "date_format, datetime_format: server date and time formats" +msgstr "date_format, datetime_format: Serverdatum und Zeitformate" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "env: Odoo Environment on which the rule is triggered" +msgstr "env: Odoo Umgebung in welcher die Regel angewendet wird" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "logger.info(message): Python logging framework" +msgstr "logger.info(message): Python-Protokollierungs-Framework" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "model: Odoo Model of the record on which the rule is triggered" +msgstr "model: Odoo Modell des Datensatzes, auf dem die Regel angewendet wird" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "time, datetime, dateutil, timezone: useful Python libraries" +msgstr "time, datetime, dateutil, timezone: nützliche Python-Bibliotheken" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "uid, user: User on which the rule is triggered" +msgstr "uid, Benutzer: Benutzer an dem die Regel angewendet wird" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active +msgid "Active" +msgstr "Aktiv" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "All" +msgstr "Alle" + +#. module: muk_autovacuum +#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule +#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules +#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree +msgid "Auto Vacuum Rules" +msgstr "Auto Vacuum Regeln" + +#. module: muk_autovacuum +#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum +msgid "Automatic Vacuum" +msgstr "Automatisch aufräumen" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Code Based" +msgstr "Codebasiert" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Code Settings" +msgstr "Codeeinstellungen" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code which will be executed during the clean up." +msgstr "Code, der während der Bereinigung ausgeführt wird." + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Days" +msgstr "Tage" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Delete all records which match the domain." +msgstr "Löschen Sie alle Datensätze, die mit der Domäne übereinstimmen." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Delete older data than x." +msgstr "Ältere Daten als x löschen." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Delete records with am index greater than x." +msgstr "Datensätze mit einem Index größer als x löschen." + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Do not delete starred records.\n" +" Checks for the following fields:\n" +" - starred\n" +" - favorite\n" +" - is_starred\n" +" - is_favorite" +msgstr "Löscht keine markierten Datensätze.\n" +" Überprüft die folgenden Felder:\n" +" - mit Sternen übersät\n" +" - starred\n" +" - favorite\n" +" - is_starred\n" +" - is_favorite" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Domain" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Domain Based" +msgstr "Domainenbasiert" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Domain Settings" +msgstr "Domaineinstellungen" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Enter Python code here. Help about Python expression is available in the help tab of this document." +msgstr "Geben Sie Pyhton-Code hier ein. Hife zu Python-Ausdrücken ist in der Hilfe-Registerkarte dieses Dokuments verfügbar." + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,size_type:0 +msgid "Fixed Value" +msgstr "Fixpunktwert" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64 +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74 +#, python-format +msgid "GC domain: %s" +msgstr "GC Domain: %s" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71 +#, python-format +msgid "GC domain: [] order: %s limit: %s" +msgstr "GC Domain: [] order: %s limit: %s" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87 +#, python-format +msgid "GC'd %s %s records" +msgstr "GC'd %s %s Aufnahmen" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83 +#, python-format +msgid "GC'd %s attachments from %s entries" +msgstr "GC'd %s Anhänge aus %s Einträgen" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Group By" +msgstr "Gruppieren nach" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help" +msgstr "Hilfe" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help with Python expressions" +msgstr "Hilfe mit Python-Ausdrücken" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Hours" +msgstr "Stunden" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id +msgid "ID" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:290 +#, python-format +msgid "Import Template for Auto Vacuum Rules" +msgstr "Importvorlage für die automatischen Aufräumregeln" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update +msgid "Last Modified on" +msgstr "Zuletzt geändert am" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert durch" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Minutes" +msgstr "Minuten" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Model" +msgstr "Modell" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name +msgid "Model Name" +msgstr "Modellname" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model +msgid "Model on which the rule is applied." +msgstr "Modell, auf das die Regel angewendet wird." + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Months" +msgstr "Monate" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name +msgid "Name" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only Archived" +msgstr "Nur Archiviert" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only Attachments" +msgstr "Nur Anhänge" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only delete archived records." +msgstr "Löschen Sie nur archivierte Sätze." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only delete record attachments." +msgstr "Löschen Sie nur Datensatzanhänge." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Order by which the index is defined." +msgstr "Reihenfolge, in der der Index definiert ist." + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Protect Starred" +msgstr "Schützt Favoriten" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state +msgid "Rule Type" +msgstr "Regeltyp" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:330 +#, python-format +msgid "Rule validation has failed!" +msgstr "Die Regelvalidierung ist fehlgeschlagen!" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence +msgid "Sequence" +msgstr "Nummernfolge" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size +msgid "Size" +msgstr "Größe" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Size Based" +msgstr "Größenbasierend" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Size Order" +msgstr "Größensortierung" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Size Settings" +msgstr "Größeneinstellung" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type +msgid "Size Type" +msgstr "Größe Typ" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Size Value" +msgstr "Größenwert" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter +#: selection:muk_autovacuum.rules,size_type:0 +msgid "System Parameter" +msgstr "Systemparameter" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Time" +msgstr "Zeit" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Time Based" +msgstr "Zeitbasiert" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field +msgid "Time Field" +msgstr "Zeitfeld" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Time Settings" +msgstr "Zeiteinstellungen" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type +msgid "Time Unit" +msgstr "Zeiteinheit" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Various fields may use Python code or Python expressions. The following variables can be used:" +msgstr "Einige Felder erlauben Python Code oder Python Ausdrücke. Die folgenden Variablen können verwendet werden:" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Weeks" +msgstr "Wochen" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Years" +msgstr "Jahre" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "e.g. Delete Logs after 30 Days" +msgstr "z.B. Protokolle nach 30 Tagen löschen" + diff --git a/odex-event/muk_autovacuum/i18n/es.po b/odex-event/muk_autovacuum/i18n/es.po new file mode 100644 index 000000000..f0b9e06e4 --- /dev/null +++ b/odex-event/muk_autovacuum/i18n/es.po @@ -0,0 +1,407 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_autovacuum +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:43+0000\n" +"PO-Revision-Date: 2019-07-12 23:43+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Warning: Warning Exception to use with raise" +msgstr "Advertencia: Excepción de Advertencia para usar con aumento" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "b64encode, b64decode: Base64 converter" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "date_format, datetime_format: server date and time formats" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "env: Odoo Environment on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "logger.info(message): Python logging framework" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "model: Odoo Model of the record on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "time, datetime, dateutil, timezone: useful Python libraries" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "uid, user: User on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active +msgid "Active" +msgstr "Activo" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "All" +msgstr "Todos" + +#. module: muk_autovacuum +#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule +#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules +#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree +msgid "Auto Vacuum Rules" +msgstr "Reglas de vacío automático" + +#. module: muk_autovacuum +#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum +msgid "Automatic Vacuum" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code" +msgstr "Código" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Code Based" +msgstr "Basado en código" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Code Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code which will be executed during the clean up." +msgstr "Código que se ejecutará durante la limpieza." + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Days" +msgstr "Días" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Delete all records which match the domain." +msgstr "Elimina todos los registros que coincidan con el dominio." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Delete older data than x." +msgstr "Borrar datos anteriores a x." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Delete records with am index greater than x." +msgstr "Eliminar registros con un índice am mayor que x." + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Do not delete starred records.\n" +" Checks for the following fields:\n" +" - starred\n" +" - favorite\n" +" - is_starred\n" +" - is_favorite" +msgstr "No borre los registros marcados con asterisco.\n" +" Verifica los siguientes campos:\n" +" - marcado\n" +" - preferido\n" +" - is_starred\n" +" - is_favorite" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Domain" +msgstr "Dominio" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Domain Based" +msgstr "Basado en dominio" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Domain Settings" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Enter Python code here. Help about Python expression is available in the help tab of this document." +msgstr "Introduzca código Python aquí. Ayuda disponible sobre expresiones Python en la pestaña de ayuda de este documento." + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,size_type:0 +msgid "Fixed Value" +msgstr "Valor Fijo" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64 +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74 +#, python-format +msgid "GC domain: %s" +msgstr "Dominio GC: %s" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71 +#, python-format +msgid "GC domain: [] order: %s limit: %s" +msgstr "Dominio GC: [] orden: Límite en %s: %s" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87 +#, python-format +msgid "GC'd %s %s records" +msgstr "GC'd %s %s registros" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83 +#, python-format +msgid "GC'd %s attachments from %s entries" +msgstr "GC'd %s adjuntos de las entradas %s" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help" +msgstr "Ayuda" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help with Python expressions" +msgstr "Ayuda con expresiones Python" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Hours" +msgstr "Horas" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id +msgid "ID" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:290 +#, python-format +msgid "Import Template for Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Minutes" +msgstr "Actas" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Model" +msgstr "Modelo" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name +msgid "Model Name" +msgstr "Nombre del modelo" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model +msgid "Model on which the rule is applied." +msgstr "Modelo sobre el que se aplica la norma." + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Months" +msgstr "Meses" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name +msgid "Name" +msgstr "Nombre" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only Archived" +msgstr "Sólo archivado" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only Attachments" +msgstr "Sólo archivos adjuntos" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only delete archived records." +msgstr "Borrar sólo registros archivados." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only delete record attachments." +msgstr "Sólo borre los archivos adjuntos de los registros." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Order by which the index is defined." +msgstr "Orden por el que se define el índice." + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Protect Starred" +msgstr "Proteger Estrellado" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state +msgid "Rule Type" +msgstr "Clase de regla" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:330 +#, python-format +msgid "Rule validation has failed!" +msgstr "La validación de reglas ha fallado!" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size +msgid "Size" +msgstr "Tamaño" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Size Based" +msgstr "Basado en el tamaño" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Size Order" +msgstr "Orden de tallas" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Size Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type +msgid "Size Type" +msgstr "Tamaño Tipo" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Size Value" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter +#: selection:muk_autovacuum.rules,size_type:0 +msgid "System Parameter" +msgstr "Parámetros del sistema" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Time" +msgstr "Tiempo" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Time Based" +msgstr "Basado en el tiempo" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field +msgid "Time Field" +msgstr "Campo de tiempo" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Time Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type +msgid "Time Unit" +msgstr "Unidad de tiempo" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Various fields may use Python code or Python expressions. The following variables can be used:" +msgstr "Varios campos pueden usar código Python o expresiones Python. Se pueden usar las siguientes variables:" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Weeks" +msgstr "Semanas" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Years" +msgstr "Años" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "e.g. Delete Logs after 30 Days" +msgstr "" + diff --git a/odex-event/muk_autovacuum/i18n/fr.po b/odex-event/muk_autovacuum/i18n/fr.po new file mode 100644 index 000000000..e4a6c8271 --- /dev/null +++ b/odex-event/muk_autovacuum/i18n/fr.po @@ -0,0 +1,407 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_autovacuum +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:43+0000\n" +"PO-Revision-Date: 2019-07-12 23:43+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Warning: Warning Exception to use with raise" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "b64encode, b64decode: Base64 converter" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "date_format, datetime_format: server date and time formats" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "env: Odoo Environment on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "logger.info(message): Python logging framework" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "model: Odoo Model of the record on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "time, datetime, dateutil, timezone: useful Python libraries" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "uid, user: User on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active +msgid "Active" +msgstr "Actif" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "All" +msgstr "Tous" + +#. module: muk_autovacuum +#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule +#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules +#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree +msgid "Auto Vacuum Rules" +msgstr "Règles de l'aspirateur automatique" + +#. module: muk_autovacuum +#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum +msgid "Automatic Vacuum" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Code Based" +msgstr "Basé sur le code" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Code Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code which will be executed during the clean up." +msgstr "Code qui sera exécuté pendant le nettoyage." + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Days" +msgstr "Jours" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Delete all records which match the domain." +msgstr "Supprimer tous les enregistrements qui correspondent au domaine." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Delete older data than x." +msgstr "Supprimer les données plus anciennes que x." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Delete records with am index greater than x." +msgstr "Supprimer les enregistrements dont l'index am est supérieur à x." + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Do not delete starred records.\n" +" Checks for the following fields:\n" +" - starred\n" +" - favorite\n" +" - is_starred\n" +" - is_favorite" +msgstr "Ne supprimez pas les disques marqués d'une étoile.\n" +" Vérification des champs suivants :\n" +" - étoilés\n" +" - favori\n" +" - is_starred\n" +" - is_favorite" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Domain" +msgstr "Domaine" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Domain Based" +msgstr "Basé sur le domaine" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Domain Settings" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Enter Python code here. Help about Python expression is available in the help tab of this document." +msgstr "Entrer du code Python ici. Une aide sur l'expression Python est disponible dans l'onglet d'aide de ce document." + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,size_type:0 +msgid "Fixed Value" +msgstr "Valeur fixe" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64 +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74 +#, python-format +msgid "GC domain: %s" +msgstr "Domaine GC : %s" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71 +#, python-format +msgid "GC domain: [] order: %s limit: %s" +msgstr "GC : (] Ordre : Limite %s : %s" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87 +#, python-format +msgid "GC'd %s %s records" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83 +#, python-format +msgid "GC'd %s attachments from %s entries" +msgstr "GC'd %s pièces jointes à partir d'entrées %s" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Group By" +msgstr "Regrouper par" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help" +msgstr "Aide" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help with Python expressions" +msgstr "Aide sur les expressions Python" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Hours" +msgstr "Heures" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id +msgid "ID" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:290 +#, python-format +msgid "Import Template for Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Minutes" +msgstr "Procès-verbal" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Model" +msgstr "Modèle" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name +msgid "Model Name" +msgstr "Nom de Modèle" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model +msgid "Model on which the rule is applied." +msgstr "Modèle sur lequel la règle est appliquée." + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Months" +msgstr "Mois" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name +msgid "Name" +msgstr "Nom" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only Archived" +msgstr "Uniquement archivé" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only Attachments" +msgstr "Uniquement les pièces jointes" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only delete archived records." +msgstr "Ne supprimez que les enregistrements archivés." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only delete record attachments." +msgstr "Ne supprimez que les pièces jointes d'enregistrement." + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Order by which the index is defined." +msgstr "Ordre dans lequel l'indice est défini." + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Protect Starred" +msgstr "Protéger Starred" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state +msgid "Rule Type" +msgstr "Type de règle" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:330 +#, python-format +msgid "Rule validation has failed!" +msgstr "La validation des règles a échoué !" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence +msgid "Sequence" +msgstr "Séquence" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size +msgid "Size" +msgstr "Taille" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Size Based" +msgstr "Basé sur la taille" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Size Order" +msgstr "Taille Commande" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Size Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type +msgid "Size Type" +msgstr "Taille Type" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Size Value" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter +#: selection:muk_autovacuum.rules,size_type:0 +msgid "System Parameter" +msgstr "Paramètres du système" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Time" +msgstr "Temps" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Time Based" +msgstr "Basé sur le temps" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field +msgid "Time Field" +msgstr "Champ horaire" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Time Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type +msgid "Time Unit" +msgstr "Unité de temps" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Various fields may use Python code or Python expressions. The following variables can be used:" +msgstr "Divers champs peuvent utiliser du code ou des expressions Python. Les variables suivantes peuvent être utilisées :" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Weeks" +msgstr "Semaines" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Years" +msgstr "Années" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "e.g. Delete Logs after 30 Days" +msgstr "" + diff --git a/odex-event/muk_autovacuum/i18n/hi.po b/odex-event/muk_autovacuum/i18n/hi.po new file mode 100644 index 000000000..ceeed8664 --- /dev/null +++ b/odex-event/muk_autovacuum/i18n/hi.po @@ -0,0 +1,402 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_autovacuum +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:44+0000\n" +"PO-Revision-Date: 2019-07-12 23:44+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Warning: Warning Exception to use with raise" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "b64encode, b64decode: Base64 converter" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "date_format, datetime_format: server date and time formats" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "env: Odoo Environment on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "logger.info(message): Python logging framework" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "model: Odoo Model of the record on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "time, datetime, dateutil, timezone: useful Python libraries" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "uid, user: User on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active +msgid "Active" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "All" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule +#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules +#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree +msgid "Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum +msgid "Automatic Vacuum" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Code Based" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Code Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code which will be executed during the clean up." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid +msgid "Created by" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date +msgid "Created on" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Days" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Delete all records which match the domain." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Delete older data than x." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Delete records with am index greater than x." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name +msgid "Display Name" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Do not delete starred records.\n" +" Checks for the following fields:\n" +" - starred\n" +" - favorite\n" +" - is_starred\n" +" - is_favorite" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Domain" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Domain Based" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Domain Settings" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Enter Python code here. Help about Python expression is available in the help tab of this document." +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,size_type:0 +msgid "Fixed Value" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64 +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74 +#, python-format +msgid "GC domain: %s" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71 +#, python-format +msgid "GC domain: [] order: %s limit: %s" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87 +#, python-format +msgid "GC'd %s %s records" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83 +#, python-format +msgid "GC'd %s attachments from %s entries" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Group By" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help with Python expressions" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Hours" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id +msgid "ID" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:290 +#, python-format +msgid "Import Template for Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update +msgid "Last Modified on" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date +msgid "Last Updated on" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Minutes" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Model" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name +msgid "Model Name" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model +msgid "Model on which the rule is applied." +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Months" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name +msgid "Name" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only Archived" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only Attachments" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only delete archived records." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only delete record attachments." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Order by which the index is defined." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Protect Starred" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state +msgid "Rule Type" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:330 +#, python-format +msgid "Rule validation has failed!" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence +msgid "Sequence" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size +msgid "Size" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Size Based" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Size Order" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Size Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type +msgid "Size Type" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Size Value" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter +#: selection:muk_autovacuum.rules,size_type:0 +msgid "System Parameter" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Time" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Time Based" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field +msgid "Time Field" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Time Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type +msgid "Time Unit" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Various fields may use Python code or Python expressions. The following variables can be used:" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Weeks" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Years" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "e.g. Delete Logs after 30 Days" +msgstr "" + diff --git a/odex-event/muk_autovacuum/i18n/nl.po b/odex-event/muk_autovacuum/i18n/nl.po new file mode 100644 index 000000000..acd392a58 --- /dev/null +++ b/odex-event/muk_autovacuum/i18n/nl.po @@ -0,0 +1,402 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_autovacuum +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:44+0000\n" +"PO-Revision-Date: 2019-07-12 23:44+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Warning: Warning Exception to use with raise" +msgstr "Waarschuwing: Waarschuwingsfout te gebruiken met roep op" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "b64encode, b64decode: Base64 converter" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "date_format, datetime_format: server date and time formats" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "env: Odoo Environment on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "logger.info(message): Python logging framework" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "model: Odoo Model of the record on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "time, datetime, dateutil, timezone: useful Python libraries" +msgstr "time, datetime, dateutil, timezone: handige Python libraries" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "uid, user: User on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active +msgid "Active" +msgstr "Actief" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "All" +msgstr "Alle" + +#. module: muk_autovacuum +#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule +#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules +#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree +msgid "Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum +msgid "Automatic Vacuum" +msgstr "Automatisch vacuum" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Code Based" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Code Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code which will be executed during the clean up." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Days" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Delete all records which match the domain." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Delete older data than x." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Delete records with am index greater than x." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name +msgid "Display Name" +msgstr "Weergavenaam" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Do not delete starred records.\n" +" Checks for the following fields:\n" +" - starred\n" +" - favorite\n" +" - is_starred\n" +" - is_favorite" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Domain" +msgstr "Domein" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Domain Based" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Domain Settings" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Enter Python code here. Help about Python expression is available in the help tab of this document." +msgstr "Geef hier Python code in. Help over het gebruik van Python expressies is beschikbaar in de help tab van dit document." + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,size_type:0 +msgid "Fixed Value" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64 +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74 +#, python-format +msgid "GC domain: %s" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71 +#, python-format +msgid "GC domain: [] order: %s limit: %s" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87 +#, python-format +msgid "GC'd %s %s records" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83 +#, python-format +msgid "GC'd %s attachments from %s entries" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Group By" +msgstr "Groepeer op" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help with Python expressions" +msgstr "Help met Python expressies" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Hours" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id +msgid "ID" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:290 +#, python-format +msgid "Import Template for Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update +msgid "Last Modified on" +msgstr "Laatst gewijzigd op" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Minutes" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Model" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name +msgid "Model Name" +msgstr "Modelnaam" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model +msgid "Model on which the rule is applied." +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Months" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name +msgid "Name" +msgstr "Naam" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only Archived" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only Attachments" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only delete archived records." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only delete record attachments." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Order by which the index is defined." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Protect Starred" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state +msgid "Rule Type" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:330 +#, python-format +msgid "Rule validation has failed!" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence +msgid "Sequence" +msgstr "Volgorde" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size +msgid "Size" +msgstr "Grootte" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Size Based" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Size Order" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Size Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type +msgid "Size Type" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Size Value" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter +#: selection:muk_autovacuum.rules,size_type:0 +msgid "System Parameter" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Time" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Time Based" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field +msgid "Time Field" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Time Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type +msgid "Time Unit" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Various fields may use Python code or Python expressions. The following variables can be used:" +msgstr "Verschillende velden mogen Python code of Python expressies gebruiken. De volgende variabelen mogen worden gebruikt:" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Weeks" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Years" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "e.g. Delete Logs after 30 Days" +msgstr "" + diff --git a/odex-event/muk_autovacuum/i18n/pt.po b/odex-event/muk_autovacuum/i18n/pt.po new file mode 100644 index 000000000..7487fb78a --- /dev/null +++ b/odex-event/muk_autovacuum/i18n/pt.po @@ -0,0 +1,402 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_autovacuum +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:44+0000\n" +"PO-Revision-Date: 2019-07-12 23:44+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Warning: Warning Exception to use with raise" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "b64encode, b64decode: Base64 converter" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "date_format, datetime_format: server date and time formats" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "env: Odoo Environment on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "logger.info(message): Python logging framework" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "model: Odoo Model of the record on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "time, datetime, dateutil, timezone: useful Python libraries" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "uid, user: User on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active +msgid "Active" +msgstr "Ativo" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "All" +msgstr "Todas" + +#. module: muk_autovacuum +#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule +#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules +#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree +msgid "Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum +msgid "Automatic Vacuum" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Code Based" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Code Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code which will be executed during the clean up." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date +msgid "Created on" +msgstr "Criada em" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Days" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Delete all records which match the domain." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Delete older data than x." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Delete records with am index greater than x." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name +msgid "Display Name" +msgstr "Nome a Exibir" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Do not delete starred records.\n" +" Checks for the following fields:\n" +" - starred\n" +" - favorite\n" +" - is_starred\n" +" - is_favorite" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Domain" +msgstr "Domínio" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Domain Based" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Domain Settings" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Enter Python code here. Help about Python expression is available in the help tab of this document." +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,size_type:0 +msgid "Fixed Value" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64 +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74 +#, python-format +msgid "GC domain: %s" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71 +#, python-format +msgid "GC domain: [] order: %s limit: %s" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87 +#, python-format +msgid "GC'd %s %s records" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83 +#, python-format +msgid "GC'd %s attachments from %s entries" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Group By" +msgstr "Agrupar Por" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help" +msgstr "Ajuda" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help with Python expressions" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Hours" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id +msgid "ID" +msgstr "Id." + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:290 +#, python-format +msgid "Import Template for Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update +msgid "Last Modified on" +msgstr "Última Modificação em" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date +msgid "Last Updated on" +msgstr "Última Atualização em" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Minutes" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Model" +msgstr "Modelo" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name +msgid "Model Name" +msgstr "Nome do Modelo" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model +msgid "Model on which the rule is applied." +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Months" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name +msgid "Name" +msgstr "Nome" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only Archived" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only Attachments" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only delete archived records." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only delete record attachments." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Order by which the index is defined." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Protect Starred" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state +msgid "Rule Type" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:330 +#, python-format +msgid "Rule validation has failed!" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence +msgid "Sequence" +msgstr "Sequência" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size +msgid "Size" +msgstr "Tamanho" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Size Based" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Size Order" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Size Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type +msgid "Size Type" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Size Value" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter +#: selection:muk_autovacuum.rules,size_type:0 +msgid "System Parameter" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Time" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Time Based" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field +msgid "Time Field" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Time Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type +msgid "Time Unit" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Various fields may use Python code or Python expressions. The following variables can be used:" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Weeks" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Years" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "e.g. Delete Logs after 30 Days" +msgstr "" + diff --git a/odex-event/muk_autovacuum/i18n/ru.po b/odex-event/muk_autovacuum/i18n/ru.po new file mode 100644 index 000000000..ea2864df1 --- /dev/null +++ b/odex-event/muk_autovacuum/i18n/ru.po @@ -0,0 +1,402 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_autovacuum +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:45+0000\n" +"PO-Revision-Date: 2019-07-12 23:45+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Warning: Warning Exception to use with raise" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "b64encode, b64decode: Base64 converter" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "date_format, datetime_format: server date and time formats" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "env: Odoo Environment on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "logger.info(message): Python logging framework" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "model: Odoo Model of the record on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "time, datetime, dateutil, timezone: useful Python libraries" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "uid, user: User on which the rule is triggered" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active +msgid "Active" +msgstr "Активно" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "All" +msgstr "Все" + +#. module: muk_autovacuum +#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule +#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules +#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree +msgid "Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum +msgid "Automatic Vacuum" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Code Based" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Code Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code +msgid "Code which will be executed during the clean up." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid +msgid "Created by" +msgstr "Создано" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date +msgid "Created on" +msgstr "Создан" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Days" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Delete all records which match the domain." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Delete older data than x." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Delete records with am index greater than x." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name +msgid "Display Name" +msgstr "Отображаемое Имя" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Do not delete starred records.\n" +" Checks for the following fields:\n" +" - starred\n" +" - favorite\n" +" - is_starred\n" +" - is_favorite" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain +msgid "Domain" +msgstr "Домен" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Domain Based" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Domain Settings" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Enter Python code here. Help about Python expression is available in the help tab of this document." +msgstr "Введите код Python здесь. Помощь о Python доступна в колонке справка в этом документе." + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,size_type:0 +msgid "Fixed Value" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64 +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74 +#, python-format +msgid "GC domain: %s" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71 +#, python-format +msgid "GC domain: [] order: %s limit: %s" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87 +#, python-format +msgid "GC'd %s %s records" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83 +#, python-format +msgid "GC'd %s attachments from %s entries" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Group By" +msgstr "Группировать по" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help" +msgstr "Помощь" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Help with Python expressions" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Hours" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id +msgid "ID" +msgstr "Номер" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:290 +#, python-format +msgid "Import Template for Auto Vacuum Rules" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update +msgid "Last Modified on" +msgstr "Последнее изменение" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid +msgid "Last Updated by" +msgstr "Последний раз обновил" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date +msgid "Last Updated on" +msgstr "Последнее обновление" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Minutes" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search +msgid "Model" +msgstr "Модель" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name +msgid "Model Name" +msgstr "Название модели" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model +msgid "Model on which the rule is applied." +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Months" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name +msgid "Name" +msgstr "Название" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only Archived" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only Attachments" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive +msgid "Only delete archived records." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments +msgid "Only delete record attachments." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Order by which the index is defined." +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred +msgid "Protect Starred" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state +msgid "Rule Type" +msgstr "" + +#. module: muk_autovacuum +#: code:addons/muk_autovacuum/models/rules.py:330 +#, python-format +msgid "Rule validation has failed!" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence +msgid "Sequence" +msgstr "Нумерация" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size +msgid "Size" +msgstr "Размер" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Size Based" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order +msgid "Size Order" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Size Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type +msgid "Size Type" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value +msgid "Size Value" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter +#: selection:muk_autovacuum.rules,size_type:0 +msgid "System Parameter" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time +msgid "Time" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,state:0 +msgid "Time Based" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field +msgid "Time Field" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Time Settings" +msgstr "" + +#. module: muk_autovacuum +#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type +msgid "Time Unit" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "Various fields may use Python code or Python expressions. The following variables can be used:" +msgstr "Различные поля могут использовать код Python или выражения Python. Могут использоваться следующие переменные:" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Weeks" +msgstr "" + +#. module: muk_autovacuum +#: selection:muk_autovacuum.rules,time_type:0 +msgid "Years" +msgstr "" + +#. module: muk_autovacuum +#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form +msgid "e.g. Delete Logs after 30 Days" +msgstr "" + diff --git a/odex-event/muk_autovacuum/models/__init__.py b/odex-event/muk_autovacuum/models/__init__.py new file mode 100644 index 000000000..b8a051f07 --- /dev/null +++ b/odex-event/muk_autovacuum/models/__init__.py @@ -0,0 +1,24 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Autovacuum +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +from . import rules +from . import ir_autovacuum \ No newline at end of file diff --git a/odex-event/muk_autovacuum/models/ir_autovacuum.py b/odex-event/muk_autovacuum/models/ir_autovacuum.py new file mode 100644 index 000000000..1b0875ed9 --- /dev/null +++ b/odex-event/muk_autovacuum/models/ir_autovacuum.py @@ -0,0 +1,90 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Autovacuum +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +import time +import logging +import datetime +import dateutil + +from odoo import _ +from odoo import models, api, fields +from odoo.tools.safe_eval import safe_eval + +_logger = logging.getLogger(__name__) + +_types = { + 'days': lambda interval: datetime.timedelta(days=interval), + 'years': lambda interval: datetime.timedelta(weeks=interval*52), + 'hours': lambda interval: datetime.timedelta(hours=interval), + 'weeks': lambda interval: datetime.timedelta(weeks=interval), + 'months': lambda interval: datetime.timedelta(days=interval*30), + 'minutes': lambda interval: datetime.timedelta(minutes=interval), +} + +class AutoVacuum(models.AbstractModel): + + _inherit = 'ir.autovacuum' + + @api.model + def power_on(self, *args, **kwargs): + res = super(AutoVacuum, self).power_on(*args, **kwargs) + rules = self.env['muk_autovacuum.rules'].sudo().search([], order='sequence asc') + for rule in rules: + if rule.state in ['time', 'size', 'domain']: + model = self.env[rule.model.model].sudo() + records = self.env[rule.model.model] + if rule.state == 'time': + computed_time = datetime.datetime.utcnow() - _types[rule.time_type](rule.time) + domain = [(rule.time_field.name, '<', fields.Datetime.to_string(computed_time))] + if rule.protect_starred: + for field in rule.model.field_id: + if field.name in ['starred', 'favorite', 'is_starred', 'is_favorite']: + domain.append((field.name, '=', False)) + if rule.only_inactive and "active" in rule.model.field_id.mapped("name"): + domain.append(('active', '=', False)) + _logger.info(_("GC domain: %s"), domain) + records = model.with_context(active_test=False).search(domain) + elif rule.state == 'size': + size = rule.size if rule.size_type == 'fixed' else rule.size_parameter_value + count = model.with_context(active_test=False).search([], count=True) + if size and size > 0 and count > size: + limit = count - size + _logger.info(_("GC domain: [] order: %s limit: %s"), rule.size_order, limit) + records = model.with_context(active_test=False).search([], order=rule.size_order, limit=limit) + elif rule.state == 'domain': + _logger.info(_("GC domain: %s"), rule.domain) + domain = safe_eval(rule.domain or "[]", rules._get_eval_domain_context()) + records = model.with_context(active_test=False).search(domain) + if rule.only_attachments: + attachments = self.env['ir.attachment'].sudo().search([ + ('res_model', '=', rule.model.model), + ('res_id', 'in', records.mapped('id'))]) + count = len(attachments) + attachments.unlink() + _logger.info(_("GC'd %s attachments from %s entries"), count, rule.model.model) + else: + count = len(records) + records.unlink() + _logger.info(_("GC'd %s %s records"), count, rule.model.model) + elif rule.state == 'code': + safe_eval(rule.code.strip(), rules._get_eval_code_context(rule), mode="exec") + return res \ No newline at end of file diff --git a/odex-event/muk_autovacuum/models/rules.py b/odex-event/muk_autovacuum/models/rules.py new file mode 100644 index 000000000..c2dccf3b8 --- /dev/null +++ b/odex-event/muk_autovacuum/models/rules.py @@ -0,0 +1,330 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Autovacuum +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +import time +import base64 +import logging +import datetime +import dateutil + +from pytz import timezone + +from odoo import _ +from odoo import models, api, fields +from odoo.exceptions import ValidationError, Warning +from odoo.tools import DEFAULT_SERVER_DATE_FORMAT +from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT +from odoo.tools.safe_eval import safe_eval, test_python_expr + +_logger = logging.getLogger(__name__) + +class AutoVacuumRules(models.Model): + + _name = 'muk_autovacuum.rules' + _description = "Auto Vacuum Rules" + _order = "sequence asc" + + #---------------------------------------------------------- + # Defaults + #---------------------------------------------------------- + + def _default_sequence(self): + record = self.sudo().search([], order='sequence desc', limit=1) + if record.exists(): + return record.sequence + 1 + else: + return 1 + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + name = fields.Char( + string='Name', + required=True) + + active = fields.Boolean( + string='Active', + default=True) + + state = fields.Selection( + selection=[ + ('time', 'Time Based'), + ('size', 'Size Based'), + ('domain', 'Domain Based'), + ('code', 'Code Based')], + string='Rule Type', + default='time', + required=True) + + sequence = fields.Integer( + string='Sequence', + default=lambda self: self._default_sequence(), + required=True) + + model = fields.Many2one( + comodel_name='ir.model', + string="Model", + required=True, + ondelete='cascade', + help="Model on which the rule is applied.") + + model_name = fields.Char( + related='model.model', + string="Model Name", + readonly=True, + store=True) + + time_field = fields.Many2one( + comodel_name='ir.model.fields', + domain="[('model_id', '=', model), ('ttype', '=', 'datetime')]", + string='Time Field', + ondelete='cascade', + states={ + 'time': [('required', True)], + 'size': [('invisible', True)], + 'domain': [('invisible', True)], + 'code': [('invisible', True)]}) + + time_type = fields.Selection( + selection=[ + ('minutes', 'Minutes'), + ('hours', 'Hours'), + ('days', 'Days'), + ('weeks', 'Weeks'), + ('months', 'Months'), + ('years', 'Years')], + string='Time Unit', + default='months', + states={ + 'time': [('required', True)], + 'size': [('invisible', True)], + 'domain': [('invisible', True)], + 'code': [('invisible', True)]}) + + time = fields.Integer( + string='Time', + default=1, + states={ + 'time': [('required', True)], + 'size': [('invisible', True)], + 'domain': [('invisible', True)], + 'code': [('invisible', True)]}, + help="Delete older data than x.") + + size_type = fields.Selection( + selection=[ + ('fixed', 'Fixed Value'), + ('parameter', 'System Parameter')], + string='Size Type', + default='fixed', + states={ + 'time': [('invisible', True)], + 'size': [('required', True)], + 'domain': [('invisible', True)], + 'code': [('invisible', True)]}) + + size_parameter = fields.Many2one( + comodel_name='ir.config_parameter', + string='System Parameter', + ondelete='cascade', + states={ + 'time': [('invisible', True)], + 'size': [('required', True)], + 'domain': [('invisible', True)], + 'code': [('invisible', True)]}) + + size_parameter_value = fields.Integer( + compute='_compute_size_parameter_value', + string='Size Value', + states={ + 'time': [('invisible', True)], + 'size': [('readonly', True)], + 'domain': [('invisible', True)], + 'code': [('invisible', True)]}, + help="Delete records with am index greater than x.") + + size_order = fields.Char( + string='Size Order', + default='create_date desc', + states={ + 'time': [('invisible', True)], + 'size': [('required', True)], + 'domain': [('invisible', True)], + 'code': [('invisible', True)]}, + help="Order by which the index is defined.") + + size = fields.Integer( + string='Size', + default=200, + states={ + 'time': [('invisible', True)], + 'size': [('required', True)], + 'domain': [('invisible', True)], + 'code': [('invisible', True)]}, + help="Delete records with am index greater than x.") + + domain = fields.Char( + string='Domain', + states={ + 'time': [('invisible', True)], + 'size': [('invisible', True)], + 'domain': [('required', True)], + 'code': [('invisible', True)]}, + help="Delete all records which match the domain.") + + code = fields.Text( + string='Code', + states={ + 'time': [('invisible', True)], + 'size': [('invisible', True)], + 'domain': [('invisible', True)] , + 'code': [('required', True)]}, + default="# Enter Python code here. Help about Python expression is available in the help tab of this document.", + help="Code which will be executed during the clean up.") + + protect_starred = fields.Boolean( + string='Protect Starred', + default=True, + states={ + 'time': [('invisible', False)], + 'size': [('invisible', True)], + 'domain': [('invisible', True)], + 'code': [('invisible', True)]}, + help="""Do not delete starred records. + Checks for the following fields: + - starred + - favorite + - is_starred + - is_favorite""") + + only_inactive = fields.Boolean( + string='Only Archived', + default=False, + states={ + 'time': [('invisible', False)], + 'size': [('invisible', True)], + 'domain': [('invisible', True)], + 'code': [('invisible', True)]}, + help="Only delete archived records.") + + only_attachments = fields.Boolean( + string='Only Attachments', + default=False, + states={ + 'time': [('invisible', False)], + 'size': [('invisible', False)], + 'domain': [('invisible', False)], + 'code': [('invisible', True)]}, + help="Only delete record attachments.") + + #---------------------------------------------------------- + # Functions + #---------------------------------------------------------- + + @api.model + def _get_eval_domain_context(self): + return { + 'datetime': datetime, + 'dateutil': dateutil, + 'timezone': timezone, + 'time': time, + 'uid': self.env.uid, + 'user': self.env.user + } + + @api.model + def _get_eval_code_context(self, rule): + return { + 'env': self.env, + 'model': self.env[rule.model_name], + 'uid': self.env.user.id, + 'user': self.env.user, + 'time': time, + 'datetime': datetime, + 'dateutil': dateutil, + 'timezone': timezone, + 'b64encode': base64.b64encode, + 'b64decode': base64.b64decode, + 'date_format': DEFAULT_SERVER_DATE_FORMAT, + 'datetime_format': DEFAULT_SERVER_DATETIME_FORMAT, + 'Warning': Warning, + 'logger': logging.getLogger("%s (%s)" % (__name__, rule.name)), + } + + #---------------------------------------------------------- + # View + #---------------------------------------------------------- + + @api.onchange('model') + def _onchange_model(self): + field_domain = [ + ('model_id', '=', self.model.id), + ('ttype', '=', 'datetime'), + ('name', '=', 'create_date')] + model = self.env['ir.model.fields'].sudo() + self.time_field = model.search(field_domain, limit=1) + + @api.model + def get_import_templates(self): + return [{ + 'label': _('Import Template for Auto Vacuum Rules'), + 'template': '/muk_autovacuum/static/xls/muk_autovacuum_rules.xls' + }] + + #---------------------------------------------------------- + # Read + #---------------------------------------------------------- + + @api.depends('size_parameter') + def _compute_size_parameter_value(self): + for record in self: + try: + record.size_parameter_value = int(record.size_parameter.value) + except ValueError: + record.size_parameter_value = None + + #---------------------------------------------------------- + # Create, Update, Delete + #---------------------------------------------------------- + + @api.constrains('code') + def _check_code(self): + for record in self.sudo().filtered('code'): + message = test_python_expr(expr=record.code.strip(), mode="exec") + if message: + raise ValidationError(message) + + @api.constrains( + 'state', 'model', 'domain', 'code', + 'time_field', 'time_type', 'time', + 'size_type', 'size_parameter', 'size_order', 'size') + def _validate(self): + validators = { + 'time': lambda rec: rec.time_field and rec.time_type and rec.time, + 'size': lambda rec: rec.size_order and (rec.size_parameter or rec.size), + 'domain': lambda rec: rec.domain, + 'code': lambda rec: rec.code, + } + for record in self: + if not validators[record.state](record): + raise ValidationError(_("Rule validation has failed!")) \ No newline at end of file diff --git a/odex-event/muk_autovacuum/security/ir.model.access.csv b/odex-event/muk_autovacuum/security/ir.model.access.csv new file mode 100644 index 000000000..a3690893a --- /dev/null +++ b/odex-event/muk_autovacuum/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink + +access_muk_autovacuum_rules_group_cron,muk_autovacuum_rules group_rules,model_muk_autovacuum_rules,base.group_system,1,1,1,1 \ No newline at end of file diff --git a/odex-event/muk_autovacuum/static/description/banner.png b/odex-event/muk_autovacuum/static/description/banner.png new file mode 100644 index 000000000..488c2ebe8 Binary files /dev/null and b/odex-event/muk_autovacuum/static/description/banner.png differ diff --git a/odex-event/muk_autovacuum/static/description/icon.png b/odex-event/muk_autovacuum/static/description/icon.png new file mode 100644 index 000000000..e7654ddf6 Binary files /dev/null and b/odex-event/muk_autovacuum/static/description/icon.png differ diff --git a/odex-event/muk_autovacuum/static/description/icon.svg b/odex-event/muk_autovacuum/static/description/icon.svg new file mode 100644 index 000000000..a2f1e299e --- /dev/null +++ b/odex-event/muk_autovacuum/static/description/icon.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odex-event/muk_autovacuum/static/description/index.html b/odex-event/muk_autovacuum/static/description/index.html new file mode 100644 index 000000000..635dbdfb1 --- /dev/null +++ b/odex-event/muk_autovacuum/static/description/index.html @@ -0,0 +1,128 @@ +
+
+

MuK Auto Vacuum

+

Configure automatic garbage collection

+

MuK IT GmbH - + www.mukit.at

+
+ +
+
+
+ +
+
+
+

Overview

+

Allows the administrator to create rules to + automatically garbage collect a certain model. Every rule can have a + different time interval additional constraints. An extra constraint + can be for example to only delete inactive records.

+
+
+
+ +
+ +
+ +
+
+
+ + +
+
+
+ +
+

Help and Support

+
Feel free to + contact us, if you need any help with your Odoo integration or + addiontal features.
+ + +
\ No newline at end of file diff --git a/odex-event/muk_autovacuum/static/description/logo.png b/odex-event/muk_autovacuum/static/description/logo.png new file mode 100644 index 000000000..9427ce33e Binary files /dev/null and b/odex-event/muk_autovacuum/static/description/logo.png differ diff --git a/odex-event/muk_autovacuum/static/description/preview.png b/odex-event/muk_autovacuum/static/description/preview.png new file mode 100644 index 000000000..1deb1ccef Binary files /dev/null and b/odex-event/muk_autovacuum/static/description/preview.png differ diff --git a/odex-event/muk_autovacuum/static/description/screenshot.png b/odex-event/muk_autovacuum/static/description/screenshot.png new file mode 100644 index 000000000..ef9395f88 Binary files /dev/null and b/odex-event/muk_autovacuum/static/description/screenshot.png differ diff --git a/odex-event/muk_autovacuum/static/description/service_customization.png b/odex-event/muk_autovacuum/static/description/service_customization.png new file mode 100644 index 000000000..3eac66488 Binary files /dev/null and b/odex-event/muk_autovacuum/static/description/service_customization.png differ diff --git a/odex-event/muk_autovacuum/static/description/service_development.png b/odex-event/muk_autovacuum/static/description/service_development.png new file mode 100644 index 000000000..580d46046 Binary files /dev/null and b/odex-event/muk_autovacuum/static/description/service_development.png differ diff --git a/odex-event/muk_autovacuum/static/description/service_implementation.png b/odex-event/muk_autovacuum/static/description/service_implementation.png new file mode 100644 index 000000000..d64b66bda Binary files /dev/null and b/odex-event/muk_autovacuum/static/description/service_implementation.png differ diff --git a/odex-event/muk_autovacuum/static/description/service_integration.png b/odex-event/muk_autovacuum/static/description/service_integration.png new file mode 100644 index 000000000..76c5e80f4 Binary files /dev/null and b/odex-event/muk_autovacuum/static/description/service_integration.png differ diff --git a/odex-event/muk_autovacuum/static/description/service_support.png b/odex-event/muk_autovacuum/static/description/service_support.png new file mode 100644 index 000000000..4c530fafd Binary files /dev/null and b/odex-event/muk_autovacuum/static/description/service_support.png differ diff --git a/odex-event/muk_autovacuum/static/xls/muk_autovacuum_rules.xls b/odex-event/muk_autovacuum/static/xls/muk_autovacuum_rules.xls new file mode 100644 index 000000000..59686137f Binary files /dev/null and b/odex-event/muk_autovacuum/static/xls/muk_autovacuum_rules.xls differ diff --git a/odex-event/muk_autovacuum/tests/__init__.py b/odex-event/muk_autovacuum/tests/__init__.py new file mode 100644 index 000000000..895ce0444 --- /dev/null +++ b/odex-event/muk_autovacuum/tests/__init__.py @@ -0,0 +1,23 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Autovacuum +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +from . import test_autovacuum \ No newline at end of file diff --git a/odex-event/muk_autovacuum/tests/test_autovacuum.py b/odex-event/muk_autovacuum/tests/test_autovacuum.py new file mode 100644 index 000000000..cfaf2cc15 --- /dev/null +++ b/odex-event/muk_autovacuum/tests/test_autovacuum.py @@ -0,0 +1,99 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Autovacuum +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +import logging +import datetime + +from odoo.tests import common + +_logger = logging.getLogger(__name__) + +class AutoVacuumTestCase(common.TransactionCase): + + def setUp(self): + super(AutoVacuumTestCase, self).setUp() + self.logs = self.env['ir.logging'] + self.rules = self.env['muk_autovacuum.rules'] + self.model_model = self.env['ir.model'] + self.model_fields = self.env['ir.model.fields'] + self.model_logs = self.model_model.search([('model', '=', 'ir.logging')], limit=1) + time_field_domain = [ + ('model_id', '=', self.model_logs.id), + ('ttype', '=', 'datetime'), + ('name', '=', 'create_date')] + self.time_field_logs = self.model_fields.search(time_field_domain, limit=1) + + def test_autovacuum_time(self): + self.create_logs() + self.rules.create({ + 'name': "Delete Logs after 1 Minute", + 'state': 'time', + 'model': self.model_logs.id, + 'time_field': self.time_field_logs.id, + 'time_type': 'minutes', + 'time': 1}) + self.run_autovacuum() + + def test_autovacuum_size(self): + self.create_logs() + self.rules.create({ + 'name': "Delete Logs Count > 1", + 'state': 'size', + 'model': self.model_logs.id, + 'size': 1, + 'size_order': "id desc", + 'size_type': 'fixed'}) + self.run_autovacuum() + + def test_autovacuum_domain(self): + self.create_logs() + self.rules.create({ + 'name': "Delete Logs with Domain", + 'state': 'domain', + 'model': self.model_logs.id, + 'domain': "[]"}) + self.run_autovacuum() + + def create_logs(self): + ids = [] + time = datetime.datetime.utcnow() + for index in range(0, 10): + log = self.logs.create({ + 'create_date': time - datetime.timedelta(days=index), + 'create_uid': self.env.user.id, + 'name': "Test %s" % index, + 'type': 'server', + 'dbname': self.env.cr.dbname, + 'level': "INFO", + 'message': "TEST", + 'path': "PATH", + 'func': "TEST", + 'line': 1}) + ids.append(log.id) + return ids + + def run_autovacuum(self): + count_before = self.env['ir.logging'].search([], count=True) + self.env['ir.cron'].search([('model_id', '=', 'ir.autovacuum')]).ir_actions_server_id.run() + count_after = self.env['ir.logging'].search([], count=True) + self.assertTrue(count_before > count_after) + \ No newline at end of file diff --git a/odex-event/muk_autovacuum/views/rules.xml b/odex-event/muk_autovacuum/views/rules.xml new file mode 100644 index 000000000..05eda69e6 --- /dev/null +++ b/odex-event/muk_autovacuum/views/rules.xml @@ -0,0 +1,161 @@ + + + + + + + + muk_autovacuum_rules.search + muk_autovacuum.rules + + + + + + + + + + + + + + + + muk_autovacuum_rules.tree + muk_autovacuum.rules + + + + + + + + + + + + + muk_autovacuum_rules.form + muk_autovacuum.rules + +
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Help with Python expressions

+

Various fields may use Python code or Python expressions. The following variables can be used:

+
    +
  • uid, user: User on which the rule is triggered
  • +
  • env: Odoo Environment on which the rule is triggered
  • +
  • model: Odoo Model of the record on which the rule is triggered
  • +
  • b64encode, b64decode: Base64 converter
  • +
  • time, datetime, dateutil, timezone: useful Python libraries
  • +
  • date_format, datetime_format: server date and time formats
  • +
  • logger.info(message): Python logging framework
  • +
  • Warning: Warning Exception to use with raise
  • +
+
+
+
+
+
+
+
+
+ + + Auto Vacuum Rules + muk_autovacuum.rules + tree,form + {'search_default_all': 1} + + + + +
\ No newline at end of file diff --git a/odex-event/muk_dms/LICENSE b/odex-event/muk_dms/LICENSE new file mode 100644 index 000000000..153d416dc --- /dev/null +++ b/odex-event/muk_dms/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/odex-event/muk_dms/README.rst b/odex-event/muk_dms/README.rst new file mode 100644 index 000000000..dc2b70be9 --- /dev/null +++ b/odex-event/muk_dms/README.rst @@ -0,0 +1,123 @@ +============================== +MuK Document Management System +============================== + +MuK Documents is a module to create, manage and view files directly within Odoo. +In addition to views for files and folders, it offers its own all in one view +to make working with documents easier. This module is only the basis for an +entire ecosystem of apps that extend and seamlessly integrate with the document +management system. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI `_). + +To install our modules using the package manager make sure +`odoo-autodiscover `_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo-addon-`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository `_ +and find a more detailed installation guide on our `website `_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT `_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple `` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +To configure this module, you need to: + +#. Go to *Documents -> Configuration -> Storages*. +#. Create a new document setting. +#. Afterwards go to *Documents -> Directories*. +#. Create a new directory, mark it as root and select the previously created setting. + +Usage +============= + +The best way to manage the documents is to switch to the Documents view. Existing +documents can be managed there and new documents can be created. + +Credits +======= + +Contributors +------------ + +* Mathias Markl + +Images +------------ + +Some pictures are based on or inspired by: + +* `Roundicons `_ +* `Smashicons `_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH `_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_dms/__init__.py b/odex-event/muk_dms/__init__.py new file mode 100644 index 000000000..f57be46a0 --- /dev/null +++ b/odex-event/muk_dms/__init__.py @@ -0,0 +1,24 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +from . import models +from . import controllers \ No newline at end of file diff --git a/odex-event/muk_dms/__manifest__.py b/odex-event/muk_dms/__manifest__.py new file mode 100644 index 000000000..7b7b6a253 --- /dev/null +++ b/odex-event/muk_dms/__manifest__.py @@ -0,0 +1,73 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +{ + "name": "MuK Documents", + "summary": """Document Management System""", + "version": '12.0.3.0.12', + "category": 'Document Management', + "license": "LGPL-3", + "website": "http://www.mukit.at", + 'live_test_url': 'https://mukit.at/r/SgN', + "author": "MuK IT", + "contributors": [ + "Mathias Markl ", + ], + "depends": [ + "muk_security", + "muk_web_searchpanel", + ], + "data": [ + "security/security.xml", + "security/ir.model.access.csv", + "actions/file.xml", + "template/assets.xml", + "template/onboarding.xml", + "views/menu.xml", + "views/tag.xml", + "views/category.xml", + "views/file.xml", + "views/directory.xml", + "views/storage.xml", + "views/res_config_settings.xml", + ], + "demo": [ + "demo/res_users.xml", + "demo/category.xml", + "demo/tag.xml", + "demo/storage.xml", + "demo/directory.xml", + "demo/file.xml", + ], + "qweb": [ + "static/src/xml/*.xml", + ], + "images": [ + 'static/description/banner.png' + ], + "external_dependencies": { + "python": [], + "bin": [], + }, + "application": True, + "installable": True, +} diff --git a/odex-event/muk_dms/actions/file.xml b/odex-event/muk_dms/actions/file.xml new file mode 100644 index 000000000..e83cd0223 --- /dev/null +++ b/odex-event/muk_dms/actions/file.xml @@ -0,0 +1,35 @@ + + + + + + + + Migrate + + + code + records.action_migrate() + + + diff --git a/odex-event/muk_dms/controllers/__init__.py b/odex-event/muk_dms/controllers/__init__.py new file mode 100644 index 000000000..a27027ddc --- /dev/null +++ b/odex-event/muk_dms/controllers/__init__.py @@ -0,0 +1,24 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +from . import backend +from . import onboarding \ No newline at end of file diff --git a/odex-event/muk_dms/controllers/backend.py b/odex-event/muk_dms/controllers/backend.py new file mode 100644 index 000000000..77799463c --- /dev/null +++ b/odex-event/muk_dms/controllers/backend.py @@ -0,0 +1,37 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +import logging + +from odoo import _, http +from odoo.http import request + +_logger = logging.getLogger(__name__) + +class BackendController(http.Controller): + + @http.route('/config/muk_dms.forbidden_extensions', type='json', auth="user") + def forbidden_extensions(self, **kw): + params = request.env['ir.config_parameter'].sudo() + return { + 'forbidden_extensions': params.get_param("muk_dms.forbidden_extensions", default="") + } \ No newline at end of file diff --git a/odex-event/muk_dms/controllers/onboarding.py b/odex-event/muk_dms/controllers/onboarding.py new file mode 100644 index 000000000..43f4859d5 --- /dev/null +++ b/odex-event/muk_dms/controllers/onboarding.py @@ -0,0 +1,56 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +################################################################################### + +from odoo import http +from odoo.http import request + +class OnboardingController(http.Controller): + + @http.route('/dms/document_onboarding/directory', auth='user', type='json') + def document_onboarding_directory(self): + company = request.env.user.company_id + closed = company.documents_onboarding_state == 'closed' + check = request.env.user.has_group('muk_dms.group_dms_manager') + if check and not closed: + return { + 'html': request.env.ref('muk_dms.document_onboarding_directory_panel').render({ + 'state': company.get_and_update_documents_onboarding_state(), + 'company': company, + }) + } + return {} + + @http.route('/dms/document_onboarding/file', auth='user', type='json') + def document_onboarding_file(self): + company = request.env.user.company_id + closed = company.documents_onboarding_state == 'closed' + check = request.env.user.has_group('muk_dms.group_dms_manager') + if check and not closed: + return { + 'html': request.env.ref('muk_dms.document_onboarding_file_panel').render({ + 'state': company.get_and_update_documents_onboarding_state(), + 'company': company, + }) + } + return {} + + \ No newline at end of file diff --git a/odex-event/muk_dms/demo/category.xml b/odex-event/muk_dms/demo/category.xml new file mode 100644 index 000000000..b1ad68c92 --- /dev/null +++ b/odex-event/muk_dms/demo/category.xml @@ -0,0 +1,55 @@ + + + + + + + + Internal + + + + Human Resource + + + + + Contracts + + + + + Traveling + + + + + External + + + + News + + + + \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/audio01.wav b/odex-event/muk_dms/demo/data/audio01.wav new file mode 100644 index 000000000..2a479fc16 Binary files /dev/null and b/odex-event/muk_dms/demo/data/audio01.wav differ diff --git a/odex-event/muk_dms/demo/data/audio02.wav b/odex-event/muk_dms/demo/data/audio02.wav new file mode 100644 index 000000000..179a8d3ab Binary files /dev/null and b/odex-event/muk_dms/demo/data/audio02.wav differ diff --git a/odex-event/muk_dms/demo/data/audio03.mp3 b/odex-event/muk_dms/demo/data/audio03.mp3 new file mode 100644 index 000000000..397abc2e6 Binary files /dev/null and b/odex-event/muk_dms/demo/data/audio03.mp3 differ diff --git a/odex-event/muk_dms/demo/data/audio04.mp3 b/odex-event/muk_dms/demo/data/audio04.mp3 new file mode 100644 index 000000000..4667276e7 Binary files /dev/null and b/odex-event/muk_dms/demo/data/audio04.mp3 differ diff --git a/odex-event/muk_dms/demo/data/code01.aj b/odex-event/muk_dms/demo/data/code01.aj new file mode 100644 index 000000000..bcbd327c5 --- /dev/null +++ b/odex-event/muk_dms/demo/data/code01.aj @@ -0,0 +1,10 @@ +// HelloWorld.java +public class HelloWorld { + public static void say(String message) { + System.out.println(message); + } + + public static void sayToPerson(String message, String name) { + System.out.println(name + ", " + message); + } +} diff --git a/odex-event/muk_dms/demo/data/code02.sh b/odex-event/muk_dms/demo/data/code02.sh new file mode 100644 index 000000000..ffc7ac1d3 --- /dev/null +++ b/odex-event/muk_dms/demo/data/code02.sh @@ -0,0 +1,24 @@ +#!/bin/bash +## +## +## Copyright (c) 2017-2019 MuK IT GmbH. +## +## This file is part of MuK Documents +## (see https://mukit.at). +## +## This program is free software: you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program. If not, see . +## +## +STR="Hello World!" +echo $STR \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/code03.c b/odex-event/muk_dms/demo/data/code03.c new file mode 100644 index 000000000..3df0a0e09 --- /dev/null +++ b/odex-event/muk_dms/demo/data/code03.c @@ -0,0 +1,27 @@ +/* + * + * Copyright (c) 2017-2019 MuK IT GmbH. + * + * This file is part of MuK Documents + * (see https://mukit.at). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + */ +#include + +int main(void) +{ + printf("hello, world\n"); +} \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/code04.cc b/odex-event/muk_dms/demo/data/code04.cc new file mode 100644 index 000000000..fceff0985 --- /dev/null +++ b/odex-event/muk_dms/demo/data/code04.cc @@ -0,0 +1,28 @@ +/* + * + * Copyright (c) 2017-2019 MuK IT GmbH. + * + * This file is part of MuK Documents + * (see https://mukit.at). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + */ +#include + +int main() +{ + std::cout << "Hello, world!\n"; + return 0; +} \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/code05.cs b/odex-event/muk_dms/demo/data/code05.cs new file mode 100644 index 000000000..f4bfff3fe --- /dev/null +++ b/odex-event/muk_dms/demo/data/code05.cs @@ -0,0 +1,28 @@ +// +// Copyright (c) 2017-2019 MuK IT GmbH. +// +// This file is part of MuK Documents +// (see https://mukit.at). +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . +// +using System; + +class Program +{ + static void Main(string[] args) + { + Console.WriteLine("Hello, world!"); + } +} \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/code06.cbl b/odex-event/muk_dms/demo/data/code06.cbl new file mode 100644 index 000000000..6479586ce --- /dev/null +++ b/odex-event/muk_dms/demo/data/code06.cbl @@ -0,0 +1,5 @@ +IDENTIFICATION DIVISION. +PROGRAM-ID. hello-world. +PROCEDURE DIVISION. + DISPLAY "Hello, world!" + . \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/code07.coffee b/odex-event/muk_dms/demo/data/code07.coffee new file mode 100644 index 000000000..fe8d71b49 --- /dev/null +++ b/odex-event/muk_dms/demo/data/code07.coffee @@ -0,0 +1 @@ +console.log "Hello, World!" \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/code08.f b/odex-event/muk_dms/demo/data/code08.f new file mode 100644 index 000000000..642ce75ee --- /dev/null +++ b/odex-event/muk_dms/demo/data/code08.f @@ -0,0 +1,3 @@ +program helloworld + print *, "Hello world!" +end program helloworld \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/code09.go b/odex-event/muk_dms/demo/data/code09.go new file mode 100644 index 000000000..0e358fccd --- /dev/null +++ b/odex-event/muk_dms/demo/data/code09.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("Hello, World") +} \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/code10.groovy b/odex-event/muk_dms/demo/data/code10.groovy new file mode 100644 index 000000000..a61e6a022 --- /dev/null +++ b/odex-event/muk_dms/demo/data/code10.groovy @@ -0,0 +1,22 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see . +* +**********************************************************************************/ +println "Hello World" \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/code11.java b/odex-event/muk_dms/demo/data/code11.java new file mode 100644 index 000000000..64e836844 --- /dev/null +++ b/odex-event/muk_dms/demo/data/code11.java @@ -0,0 +1,26 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see . +* +**********************************************************************************/ +class HelloWorldApp { + public static void main(String[] args) { + System.out.println("Hello World!"); // Prints the string to the console. + } +} \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/code12.sc b/odex-event/muk_dms/demo/data/code12.sc new file mode 100644 index 000000000..49eae568d --- /dev/null +++ b/odex-event/muk_dms/demo/data/code12.sc @@ -0,0 +1,3 @@ +object HelloWorld extends App { + println("Hello, World!") + } \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/document01.pdf b/odex-event/muk_dms/demo/data/document01.pdf new file mode 100644 index 000000000..99d31cef1 Binary files /dev/null and b/odex-event/muk_dms/demo/data/document01.pdf differ diff --git a/odex-event/muk_dms/demo/data/document02.doc b/odex-event/muk_dms/demo/data/document02.doc new file mode 100644 index 000000000..9cb3f019e Binary files /dev/null and b/odex-event/muk_dms/demo/data/document02.doc differ diff --git a/odex-event/muk_dms/demo/data/document03.odt b/odex-event/muk_dms/demo/data/document03.odt new file mode 100644 index 000000000..c963be926 Binary files /dev/null and b/odex-event/muk_dms/demo/data/document03.odt differ diff --git a/odex-event/muk_dms/demo/data/document04.rtf b/odex-event/muk_dms/demo/data/document04.rtf new file mode 100644 index 000000000..83bf162d4 --- /dev/null +++ b/odex-event/muk_dms/demo/data/document04.rtf @@ -0,0 +1,23 @@ +{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f73\froman\fcharset238\fprq2 Times New Roman CE;}{\f74\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f76\froman\fcharset161\fprq2 Times New Roman Greek;}{\f77\froman\fcharset162\fprq2 Times New Roman Tur;} +{\f78\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f79\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f80\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f81\fswiss\fcharset238\fprq2 Arial CE;}{\f82\fswiss\fcharset204\fprq2 Arial Cyr;} +{\f84\fswiss\fcharset161\fprq2 Arial Greek;}{\f85\fswiss\fcharset162\fprq2 Arial Tur;}{\f86\fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f87\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f88\fswiss\fcharset186\fprq2 Arial Baltic;}} +{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; +\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red51\green102\blue255;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 +\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \snext0 Normal;}{\s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \b\f1\fs32\lang2057\langfe1033\kerning32\cgrid\langnp2057\langfenp1033 +\sbasedon0 \snext0 heading 1;}{\s3\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \b\f1\fs26\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 3;}{\*\cs10 \additive +Default Paragraph Font;}}{\info{\title The power of technology lies in the ability to match learning styles to the needs of individual learners}{\author Les Mason}{\operator Les Mason}{\creatim\yr2005\mo3\dy15\hr18\min11} +{\revtim\yr2005\mo3\dy15\hr18\min12}{\version1}{\edmins1}{\nofpages1}{\nofwords0}{\nofchars0}{\nofcharsws0}{\vern8203}}\paperw11906\paperh16838 \widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin +\dghspace180\dgvspace180\dghorigin1800\dgvorigin1440\dghshow1\dgvshow1\jexpand\viewkind1\viewscale117\viewzk2\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule \fet0\sectd +\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang +{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7 +\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain +\s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\f1\fs32\lang2057\langfe1033\kerning32\cgrid\langnp2057\langfenp1033 { +The power of technology lies in the ability to match learning styles to the needs of individual learners +\par }\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 { +\par }\pard\plain \s3\ql \li720\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin720\itap0 \b\f1\fs26\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\cf17 The more I study the more I l}{\cf17 earn. +\par The more I learn the more I know +\par The more I know the more I forget +\par The more I forget the less I know +\par So why study?}{ +\par }} \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/image01.jpg b/odex-event/muk_dms/demo/data/image01.jpg new file mode 100644 index 000000000..586ceb89d Binary files /dev/null and b/odex-event/muk_dms/demo/data/image01.jpg differ diff --git a/odex-event/muk_dms/demo/data/image02.jpg b/odex-event/muk_dms/demo/data/image02.jpg new file mode 100644 index 000000000..7467c6f61 Binary files /dev/null and b/odex-event/muk_dms/demo/data/image02.jpg differ diff --git a/odex-event/muk_dms/demo/data/image03.jpg b/odex-event/muk_dms/demo/data/image03.jpg new file mode 100644 index 000000000..a35fc1ae8 Binary files /dev/null and b/odex-event/muk_dms/demo/data/image03.jpg differ diff --git a/odex-event/muk_dms/demo/data/image04.jpg b/odex-event/muk_dms/demo/data/image04.jpg new file mode 100644 index 000000000..25a3abe27 Binary files /dev/null and b/odex-event/muk_dms/demo/data/image04.jpg differ diff --git a/odex-event/muk_dms/demo/data/mail01.eml b/odex-event/muk_dms/demo/data/mail01.eml new file mode 100644 index 000000000..4f23ca299 --- /dev/null +++ b/odex-event/muk_dms/demo/data/mail01.eml @@ -0,0 +1,171 @@ +Return-Path: +To: Manuel Lemos +Subject: Testing Manuel Lemos' MIME E-mail composing and sending PHP class: HTML message +From: mlemos +Reply-To: mlemos +Sender: mlemos@acm.org +X-Mailer: http://www.phpclasses.org/mimemessage $Revision: 1.63 $ (mail) +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf" +Message-ID: <20050430192829.0489.mlemos@acm.org> +Date: Sat, 30 Apr 2005 19:28:29 -0300 + + +--652b8c4dcb00cdcdda1e16af36781caf +Content-Type: multipart/related; boundary="6a82fb459dcaacd40ab3404529e808dc" + + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: multipart/alternative; boundary="69c1683a3ee16ef7cf16edd700694a2f" + + +--69c1683a3ee16ef7cf16edd700694a2f +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + +This is an HTML message. Please use an HTML capable mail program to read +this message. + +--69c1683a3ee16ef7cf16edd700694a2f +Content-Type: text/html; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + + + +Testing Manuel Lemos' MIME E-mail composing and sending PHP class: H= +TML message + + + + + + + +
+

Testing Manuel Lemos' MIME E-mail composing and sending PHP cla= +ss: HTML message

+
+

Hello Manuel,

+This message is just to let you know that the MIME E-mail message composing and sending PHP class is working as expected.

+

Here is an image embedded in a message as a separate part:

= +
+
Than= +k you,
+mlemos

+
+ + +--69c1683a3ee16ef7cf16edd700694a2f-- + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: image/gif; name="logo.gif" +Content-Transfer-Encoding: base64 +Content-Disposition: inline; filename="logo.gif" +Content-ID: + +R0lGODlhlgAjAPMJAAAAAAAA/y8vLz8/P19fX19f339/f4+Pj4+Pz7+/v/////////////////// +/////yH5BAEAAAkALAAAAACWACMAQwT+MMlJq7046827/2AoHYChGAChAkBylgKgKClFyEl6xDMg +qLFBj3C5uXKplVAxIOxkA8BhdFCpDlMK1urMTrZWbAV8tVS5YsxtxmZHBVOSCcW9zaXyNhslVcto +RBp5NQYxLAYGLi8oSwoJBlE+BiSNj5E/PDQsmy4pAJWQLAKJY5+hXhZ2dDYldFWtNSFPiXssXnZR +k5+1pjpBiDMJUXG/Jo7DI4eKfMSmxsJ9GAUB1NXW19jZ2tvc3d7f4OHi2AgZN5vom1kk6F7s6u/p +m3Ab7AOIiCxOyZuBIv8AOeTJIaYQjiR/kKTr5GQNE3pYSjCJ9mUXClRUsLxaZGciC0X+OlpoOuQo +ZKdNJnIoKfnxRUQh6FLG0iLxIoYnJd0JEKISJyAQDodp3EUDC48oDnUY7HFI3wEDRjzycQJVZCQT +Ol7NK+G0qgtkAcOKHUu2rNmzYTVqRMt2bB49bHompSchqg6HcGeANSMxr8sEa2y2HexnSEUTuWri +SSbkYh7BgGVAnhB1b2REibESYaRoBgqIMYx59tFM9AvQffVG49P5NMZkMlHKhJPJb0knmSKZ6kSX +JtbeF3Am7ocok6c7cM7pU5xcXiJJETUz16qPrzEfaFgZpvzn7h86YV5r/1mxXeAUMVyEIpnVUGpN +RlG2ka9b3lP3pm2l6u7P+l/YLj3+RlEHbz1C0kRxSITQaAcilVBMEzmkkEQO8oSOBNg9SN+AX6hV +z1pjgJiAhwCRsY8ZIp6xj1ruqCgeGeKNGEZwLnIwzTg45qjjjjz2GEA5hAUp5JBEFmnkkSCoWEcZ +X8yohZNK1pFGPQS4hx0qNSLJlk9wCQORYu5QiMd7bUzGVyNlRiOHSlpuKdGEItHQ3HZ18beRRyws +YSY/waDTiHf/tWlWUBAJiMJ1/Z0XXU7N0FnREpKM4NChCgbyRDq9XYpOplaKopN9NMkDnBbG+UMC +QwLWIeaiglES6AjGARcPHCWoVAiatcTnGTABZoLPaPG1phccPv366mEvWEFSLnj+2QaonECwcJt/ +e1Zw3lJvVMmftBdVNQS3UngLCA85YHIQOy6JO9N4eZW7KJwtOUZmGwOMWqejwVW6RQzaikRHX3yI +osKhDAq8wmnKSmdMwNidSOof9ZG2DoV0RfTVmLFtGmNk+CoZna0HQnPHS3AhRbIeDpqmR09E0bsu +soeaw994z+rwQVInvqLenBftYjLOVphLFHhV9qsnez8AEUbQRgO737AxChjmyANxuEFHSGi7hFCV +4jxLst2N8sRJYU+SHiAKjlmCgz2IffbLI5aaQR71hnkxq1ZfHSfKata6YDCJDMAQwY7wOgzhjxgj +VFQnKB5uX4mr9qJ79pann+VcfcSzsSCd2mw5scqRRvlQ6TgcUelYhu75iPE4JejrsJOFQAG01277 +7bjnrvvuvPfu++/ABy887hfc6OPxyCevPDdAVoDA89BHL/301Fdv/fXYZ6/99tx3Pz0FEQAAOw== + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: image/gif; name="background.gif" +Content-Transfer-Encoding: base64 +Content-Disposition: inline; filename="background.gif" +Content-ID: <4c837ed463ad29c820668e835a270e8a.gif> + +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 +eZmYmZmauZmc2ZlCEQEAOw== + +--6a82fb459dcaacd40ab3404529e808dc-- + +--652b8c4dcb00cdcdda1e16af36781caf +Content-Type: text/plain; name="attachment.txt" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="attachment.txt" + +VGhpcyBpcyBqdXN0IGEgcGxhaW4gdGV4dCBhdHRhY2htZW50IGZpbGUgbmFtZWQgYXR0YWNobWVu +dC50eHQgLg== + +--652b8c4dcb00cdcdda1e16af36781caf-- + diff --git a/odex-event/muk_dms/demo/data/mail02.eml b/odex-event/muk_dms/demo/data/mail02.eml new file mode 100644 index 000000000..b5b23c1be --- /dev/null +++ b/odex-event/muk_dms/demo/data/mail02.eml @@ -0,0 +1,44 @@ +MIME-Version: 1.0 +Received: by 10.220.191.194 with HTTP; Wed, 11 May 2011 12:27:12 -0700 (PDT) +Date: Wed, 11 May 2011 13:27:12 -0600 +Delivered-To: jncjkq@gmail.com +Message-ID: +Subject: Test +From: Bill Jncjkq +To: bookmarks@jncjkq.net +Content-Type: multipart/mixed; boundary=bcaec54eecc63acce904a3050f79 + +--bcaec54eecc63acce904a3050f79 +Content-Type: multipart/alternative; boundary=bcaec54eecc63acce604a3050f77 + +--bcaec54eecc63acce604a3050f77 +Content-Type: text/plain; charset=ISO-8859-1 + +-- +Bill Jncjkq + +--bcaec54eecc63acce604a3050f77 +Content-Type: text/html; charset=ISO-8859-1 + +
--
Bill Jncjkq
+ +--bcaec54eecc63acce604a3050f77-- +--bcaec54eecc63acce904a3050f79 +Content-Type: text/html; charset=US-ASCII; name="bookmarks-really-short.html" +Content-Disposition: attachment; filename="bookmarks-really-short.html" +Content-Transfer-Encoding: base64 +X-Attachment-Id: f_gnknv6u70 + +PCFET0NUWVBFIE5FVFNDQVBFLUJvb2ttYXJrLWZpbGUtMT4KCTxIVE1MPgoJPE1FVEEgSFRUUC1F +UVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgoJ +PFRpdGxlPkJvb2ttYXJrczwvVGl0bGU+Cgk8SDE+Qm9va21hcmtzPC9IMT4KCQk8RFQ+PEgzIEZP +TERFRD5UZWNoIE5ld3M8L0gzPgoJCTxETD48cD4KCQkJPERUPjxBIEhSRUY9Imh0dHA6Ly93d3cu +Y25ldC5jb20vIj5DTmV0PC9BPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL3d3dy53aXJlZC5jb20v +Ij5XaXJlZCBOZXdzPC9BPgoJCTwvREw+PHA+CgkJPERUPjxIMyBGT0xERUQ+VG9vbHMgYW5kIFJl +ZmVyZW5jZTwvSDM+CgkJPERMPjxwPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL3d3dy5tb25zdGVy +LmNvbS8iPk1vbnN0ZXIuY29tPC9BPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL3d3dy53ZWJtZC5j +b20vIj5XZWJNRDwvQT4KCQk8L0RMPjxwPgoJCTxEVD48SDMgRk9MREVEPlRyYXZlbDwvSDM+CgkJ +PERMPjxwPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL2ZvZG9ycy5jb20vIj5Gb2RvcnM8L0E+CgkJ +CTxEVD48QSBIUkVGPSJodHRwOi8vd3d3LnRyYXZlbG9jaXR5LmNvbS8iPlRyYXZlbG9jaXR5PC9B +PgoJCTwvREw+PHA+Cgk8L0RMPjxwPgo8L0hUTUw+ +--bcaec54eecc63acce904a3050f79-- \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/markdown.md b/odex-event/muk_dms/demo/data/markdown.md new file mode 100644 index 000000000..d3343e4e3 --- /dev/null +++ b/odex-event/muk_dms/demo/data/markdown.md @@ -0,0 +1,157 @@ +An h1 header +============ + +Paragraphs are separated by a blank line. + +2nd paragraph. *Italic*, **bold**, and `monospace`. Itemized lists +look like: + + * this one + * that one + * the other one + +Note that --- not considering the asterisk --- the actual text +content starts at 4-columns in. + +> Block quotes are +> written like so. +> +> They can span multiple paragraphs, +> if you like. + +Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., "it's all +in chapters 12--14"). Three dots ... will be converted to an ellipsis. +Unicode is supported. + + + +An h2 header +------------ + +Here's a numbered list: + + 1. first item + 2. second item + 3. third item + +Note again how the actual text starts at 4 columns in (4 characters +from the left side). Here's a code sample: + + # Let me re-iterate ... + for i in 1 .. 10 { do-something(i) } + +As you probably guessed, indented 4 spaces. By the way, instead of +indenting the block, you can use delimited blocks, if you like: + +~~~ +define foobar() { + print "Welcome to flavor country!"; +} +~~~ + +(which makes copying & pasting easier). You can optionally mark the +delimited block for Pandoc to syntax highlight it: + +~~~python +import time +# Quick, count to ten! +for i in range(10): + # (but not *too* quick) + time.sleep(0.5) + print i +~~~ + + + +### An h3 header ### + +Now a nested list: + + 1. First, get these ingredients: + + * carrots + * celery + * lentils + + 2. Boil some water. + + 3. Dump everything in the pot and follow + this algorithm: + + find wooden spoon + uncover pot + stir + cover pot + balance wooden spoon precariously on pot handle + wait 10 minutes + goto first step (or shut off burner when done) + + Do not bump wooden spoon or it will fall. + +Notice again how text always lines up on 4-space indents (including +that last line which continues item 3 above). + +Here's a link to [a website](http://foo.bar), to a [local +doc](local-doc.html), and to a [section heading in the current +doc](#an-h2-header). Here's a footnote [^1]. + +[^1]: Footnote text goes here. + +Tables can look like this: + +size material color +---- ------------ ------------ +9 leather brown +10 hemp canvas natural +11 glass transparent + +Table: Shoes, their sizes, and what they're made of + +(The above is the caption for the table.) Pandoc also supports +multi-line tables: + +-------- ----------------------- +keyword text +-------- ----------------------- +red Sunsets, apples, and + other red or reddish + things. + +green Leaves, grass, frogs + and other things it's + not easy being. +-------- ----------------------- + +A horizontal rule follows. + +*** + +Here's a definition list: + +apples + : Good for making applesauce. +oranges + : Citrus! +tomatoes + : There's no "e" in tomatoe. + +Again, text is indented 4 spaces. (Put a blank line between each +term/definition pair to spread things out more.) + +Here's a "line block": + +| Line one +| Line too +| Line tree + +and images can be specified like so: + +![example image](example-image.jpg "An exemplary image") + +Inline math equations go in like so: $\omega = d\phi / dt$. Display +math should get its own line and be put in in double-dollarsigns: + +$$I = \int \rho R^{2} dV$$ + +And note that you can backslash-escape any punctuation characters +which you wish to be displayed literally, ex.: \`foo\`, \*bar\*, etc. \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/sheet01.xls b/odex-event/muk_dms/demo/data/sheet01.xls new file mode 100644 index 000000000..795ff7c49 Binary files /dev/null and b/odex-event/muk_dms/demo/data/sheet01.xls differ diff --git a/odex-event/muk_dms/demo/data/sheet02.csv b/odex-event/muk_dms/demo/data/sheet02.csv new file mode 100644 index 000000000..f9cf38669 --- /dev/null +++ b/odex-event/muk_dms/demo/data/sheet02.csv @@ -0,0 +1,100 @@ +1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre,3,-213.25,38.94,35,Nunavut,Storage & Organization,0.8 +2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16,68.02,Nunavut,Appliances,0.58 +3,"Cardinal Slant-D Ring Binder, Heavy Gauge Vinyl",Barry French,293,46.71,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39 +4,R380,Clay Rozendal,483,1198.97,195.99,3.99,Nunavut,Telephones and Communication,0.58 +5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78,5.94,Nunavut,Appliances,0.5 +6,G.E. Longer-Life Indoor Recessed Floodlight Bulbs,Carlos Soltero,515,4.43,6.64,4.95,Nunavut,Office Furnishings,0.37 +7,"Angle-D Binders with Locking Rings, Label Holders",Carl Jackson,613,-54.04,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38 +8,"SAFCO Mobile Desk Side File, Wire Frame",Carl Jackson,613,127.70,42.76,6.22,Nunavut,Storage & Organization, +9,"SAFCO Commercial Wire Shelving, Black",Monica Federle,643,-695.26,138.14,35,Nunavut,Storage & Organization, +10,Xerox 198,Dorothy Badders,678,-226.36,4.98,8.33,Nunavut,Paper,0.38 +11,Xerox 1980,Neola Schneider,807,-166.85,4.28,6.18,Nunavut,Paper,0.4 +12,Advantus Map Pennant Flags and Round Head Tacks,Neola Schneider,807,-14.33,3.95,2,Nunavut,Rubber Bands,0.53 +13,Holmes HEPA Air Purifier,Carlos Daly,868,134.72,21.78,5.94,Nunavut,Appliances,0.5 +14,"DS/HD IBM Formatted Diskettes, 200/Pack - Staples",Carlos Daly,868,114.46,47.98,3.61,Nunavut,Computer Peripherals,0.71 +15,"Wilson Jones 1"" Hanging DublLock Ring Binders",Claudia Miner,933,-4.72,5.28,2.99,Nunavut,Binders and Binder Accessories,0.37 +16,Ultra Commercial Grade Dual Valve Door Closer,Neola Schneider,995,782.91,39.89,3.04,Nunavut,Office Furnishings,0.53 +17,"#10-4 1/8"" x 9 1/2"" Premium Diagonal Seam Envelopes",Allen Rosenblatt,998,93.80,15.74,1.39,Nunavut,Envelopes,0.4 +18,Hon 4-Shelf Metal Bookcases,Sylvia Foulston,1154,440.72,100.98,26.22,Nunavut,Bookcases,0.6 +19,"Lesro Sheffield Collection Coffee Table, End Table, Center Table, Corner Table",Sylvia Foulston,1154,-481.04,71.37,69,Nunavut,Tables,0.68 +20,g520,Jim Radford,1344,-11.68,65.99,5.26,Nunavut,Telephones and Communication,0.59 +21,LX 788,Jim Radford,1344,313.58,155.99,8.99,Nunavut,Telephones and Communication,0.58 +22,Avery 52,Carlos Soltero,1412,26.92,3.69,0.5,Nunavut,Labels,0.38 +23,Plymouth Boxed Rubber Bands by Plymouth,Carlos Soltero,1412,-5.77,4.71,0.7,Nunavut,Rubber Bands,0.8 +24,"GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2"" x 11""",Carl Ludwig,1539,-172.88,15.99,13.18,Nunavut,Binders and Binder Accessories,0.37 +25,"Maxell 3.5"" DS/HD IBM-Formatted Diskettes, 10/Pack",Carl Ludwig,1539,-144.55,4.89,4.93,Nunavut,Computer Peripherals,0.66 +26,Newell 335,Don Miller,1540,5.76,2.88,0.7,Nunavut,Pens & Art Supplies,0.56 +27,SANFORD Liquid Accent Tank-Style Highlighters,Annie Cyprus,1702,4.90,2.84,0.93,Nunavut,Pens & Art Supplies,0.54 +28,Canon PC940 Copier,Carl Ludwig,1761,-547.61,449.99,49,Nunavut,Copiers and Fax,0.38 +29,"Tenex Personal Project File with Scoop Front Design, Black",Carlos Soltero,1792,-5.45,13.48,4.51,Nunavut,Storage & Organization,0.59 +30,Col-Erase Pencils with Erasers,Grant Carroll,2275,41.67,6.08,1.17,Nunavut,Pens & Art Supplies,0.56 +31,"Imation 3.5"" DS/HD IBM Formatted Diskettes, 10/Pack",Don Miller,2277,-46.03,5.98,4.38,Nunavut,Computer Peripherals,0.75 +32,"White Dual Perf Computer Printout Paper, 2700 Sheets, 1 Part, Heavyweight, 20 lbs., 14 7/8 x 11",Don Miller,2277,33.67,40.99,19.99,Nunavut,Paper,0.36 +33,Self-Adhesive Address Labels for Typewriters by Universal,Alan Barnes,2532,140.01,7.31,0.49,Nunavut,Labels,0.38 +34,Accessory37,Alan Barnes,2532,-78.96,20.99,2.5,Nunavut,Telephones and Communication,0.81 +35,Fuji 5.2GB DVD-RAM,Jack Garza,2631,252.66,40.96,1.99,Nunavut,Computer Peripherals,0.55 +36,Bevis Steel Folding Chairs,Julia West,2757,-1766.01,95.95,74.35,Nunavut,Chairs & Chairmats,0.57 +37,Avery Binder Labels,Eugene Barchas,2791,-236.27,3.89,7.01,Nunavut,Binders and Binder Accessories,0.37 +38,Hon Every-Day Chair Series Swivel Task Chairs,Eugene Barchas,2791,80.44,120.98,30,Nunavut,Chairs & Chairmats,0.64 +39,"IBM Multi-Purpose Copy Paper, 8 1/2 x 11"", Case",Eugene Barchas,2791,118.94,30.98,5.76,Nunavut,Paper,0.4 +40,Global Troy Executive Leather Low-Back Tilter,Edward Hooks,2976,3424.22,500.98,26,Nunavut,Chairs & Chairmats,0.6 +41,XtraLife ClearVue Slant-D Ring Binders by Cardinal,Brad Eason,3232,-11.83,7.84,4.71,Nunavut,Binders and Binder Accessories,0.35 +42,Computer Printout Paper with Letter-Trim Perforations,Nicole Hansen,3524,52.35,18.97,9.03,Nunavut,Paper,0.37 +43,6160,Dorothy Wardle,3908,-180.20,115.99,2.5,Nunavut,Telephones and Communication,0.57 +44,Avery 49,Aaron Bergman,4132,1.32,2.88,0.5,Nunavut,Labels,0.36 +45,Hoover Portapower Portable Vacuum,Jim Radford,4612,-375.64,4.48,49,Nunavut,Appliances,0.6 +46,Timeport L7089,Annie Cyprus,4676,-104.25,125.99,7.69,Nunavut,Telephones and Communication,0.58 +47,Avery 510,Annie Cyprus,4676,85.96,3.75,0.5,Nunavut,Labels,0.37 +48,Xerox 1881,Annie Cyprus,4676,-8.38,12.28,6.47,Nunavut,Paper,0.38 +49,LX 788,Annie Cyprus,4676,1115.69,155.99,8.99,Nunavut,Telephones and Communication,0.58 +50,"Cardinal Slant-D Ring Binder, Heavy Gauge Vinyl",Annie Cyprus,5284,-3.05,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39 +51,"Memorex 4.7GB DVD-RAM, 3/Pack",Clay Rozendal,5316,514.07,31.78,1.99,Nunavut,Computer Peripherals,0.42 +52,Unpadded Memo Slips,Don Jones,5409,-7.04,3.98,2.97,Nunavut,Paper,0.35 +53,"Adams Telephone Message Book W/Dividers/Space For Phone Numbers, 5 1/4""X8 1/2"", 300/Messages",Beth Thompson,5506,4.41,5.88,3.04,Nunavut,Paper,0.36 +54,"Eldon Expressions Desk Accessory, Wood Pencil Holder, Oak",Frank Price,5569,-0.06,9.65,6.22,Nunavut,Office Furnishings,0.55 +55,Bell Sonecor JB700 Caller ID,Michelle Lonsdale,5607,-50.33,7.99,5.03,Nunavut,Telephones and Communication,0.6 +56,Avery Arch Ring Binders,Ann Chong,5894,87.68,58.1,1.49,Nunavut,Binders and Binder Accessories,0.38 +57,APC 7 Outlet Network SurgeArrest Surge Protector,Ann Chong,5894,-68.22,80.48,4.5,Nunavut,Appliances,0.55 +58,"Deflect-o RollaMat Studded, Beveled Mat for Medium Pile Carpeting",Joy Bell,5925,-354.90,92.23,39.61,Nunavut,Office Furnishings,0.67 +59,Accessory4,Joy Bell,5925,-267.01,85.99,0.99,Nunavut,Telephones and Communication,0.85 +60,Personal Creations Ink Jet Cards and Labels,Skye Norling,6016,3.63,11.48,5.43,Nunavut,Paper,0.36 +61,High Speed Automatic Electric Letter Opener,Barry Weirich,6116,-1759.58,1637.53,24.49,Nunavut,"Scissors, Rulers and Trimmers",0.81 +62,Xerox 1966,Grant Carroll,6182,-116.79,6.48,6.65,Nunavut,Paper,0.36 +63,Xerox 213,Grant Carroll,6182,-67.28,6.48,7.86,Nunavut,Paper,0.37 +64,"Boston Electric Pencil Sharpener, Model 1818, Charcoal Black",Adrian Hane,6535,-19.33,28.15,8.99,Nunavut,Pens & Art Supplies,0.57 +65,Hammermill CopyPlus Copy Paper (20Lb. and 84 Bright),Skye Norling,6884,-61.21,4.98,4.75,Nunavut,Paper,0.36 +66,"Telephone Message Books with Fax/Mobile Section, 5 1/2"" x 3 3/16""",Skye Norling,6884,119.09,6.35,1.02,Nunavut,Paper,0.39 +67,Crate-A-Files,Andrew Gjertsen,6916,-141.27,10.9,7.46,Nunavut,Storage & Organization,0.59 +68,"Angle-D Binders with Locking Rings, Label Holders",Ralph Knight,6980,-77.28,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38 +69,"80 Minute CD-R Spindle, 100/Pack - Staples",Dorothy Wardle,6982,407.44,39.48,1.99,Nunavut,Computer Peripherals,0.54 +70,"Bush Westfield Collection Bookcases, Dark Cherry Finish, Fully Assembled",Dorothy Wardle,6982,-338.27,100.98,57.38,Nunavut,Bookcases,0.78 +71,12-1/2 Diameter Round Wall Clock,Dorothy Wardle,6982,52.56,19.98,10.49,Nunavut,Office Furnishings,0.49 +72,SAFCO Arco Folding Chair,Grant Carroll,7110,1902.24,276.2,24.49,Nunavut,Chairs & Chairmats, +73,"#10 White Business Envelopes,4 1/8 x 9 1/2",Barry Weirich,7430,353.20,15.67,1.39,Nunavut,Envelopes,0.38 +74,3M Office Air Cleaner,Beth Paige,7906,271.78,25.98,5.37,Nunavut,Appliances,0.5 +75,"Global Leather and Oak Executive Chair, Black",Sylvia Foulston,8391,-268.36,300.98,64.73,Nunavut,Chairs & Chairmats,0.56 +76,Xerox 1936,Nicole Hansen,8419,70.39,19.98,5.97,Nunavut,Paper,0.38 +77,Xerox 214,Nicole Hansen,8419,-86.62,6.48,7.03,Nunavut,Paper,0.37 +78,Carina Double Wide Media Storage Towers in Natural & Black,Nicole Hansen,8833,-846.73,80.98,35,Nunavut,Storage & Organization,0.81 +79,Staples General Use 3-Ring Binders,Beth Paige,8995,8.05,1.88,1.49,Nunavut,Binders and Binder Accessories,0.37 +80,Xerox 1904,Beth Paige,8995,-78.02,6.48,5.86,Northwest Territories,Paper,0.36 +81,Luxo Professional Combination Clamp-On Lamps,Beth Paige,8995,737.94,102.3,21.26,Northwest Territories,Office Furnishings,0.59 +82,Xerox 217,Beth Paige,8995,-191.28,6.48,8.19,Northwest Territories,Paper,0.37 +83,Revere Boxed Rubber Bands by Revere,Beth Paige,8995,-21.49,1.89,0.76,Northwest Territories,Rubber Bands,0.83 +84,"Acco Smartsocket Table Surge Protector, 6 Color-Coded Adapter Outlets",Sylvia Foulston,9126,884.08,62.05,3.99,Northwest Territories,Appliances,0.55 +85,"Tennsco Snap-Together Open Shelving Units, Starter Sets and Add-On Units",Bryan Davis,9127,-329.49,279.48,35,Northwest Territories,Storage & Organization,0.8 +86,Hon 4070 Series Pagoda Round Back Stacking Chairs,Joy Bell,9509,2825.15,320.98,58.95,Northwest Territories,Chairs & Chairmats,0.57 +87,Xerox 1887,Joy Bell,9509,2.13,18.97,5.21,Northwest Territories,Paper,0.37 +88,Xerox 1891,Joy Bell,9509,707.15,48.91,5.81,Northwest Territories,Paper,0.38 +89,Avery 506,Alan Barnes,9763,75.13,4.13,0.5,Northwest Territories,Labels,0.39 +90,"Bush Heritage Pine Collection 5-Shelf Bookcase, Albany Pine Finish, *Special Order",Grant Carroll,9927,-270.63,140.98,53.48,Northwest Territories,Bookcases,0.65 +91,"Lifetime Advantage Folding Chairs, 4/Carton",Grant Carroll,9927,3387.35,218.08,18.06,Northwest Territories,Chairs & Chairmats,0.57 +92,Microsoft Natural Multimedia Keyboard,Grant Carroll,9927,-82.16,50.98,6.5,Northwest Territories,Computer Peripherals,0.73 +93,"Staples Wirebound Steno Books, 6"" x 9"", 12/Pack",Delfina Latchford,10022,-3.88,10.14,2.27,Northwest Territories,Paper,0.36 +94,"GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2"" x 11""",Don Jones,10437,-191.22,15.99,13.18,Northwest Territories,Binders and Binder Accessories,0.37 +95,Bevis Boat-Shaped Conference Table,Doug Bickford,10499,31.21,262.11,62.74,Northwest Territories,Tables,0.75 +96,"Linden 12"" Wall Clock With Oak Frame",Doug Bickford,10535,-44.14,33.98,19.99,Northwest Territories,Office Furnishings,0.55 +97,Newell 326,Doug Bickford,10535,-0.79,1.76,0.7,Northwest Territories,Pens & Art Supplies,0.56 +98,Prismacolor Color Pencil Set,Jamie Kunitz,10789,76.42,19.84,4.1,Northwest Territories,Pens & Art Supplies,0.44 +99,Xerox Blank Computer Paper,Anthony Johnson,10791,93.36,19.98,5.77,Northwest Territories,Paper,0.38 +100,600 Series Flip,Ralph Knight,10945,4.22,95.99,8.99,Northwest Territories,Telephones and Communication,0.57 diff --git a/odex-event/muk_dms/demo/data/sheet03.ods b/odex-event/muk_dms/demo/data/sheet03.ods new file mode 100644 index 000000000..b0c9c6831 Binary files /dev/null and b/odex-event/muk_dms/demo/data/sheet03.ods differ diff --git a/odex-event/muk_dms/demo/data/slide01.odp b/odex-event/muk_dms/demo/data/slide01.odp new file mode 100644 index 000000000..bf8cb46e6 Binary files /dev/null and b/odex-event/muk_dms/demo/data/slide01.odp differ diff --git a/odex-event/muk_dms/demo/data/slide02.ppt b/odex-event/muk_dms/demo/data/slide02.ppt new file mode 100644 index 000000000..0cd4ac593 Binary files /dev/null and b/odex-event/muk_dms/demo/data/slide02.ppt differ diff --git a/odex-event/muk_dms/demo/data/text.rst b/odex-event/muk_dms/demo/data/text.rst new file mode 100644 index 000000000..33ebb9deb --- /dev/null +++ b/odex-event/muk_dms/demo/data/text.rst @@ -0,0 +1,404 @@ +A ReStructuredText Primer +========================= + +:Author: Richard Jones +:Version: $Revision: 5801 $ +:Copyright: This document has been placed in the public domain. + +.. contents:: + + +The text below **contains** links that look like "(quickref__)". These +are relative links that point to the `Quick reStructuredText`_ user +reference. If these links don't work, please refer to the `master +quick reference`_ document. + +__ +.. _Quick reStructuredText: quickref.html +.. _master quick reference: + http://docutils.sourceforge.net/docs/user/rst/quickref.html + +.. Note:: This document is an informal introduction to + reStructuredText. The `What Next?`_ section below has links to + further resources, including a formal reference. + + +Structure +--------- + +From the **outset**, let me say that "Structured Text" is probably a bit +of a misnomer. It's more like "Relaxed Text" that uses certain +consistent patterns. These patterns are interpreted by a HTML +converter to produce "Very Structured Text" that can be used by a web +browser. + +The most basic pattern recognised is a **paragraph** (quickref__). +That's a chunk of text that is separated by blank lines (one is +enough). Paragraphs must have the same indentation -- that is, line +up at their left edge. Paragraphs that start indented will result in +indented quote paragraphs. For example:: + + This is a paragraph. It's quite + short. + + This paragraph will result in an indented block of + text, typically used for quoting other text. + + This is another one. + +Results in: + + This is a paragraph. It's quite + short. + + This paragraph will result in an indented block of + text, typically used for quoting other text. + + This is another one. + +__ quickref.html#paragraphs + + +Text styles +----------- + +(quickref__) + +__ quickref.html#inline-markup + +Inside paragraphs and other bodies of text, you may additionally mark +text for *italics* with "``*italics*``" or **bold** with +"``**bold**``". This is called "inline markup". + +If you want something to appear as a fixed-space literal, use +"````double back-quotes````". Note that no further fiddling is done +inside the double back-quotes -- so asterisks "``*``" etc. are left +alone. + +If you find that you want to use one of the "special" characters in +text, it will generally be OK -- reStructuredText is pretty smart. +For example, this lone asterisk * is handled just fine, as is the +asterisk in this equation: 5*6=30. If you actually +want text \*surrounded by asterisks* to **not** be italicised, then +you need to indicate that the asterisk is not special. You do this by +placing a backslash just before it, like so "``\*``" (quickref__), or +by enclosing it in double back-quotes (inline literals), like this:: + + ``*`` + +__ quickref.html#escaping + +.. Tip:: Think of inline markup as a form of (parentheses) and use it + the same way: immediately before and after the text being marked + up. Inline markup by itself (surrounded by whitespace) or in the + middle of a word won't be recognized. See the `markup spec`__ for + full details. + +__ ../../ref/rst/restructuredtext.html#inline-markup + + +Lists +----- + +Lists of items come in three main flavours: **enumerated**, +**bulleted** and **definitions**. In all list cases, you may have as +many paragraphs, sublists, etc. as you want, as long as the left-hand +side of the paragraph or whatever aligns with the first line of text +in the list item. + +Lists must always start a new paragraph -- that is, they must appear +after a blank line. + +**enumerated** lists (numbers, letters or roman numerals; quickref__) + __ quickref.html#enumerated-lists + + Start a line off with a number or letter followed by a period ".", + right bracket ")" or surrounded by brackets "( )" -- whatever you're + comfortable with. All of the following forms are recognised:: + + 1. numbers + + A. upper-case letters + and it goes over many lines + + with two paragraphs and all! + + a. lower-case letters + + 3. with a sub-list starting at a different number + 4. make sure the numbers are in the correct sequence though! + + I. upper-case roman numerals + + i. lower-case roman numerals + + (1) numbers again + + 1) and again + + Results in (note: the different enumerated list styles are not + always supported by every web browser, so you may not get the full + effect here): + + 1. numbers + + A. upper-case letters + and it goes over many lines + + with two paragraphs and all! + + a. lower-case letters + + 3. with a sub-list starting at a different number + 4. make sure the numbers are in the correct sequence though! + + I. upper-case roman numerals + + i. lower-case roman numerals + + (1) numbers again + + 1) and again + +**bulleted** lists (quickref__) + __ quickref.html#bullet-lists + + Just like enumerated lists, start the line off with a bullet point + character - either "-", "+" or "*":: + + * a bullet point using "*" + + - a sub-list using "-" + + + yet another sub-list + + - another item + + Results in: + + * a bullet point using "*" + + - a sub-list using "-" + + + yet another sub-list + + - another item + +**definition** lists (quickref__) + __ quickref.html#definition-lists + + Unlike the other two, the definition lists consist of a term, and + the definition of that term. The format of a definition list is:: + + what + Definition lists associate a term with a definition. + + *how* + The term is a one-line phrase, and the definition is one or more + paragraphs or body elements, indented relative to the term. + Blank lines are not allowed between term and definition. + + Results in: + + what + Definition lists associate a term with a definition. + + *how* + The term is a one-line phrase, and the definition is one or more + paragraphs or body elements, indented relative to the term. + Blank lines are not allowed between term and definition. + + +Preformatting (code samples) +---------------------------- +(quickref__) + +__ quickref.html#literal-blocks + +To just include a chunk of preformatted, never-to-be-fiddled-with +text, finish the prior paragraph with "``::``". The preformatted +block is finished when the text falls back to the same indentation +level as a paragraph prior to the preformatted block. For example:: + + An example:: + + Whitespace, newlines, blank lines, and all kinds of markup + (like *this* or \this) is preserved by literal blocks. + Lookie here, I've dropped an indentation level + (but not far enough) + + no more example + +Results in: + + An example:: + + Whitespace, newlines, blank lines, and all kinds of markup + (like *this* or \this) is preserved by literal blocks. + Lookie here, I've dropped an indentation level + (but not far enough) + + no more example + +Note that if a paragraph consists only of "``::``", then it's removed +from the output:: + + :: + + This is preformatted text, and the + last "::" paragraph is removed + +Results in: + +:: + + This is preformatted text, and the + last "::" paragraph is removed + + +Sections +-------- + +(quickref__) + +__ quickref.html#section-structure + +To break longer text up into sections, you use **section headers**. +These are a single line of text (one or more words) with adornment: an +underline alone, or an underline and an overline together, in dashes +"``-----``", equals "``======``", tildes "``~~~~~~``" or any of the +non-alphanumeric characters ``= - ` : ' " ~ ^ _ * + # < >`` that you +feel comfortable with. An underline-only adornment is distinct from +an overline-and-underline adornment using the same character. The +underline/overline must be at least as long as the title text. Be +consistent, since all sections marked with the same adornment style +are deemed to be at the same level:: + + Chapter 1 Title + =============== + + Section 1.1 Title + ----------------- + + Subsection 1.1.1 Title + ~~~~~~~~~~~~~~~~~~~~~~ + + Section 1.2 Title + ----------------- + + Chapter 2 Title + =============== + +This results in the following structure, illustrated by simplified +pseudo-XML:: + +
+ + Chapter 1 Title + <section> + <title> + Section 1.1 Title + <section> + <title> + Subsection 1.1.1 Title + <section> + <title> + Section 1.2 Title + <section> + <title> + Chapter 2 Title + +(Pseudo-XML uses indentation for nesting and has no end-tags. It's +not possible to show actual processed output, as in the other +examples, because sections cannot exist inside block quotes. For a +concrete example, compare the section structure of this document's +source text and processed output.) + +Note that section headers are available as link targets, just using +their name. To link to the Lists_ heading, I write "``Lists_``". If +the heading has a space in it like `text styles`_, we need to quote +the heading "```text styles`_``". + + +Document Title / Subtitle +````````````````````````` + +The title of the whole document is distinct from section titles and +may be formatted somewhat differently (e.g. the HTML writer by default +shows it as a centered heading). + +To indicate the document title in reStructuredText, use a unique adornment +style at the beginning of the document. To indicate the document subtitle, +use another unique adornment style immediately after the document title. For +example:: + + ================ + Document Title + ================ + ---------- + Subtitle + ---------- + + Section Title + ============= + + ... + +Note that "Document Title" and "Section Title" above both use equals +signs, but are distict and unrelated styles. The text of +overline-and-underlined titles (but not underlined-only) may be inset +for aesthetics. + + +Images +------ + +(quickref__) + +__ quickref.html#directives + +To include an image in your document, you use the the ``image`` directive__. +For example:: + + .. image:: https://picsum.photos/200/300/?random + +results in: + +.. image:: https://picsum.photos/200/300/?random + +The ``images/biohazard.png`` part indicates the filename of the image +you wish to appear in the document. There's no restriction placed on +the image (format, size etc). If the image is to appear in HTML and +you wish to supply additional information, you may:: + + .. image:: images/biohazard.png + :height: 100 + :width: 200 + :scale: 50 + :alt: alternate text + +See the full `image directive documentation`__ for more info. + +__ ../../ref/rst/directives.html +__ ../../ref/rst/directives.html#images + + +What Next? +---------- + +This primer introduces the most common features of reStructuredText, +but there are a lot more to explore. The `Quick reStructuredText`_ +user reference is a good place to go next. For complete details, the +`reStructuredText Markup Specification`_ is the place to go [#]_. + +Users who have questions or need assistance with Docutils or +reStructuredText should post a message to the Docutils-users_ mailing +list. + +.. [#] If that relative link doesn't work, try the master document: + http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html. + +.. _reStructuredText Markup Specification: + ../../ref/rst/restructuredtext.html +.. _Docutils-users: ../mailing-lists.html#docutils-users +.. _Docutils project web site: http://docutils.sourceforge.net/ \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/text.txt b/odex-event/muk_dms/demo/data/text.txt new file mode 100644 index 000000000..e0f98f53f --- /dev/null +++ b/odex-event/muk_dms/demo/data/text.txt @@ -0,0 +1,27 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus condimentum sagittis lacus, laoreet luctus ligula laoreet ut. Vestibulum ullamcorper accumsan velit vel vehicula. Proin tempor lacus arcu. Nunc at elit condimentum, semper nisi et, condimentum mi. In venenatis blandit nibh at sollicitudin. Vestibulum dapibus mauris at orci maximus pellentesque. Nullam id elementum ipsum. Suspendisse cursus lobortis viverra. Proin et erat at mauris tincidunt porttitor vitae ac dui. + +Donec vulputate lorem tortor, nec fermentum nibh bibendum vel. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent dictum luctus massa, non euismod lacus. Pellentesque condimentum dolor est, ut dapibus lectus luctus ac. Ut sagittis commodo arcu. Integer nisi nulla, facilisis sit amet nulla quis, eleifend suscipit purus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam euismod ultrices lorem, sit amet imperdiet est tincidunt vel. Phasellus dictum justo sit amet ligula varius aliquet auctor et metus. Fusce vitae tortor et nisi pulvinar vestibulum eget in risus. Donec ante ex, placerat a lorem eget, ultricies bibendum purus. Nam sit amet neque non ante laoreet rutrum. Nullam aliquet commodo urna, sed ullamcorper odio feugiat id. Mauris nisi sapien, porttitor in condimentum nec, venenatis eu urna. Pellentesque feugiat diam est, at rhoncus orci porttitor non. + +Nulla luctus sem sit amet nisi consequat, id ornare ipsum dignissim. Sed elementum elit nibh, eu condimentum orci viverra quis. Aenean suscipit vitae felis non suscipit. Suspendisse pharetra turpis non eros semper dictum. Etiam tincidunt venenatis venenatis. Praesent eget gravida lorem, ut congue diam. Etiam facilisis elit at porttitor egestas. Praesent consequat, velit non vulputate convallis, ligula diam sagittis urna, in venenatis nisi justo ut mauris. Vestibulum posuere sollicitudin mi, et vulputate nisl fringilla non. Nulla ornare pretium velit a euismod. Nunc sagittis venenatis vestibulum. Nunc sodales libero a est ornare ultricies. Sed sed leo sed orci pellentesque ultrices. Mauris sollicitudin, sem quis placerat ornare, velit arcu convallis ligula, pretium finibus nisl sapien vel sem. Vivamus sit amet tortor id lorem consequat hendrerit. Nullam at dui risus. + +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat semper velit consequat facilisis. Etiam facilisis justo non iaculis dictum. Fusce turpis neque, pharetra ut odio eu, hendrerit rhoncus lacus. Nunc orci felis, imperdiet vel interdum quis, porta eu ipsum. Pellentesque dictum sem lacinia, auctor dui in, malesuada nunc. Maecenas sit amet mollis eros. Proin fringilla viverra ligula, sollicitudin viverra ante sollicitudin congue. Donec mollis felis eu libero malesuada, et lacinia risus interdum. + +Etiam vitae accumsan augue. Ut urna orci, malesuada ut nisi a, condimentum gravida magna. Nulla bibendum ex in vulputate sagittis. Nulla facilisi. Nullam faucibus et metus ac consequat. Quisque tempor eros velit, id mattis nibh aliquet a. Aenean tempor elit ut finibus auctor. Sed at imperdiet mauris. Vestibulum pharetra non lacus sed pulvinar. Sed pellentesque magna a eros volutpat ullamcorper. In hac habitasse platea dictumst. Donec ipsum mi, feugiat in eros sed, varius lacinia turpis. Donec vulputate tincidunt dui ac laoreet. Sed in eros dui. Pellentesque placerat tristique ligula eu finibus. Proin nec faucibus felis, eu commodo ipsum. + +Integer eu hendrerit diam, sed consectetur nunc. Aliquam a sem vitae leo fermentum faucibus quis at sem. Etiam blandit, quam quis fermentum varius, ante urna ultricies lectus, vel pellentesque ligula arcu nec elit. Donec placerat ante in enim scelerisque pretium. Donec et rhoncus erat. Aenean tempor nisi vitae augue tincidunt luctus. Nam condimentum dictum ante, et laoreet neque pellentesque id. Curabitur consectetur cursus neque aliquam porta. Ut interdum nunc nec nibh vestibulum, in sagittis metus facilisis. Pellentesque feugiat condimentum metus. Etiam venenatis quam at ante rhoncus vestibulum. Maecenas suscipit congue pellentesque. Vestibulum suscipit scelerisque fermentum. Nulla iaculis risus ac vulputate porttitor. + +Mauris nec metus vel dolor blandit faucibus et vel magna. Ut tincidunt ipsum non nunc dapibus, sed blandit mi condimentum. Quisque pharetra interdum quam nec feugiat. Sed pellentesque nulla et turpis blandit interdum. Curabitur at metus vitae augue elementum viverra. Sed mattis lorem non enim fermentum finibus. Sed at dui in magna dignissim accumsan. Proin tincidunt ultricies cursus. Maecenas tincidunt magna at urna faucibus lacinia. + +Quisque venenatis justo sit amet tortor condimentum, nec tincidunt tellus viverra. Morbi risus ipsum, consequat convallis malesuada non, fermentum non velit. Nulla facilisis orci eget ligula mattis fermentum. Aliquam vel velit ultricies, sollicitudin nibh eu, congue velit. Donec nulla lorem, euismod id cursus at, sollicitudin et arcu. Proin vitae tincidunt ipsum. Vivamus elementum eleifend justo, placerat interdum nulla rutrum id. + +Phasellus fringilla luctus magna, a finibus justo dapibus a. Nam risus felis, rhoncus eget diam sit amet, congue facilisis nibh. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent consequat euismod diam, eget volutpat magna convallis at. Mauris placerat pellentesque imperdiet. Nulla porta scelerisque enim, et scelerisque neque bibendum in. Proin eget turpis nisi. Suspendisse ut est a erat egestas eleifend at euismod arcu. Donec aliquet, nisi sed faucibus condimentum, nisi metus dictum eros, nec dignissim justo odio id nulla. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas sollicitudin, justo id elementum eleifend, justo neque aliquet nibh, finibus malesuada metus erat eget neque. Suspendisse nec auctor orci. Aenean et vestibulum nulla. Nullam hendrerit augue tristique, commodo metus id, sodales lorem. Etiam feugiat dui est, vitae auctor risus convallis non. + +Maecenas turpis enim, consectetur eget lectus eu, hendrerit posuere lacus. Praesent efficitur, felis eget dapibus consectetur, nisi massa dignissim enim, nec semper dolor est eu urna. Nullam ut sodales lorem. Aliquam dapibus faucibus diam. Vestibulum vel magna et dolor gravida imperdiet ut sit amet sem. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur elementum metus tincidunt nulla euismod ultricies. Duis elementum nec neque in porttitor. Nulla sagittis lorem elit, et consectetur ante laoreet eu. Maecenas nulla tellus, scelerisque ac erat sed, fermentum dapibus metus. Donec tincidunt fermentum molestie. + +Sed consequat mi at maximus faucibus. Pellentesque aliquet tincidunt sapien vel auctor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent accumsan nunc eget leo aliquam, facilisis hendrerit turpis egestas. Morbi in ultricies mauris, a eleifend turpis. Quisque fringilla massa iaculis risus ultrices, sit amet tincidunt dui varius. Quisque maximus porta tristique. Proin tincidunt, turpis ut tempor pretium, lectus ipsum ullamcorper leo, ac tincidunt felis dui non leo. Aenean porta augue ligula, non consequat ipsum aliquet et. Suspendisse ut suscipit ex. Pellentesque vitae lacinia arcu. Curabitur eget tincidunt nulla, non bibendum metus. Nullam mi ipsum, eleifend vitae tortor pulvinar, facilisis sollicitudin ipsum. + +Vestibulum molestie risus lorem, at feugiat lorem congue sed. Phasellus ullamcorper laoreet enim, nec aliquam turpis scelerisque et. Etiam dictum metus in elit aliquam dapibus. Vivamus vel lectus velit. Nam sed purus luctus, commodo dui quis, malesuada dui. Nulla porttitor aliquet elit sit amet viverra. Proin tempor nulla urna, non aliquet metus maximus quis. Aliquam ac lectus nec mi aliquam sagittis. Quisque venenatis quam eget nisl tempor, egestas rutrum eros eleifend. Nullam venenatis commodo velit, non tempor mauris fermentum ut. In a metus quis erat cursus sagittis. Donec congue nisl in viverra egestas. + +Vestibulum facilisis ligula magna, eu ornare lectus varius et. Mauris facilisis faucibus quam, quis mollis eros convallis non. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent sit amet rutrum erat. Suspendisse potenti. Donec lorem mi, sagittis a fringilla sit amet, sagittis bibendum mauris. In in diam et lorem rutrum eleifend a et felis. Sed ac magna quis enim faucibus dictum. Suspendisse blandit enim eu ex laoreet gravida. + +Suspendisse sed semper felis. Etiam mattis magna mi, suscipit ullamcorper tellus euismod sed. Aenean congue scelerisque ligula id sodales. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nunc sem lectus, gravida ac dui non, pharetra posuere leo. Maecenas lacus libero, facilisis et elit vitae, commodo facilisis sem. Vivamus id nisl nulla. Integer at maximus dui. Ut a tincidunt lorem. Vivamus vitae ligula vel lacus cursus condimentum. Phasellus quis mauris lobortis, finibus lorem in, vulputate ex. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed faucibus aliquam metus, quis varius elit porttitor id. Vivamus dignissim sollicitudin scelerisque. Morbi tincidunt, dolor quis vehicula consequat, dui diam condimentum nunc, vitae scelerisque odio libero nec ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; diff --git a/odex-event/muk_dms/demo/data/vector.svg b/odex-event/muk_dms/demo/data/vector.svg new file mode 100644 index 000000000..56900714f --- /dev/null +++ b/odex-event/muk_dms/demo/data/vector.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 250 250" width="250" height="250"><defs><clipPath id="_clipPath_llXK6vhsfjTbW54SAQzuHm194MDf7H3y"><rect width="250" height="250"/></clipPath></defs><g clip-path="url(#_clipPath_llXK6vhsfjTbW54SAQzuHm194MDf7H3y)"><defs><mask id="_mask_8YF3kr9IOeRmlealccZwRVRUFQgI7lh9"><path d="M -21.25 10 L 271.25 10 L 271.25 240 L -21.25 240 L -21.25 10 Z" style="stroke:black;fill:white;stroke-miterlimit:10;"/></mask><mask id="_mask_PMOlF2aP8rrfoLDLWXapKxtbGGQnuraN"><path d="M -21.25 10 L 271.25 10 L 271.25 240 L -21.25 240 L -21.25 10 Z" style="stroke:black;fill:white;stroke-miterlimit:10;"/></mask></defs><g mask="url(#_mask_PMOlF2aP8rrfoLDLWXapKxtbGGQnuraN)"><g mask="url(#_mask_8YF3kr9IOeRmlealccZwRVRUFQgI7lh9)"/></g><g mask="url(#_mask_8YF3kr9IOeRmlealccZwRVRUFQgI7lh9)"><image width="3393" height="2668" transform="matrix(0.086,0,0,0.086,-21.25,10)" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAADUEAAApsCAYAAABaIc3kAAAgAElEQVR4XuzbMREAAAwCseLfdG38kCrgQld2jgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmGBhbOJRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTOC8gQECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECP7iR6UAACAASURBVBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABKwuN0wAAIABJREFUAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrufZt2MaAAAAhGH+Xc/GjjoghRfhCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAGZf5HAAAgAElEQVRAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDNgiagAACAASURBVECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIEYu/uYbSq1v4B36tmBujEUMg/fAQqBgstSGRM/CiIKJzCExEGE4JhjApTMMURRNBiKAbUOERCIgNitBAUQ+FHIphQaHFgKgxKXiyI2AEz1Ouf7TuelyOgM2vPxzPPc+1S9+/ea13roZidfa9FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0toAmqoZfH4AgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ0ATlN0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEMLaIJq6OUxOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIENEH5DRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0NACmqAaenkMjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABTVB+AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINLSAJqiGXh6DI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAE5TfAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDS2gCaqhl8fgCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDQBOU3QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAQwtogmro5TE4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQ0QfkNECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQ0AKaoBp6eQyOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAFNUH4DBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0tIAmqIZeHoMjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEATlN8AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINLaAJqqGXx+AIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIENAE5TdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBDC2iCaujlMTgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDRB+Q0QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINDQApqgGnp5DI4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAU1QfgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDS0gCaohl4egyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQBOU3wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0toAmqoZfH4AgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ0ATlN0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEMLaIJq6OUxOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIENEH5DRAgQIAAAQIECBAgQIAAAQIEGkQg5zw3Is5ExKaU0oUGGZZhECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJh2AU1Q074EBkCAAAECBAgQIECAAAECBAgQ+F+BnPOBiHg1IoYiojOldJ0NAQIECBAgQIAAAQIECBAgQIDAxAvknKt3L9VmNC4CBAgQIECAAAECBAgQIECAAIEZIqAJaoYslGESIECAAAECBAgQIECAAAECzS1QfXgTEd/eNsuzKaXqv7kIECBAgAABAgQIECBAgAABAgQmUCDnvDsiXo+IFU7jnkBYpQgQIECAAAECBAgQIECAAAECkyygCWqSgZUnQIAAAQIECBAgQIAAAQIECIxFIOd8JSIe+NO9gymlTWPJu4cAAQIECBAgQIAAAQIECBAgQODvBXLO1buWD0bvHEopdfx9yh0ECBAgQIAAAQIECBAgQIAAAQKNIKAJqhFWwRgIECBAgAABAgQIECBAgACBlha4bffhuzm8kFI60tJAJk+AAAECBAgQIECAAAECBAgQmACBnHPV8HQmIubcVm57SunABJRXggABAgQIECBAgAABAgQIECBAYJIFNEFNMrDyBAgQIECAAAECBAgQIECAAIG/Ehj9+Ob83yg9mlKqPtBxESBAgAABAgQIECBAgAABAgQIFAjknOdGRHUS9+0NUFWlGxHRkVKq/p+LAAECBAgQIECAAAECBAgQIECggQU0QTXw4hgaAQIECBAgQIAAAQIECBAg0PwCOecLEbH8b2bqY5zm/ymYIQECBAgQIECAAAECBAgQIDBJAqMNUNUGM/d6B3M2pdQ5SY9XlgABAgQIECBAgAABAgQIECBAYIIENEFNEKQyBAgQIECAAAECBAgQIECAAIHxCuScd0fE62PMDUVEZ0rp+hjvdxsBAgQIECBAgAABAgQIECBAgEBE5JyPRETX32BsTykdAEaAAAECBAgQIECAAAECBAgQINC4ApqgGndtjIwAAQIECBAgQIAAAQIECBBoYoGc84KIqE6BmjOOaX6eUnpmHPe7lQABAgQIECBAgAABAgQIECDQ0gLj2ISmOol7gQ1oWvrnYvIECBAgQIAAAQIECBAgQIBAgwtogmrwBTI8AgQIECBAgAABAgQIECBAoDkFcs5nImJVwezeTiltK8iJECBAgAABAgQIECBAgAABAgRaSiDnvCkiPhjHpG1AMw4stxIgQIAAAQIECBAgQIAAAQIEplpAE9RUi3seWT/BkgAAIABJREFUAQIECBAgQIAAAQIECBAg0PICOeeqiWl/DYgXUkpHauRFCRAgQIAAAQIECBAgQIAAAQJNLZBz7oiIahOa8ZzCXZmsTSl91tQ4JkeAAAECBAgQIECAAAECBAgQmKECmqBm6MIZNgECBAgQIECAAAECBAgQIDAzBXLOCyLiQsEHOH+e8IqUUlXHRYAAAQIECBAgQIAAAQIECBAgcJtAznnu6PuXBwpgbkTEgpTS9YKsCAECBAgQIECAAAECBAgQIECAwCQKaIKaRFylCRAgQIAAAQIECBAgQIAAAQJ/Fsg5VzsJPz0BMtUHOR0ppSsTUEsJAgQIECBAgAABAgQIECBAgEDTCOScq41jlteY0GBKaVONvCgBAgQIECBAgAABAgQIECBAgMAkCGiCmgRUJQkQIECAAAECBAgQIECAAAECdxPIOT8TEScnUGcoIjrtTDyBokoRIECAAAECBAgQIECAAAECM1og53wkIromYBKPppTOTEAdJQgQIECAAAECBAgQIECAAAECBCZIQBPUBEEqQ4AAAQIECBAgQIAAAQIECBD4K4Gc89yIqE5tmjPBUnYmnmBQ5QgQIECAAAECBAgQIECAAIGZKZBz3hYR+ydo9L+MnsJ9fYLqKUOAAAECBAgQIECAAAECBAgQIFBTQBNUTUBxAgQIECBAgAABAgQIECBAgMBYBHLOn0XE02O5t+CeN1JKuwtyIgQIECBAgAABAgQIECBAgACBphCYhBO4K5e3U0pVY5WLAAECBAgQIECAAAECBAgQIECgAQQ0QTXAIhgCAQIECBAgQIAAAQIECBAg0NwCOefOiPh2kmf5QkrpyCQ/Q3kCBAgQIECAAAECBAgQIECAQMMJ5Jw7IuLMJJzAXc310ZRSVdtFgAABAgQIECBAgAABAgQIECAwzQKaoKZ5ATyeAAECBAgQIECAAAECBAgQaG6BnPPciLgQEQ9M8kxvRERnSql6losAAQIECBAgQIAAAQIECBAg0BICU/DuZSilVDVZuQgQIECAAAECBAgQIECAAAECBKZZQBPUNC+AxxMgQIAAAQIECBAgQIAAAQLNLZBzPhARr07RLKtGqAUppetT9DyPIUCAAAECBAgQIECAAAECBAhMq0DOudoQZvkkD+KNlNLuSX6G8gQIECBAgAABAgQIECBAgAABAn8joAnKT4QAAQIECBAgQIAAAQIECBAgMEkCOefOiPh2ksrfq+zQ6IlQGqGmGN7jCBAgQIAAAQIECBAgQIAAgakVyDkfiYiuKXrqCidwT5G0xxAgQIAAAQIECBAgQIAAAQIE7iGgCcpPgwABAgQIECBAgAABAgQIECAwSQI55ysR8cAklf+rsoMppU3T8FyPJECAAAECBAgQIECAAAECBAhMiUDOeVtE7J+Sh/3vQ4ZSSh1T+DyPIkCAAAECBAgQIECAAAECBAgQ+JOAJig/CQIECBAgQIAAAQIECBAgQIDAJAjknHdHxOslpX/86XIsXbywJHp7ZntK6UDdIvIECBAgQIAAAQIECBAgQIAAgUYTmKbTtysG71sa7cdgPAQIECBAgAABAgQIECBAgEBLCWiCaqnlNlkCBAgQIECAAAECBAgQIEBgKgRyztWuwOdLn9W5dn08/ODy6Nu5o7TEH7m1KaXP6haRJ0CAAAECBAgQIECAAAECBAg0isDoe5czETFnGsZ0IyI6UkrV6d8uAgQIECBAgAABAgQIECBAgACBKRbQBDXF4B5HgAABAgQIECBAgAABAgQINL9AzvlCRCwvmem7h4/GO4cHf4++tv2l6Hp2XUmZPzLVhzmdKaVqPC4CBAgQIECAAAECBAgQIECAwIwWyDnPjYiqAarovUs1+R/OD8XFS5frvHM5m1LqnNGQBk+AAAECBAgQIECAAAECBAgQmKECmqBm6MIZNgECBAgQIECAAAECBAgQINCYAjnn3RHxesnofvzpcjy1Yct/RQ/u2xOPPbKypNwfmV9Gdyi+XqeILAECBAgQIECAAAECBAgQIEBgugVyzlUD1KrScVy99lusGX33curYoZg/777SUttTSgdKw3IECBAgQIAAAQIECBAgQIAAAQJlApqgytykCBAgQIAAAQIECBAgQIAAAQJ3COScF0REderSnBKeNRtfjIuXfv6v6Oz2tjg+0B9LFy8sKflHZiil1FGngCwBAgQIECBAgAABAgQIECBAYDoFcs5HIqKrdAzDI7difXfPf969PPzg8vhwoL+0XHX69oKUkk1nSgXlCBAgQIAAAQIECBAgQIAAAQIFApqgCtBECBAgQIAAAQIECBAgQIAAAQJ3E6izG/HgJyfizf3v3RV22ZJFvzdCtbfNqgM/mFLaVKeALAECBAgQIECAAAECBAgQIEBgOgRyztU7jQ/qPLu7d1d8ffbcf5Xo29kb61Y/UVr285TSM6VhOQIECBAgQIAAAQIECBAgQIAAgfELaIIav5kEAQIECBAgQIAAAQIECBAgQOAOgZzztojYX0Jz9dpvsWbDlrg5PHLPeM3dif+ouz2ldKBkjDIECBAgQIAAAQIECBAgQIAAgekQyDl3RsS3dZ791oGBOPLxp3eUqE7gPnPyozobz6xNKX1WZ2yyBAgQIECAAAECBAgQIECAAAECYxfQBDV2K3cSIECAAAECBAgQIECAAAECBO4qkHNeEBEXImJOCdHz3T3x/b+H/ja6bvWT0bdzx9/e9zc3PJpSOlO3iDwBAgQIECBAgAABAgQIECBAYLIFcs4dEVG9xyh651KN78Tpr6J3b989h/r4qpUx0LendCo3ImJBSul6aQE5AgQIECBAgAABAgQIECBAgACBsQtoghq7lTsJECBAgAABAgQIECBAgAABAncVyDlXO/4+XcIz+MmJeHP/e2OO9u3sjXWrnxjz/Xe5sfo4pzOlVDVtuQgQIECAAAECBAgQIECAAAECDSmQc5472gC1vHSAP/50OZ7asOVv4wf37YnHHln5t/fd44bBlNKm0rAcAQIECBAgQIAAAQIECBAgQIDA2AU0QY3dyp0ECBAgQIAAAQIECBAgQIAAgTsEcs7PRMTJEprhkVvRufa5uDk8Mq748YP98dCK4u9/qmdVx05VjVB2KR6XvJsJECBAgAABAgQIECBAgACBqRLIOVcnQK0qfd7Va7/Fmg1bxvTeZXZ7W5w5+VG0t80qfZyTt0vl5AgQIECAAAECBAgQIECAAAEC4xDQBDUOLLcSIECAAAECBAgQIECAAAECBG4XGN2R+EpEzCmR6e7dFV+fPTfuaPVhzvGB/li6eOG4s7cFzqaUOusUkCVAgAABAgQIECBAgAABAgQITIZAzvlARLxaWrvaeGZ9d09cvPTzmEusW/1k9O3cMeb7/3TjLxHRYcOZUj45AgQIECBAgAABAgQIECBAgMDYBDRBjc3JXQQIECBAgAABAgQIECBAgACBOwRyzkcioquE5pvvzsXWHbtKor9nli1Z9HsjVI0diqsygymlTcWDECRAgAABAgQIECBAgAABAgQITLBAzrl6V/FBnbKlG8/UPH377ZTStjrjliVAgAABAgQIECBAgAABAgQIEPhrAU1QfiEECBAgQIAAAQIECBAgQIAAgQKBnHN1itK3BdGodiPuXPtc3BweKYn/J/P4qpUx0LenVo2IeCGlVDVzuQgQIECAAAECBAgQIECAAAEC0yqQc+6IiPN1BvHWgYE48vGnRSXm3z8vvjh2qM6mM4+mlM4UPVyIAAECBAgQIECAAAECBAgQIEDgbwU0Qf0tkRsIECBAgAABAgQIECBAgAABAv8tkHOeGxEXIuKBEpvevfvixOkvS6J3ZDb98x/xr23ddWv5QKeuoDwBAgQIECBAgAABAgQIECBQSyDnvGD0fcuc0kInTn8VvXv7SuO/52q+axlKKVWNXC4CBAgQIECAAAECBAgQIECAAIFJENAENQmoShIgQIAAAQIECBAgQIAAAQLNLZBzPhARr5bM8ofzQ7F+a09J9J6Zvp29sW71E3Vq3oiIjpTSlTpFZAkQIECAAAECBAgQIECAAAECJQKjG85UJygtL8lXmR9/uhzru3tqn7xd1Tp+sD8eWlE8lDdSSrtL5yFHgAABAgQIECBAgAABAgQIECBwbwFNUH4dBAgQIECAAAECBAgQIECAAIFxCOScOyPi23FE/nPr8MiteGrDlrj667WS+F9mvjh2KJYuXlin7lBEdKaUrtcpIkuAAAECBAgQIECAAAECBAgQGK9AzvmziHh6vLk/7q/euXSufW5CGqCqmsuWLIpTR98vHU6VW5FSqk4RdxEgQIAAAQIECBAgQIAAAQIECEyggCaoCcRUigABAgQIECBAgAABAgQIEGh+gZxz9QFL0VbAbx0YiCMffzopSLPb2+LUsUMxf959dep/nlJ6pk4BWQIECBAgQIAAAQIECBAgQIDAeATqnLhdPadqgKpOgLp46efxPPZv731lc1e8vHnj3953jxuGUkodpWE5AgQIECBAgAABAgQIECBAgACBuwtogvLLIECAAAECBAgQIECAAAECBAiMUSDnvDsiXh/j7f912w/nh2L91p6S6Jgz1S7Fxwf6o71t1pgzd7nx7ZTStjoFZAkQIECAAAECBAgQIECAAAECYxHIOW+KiA/Gcu+97unduy9OnP6yTol7ZmuevL09pXRgUgamKAECBAgQIECAAAECBAgQIECgRQU0QbXowps2AQIECBAgQIAAAQIECBAgMD6BnHO1e+/58aX+7+41G1+c8B2J7zaWx1etjIG+PaXD/CP3QkrpSN0i8gQIECBAgAABAgQIECBAgACBewnUfddS1X338NF45/DgpCFXG86cOvp+af0bEdGRUrpSWkCOAAECBAgQIECAAAECBAgQIEDgvwU0QflFECBAgAABAgQIECBAgAABAgTGIJBzvhARy8dw6x23TPYHOX9+4Cubu+LlzRtLhnp7ZkVKqZqziwABAgQIECBAgAABAgQIECAwoQI55wURUb13mFNa+MTpr6J3b19pfMy517a/FF3Prhvz/X+68WxKqbM0LEeAAAECBAgQIECAAAECBAgQIPDfApqg/CIIECBAgAABAgQIECBAgAABAn8jkHPeFhH7S6B+/OlyPLVhS0m0VqZvZ2+sW/1EnRp2K66jJ0uAAAECBAgQIECAAAECBAjcVSDnPDcizpRuNlMVrd63rO/uiZvDI5OuPLu9LU4dOxTz591X+qztKaUDpWE5AgQIECBAgAABAgQIECBAgACB/xPQBOXXQIAAAQIECBAgQIAAAQIECBD4C4G6OxOv2fhiXLz085QbVx/oHB/oj6WLF9Z59lBEdKaUrtcpIkuAAAECBAgQIECAAAECBAgQ+EMg5/xZRDxdKjI8cis61z43JQ1Qf4zx4QeXx4cD/aVDrjaaWeD9SimfHAECBAgQIECAAAECBAgQIEDg/wQ0Qfk1ECBAgAABAgQIECBAgAABAgT+QiDnXO1MvKoEafCTE/Hm/vdKohOSqRqhzpz8KNrbZtWpN5hS2lSngCwBAgQIECBAgAABAgQIECBAoBLIOe+OiNdLNaoGqOoEqOnYcOa17S9F17PrSof+eUrpmdKwHAECBAgQIECAAAECBAgQIECAwP8KaILySyBAgAABAgQIECBAgAABAgQI3EMg57wtIvaXAF299lus2bBlSnclvts4ly1Z9PuJUDUbod5IKVUfKbkIECBAgAABAgQIECBAgAABAkUCOedqk5UPisKjod69++LE6S/rlCjOTsBmM2tTStUpWC4CBAgQIECAAAECBAgQIECAAIFCAU1QhXBiBAgQIECAAAECBAgQIECAQHML5JznRsSViJhTMtPnu3vi+38PlUQnPLNu9ZPRt3NH3bovpJSO1C0iT4AAAQIECBAgQIAAAQIECLSeQM65IyKq07aL3rNUYtN94nY1hsdXrYyBvj2lC3gjIhaklK6XFpAjQIAAAQIECBAgQIAAAQIECLS6gCaoVv8FmD8BAgQIECBAgAABAgQIECBwV4Gcc7Uz79MlPI3wUc6fx/3K5q54efPGkun8kak+1OlMKV2oU0SWAAECBAgQIECAAAECBAgQaC2BuhvNVFrffHcutu7Y1RBwB/fticceWVk6lsGUUnUilosAAQIECBAgQIAAAQIECBAgQKBAQBNUAZoIAQIECBAgQIAAAQIECBAg0NwCOednIuJkySyHR25F59rn4ubwSEl8UjM1P9KpxmbH4kldIcUJECBAgAABAgQIECBAgEBzCYw2QFUnQC0vndmPP12O9d09DfOuZXZ7W5w5+VG0t80qndKjKaXKxEWAAAECBAgQIECAAAECBAgQIDBOAU1Q4wRzOwECBAgQIECAAAECBAgQINDcAnV3J+7u3RVfnz3XkEjVRzrHB/pj6eKFdcY3NHoi1PU6RWQJECBAgAABAgQIECBAgACB5hfIOR+JiK7SmVabzTy1YUtc/fVaaYlJya1b/WT07dxRWvuXiOhIKXm3UiooR4AAAQIECBAgQIAAAQIECLSsgCaoll16EydAgAABAgQIECBAgAABAgTuJlDn45xvvjsXW3fsamjY+ffPiy+OHaqzW3E1v8GU0qaGnqjBESBAgAABAgQIECBAgAABAtMqkHPeHRGv1xnEmo0vxsVLP9cpMWnZ4wf746EVxQdcvZ1S2jZpg1OYAAECBAgQIECAAAECBAgQINCkApqgmnRhTYsAAQIECBAgQIAAAQIECBAYv0DOuTMivh1/MqLambhz7XNxc3ikJD6lmWVLFsWpo+/Xfeb2lNKBukXkCRAgQIAAAQIECBAgQIAAgeYTyDlXm6d8UGdmvXv3xYnTX9YpManZCdho5tGU0plJHaTiBAgQIECAAAECBAgQIECAAIEmE9AE1WQLajoECBAgQIAAAQIECBAgQIBAmUDOeW5EXIiIB0oqNPqHOX+e07rVT0bfzh0lU709szal9FndIvIECBAgQIAAAQIECBAgQIBA8wjknDsiomrumVM6q8FPTsSb+98rjU9ZbtM//xH/2tZd+rxfUkoLSsNyBAgQIECAAAECBAgQIECAAIFWFNAE1Yqrbs4ECBAgQIAAAQIECBAgQIDAHQI55+pUo1dLaH44PxTrt/aURKc189r2l6Lr2XV1xnAjIjpTSlXzmIsAAQIECBAgQIAAAQIECBBocYHRTWau1GmA+ua7c7F1x64ZI3n8YH88tGJ56XjfSCntLg3LESBAgAABAgQIECBAgAABAgRaTUATVKutuPkSIECAAAECBAgQIECAAAECdwjknDsj4tsSmuGRW/HUhi1x9ddrJfFpzxzctycee2RlnXH8EhEdKaXrdYrIEiBAgAABAgQIECBAgAABAjNfIOdcbZRS3BH040+XY313T9wcHpkxGMuWLIpTR9+vM94VNpipwydLgAABAgQIECBAgAABAgQItJKAJqhWWm1zJUCAAAECBAgQIECAAAECBO4qUOcDnbcODMSRjz+dsbKz29vi+EB/LF28sM4chlJKHXUKyBIgQIAAAQIECBAgQIAAAQIzWyDnfCQiukpnMZM3mnllc1e8vHlj6dS9VymVkyNAgAABAgQIECBAgAABAgRaTkATVMstuQkTIECAAAECBAgQIECAAAECtwvknHdHxOslKtXuxNUpUDP9qnYsrhqh2ttm1ZnKYEppU50CsgQIECBAgAABAgQIECBAgMDMFMg5b4uI/XVG/3x3T3z/76E6JaY1+8WxQ3U2mXkjpVS9o3IRIECAAAECBAgQIECAAAECBAj8hYAmKD8PAgQIECBAgAABAgQIECBAoGUFcs7V6UXnSwHWbHwxLl76uTTeULmHH1weHw701x3T9pTSgbpF5AkQIECAAAECBAgQIECAAIGZI5BzfiYiTtYZce/efXHi9Jd1Skx7ttpk5tTR90vHcSMiOlJKV0oLyBEgQIAAAQIECBAgQIAAAQIEWkFAE1QrrLI5EiBAgAABAgQIECBAgAABAncVyDlfiIjlJTzvHj4a7xweLIk2bGbd6iejb+eOuuN7NKV0pm4ReQIECBAgQIAAAQIECBAgQKDxBUY3mKneA8wpHe2J019F796+0nhD5V7b/lJ0PbuudExnU0qdpWE5AgQIECBAgAABAgQIECBAgEArCGiCaoVVNkcCBAgQIECAAAECBAgQIEDgDoGc87aI2F9C8+NPl+OpDVtKog2f6dvZG+tWP1FnnNXOxZ0pparBzEWAAAECBAgQIECAAAECBAg0qUDOeW5EVH//P1A6xR/OD8X6rT2l8YbLzW5vi1PHDsX8efeVjs0p26VycgQIECBAgAABAgQIECBAgEBLCGiCaollNkkCBAgQIECAAAECBAgQIEDgdoGc84LRj3SKdil+vrsnvv/3UNOiHj/YHw+tKDog6w+TCqdqhLretEgmRoAAAQIECBAgQIAAAQIEWlygzgnbFV21ycz67p64OTzSVJIPP7g8PhzoL51TtblMR0rpSmkBOQIECBAgQIAAAQIECBAgQIBAMwtogmrm1TU3AgQIECBAgAABAgQIECBA4K4COeczEbGqhGfwkxPx5v73SqIzJlPtWnx8oD+WLl5YZ8xnU0qddQrIEiBAgAABAgQIECBAgAABAo0pkHM+EhFdpaMbHrn1ewPUxUs/l5Zo6Nxr21+KrmfXlY7x85TSM6VhOQIECBAgQIAAAQIECBAgQIBAMwtogmrm1TU3AgQIECBAgAABAgQIECBA4A6BnPOmiPighObqtd9izYYtTbdD8d0sli1Z9HsjVHvbrBKqPzKDKaXK20WAAAECBAgQIECAAAECBAg0iUDOeVtE7K8znWY/ZbvaYObMyY/qvFdZm1L6rI6xLAECBAgQIECAAAECBAgQIECgGQU0QTXjqpoTAQIECBAgQIAAAQIECBAgcFeBnPPciLgSEXNKiJr9A50/mzy+amUM9O0pobo980JKqdod2kWAAAECBAgQIECAAAECBAjMcIGcc3VC0ck60+jduy9OnP6yTokZka35XuVGRCxIKV2fEZM1SAIECBAgQIAAAQIECBAgQIDAFAlogpoiaI8hQIAAAQIECBAgQIAAAQIEpl8g51ztoPt0yUhOnP4qevf2lURndGbTP/8R/9rWXXcOj6aUztQtIk+AAAECBAgQIECAAAECBAhMn0DOuSMiqr/vizaXqUbeau9XDu7bE489srJ00T5PKVVNZy4CBAgQIECAAAECBAgQIECAAIFRAU1QfgoECBAgQIAAAQIECBAgQIBASwjU2al4eORWdK59Lm4Oj7SE1Z8n2bezN9atfqLO3KvdiztSStUpXC4CBAgQIECAAAECBAgQIEBghgmMnq5dNUAtLx36D+eHYv3WntL4jMzNbm+LMyc/iva2WaXjt7FMqZwcAQIECBAgQIAAAQIECBAg0JQCmqCacllNigABAgQIECBAgAABAgQIELhdYPRDnaoBp2in4u7eXfH12XMtjfrFsUOxdPHCOgZDEdGZUrpep4gsAQIECBAgQIAAAQIECBAgMPUCOeeqAWpV6ZOvXvst1mzY0pIbzKxb/WT07dxRSvfL6MYy3qeUCsoRIECAAAECBAgQIECAAAECTSWgCaqpltNkCBAgQIAAAQIECBAgQIAAgbsJ5JwPRMSrJTrffHcutu7YVRJtqky1c/GpY4di/rz76szr85TSM3UKyBIgQIAAAQIECBAgQIAAAQJTK5BzPhIRXaVPrU7YXt/dExcv/VxaYsbnjh/sj4dWFB+i9XZKaduMRzABAgQIECBAgAABAgQIECBAgMAECGiCmgBEJQgQIECAAAECBAgQIECAAIHGFcg5d0bEtyUjrD7S6Vz7XEvuUnw3r2VLFsXxgf5ob5tVwvlHxoc7dfRkCRAgQIAAAQIECBAgQIDAFArknDdFxAd1HumE7Yj598+L6pTtGu9UHk0pVadxuQgQIECAAAECBAgQIECAAAECLS2gCaqll9/kCRAgQIAAAQIECBAgQIBAcwvknOdGxIWIeKBkpm8dGIgjH39aEm3azOOrVsZA356683shpVTtIu0iQIAA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wydLgAABAgQIECBAgAABAgQINKKAJqhGXBVjIkCAAAECBAgQIECAAAECBO4qkHOuGl+KtsB99/DReOfwINkGEKi5k3E1g6HRRqjrDTAdQyBAgAABAgQIECBAgAABAg0nMNoAVZ0AVfQepZrQjz9djvXdPXFzeKTh5tcqA3plc1e8vHlj6XSHUkrVSWAuAgQIECBAgAABAgQIECBAgEDTCGiCapqlNBECBAgQIECAAAECBAgQINDcAjnn3RHxesksq492qlOgXI0hMLu9LY4P9MfSxQvrDOhsSqmzTgFZAgQIECBAgAABAgQIECDQrAI55yMR0VU6Pydql8pNfO6LY4fqvEN5I6VUvVNzESBAgAABAgQIECBAgAABAgSaQkATVFMso0kQIECAAAECBAgQIECAAIHmFsg5L4iI/ymd5ZqNL8bFSz+XxuUmQWDZkkW/N0K1t82qU30wpbSpTgFZAgQIECBAgAABAgQIECDQbAJ1NpL5w8K7lMb5VVTvUE4dfb90QDcioiOldKW0gBwBAgQIECBAgAABAgQIECBAoJEENEE10moYCwECBAgQIECAAAECBAgQIHBXgZzzmYhYVcLz7uGj8c7hwZKozCQLPL5qZQz07an7lBdSStXu1i4CBAgQIECAAAECBAgQINDyAjnnarOQD+pA9O7dFydOf1mnhOwEC7yyuSte3ryxtKrTtEvl5AgQIECAAAECBAgQIECAAIGGE9AE1XBLYkAECBAgQIAAAQIECBAgQIDA7QI5520Rsb9E5eq136LzmedKojJTJLDpn/+If23rrvu0R1NKVaOciwABAgQIECBAgAABAgQItKxAzrkjIqq/j+eUIgx+ciLe3P9eaVxukgRmt7fFqWOHYv68+0qfsD2ldKA0LEeAAAECBAgQIECAAAECBAgQaBQBTVCNshLGQYAAAQIECBAgQIAAAQIECNwhkHNeEBEXSj/eeb67J77/9xDZBhfo29kb61Y/UWeUNyKiI6V0pU4RWQIECBAgQIAAAQIECBAgMFMFcs5zI6L6u7i4Aeqb787F1h27ZipB04/74QeXx4cD/aXz9O6kVE6OAAECBAgQIECAAAECBAgQaCgBTVANtRwGQ4AAAQIECBAgQIAAAQIECNwukHOudi9eVaJi5+IStenLfHHsUCxdvLDOAKput86U0vU6RWQJECBAgAABAgQI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bbbxQR2N3r374sTpL+uUkG1hgeMH++OhFctLBd5IKVXv/FwECBAgQIAAAQIECBAgQIAAgWkR0AQ1LeweSoAAAQIECBAgQIAAAQIEmlsg59wREedLZ9m5dn1c/fVaaVyOwH8Eau5w/EedR1NKZ7ASIECAAAECBAgQIECAAIE6AnXfl1TPfvfw0Xjn8GCdYci2uMD8++fFmZPH6yisSCldqFNAlgABAgQIECBAgAABAgQIECBQKqAJqlROjgABAgQIECBAgAABAgQIELinQM65+hCiaEtZH/P4YU20QN/O3li3+ok6ZW9ERKcPfOoQyhIgQIAAAQIECBAgQKC1BXLOCyKiel8yp1TixOmvondvX2lcjsB/BF7Z3BUvb95YKjKUUqo2QHIRIECAAAECBAgQIECAAAECBKZcQBPUlJN7IAECBAgQIECAAAECBAgQaG6BnPPuiHi9ZJY//nQ5ntqwpSQqQ+AvBb44diiWLl5YR2lotBHqep0isgQIECBAgAABAgQIECDQegI557kRUZ0wXLRhTCVWvTNZ390TN4dHWg/QjCdFoOa7kjdSStU7QBcBAgQIECBAgAABAgQIECBAYEoFNEFNKbeHESBAgAABAgQIECBAgACB5haou6vxmo0vxsVLPzc3ktlNi8Ds9rY4dexQzJ93X53nf55SeqZOAVkCBAgQIECAAAECBAgQaD2BnPNnEfF06cyHR25F59rnNECVAsrdVWDZkkVx6uj7dXT+X0rpSp0CsgQIECBAgAABAgQIECBAgACB8QpoghqvmPsJECBAgAABAgQIECBAgACBewrknKtdjVeVEL17+Gi8c3iwJCpDYEwC1cc9xwf6o71t1pjuv8dNb6eUttUpIEuAAAECBAgQIECAAAECrSNQ58TsSqlqgKpOgLJpTOv8ZqZypq9s7oqXN28sfeTZlFJnaViOAAECBAgQIECAAAECBAgQIFAioAmqRE2GAAECBAgQIECAAAECBAgQuEMg51w1huwvobl67bdYs2GLHY1L8GTGJfD4qpUx0LdnXJm73PxCSulI3SLyBAgQIECAAAECBAgQINDcAjnnTRHxQZ1Z9u7dFydOf1mnhCyBvxQ489lHdU7O3p5SOoCYAAECBAgQIECAAAECBAgQIDBVApqgpkracwgQIECAAAECBAgQIECAQBML5JwXRMSFiJhTMs3nu3vi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tPnekaFYua6nJCpDgMAUEei86454qLur7mgWp5SqYkoXAQIECBAgQIAAAQIEpqRAznlZROyvM7jezVti38HX6zQhS4DAJAls2/J43PSrG0p7dxJ2qZwcAQIECBAgQIAAAQIECBCY4gKKoKb4AzI8AgQIECBAgAABAgQIECDwbYGc86KIOFKiMjxyNm5dtTZOfHayJC5DgMAUEujb2Bsrlt5cZ0TVrsiLUkrH6zQiS4AAAQIECBAgQIAAgUYIjL7/OBQRs0rb33fwjejd3FcalyNAYJIFZra3xaH9L0R724zSkdyYUqp+jrgIECBAgAABAgQIECBAgACBJhJQBNVED9NUCBAgQIAAAQIECBAgQKD5BXLO1cktC0tm+uTAYOx88eWSqAwBAlNMoFoItHewPxZcdUWdkQ1FREdK6VSdRmQJECBAgAABAgQIECAwngI559kRUb3/mFfarpOwS+XkCEwtgZqnYX86ugGM9x5T67EaDQECBAgQIECAAAECBAgQqCWgCKoWnzABAgQIECBAgAABAgQIEJg4gZzzpoh4tKTHYx99cu4UKBcBAs0jMA47IlcYr6SUljWPipkQIECAAAECBAgQIDDdBXLO1cktS0rnUb0DWdnVE2eGR0qbkCNAYAoJ7N3WH9ctLtoTqprFUyml7ik0HUMhQIAAAQIECBAgQIAAAQIEagoogqoJKE6AAAECBAgQIECAAAECBCZCIOe8KCKOlPZ12+r74+iHH5fG5QgQmKIC11x95bkTodrbZtQZ4WMpparI0kWAAAECBAgQIECAAIFJFcg574yINaWDGB45e64AyjuQUkE5AlNPYO7lc+K1PdvrvPtYnFKqTpdzESBAgAABAgQIECBAgAABAk0goAiqCR6iKRAgQIAAAQIECBAgQIBA8wvU2QX5mR274+kdu5ofyQwJtKjAiqW3RN/GDXVnf29KqVps6CJAgAABAgQIECBAgMCkCOScOyPiuTqdd/U+Er8//E6dJmQJEJiCAp133REPdXeVjmwopVRtMOUiQIAAAQIECBAgQIAAAQIEmkBAEVQTPERTIECAAAECBAgQIECAAIHmFsg5d0fE1pJZHvvok7h11dqSqAwBAtNI4Lf3rYnf3Le6zohPR0SHnZHrEMoSIECAgVckAgAAIABJREFUAAECBAgQIFAqkHPuiIi3SvNV7smBwdj54st1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Dw4EEEAAAQQQQAABBBBAAAEEAhdgCCpwYhZAAAEEEEAAAQQQQAABBApbwFpbLcndNOZpp4IH123Qm2+5B3FzIIAAAgggULwC9ddfq93btypWVekHYZsxxu0exBExgdSN2+1ed9VMt91tXUNqPTKo/mGbbkikz5va+45qjuxS+d/cg8k5ECgMgeS823Tma/drtGpmYTR0hS7m10xW4taYllxdGmSvZyUluGk3SOLgc6c+l3A7e3m+c7vnveNauW4DD2gJ/nKxAgIIIIBASAVmXzVLbqdqH59L3GiMORbS9igLAQQQQAABBBBAAAEEEECggAQYgiqgi0krCCCAAAIIIIAAAggggEA+BKy1eyXd42Xt115/Q2sffcxLKDEIIIAAAggUnMA3lyzW9rYn/Pb1kDHGDdNwREAgddO2e1r2+iDL7fxwVPGDSR3ruxDkMqHJXTpwWjVHd6nyg6OhqYlCEMimwFhphfrrl6q//lsaK6vIZupQ5mqumzI+DDW9LNCvNd20ZNwY4/6+5YiYgJ/PJVyryYFBNd77AANQEbvulIsAAgggkH2BHzzcpO8/vNpr4i5jzHyvwcQhgAACCCCAAAIIIIAAAgggkK5AoN8WpFsE5yGAAAIIIIAAAggggAACCERTwFq7XNILXqrnJiMvasQggAACCBS6QPN37tMP4+v8tsnTl/0K5iDeWut27XIDUJ5200ynxJPJi4ofGtDePw2nc3rkzykZGVJ1928044/PR74XGkAgHYELlTU603C/zs1bks7pkT6nutwo3lChxxf62jExHYNOSc3GGLfbMUcEBKy1CT/DxO6zCbcDVPe770egW0pEAAEEEEAgeAG3G1TddfO8LrSJHTa90hGHAAIIIIAAAggggAACCCCQrgBDUOlKcR4CCCCAAAIIIIAAAggggMBnBFI7FxyTNMcLzbqWx/Tbzje8hBKDAAIIIIBAQQu0bWzRimV3+OnxrKT53MDthzC4WGttoyR3w3ZDUKucHbFKdA2N/+sftkEtE6q80453qubILpWMDoWqLopBIBcC52vr1begScMzPP1plosSs7bG3Ngktd8+TUuuLs1azssk2uT+X22M6Q96IfJ7F7DWNkt62nsGqWXzFu3Z94qfFMQigAACCCBQUAL111+rl3b9wk9PX+HzCD98xCKAAAIIIIAAAggggAACCEwkwBDUREL8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hKAqQLclAQIECBAgQIAAAQIECJQmEMNB28fuCHFCUvza1TyBGPSKU5/muqdMfWre8amYAAECBAgQIECAAAECQxUQghoqb4sWz/66e/D7H2tRw1olQIAAAQIECAwsIAQ1MJ0HCRAgQIAAgZQE1m+Z+loWwmdT6qkpvQhBNeWk1EmAAAECBAgQIECAAAECyxWIQag4HWps/chyl/L8kAXeuHCxN+Eq/okhKBcBAgQIECBAgAABAgQIEHg3ASEo70UhAtmKbd3ZZ2cKWcsiBAgQIECAAIHEBYSgEj9g7REgQIAAAQL9CWycmBy9lK842d/d7ipSQAiqSE1rESBAgAABAgQIECBAgEATBOJEqBiIihOiTIeq14kdPXX6rfBTvSpTDQECBAgQIECAAAECBAjUUUAIqo6n0rCa8vBc99D0ZMOqVi4BAgQIECBAoDIBIajK6G1MgAABAgQI1E1gw8S23XmePVS3ulKvRwgq9RPWHwECBAgQIECAAAECBAi8n8Bdt9361nSoG1ZeD6sCgTPnzof9hxd64af4tYsAAQIECBAgQIAAAQIECPQrIATVr5T73ksgz7MHThz6/ncIESBAgAABAgQI9CcgBNWfk7sIECBAgACBFgiYBlXNIQtBVeNuVwIECBAgQIAAAQIECBCol0AMQI131vSmQ61dvapexSVazfyJxV7waa67mGiH2iJAgAABAgQIECBAgACBYQsIQQ1bOPn1X+4enB5NvksNEiBAgAABAgQKFBCCKhDTUgQIECBAgEDzBTpbfuE7IeQfbX4nzelACKo5Z6VSAgQIECBAgAABAgQIEChHIIag7t20rvfHdKhizeOkp73zx3rhpzcuXCx2casRIECAAAECBAgQIECAQOsEhKBad+SFNpxl4VPHZ6d3F7qoxQgQIECAAAECiQsIQSV+wNojQIAAAQIElibQmbh/MuSX9y3tKXcvR0AIajl6niVAgAABAgQIECBAgACB1AWuhqE2rlmdeqtD6y+GneLUpz1zL4VXTp8d2j4WJkCAAAECBAgQIECAAIH2CQhBte/MC+zYFKgCMS1FgAABAgQItEdACKo9Z61TAgQIECBAoE+BzuapmZCF+/q83W3LFBCCWiagxwkQIECAAAECBAgQIECgFQK33HTjm9OhRkP82nVtgRh4ilOf5rqnTH26Npc7CBAgQIAAAQIECBAg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QIAAAQIECCxBYMPE1M48D08u4RG3XkNACMorQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJNFBCCauKplVazKVClUduIAAECBAgQaJOAEFSbTluvBAgQIECAQCECpkEVwvjWIkJQxXpajQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKERCCKse5ibtkWf7U8dl9O5tYu5oJECBAgAABAnUWEIKq8+mojQABAgQIEKilQGfL1CMhhD+uZXENLEoIqoGHpmQCBAgQIECAAAECBAgQIECAAAECBAgQIEDg/2fv/mLzus87wT+HpkxbtizaY8OZNIiohsrKyYWYLGLxIoUoxrsuMBd2ZwFjgUxheoF2F92LagrsFvC0sIwpAnQvtsrNAm2BNb1B9yJYtHKBAeqBQ1FIsKCUTUJdNNZETEQZk04CGw0V/xMt+j2LQ8uS3le0xJfv+f9+CPjC9jnP7/l9ntPCVfXVQ4AAAQIECIQQlI/gkwRGk87+80uLq4QIECBAgAABAgTyFRCCytdTNQIECBAgQGAIBCamZsZHx0ayX6jaOwTXLfyKQlCFEzuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoQEIIqALUFJW2BasEQXYEAAQIECBCorYAQVG1HozECBAgQIECgzgKT07PHI40X6txjU3oTgmrKpPRJgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAjcLCEH5HrYSSDqdL134/uIyHQIECBAgQIAAgfwFhKDyN1WRAAECBAgQGAIB26DyG7IQVH6WKhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAeQJCUOVZN+akNE6vnF2YaUy/GiVAgAABAgQINExACKphA9MuAQIECBAgUB+BA9NH59M0ebY+HTWzEyGoZs5N1wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBh2ASGoYf8Ctrh/MnJ0Zem1RTIECBAgQIAAAQLFCAhBFeOqKgECBAgQIDAEAgenZyY20pGLQ3DVQq8oBFUor+IECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUJCAEFRBsM0te27lzMJUc9vXOQECBAgQIECg/gJCUPWfkQ4JECBAgACBGgvYBjX4cISgBjdUgQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKFxCCKt+8zicmSTx3YWlhvs496o0AAQIECBAg0HQBIaimT1D/BAgQIECAQKUCB74yM5WOjPyo0iYafrgQVMMHqH0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMqYAQ1JAOfutrX1o5szBBhAABAgQIECBAoFgBIahifVUnQIAAAQIEhkBg8vHZxUjiyBBctZArCkEVwqooAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQsIARVMHCDytsC1aBhaZUAAQIECBBotIAQVKPHp3kCBAgQIECgDgKT00/MRNo5VYdemtiDEFQTp6ZnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBCC8g1cE7i8sd6ZWF1eXCNCgAABAgQIECBQrIAQVLG+qhMgQIAAAQJDIjB5eHY5Ig4NyXVzvaYQVK6cihEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBASQJCUCVB1/2YJF5cWVo4Xvc29UeAAAECBAgQaIOAEFQbpugOBAgQIECAQOUCB6Zn59I0Xqq8kQY2IATVwKFpmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRCCMpHEBG2QPkMCBAgQIAAAQIlCghBlYjtKAIECBAgQKDdApOHZ1cjYl+7b5n/7YSg8jdVkQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSKFxCCKt647iekEd/86ZmFY3XvU38ECBAgQIAAgbYICEG1ZZLuQYAAAQIECFQuYBvUzkYgBLUzN28RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQLUCQlDV+tfh9NGks//80mL2h+b6IUCAAAECBAgQKEFACKoEZEcQIECAAAECwyMweXh2LSL2Ds+NB7+pENTghioQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQPkCQlDlm9fpxCRJX76wdGquTj3phQABAgQIECDQdgEhqLZP2P0IECBAgACBUgUmp2ePRxovlHpoww8Tgmr4ALVPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBIRUQghrSwV+7ti1Qwz1/tydAgAABAgSqERCCqsbdqQQIECBAgEBLBSamZsZHx0ayNee2QW1zxkJQ24TyGAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjUSkAIqlbjKLeZNE6vnF2YKfdQpxEgQIAAAQIECAhB+QYIECBAgAABAjkLfO7w7Ikk4g9zLtvackJQrR2tixEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDpL1CqAAAgAElEQVQgQKDVAkJQrR7v7S+XjBxdWXptcYgFXJ0AAQIECBAgUImAEFQl7A4lQIAAAQIE2ixwcHpmYiMdudjmO+Z5NyGoPDXVIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGyBISgypKu2Tm2QNVsINohQIAAAQIEhklACGqYpu2uBAgQIECAQGkCB6aPzqdp8mxpBzb4ICGoBg9P6wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBhiASGo4Rx+ksRzF5YW5ofz9m5NgAABAgQIEKhWQAiqWn+nEyBAgAABAi0VsA1q+4MVgtq+lScJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoD4CQlD1mUWJnVxaObMwUeJ5jiJAgAABAgQIELhJQAjK50CAAAECBAgQKEhg8vHZxUjiSEHlW1NWCKo1o3QRAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDJWAENRQjXvzsrZADd/M3ZgAAQIECBCol4AQVL3moRsCBAgQIECgRQKT00/MRNo51aIrFXIVIahCWBUlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYIFhKAKBq5f+csrZxbG69eWjggQIECAAAECwyMgBDU8s3ZTAgQIECBAoAIB26DujC4EdWcjTxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA/QSEoOo3k0I7SuLFlaWF44WeoTgBAgQIECBAgMBtBYSgfCAECBAgQIAAgQIFDkzPzqVpvFTgEY0vLQTV+BG6AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBIZSQAhqqMZ+eWO9M7G6vLg2VLd2WQIECBAgQIBAzQSEoGo2EO0QIECAAAEC7ROYPDy7GhH72nezfG4kBJWPoyoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUK6AEFS53pWeZgtUpfwOJ0CAAAECBAh8LCAE5VsgQIAAAQIECBQsYBvU7YGFoAr+AJUnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIEhKAKYa1l0dGks//80mL2h+D6IUCAAAECBAgQqFBACKpCfEcTIECAAAECwyNgG9Qnz1oIanj+58BNCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0CYBIag2TfOT75Ik6csXlk7NDcdt3ZIAAQIECBAgUG8BIah6z0d3BAgQIECAQEsEJqdnj0caL7TkOrleQwgqV07FCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAkASGokqArPsYWqIoH4HgCBAgQIECAwE0CQlA+BwIECBAgQIBACQITUzPjo2Mj2Vr0vSUc16gjhKAaNS7NEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMA1ASGoYfgUkldWznzn6WG4qTsSIECAAAECBJogIATVhCnpkQABAgQIEGiFgG1QW49RCKoVn7dLECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYOgEhKCGYOTJyNGVpdcWh+CmrkiAAAECBAgQaISAEFQjxqRJAgQIECBAoA0CB6dnJjbSkYttuEuedxCCylNTLQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoS0AIqizpis5J4/TK2YWZik53LAECBAgQIECAwBYCQlA+CwIECBAgQIBAiQIHpo/Op2nybIlH1v4oIajaj0iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCFgBBUuz+LNE1+56dnv3Oy3bd0OwIECBAgQIBAswSEoJo1L90SIECAAAECDRewDerWAQpBNfyj1j4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSGVEAIqtWDv7RyZmGi1Td0OQIECBAgQIBAAwWEoBo4NC0TIECAAAECzRaYPPy1kxHpU82+RX7dC0HlZ6kSAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJQnIARVnnXZJyVJPHdhaWG+7HOdR4AAAQIECBAgcHsBIShfCAECBAgQIECgZIHJ6SdmIu2cKvnY2h4nBFXb0WiMAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBG4jIATV2s/DFqjWjtbFCBAgQIAAgaYLCEE1fYL6J0CAAAECBBopMPn47GIkcaSRzefctBBUzqDKESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEApAkJQpTBXcci/XTmzcKKKg51JgAABAgQIECBwewEhKF8IAQIECBAgQKACAdugbqALQVXwATqSAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAYWEIIamLCOBS5vrHcmVpcX1+rYnJ4IECBAgAABAsMuIAQ17F+A+xMgQIAAAQKVCUwenl2NiH2VNVCTg4WgajIIbRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXwJCUH1xNePhJF5cWVo43oxmdUmAAAECBAgQGD4BIajhm7kbEyBAgAABAjURODA9O5em8VJN2qmsDSGoyugdTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIDCAhBDYBX01c31jsP2gJV0+FoiwABAgQIECAQEUJQPgMCBAgQIECAQIUCtkFFCEFV+AE6mgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgR2LCAEtWO6Wr6YJOnLF5ZOzdWyOU0RIECAAAECBAhsCghB+RAIECBAgAABAhUKTB6ePRYRf1FhC5UfLQRV+Qg0QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQI7EBCC2gFajV8ZTTr7zy8trta4Ra0RIECAAAECBIZeQAhq6D8BAAQIECBAgECVAhNTM+OjYyPZL6DtrbKPKs8WgqpS39kECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFMBIaidytXvPVug6jcTHREgQIAAAQIEthIQgvJdECBAgAABAgQqFpicnj0eabxQcRuVHS8EVRm9gwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgAAEhqAHw6vZqMnJ0Zem1xbq1pR8CBAgQIECAAIFuASEoXwQBAgQIECBAoGKBa9ugflVxG5UdLwRVGb2DCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAAASGoAfDq9Goap1fOLszUqSW9ECBAgAABAgQIbC0gBOXLIECAAAECBAjUQODA9NH5NE2erUErpbcgBFU6uQMJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIAcBIagcEOtQwhaoOkxBDwQIECBAgACBbQkIQW2LyUMECBAgQIAAgWIFDk7PTGykIxeLPaWe1YWg6jkXXREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA7QWEoFrxhVxaObMw0YqbuAQBAgQIECBAYAgEhKCGYMiuSIAAAQIECDRDYFi3QQlBNeP71CUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIdAsIQTX/i0iSeO7C0sJ882/iBgQIECBAgACB4RAQghqOObslAQIECBAg0ACByeknZiLtnGpAq7m2KASVK6diBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFCSgBBUSdDFHWMLVHG2KhMgQIAAAQIEChEQgiqEVVECBAgQIECAwM4EJh+fXYwkjuzs7Wa+JQTVzLnpmgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsMuIATV7C/AFqhmz0/3BAgQIECAwHAKCEEN59zdmgABAgQIEKipwDBugxKCqunHqC0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQuK2AEFSjP5DLG+udidXlxbVG30LzBAgQIECAAIEhExCCGrKBuy4BAgQIECBQf4HJw7PLEXGo/p3m06EQVD6OqhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAuQJCUOV653paEi+uLC0cz7WmYgQIECBAgAABAoULCEEVTuwAAgQIECBAgEB/AgemZ+fSNF7q763mPi0E1dzZ6ZwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLDLCAE1djp2wLV2NFpnAABAgQIEBh2ASGoYf8C3J8AAQIECBCopcDk4dnViNhXy+ZybkoIKmdQ5QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgFAEhqFKYcz8kSdKXLyydmsu9sIIECBAgQIAAAQKFCwhBFU7sAAIECBAgQIBA/wLDtA1KCKr/78MbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFC9gBBU9TPYSQejSWf/+aXF7A+n9UOAAAECBAgQINAwASGohg1MuwQIECBAgMBwCExMzYyPjo1kv+C2t+03FoJq+4TdjwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0UEIJq3lxtgWrezHRMgAABAgQIELhZQAjK90CAAAECBAgQqKnA5PTs8UjjhZq2l1tbQlC5USpEgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAiUKCEGViJ3TUUmn86UL319czqmcMgQIECBAgAABAiULCEGVDO44AgQIECBAgMB2BYZlG5QQ1Ha/CM8RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQJ0EhKDqNI1t9JLG6ZWzCzPbeNIjBAgQIECAAAECNRUQgqrpYLRFgAABAgQIEMgEDkwfnU/T5Nk2awhBtXm67kaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIH2CghBNWy2ycjRlaXXFhvWtXYJECBAgAABAgRuEhCC8jkQIECAAAECBGoscHB6ZmIjHblY4xYHbk0IamBCBQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgAgEhqArQd3qkLVA7lfMeAQIECBAgQKBWAkJQtRqHZggQIECAAAECtwq0fRuUEJSvngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCAE1ZypJUk8d2FpYb45HeuUAAECBAgQIEBgKwEhKN8FAQIECBAgQKDmAge+MjOVjoz8qOZt7rg9Iagd03mRAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCoUEIKqEL+/oy+tnFmY6O8VTxMgQIAAAQIECNRRQAiqjlPREwECBAgQIECgR2Dy8dnFSOJIG2GEoNo4VXciQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA+wWEoJoxY1ugmjEnXRIgQIAAAQIEtiMgBLUdJc8QIECAAAECBCoWmJx+YibSzqmK2yjkeCGoQlgVJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGCBYSgCgbOp/zllTML4/mUUoUAAQIECBAgQKBqASGoqifgfAIECBAgQIDANgXaug1KCGqbH4DHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBWAkJQtRrH1s0k8eLK0sLxBnSqRQIECBAgQIAAgW0ICEFtA8kjBAgQIECAAIE6CByYnp1L03ipDr3k2YMQVJ6aahEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWQJCUGVJ7/icyxvrnYnV5cW1HVfwIgECBAgQIECAQK0EhKBqNQ7NECBAgAABAgRuLzB5eHY1Iva1yUkIqk3TdBcCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMj4AQVL1nnUZ886dnFo7Vu0vdESBAgAABAgQI9CMgBNWPlmcJECBAgAABAhULtHEblBBUxR+V4wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgRwJCUDtiK+2l0aSz//zSYvaHzfohQIAAAQIECBBoiYAQVEsG6RoECBAgQIDA8AhMHp7N1rTvbcuNhaDaMkn3IECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwHAJCEHVd95Jkr58YenUXH071BkBAgQIECBAgMBOBISgdqLmHQIECBAgQIBAhQKT07PHI40XKmwh16OFoHLlVIwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEShIQgioJegfH2AK1AzSvECBAgAABAgQaICAE1YAhaZEAAQIECBAgcLPAxNTM+OjYSLauvRXboISgfN8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0EQBIaiaTi2N0ytnF2Zq2p22CBAgQIAAAQIEBhAQghoAz6sECBAgQIAAgaoEPnd49kQS8YdVnZ/nuUJQeWqqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJlCQhBlSXd5znJyNGVpdcW+3zL4wQIECBAgAABAg0QEIJqwJC0SIAAAQIECBDoFTg4PTOxkY5cbIOMEFQbpugOBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGD4BIagaztwWqBoORUsECBAgQIAAgfwEhKDys1SJAAECBAgQIFCqwIHpo/Npmjxb6qEFHCYEVQCqkgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQuIAQVOHEfR+Qpsnv/PTsd072/aIXCBAgQIAAAQIEGiEgBNWIMWmSAAECBAgQIHCrQFu2QQlB+boJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCQlC1m9qllTMLE7XrSkMECBAgQIAAAQK5CQhB5UapEAECBAgQIECgfIHJw187GZE+Vf7J+Z0oBJWfpUoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUJ6AEFR51ts5KUniuQtLC/PbedYzBAgQIECAAAECzRQQgmrm3HRNgAABAgQIENgUmJx+YibSzqkmcwhBNXl6eidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMDwCghB1Wr2tkDVahyaIUCAAAECBAgUIyAEVYyrqgQIECBAgACB0gQmH59djCSOlHZgzgcJQeUMqhwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlCIgBFUK8/YOSeLFlaWF49t72FMECBAgQIAAAQJNFRCCaurk9E2AAAECBAgQuCbwuce/9nSSpH/XVBAhqKZOTt8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYbgEhqNrM//LGemdidXlxrTYdaYQAAQIECBAgQKAQASGoQlgVJUCAAAECBAiUKzB5eHY1IvaVe2o+pwlB5eOoCgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUKyAEVa73J55mC1RNBqENAgQIECBAgEDxAkJQxRs7gQABAgQIECBQuMCB6dm5NI2XCj+ogAOEoApAVZIAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEChcQgiqceFsHjCad/eeXFrM/PNYPAQIECBAgQIBAywWEoFo+YNcjQIAAAQIEhkegqdughKCG5xt1UwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLRJQAiq+mkmSfryhaVTc9V3ogMCBAgQIECAAIEyBISgylB2BgECBAgQIECgBIHJ6dnjkcYLJRyV6xFCULlyKkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECJQkIQZUEfZtjbIGqfgY6IECAAAECBAiUKSAEVaa2swgQIECAAAECBQpMTM2Mj46NZOvd9xZ4TO6lhaByJ1WQAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoQEIIqAfk2R9gCVa2/0wkQIECAAAECVQgIQVWh7kwCBAgQIECAQEECTdwGJQRV0MegLAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUKiAEVSjvnYsnI0dXll5bvPODniBAgAABAgQIEGiLgBBUWybpHgQIECBAgACBiDg4PTOxkY5cbBKGEFSTpqVXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhYQAiqwm8hjdMrZxdmKuzA0QQIECBAgAABAhUICEFVgO5IAgQIECBAgECRAgemj86nafJskWfkWVsIKk9NtQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgLAEhqLKktzjHFqgK8R1NgAABAgQIEKhOQAiqOnsnEyBAgAABAgQKEWjaNighqEI+A0UJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoGABIaiCgT+5/KWVMwsTlZ3uYAIECBAgQIAAgcoEhKAqo3cwAQIECBAgQKA4gSZtgxKCKu47UJkAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEihMQgirO9naVkySeu7C0MF/N6U4lQIAAAQIECBCoUkAIqkp9ZxMgQIAAAQIEChKYnH5iJtLOqYLK51pWCCpXTsUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoCQBIaiSoLuPsQWqEnaHEiBAgAABAgTqISAEVY856IIAAQIECBAgkLvA5OOzi5HEkdwL51xQCCpnUOUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoBQBIahSmHsP+bcrZxZOVHKyQwkQIECAAAECBCoXEIKqfAQaIECAAAECBAgUI9CUbVBCUMXMX1UCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKFZACKpY3y2qX95Y70ysLi+ulX6yAwkQIECAAAECBGohIARVizFoggABAgQIECBQjMDk4dnViNhXTPV8qgpB5eOoCgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUKyAEVa53JPHiytLC8ZJPdRwBAgQIECBAgECNBISgajQMrRAgQIAAAQIE8hY4MD07l6bxUt5186wnBJWnploECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUJaAEFRZ0h+ds7HeedAWqHLNnUaAAAECBAgQqJuAEFTdJqIfAgQIECBAgEDOAnXfBiUElfPAlSNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBUgSEoEph3jwkSdKXLyydmivvRCcRIECAAAECBAjUUUAIqo5T0RMBAgQIECBAIEeBycOzxyLiL3IsmWspIahcORUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZIEhKBKgo6I0aSz//zS4mp5JzqJAAECBAgQIECgjgJCUHWcip4IECBAgAABAjkKTEzNjI+OjWS/ELg3x7K5lRKCyo1SIQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoUUAIqhxsW6DKcXYKAQIECBAgQKAJAkJQTZiSHgkQIECAAAECAwpMTs8ejzReGLBMIa8LQRXCqigBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFCwgBFUw8LXySafzpQvfX1wu5zSnECBAgAABAgQI1FlACKrO09EbAQIECBAgQCAngTpvgxKCymnIyhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAqQJCUCVwp3F65ezCTAknOYIAAQIECBAgQKABAkJQDRiSFgkQIECAAAECeQgcmD46n6bJs3nUyrOGEFSemmoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQFkCQlAlSCcjR1eWXlss4SRHECBAgAABAgQINEBACKoBQ9IiAQIECBAgQCAPgYPTMxMb6cjFPGrlWUMIKk9NtQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgLAEhqMKlz62cWZgq/BQHECBAgAABAgQINEZACKoxo9IoAQIECBAgQGBwgTpugxKCGnyuKhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA+QJCUMWaJ0k8d2FpYb7YU1QnQIAAAQIECBBokoAQVJOmpVcCBAgQIECAwIACB74yM5WOjPxowDK5vi4ElSunYgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQkoAQVKHQl1bOLEwUeoLiBAgQIECAAAECjRMQgmrcyDRMgAABAgQIEBhMYPLx2cVI4shgVfJ7WwgqP0uVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKA8ASGo4qxtgSrOVmUCBAgQIECAQJMFhKCaPD29EyBAgAABAgR2IDA5/cRMpJ1TO3i1kFeEoAphVZQAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEChYQgioM+PLGemdidXlxrbATFCZAgAABAgQIEGikgBBUI8emaQIECBAgQIDAYAKTh2eXI+LQYFXyeVsIKh9HVQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgXAEhqIK8k3hxZWnheEHVlSVAgAABAgQIEGiwgBBUg4endQIECBAgQIDATgUOTM/OpWm8tNP383xPCCpPTbUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoCwBIahCpG2BKoRVUQIECBAgQIBAOwSEoNoxR7cgQIAAAQIECPQtMHl4duYoTfAAACAASURBVDUi9vX9Ys4vCEHlDKocAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJQiIASVP3Ma8c2fnlk4ln9lFQkQIECAAAECBNogIATVhim6AwECBAgQIEBgBwJ12QYlBLWD4XmFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCoXEILKfwSjSWf/+aXF7A919UOAAAECBAgQIEDgFgEhKB8FAQIECBAgQGBIBSamZsZHx0ayXzjcWyWBEFSV+s4mQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZ0KCEHtVG7r95IkffnC0qm5fKuqRoAAAQIECBAg0CYBIag2TdNdCBAgQIAAAQJ9CkxOzx6PNF7o87VcHxeCypVTMQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoSUAIKl9oW6Dy9VSNAAECBAgQINBGASGoNk7VnQgQIECAAAEC2xSowzYoIahtDstjBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFArASGoHMeRxumVswszOVZUigABAgQIECBAoIUCQlAtHKorESBAgAABAgT6Efjc4dkTScQf9vNOns8KQeWpqRYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlCUgBJWjdDJydGXptcUcKypFgAABAgQIECDQQgEhqBYO1ZUIECBAgAABAv0IHJyemdhIRy72806ezwpB5ampFgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUJSAElZO0LVA5QSpDgAABAgQIEGi/gBBU+2fshgQIECBAgACBOwocmD46n6bJs3d8sIAHhKAKQFWSAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoXEILKhzhJ4rkLSwvz+VRThQABAgQIECBAoM0CQlBtnq67ESBAgAABAgS2KVDlNighqG0OyWMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCsBIahcxnFp5czCRC6VFCFAgAABAgQIEGi9gBBU60fsggQIECBAgACB7QlMPj67GEkc2d7T+T0lBJWfpUoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUJ6AENTg1rZADW6oAgECBAgQIEBgmASEoIZp2u5KgAABAgQIELiNwOT0EzORdk6VjSQEVba48wgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgDwEhqIEVL6+cWRgfuIoCBAgQIECAAAECQyMgBDU0o3ZRAgQIECBAgMCdBarYBtWmENSdhT1BgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqJ/Bv/uCP4swPz5XbWBIvriwtHC/3UKcRIECAAAECBAg0WUAIqsnT0zsBAgQIECBAIGeBA9Ozc2kaL+Vc9rblhKDK1HYWAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4VaCCENTljfXOxOry4pp5ECBAgAABAgQIENiugBDUdqU8R4AAAQIECBAYEoHJw7OrEbGvrOsKQZUl7RwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILC1QOkhKFugfIoECBAgQIAAAQI7EBCC2gGaVwgQIECAAAECbRYoexuUEFSbvyZ3I0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEmCJQdghpNOvvPLy1mf0irHwIECBAgQIAAAQLbFhCC2jaVBwkQIECAAAECwyNQ5jYoIajh+a7clAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKVBmCCpJ0pcvLJ2aq6eErggQIECAAAECBOosIARV5+nojQABAgQIECBQkcDk9OzxSOOFMo4XgipD2RkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCTBcoMQdkC5UskQIAAAQIECBDYqYAQ1E7lvEeAAAECBAgQaLHAxNTM+OjYSLZ2fm/R1xSCKlpYfQIE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cbYqDyYgALVzPwGondt5s94C6w/ui87du6832bt9KfsX73/qC12XaPr2paomkoWe5h67N458eldVLdx87uVs41NEnEiSZLkODemBAAECBAgQIECAAAECBAgQIECAQNkCQlBlizuPAAECBAgQIECAAAECBAgQIECgcoE0TSciIgtEZX91//HnFXR3+YM05l/PtkNdieW3NirooP1HbrVxqncr1a5334zRd97swrCVqv3fRhNvKAhV3NQEoYqzVXlnAgJQO3PL3hKA2rmdN4sT2Gr7Um84qXf7UtZN74am4jpUOROYeng0jh3aHU//5ljsvbsWv6Xi9LWNT9nmJz8ECBAgQIAAAQIECBAgQIAAAQIEhlqgFr9iN9QTcHkCBAgQIECAAAECBAgQIECAAIFKBdI0nbkWhso2RO2ttJmIOPfWRpw4916cvLgea+tp1e04v0egdyvV5sapW4JTP+5666N33mNJIFcBQahcObuKffPvvxc/WPl5cQeoTGCbAp99ZDyef2Y2do/VYvvINruux2MCUPWYQ9u62Ljv4bh6/yPXr9W5+77INjLd/NO7fWnjvke63mmbSZvuMz6WxNzBeyPb/HTo4dE6XO1SFny6Fn5arUNDeiBAgAABAgQIECBAgAABAgQIECBQBwEhqDpMQQ8ECBAgQIAAAQIECBAgQIAAAQKVC6RpOh4RWRAq2w51pPKGIuLl81c2w1Anf7Zeh3b0kJPAVlup7v1Fd3CqdyvVR+9kvw/SD4EbAoJQxXwN761fjW98eyHeeHOtmANUJbANAQGobSB9wiMCUDu3a/Ob7z/6WNf1ercvbQaaHuoJND36hTaTuNs1gWzb09P7x+LZg/fUxeTla8Gnxbo0pA8CBAgQIECAAAECBAgQIECAAAECdRIQgqrTNPRCgAABAgQIECBAgAABAgQIECBQC4E0TSci4ti1UFT374asoMNLb38Y8+evxPzrV2L17Q8r6MCRdRS495c9wamerVRbha1sparjJAfrSRBqML9PelsQqhhXVbcnIAC1Pafep95+5934+h/8Ubz+k5WdFfBWLQW2s31p/aGJ6Ny9+3r/ti/VcpS1ampiz11x7NC9kQWg9u25qw69nYuIExFxMkkSKew6TEQPBAgQIECAAAECBAgQIECAAAECtRUQgqrtaDRGgAABAgQIECBAgAABAgQIECBQB4E0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u+mU7iYANaUXp+0iBbY+bMXWeiseb9wppb8nEdGrqqpXSkP6IECAAAECBAgQIECAAAECBAgQIECAgBCUd4AAAQIECBAgQIAAAQIECBAgQIAAgWIEUkqPhmGoPCFquenG8l/u3tl/E71X/Tjqp6bbsT+B4gUEoeq9IkGoej1Hqfbnf/wH8Z3fydlcn8sEBKAuE/LPCVwusLa0EJ37dwZTn1aXFi5/YPwr9t+Z+nQ0/u3sQIAAAQIECBAgQIAAAQIECBAgQIAAgasJCEFdzctqAgQIECBAgAABAgQIECBAgAABAgQmIJBSWomIHITK06EeTmDLS7d48uJsEIbqvexfutYCAvMsIAhV7+0LQtXr+XXVBKBGtxaAGt3KSgJfJpBDT537i/Hw/fdKADrOE58iYqeqqr0SGtIDAQIECBAgQIAAAQIECBAgQIAAAQIEvkpACMq7QYAAAQIECBAgQIAAAQIECBAgQIBA0QIppTySY3sYilptutnDk4vovjiL7vOzODi5aLod+xMoUkAQqt5rEYSq1/PLqglAjW4sADW6lZUE3hXIfzZut+/G1oetWL5dxNf0uzn8VFVV100RIECAAAECBAgQIECAAAECBAgQIEBgWgSK+O3qtGDpkwABAgQIECBAgAABAgQIECBAgACBZgVSSnk6VP553Gwnv9792aefRff56WBC1FE/ldCSHggUIyAIVe9V/PxfDuIv/ubv6y2q2kDgo//+3+JPH/0ejREEBKBGQLKEwDsCK60qOhuLsd1ejNWlhRJsDiMih566VVUdlNCQHggQIECAAAECBAgQIECAAAECBAgQIHAVASGoq2hZS4AAAQIECBAgQIAAAQIECBAgQIBAEQIppZWI6Ax/2k03dXyeoveyP5gQ9fST86bbsT+BYgQEoeq9CkGoej1ztT/81nr82Ue/X3/hGawoADWDl+pIYxPI0546G3dic701tj2uWPjJMPj09IrPWU6AAAECBAgQIECAAAECBAgQIECAAIGiBISgiroOzRAgQIAAAQIECBAgQIAAAQIECBAgcFWBlNKDdwJRy1d9vu71hycXsbN/OghFHZxc1F1ePQJTJyAIVe+VCULV5ykANbqlANToVlbOr8Da0sJg4lMOQBUy9Wk/InYioldV1dH83oyTEyBAgAABAgQIECBAgAABAgQIECAwSwJCULN0m85CgAAB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aRh+OiihIT0QIECAAAECBAgQIECAAAECBAgQIECAAIFxCghBjVNXbQIECBAgQIAAAQIECBAgQIAAAQIECBAoRiCltDKcDpUDUQ9LaOzJi7NBGKr3sl9CO3q4goAg1BWw5mipANRsXvbWh63YWm/F4407pRzwSUT0qqrqldKQPggQIECAAAECBAgQIECAAAECBAgQIECAwCQEhKAmoWwPAgQIECBAgAABAgQIECBAgAABAgQIEChKIKW0FhHbw1DUatPNHZ5cRPfFWXSfn8XByUXT7dh/RAFBqBGh5mSZANRsXfTa0kJ07t8ZTH1aXVoo4XD770x9OiqhIT0QIECAAAECBAgQIECAAAECBAgQIECAAIFJCwhBTVrcfgQIECBAgAABAgQIECBAgAABAgQIECBQlEBKaWsYhnpcQmPPPv0sus9PBxOijvqphJb08DUCglBejywgADU770H+d7pzfzEevv9eCYc6fif4tFdCQ3ogQIAAAQIECBAgQIAAAQIECBAgQIAAAQJNCghBNalvbwIECBAgQIAAAQIECBAgQIAAAQIECBAoRiCltDIMQ+UJUe2mG8uhit7L/mBC1NNPzptux/5fIyAINd+vhwDU9N//g3u3Yrt9N7Y+bMXy7SK+Pt2NiF5VVd3p13UCAgQIECBAgAABAgQIECBAgAABAgQIECBQn0ARv8Wv7zgqESBAgAABAgQIECBAgAABAgQIECBAgACBmwuklB5ERGf4s3zzijercHhyETv7p4NQ1MHJxc2KeXosAoJQY2EtvqgAVPFX9JUNrrSq6GwsxnZ7MVaXFko4yOE7U58OSmhIDwQIECBAgAABAgQIECBAgAABAgQIECBAoDQBIajSbkQ/BAgQIECAAAECBAgQIECAAAECBAgQIFCUQEppaxiG2iyhsd1X/S8mRJXQjx7+XUAQar7eBgGo6bzvPO0p/7u6ud4q5QBPcvipqqqnpTSkDwIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAEFSpN6MvAgQIECBAgAABAgQIECBAgAABAgQIEChKIKW0FhE5ELUdEatNN5cDGN3np9F9cRZ7r9823Y79hwKCUPPxKghATdc9ry0tDCY+5QBUIVOf9iNiJyJ6VVUdTZembgkQIECAAAECBAgQIECAAAECBAgQIECAQHMCQlDN2duZAAECBAgQIECAAAEC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gAABAgQIECBAgAABAgQIECBAgAABAgRmT0AIavbu1IkIECBAgAABAgQIECBAgAABAgQIECBAgEBRAimltWEYKk+IWm26uePzFN3neTrUWey9ftt0O7XsP69BqHkLQD364PZg6tPjjTu1vDc1FHkynPjUq6GWEgQIECBAgAABAgQIECBAgAABAgQIECBAgACBrxUQgvKCECBAgAABAgQIECBAgAABAgQIECBAgAABAhMTSCk9iojPJ0QtT2zjr9ho//Xb2Nl/E71X/Tjqp6bbudH+a0sL0fuT5VImA93oLKM8PC8BqHyvnft3BuGn1aWFUWjGvWY/Irr5p6qqo3Fvpj4BAgQIECBAgAABAgQIECBAgAABAgQIECBA4HMBISjvAgECBAgQIECAAAECBAgQIECAAAECBAgQIDBxgZTSynA6VA5EPZx4A1+yYQ7V5DBU72W/hHau1cNKq4qnW78980GoeQhA5dBT5/5iPHz/vWu9CzU/dJwnPkXETlVVezXXVo4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMJKAENRITBYRIECAAAECBAgQIECAAAECBAgQIECAAAEC4xJIKa1FxPYwFLU6rn1GrXt4chHdF2fRfX4WBycXoz5WzLpZD0LNcgDqwb1bsd2+G1sftmL5dhFf4z0bTnzKk598CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKNChTx7UmjAjYnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEihFIKW0Nw1CPS2jq2aefRff56WBC1FE/ldDSSD3MahBqFgNQ+a46G4uRJz+1790a6X7HvOgwB5+G4aeDMe+lPAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgZAEhqJGpLCRAgAABAgQIECBAgAABAgQIECBAgAABAgQmJZBSWhmGofKEqPak9v2qfY7PU/Re9gcTop5+ct50OyPtP2tBqFkLQOVpT1vrrXi8cWek+5zAoicR0auqqjeBvWxBgAABAgQIECBAgAABAgQIECBAgAABAgQIELiygBDUlck8QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECExSIKX0ICI6w5/lSe79ZXsdnlzEzv7pIBR1cHLRdDtfu/+sBKFmJQC1trQQ2+3FyAGo1aWFEt6d/YjYGYafjkpoSA8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAga8SEILybhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJTI5BS2hqGoTZLaHr3Vf+LCVEl9PNlPUx7EGraA1DZP0986txfjIfvv1fCa3IcEd38U1XVXgkN6YEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMIqAENQoStYQIECAAAECBAgQIECAAAECBAgQIECAAAECRQmklNYiIgeitiNitenmjs9TdJ+fRvfFWey9ftt0O/9p/2kNQk1zAOrBvVux3b47mPq0fLuIr+R2hxOfcgDKhwABAgQIECBAgAABAgQIECBAgAABAgQIECAwdQJFfOMydWoaJkCAAAECBAgQIECAAAECBAgQIECAAAECBIoRSCk9GIahcihquenG9l+/HYShui9O46ifmm7ni/2nLQg1jQGobNzZWIzt9mKsLi2UcPeH70x9OiihIT0QIECAAAECBAgQIECAAAECBAgQIECAAAECBK4rIAR1XTnPESBAgAABAgQIECBAgAABAgQIECBAgAABAsUJpJQ6EZF/HpbQ3O6r/iAQ1XvZL6GdmJYg1LQFoPK0p87Gndhcb5Vwz8d54lMOP1VV9bSEhvRAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKhDQAiqDkU1CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaIEUkprwzBUDkStNt3c4cnFIAi1s38aBycXjbZTehBqWgJQa0sLg4lPOQBVyNSn/YjYyQGoqqqOGn3JbE6AAAECBAgQIECAAAECBAgQIECAAAECBAgQGIOAENQYUJUkQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEyhFIKT0aBqIel9DV/uu3sbP/Jnqv+nHUT420VGoQqvQAVHbbWm/FdvtutO/dauTu/sOmeepTN4efqqo6KKEhPRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExiUgBDUuWXUJECBAgAABAgQIECBAgAABAgQIECBAgACBogRSSisRsRUR2xHRbrq54/M0mA7VfXEWTz85n3g7pQWhSg5APfrgdnQ27gymPi3fLuLrtd0cfqqqqjfxF8eGBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGGBIr4lqahs9uWAAECBAgQIECAAAECBAgQIECAAAECBAgQmFOBlNLaMAyVQ1GrTTMcnlwMwlDd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BAgQIECAwDwLCEHN8+07OwECBAgQIECAAAECBAgQIECAAAECBAgQIFCkQEqpExH552EJDe6+6g8CUb2X/d9o590g1HUCUGtLC4OJTzkAVcjUp/2I2ImIXlVVRyXY64EAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODXAkJQ3gQCBAgQIECAAAECBAgQIECAAAECBAgQIECAQKECKaW1YRgqB6JWm27z8ORiEITa2T+Ng5OLQTs73/kvsTecGjVKfyutKrbWW9G5vxgP339vlEfGveY4T3zKR6mq6mDcm6lPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBwPQEhqOu5eYoAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMFGBlNKjYSDq8UQ3/orN9l+/jZ39N9F71Y+jfrq0pUcf3I7Oxp3B1Kfl20V8RbWbw09VVfUubd4CAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgWK+IapcQUNECBAgAABAgQIECBAgAABAgQIECBAgAABAgSmRCCltBIRWxGxHRHtpts+Pk+D6VDdF2fx9JPz32hnbWlhEHrabi/G6tJC063m/Q/zxKeI6Jn6VMJ16IEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMLqAENToVlYSIECAAAECBAgQIECAAAECBAgQIECAAAECBIoSSCmtDcNQORS12nRzhycXgzDU3uu3g6lPm+utplvK+x/n0NNw6tPTEhrSAwECBAgQIECAAAECBAgQIECAAAECBAgQIECAwNUFhKCubuYJAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxAimlHITqRMRmcc0109D+O1Ofjpppwa4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ1CQhB1SWpDgECBAgQIECAAAECBAgQIECAAAECBAgQIECgAIGU0sowDJUDUe0CWppkC4fDqU87VVUdTHJjexEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIxXQAhqvL6qEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQaE0gpPYiI7YjIU6KWG2tk/BvvRkS3qqre+LeyAwECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBMCQlBNqNuTAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBhgZRSngyVw1CbE956XNvlqU87w/DT0bg2UZcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAMASGoMu5BFwQIECBAgAABAgQIECBAgAABAgQIECBAgACBiQiklNaGYag8IWp1IpvWt8lxRORpTztVVe3VV1YlAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB0gWEoEq/If0RIECAAAECBAgQIECAAAECBAgQIECAAAECBMYkkFJ6FBGfT4haHtM2dZR9lic+5QBUVVWmPtUhqgYBAgQIECBAgAABAgQIECBAgAABAgQIECBAYMoEhKCm7MK0S4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoWyCltDKcDpUDUQ/rrn/NeofD4FO3qqqDa9bwGAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwIwICEHNyEU6BgECBAgQIECAAAECBAgQIECAAAECBAgQIECgDoGU0lpEbA9DUat11LxijSfDiU+9Kz5nOQECBAgQIECAAAECBAgQIECAAAECBAgQIECAwAwLCEHN8OU6GgECBAgQIECAAAECBAgQIECAAAECBAgQIEDgJgIppa1hGOrxTeqM8Oz+O1OfjkZYbwkBAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCcCQhBzdmFOy4BAgQIECBAgAABAgQIECBAgAABAgQIECBA4KoCKaWVYRgqT4hqX/X5r1h/nCc+RcROVVV7NdVUhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEYFhKBm9GIdiwABAgQIECBAgAABAgQIECBAgAABAgQIECAwDoGU0oOI6Ax/lq+xx24OP1VV1b3Gsx4hQIAAAQIECBAgQIAAAQIErHJV9AAAIABJREFUCBAgQIAAAQIECBCYUwEhqDm9eMcmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNxUIKW0NQxDbV5S6zAicuipW1XVwU339TwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgMD8CQhBzd+dOzEBAgQIECBAgAABAgQIECBAgAABAgQIECBAoFaBlNJaRORA1HZErL5T/Mkw+PS01g0VI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQmDsBIai5u3IHJkCAAAECBAgQIECAAAECBAgQIECAAAECBAiMTyCl9CAi8k+vqqqj8e2kMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAwDwJCEHN0207KwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEpFBCCmsJL0zIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBeRIQgpqn23ZWAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAlMoIAQ1hZemZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLzJCAENU+37awECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEplBACGoKL03LBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOZJQAhqnm7bWQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhMoYAQ1BRempYJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzJOAENQ83bazEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJhCASGoKbw0LRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCYJwEhqHm6bWclQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMIUCQlBTeGlaJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBPAkJQ83TbzkqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgCgWEoKbw0rRMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYJ4EhKDm6badlQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAUCghBTeGlaZkAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAPAkIQc3TbTsrAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSkUEIKawkvTMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIF5EhCCmqfbdlYCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECUyggBDWFl6ZlAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvMkIAQ1T7ftrAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSmUEAIagovTcsECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE5klACGqebttZCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECPz/7NtBEQAAAAHB/q3luLENWG8ECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHio+qYqAAAgAElEQVQScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4OE4tGMAACAASURBVGgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNa+HRQBAAAQEOzfWg5z24D1RoAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAByqmxcAAAIABJREFUAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACW/ZIdAAAIlUlEQVQBAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBASWC9/Dedn3vKBAAAAABJRU5ErkJggg==" style=""/></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/demo/data/video.mp4 b/odex-event/muk_dms/demo/data/video.mp4 new file mode 100644 index 000000000..20733f83b Binary files /dev/null and b/odex-event/muk_dms/demo/data/video.mp4 differ diff --git a/odex-event/muk_dms/demo/directory.xml b/odex-event/muk_dms/demo/directory.xml new file mode 100644 index 000000000..77315eb61 --- /dev/null +++ b/odex-event/muk_dms/demo/directory.xml @@ -0,0 +1,136 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo noupdate="1"> + + <record id="directory_01_demo" model="muk_dms.directory"> + <field name="name">Documents</field> + <field name="is_root_directory" eval="True"/> + <field name="color" eval="1"/> + <field name="root_storage" ref="muk_dms.storage_demo" /> + <field name="category" ref="muk_dms.category_01_demo" /> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_01_demo'), ref('muk_dms.tag_05_demo')])]" /> + </record> + + <record id="directory_02_demo" model="muk_dms.directory"> + <field name="name">Media</field> + <field name="is_root_directory" eval="True"/> + <field name="color" eval="2"/> + <field name="root_storage" ref="muk_dms.storage_demo" /> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_01_demo'), ref('muk_dms.tag_03_demo')])]" /> + </record> + + <record id="directory_03_demo" model="muk_dms.directory"> + <field name="name">Sheets</field> + <field name="is_root_directory" eval="False"/> + <field name="color" eval="1"/> + <field name="parent_directory" ref="muk_dms.directory_01_demo" /> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_01_demo'), ref('muk_dms.tag_04_demo')])]" /> + </record> + + <record id="directory_04_demo" model="muk_dms.directory"> + <field name="name">Templates</field> + <field name="is_root_directory" eval="False"/> + <field name="color" eval="1"/> + <field name="parent_directory" ref="muk_dms.directory_01_demo" /> + <field name="category" ref="muk_dms.category_01_demo" /> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_07_demo')])]" /> + </record> + + <record id="directory_05_demo" model="muk_dms.directory"> + <field name="name">Photos</field> + <field name="is_root_directory" eval="False"/> + <field name="color" eval="2"/> + <field name="category" ref="muk_dms.category_02_demo" /> + <field name="parent_directory" ref="muk_dms.directory_02_demo" /> + </record> + + <record id="directory_06_demo" model="muk_dms.directory"> + <field name="name">2017</field> + <field name="is_root_directory" eval="False"/> + <field name="color" eval="2"/> + <field name="parent_directory" ref="muk_dms.directory_05_demo" /> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_02_demo'), ref('muk_dms.tag_03_demo')])]" /> + </record> + + <record id="directory_07_demo" model="muk_dms.directory"> + <field name="name">2018</field> + <field name="is_root_directory" eval="False"/> + <field name="color" eval="2"/> + <field name="parent_directory" ref="muk_dms.directory_05_demo" /> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_02_demo'), ref('muk_dms.tag_06_demo')])]" /> + </record> + + <record id="directory_08_demo" model="muk_dms.directory"> + <field name="name">Videos</field> + <field name="is_root_directory" eval="False"/> + <field name="color" eval="2"/> + <field name="parent_directory" ref="muk_dms.directory_02_demo" /> + </record> + + <record id="directory_09_demo" model="muk_dms.directory"> + <field name="name">Music</field> + <field name="is_root_directory" eval="False"/> + <field name="color" eval="2"/> + <field name="parent_directory" ref="muk_dms.directory_02_demo" /> + </record> + + <record id="directory_10_demo" model="muk_dms.directory"> + <field name="name">Graphics</field> + <field name="is_root_directory" eval="False"/> + <field name="parent_directory" ref="muk_dms.directory_02_demo" /> + </record> + + <record id="directory_11_demo" model="muk_dms.directory"> + <field name="name">Mails</field> + <field name="is_root_directory" eval="True"/> + <field name="color" eval="3"/> + <field name="root_storage" ref="muk_dms.storage_demo" /> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_04_demo'), ref('muk_dms.tag_05_demo')])]" /> + </record> + + <record id="directory_12_demo" model="muk_dms.directory"> + <field name="name">Data</field> + <field name="is_root_directory" eval="False"/> + <field name="color" eval="1"/> + <field name="parent_directory" ref="muk_dms.directory_01_demo" /> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_06_demo'), ref('muk_dms.tag_07_demo')])]" /> + </record> + + <record id="directory_13_demo" model="muk_dms.directory"> + <field name="name">Code</field> + <field name="is_root_directory" eval="False"/> + <field name="color" eval="1"/> + <field name="category" ref="muk_dms.category_01_demo" /> + <field name="parent_directory" ref="muk_dms.directory_01_demo" /> + </record> + + <record id="directory_14_demo" model="muk_dms.directory"> + <field name="name">Slides</field> + <field name="is_root_directory" eval="False"/> + <field name="category" ref="muk_dms.category_01_demo" /> + <field name="parent_directory" ref="muk_dms.directory_01_demo" /> + </record> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_dms/demo/file.xml b/odex-event/muk_dms/demo/file.xml new file mode 100644 index 000000000..e8821172f --- /dev/null +++ b/odex-event/muk_dms/demo/file.xml @@ -0,0 +1,274 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo noupdate="1"> + + <record id="file_01_demo" model="muk_dms.file"> + <field name="name">Sydney.jpg</field> + <field name="color" eval="1"/> + <field name="directory" ref="muk_dms.directory_06_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/image01.jpg"/> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_01_demo'), ref('muk_dms.tag_05_demo')])]" /> + </record> + + <record id="file_02_demo" model="muk_dms.file"> + <field name="name">Logo_01.jpg</field> + <field name="color" eval="1"/> + <field name="directory" ref="muk_dms.directory_07_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/image02.jpg"/> + </record> + + <record id="file_03_demo" model="muk_dms.file"> + <field name="name">Logo_02.jpg</field> + <field name="color" eval="1"/> + <field name="directory" ref="muk_dms.directory_07_demo" /> + <field name="category" ref="muk_dms.category_02_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/image03.jpg"/> + </record> + + <record id="file_04_demo" model="muk_dms.file"> + <field name="name">Logo_03.jpg</field> + <field name="color" eval="1"/> + <field name="directory" ref="muk_dms.directory_07_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/image04.jpg"/> + </record> + + <record id="file_05_demo" model="muk_dms.file"> + <field name="name">Logo.svg</field> + <field name="color" eval="1"/> + <field name="directory" ref="muk_dms.directory_10_demo" /> + <field name="category" ref="muk_dms.category_03_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/vector.svg"/> + </record> + + <record id="file_06_demo" model="muk_dms.file"> + <field name="name">Loop_01.wav</field> + <field name="color" eval="1"/> + <field name="directory" ref="muk_dms.directory_09_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/audio01.wav"/> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_01_demo'), ref('muk_dms.tag_03_demo')])]" /> + </record> + + <record id="file_07_demo" model="muk_dms.file"> + <field name="name">Loop_02.wav</field> + <field name="color" eval="2"/> + <field name="directory" ref="muk_dms.directory_09_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/audio02.wav"/> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_01_demo'), ref('muk_dms.tag_03_demo')])]" /> + </record> + + <record id="file_08_demo" model="muk_dms.file"> + <field name="name">Loop_03.mp3</field> + <field name="color" eval="2"/> + <field name="directory" ref="muk_dms.directory_09_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/audio03.mp3"/> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_01_demo'), ref('muk_dms.tag_03_demo')])]" /> + </record> + + <record id="file_09_demo" model="muk_dms.file"> + <field name="name">Loop_04.mp3</field> + <field name="color" eval="2"/> + <field name="directory" ref="muk_dms.directory_09_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/audio04.mp3"/> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_01_demo'), ref('muk_dms.tag_03_demo')])]" /> + </record> + + <record id="file_10_demo" model="muk_dms.file"> + <field name="name">Video.mp4</field> + <field name="color" eval="3"/> + <field name="directory" ref="muk_dms.directory_08_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/video.mp4"/> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_02_demo'), ref('muk_dms.tag_03_demo')])]" /> + </record> + + <record id="file_11_demo" model="muk_dms.file"> + <field name="name">Mail_01.eml</field> + <field name="color" eval="4"/> + <field name="directory" ref="muk_dms.directory_11_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/mail01.eml"/> + <field name="category" ref="muk_dms.category_03_demo" /> + </record> + + <record id="file_12_demo" model="muk_dms.file"> + <field name="name">Mail_02.eml</field> + <field name="color" eval="4"/> + <field name="directory" ref="muk_dms.directory_11_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/mail02.eml"/> + </record> + + <record id="file_13_demo" model="muk_dms.file"> + <field name="name">Text.txt</field> + <field name="directory" ref="muk_dms.directory_12_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/text.txt"/> + <field name="tags" eval="[(6, 0, [ref('muk_dms.tag_05_demo'), ref('muk_dms.tag_06_demo')])]" /> + </record> + + <record id="file_14_demo" model="muk_dms.file"> + <field name="name">ASPECTJ.aj</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code01.aj"/> + <field name="category" ref="muk_dms.category_01_demo" /> + </record> + + <record id="file_15_demo" model="muk_dms.file"> + <field name="name">Bash.sh</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code02.sh"/> + </record> + + <record id="file_16_demo" model="muk_dms.file"> + <field name="name">C.c</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code03.c"/> + </record> + + <record id="file_17_demo" model="muk_dms.file"> + <field name="name">Cplusplus.cc</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code04.cc"/> + </record> + + <record id="file_18_demo" model="muk_dms.file"> + <field name="name">CSharp.cs</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code05.cs"/> + </record> + + <record id="file_19_demo" model="muk_dms.file"> + <field name="name">COBOL.cbl</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code06.cbl"/> + </record> + + <record id="file_20_demo" model="muk_dms.file"> + <field name="name">CoffeeScript.coffee</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code07.coffee"/> + </record> + + <record id="file_21_demo" model="muk_dms.file"> + <field name="name">Fortran.f</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code08.f"/> + </record> + + <record id="file_22_demo" model="muk_dms.file"> + <field name="name">Go.go</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code09.go"/> + </record> + + <record id="file_23_demo" model="muk_dms.file"> + <field name="name">Groovy.groovy</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code10.groovy"/> + </record> + + <record id="file_24_demo" model="muk_dms.file"> + <field name="name">Java.java</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code11.java"/> + </record> + + <record id="file_25_demo" model="muk_dms.file"> + <field name="name">Scala.sc</field> + <field name="directory" ref="muk_dms.directory_13_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/code12.sc"/> + </record> + + <record id="file_26_demo" model="muk_dms.file"> + <field name="name">Sample.md</field> + <field name="directory" ref="muk_dms.directory_04_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/markdown.md"/> + </record> + + <record id="file_27_demo" model="muk_dms.file"> + <field name="name">Document_05.pdf</field> + <field name="color" eval="1"/> + <field name="directory" ref="muk_dms.directory_12_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/document01.pdf"/> + </record> + + <record id="file_28_demo" model="muk_dms.file"> + <field name="name">Slide_01.odp</field> + <field name="directory" ref="muk_dms.directory_14_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/slide01.odp"/> + </record> + + <record id="file_29_demo" model="muk_dms.file"> + <field name="name">Slide_02.ppt</field> + <field name="directory" ref="muk_dms.directory_14_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/slide02.ppt"/> + </record> + + <record id="file_30_demo" model="muk_dms.file"> + <field name="name">Document_02.doc</field> + <field name="color" eval="5"/> + <field name="directory" ref="muk_dms.directory_12_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/document02.doc"/> + </record> + + <record id="file_31_demo" model="muk_dms.file"> + <field name="name">Document_03.odt</field> + <field name="color" eval="5"/> + <field name="directory" ref="muk_dms.directory_12_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/document03.odt"/> + </record> + + <record id="file_32_demo" model="muk_dms.file"> + <field name="name">Sheet_01.xls</field> + <field name="color" eval="6"/> + <field name="directory" ref="muk_dms.directory_03_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/sheet01.xls"/> + </record> + + <record id="file_33_demo" model="muk_dms.file"> + <field name="name">Sheet_02.csv</field> + <field name="color" eval="6"/> + <field name="directory" ref="muk_dms.directory_03_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/sheet02.csv"/> + </record> + + <record id="file_34_demo" model="muk_dms.file"> + <field name="name">Sheet_03.ods</field> + <field name="color" eval="6"/> + <field name="directory" ref="muk_dms.directory_03_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/sheet03.ods"/> + </record> + + <record id="file_35_demo" model="muk_dms.file"> + <field name="name">Document_04.rtf</field> + <field name="color" eval="6"/> + <field name="directory" ref="muk_dms.directory_03_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/document04.rtf"/> + </record> + + <record id="file_36_demo" model="muk_dms.file"> + <field name="name">Text.rst</field> + <field name="color" eval="3"/> + <field name="directory" ref="muk_dms.directory_02_demo" /> + <field name="content" type="base64" file="muk_dms/demo/data/text.rst"/> + </record> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_dms/demo/res_users.xml b/odex-event/muk_dms/demo/res_users.xml new file mode 100644 index 000000000..db3873e8e --- /dev/null +++ b/odex-event/muk_dms/demo/res_users.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo noupdate="1"> + + <record id="base.user_demo" model="res.users"> + <field eval="[(4, ref('muk_dms.group_dms_user'))]" name="groups_id"/> + </record> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_dms/demo/storage.xml b/odex-event/muk_dms/demo/storage.xml new file mode 100644 index 000000000..07cb8becb --- /dev/null +++ b/odex-event/muk_dms/demo/storage.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo noupdate="1"> + + <record id="storage_demo" model="muk_dms.storage"> + <field name="name">Documents Storage</field> + <field name="save_type">database</field> + </record> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_dms/demo/tag.xml b/odex-event/muk_dms/demo/tag.xml new file mode 100644 index 000000000..ccaebb130 --- /dev/null +++ b/odex-event/muk_dms/demo/tag.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo noupdate="1"> + + <record id="tag_01_demo" model="muk_dms.tag"> + <field name="name">Customer</field> + <field name="color">1</field> + <field name="category" ref="category_03_demo" /> + </record> + + <record id="tag_02_demo" model="muk_dms.tag"> + <field name="name">Partner</field> + <field name="color">2</field> + <field name="category" ref="category_03_demo" /> + </record> + + <record id="tag_03_demo" model="muk_dms.tag"> + <field name="name">Project</field> + <field name="color">3</field> + <field name="category" ref="category_04_demo" /> + </record> + + <record id="tag_04_demo" model="muk_dms.tag"> + <field name="name">Sales</field> + <field name="color">4</field> + <field name="category" ref="category_05_demo" /> + </record> + + <record id="tag_05_demo" model="muk_dms.tag"> + <field name="name">Portal</field> + <field name="color">5</field> + <field name="category" ref="category_05_demo" /> + </record> + + <record id="tag_06_demo" model="muk_dms.tag"> + <field name="name">Apps</field> + <field name="color">6</field> + <field name="category" ref="category_05_demo" /> + </record> + + <record id="tag_07_demo" model="muk_dms.tag"> + <field name="name">Accounting</field> + <field name="color">7</field> + <field name="category" ref="category_05_demo" /> + </record> + + <record id="tag_08_demo" model="muk_dms.tag"> + <field name="name">Customer Invoice</field> + <field name="color">8</field> + <field name="category" ref="category_05_demo" /> + </record> + + <record id="tag_09_demo" model="muk_dms.tag"> + <field name="name">Vendor Bill</field> + <field name="color">9</field> + <field name="category" ref="category_05_demo" /> + </record> + + <record id="tag_10_demo" model="muk_dms.tag"> + <field name="name">Product</field> + <field name="color">10</field> + <field name="category" ref="category_06_demo" /> + </record> + + <record id="tag_11_demo" model="muk_dms.tag"> + <field name="name">Contract</field> + <field name="color">11</field> + <field name="category" ref="category_01_demo" /> + </record> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_dms/doc/changelog.rst b/odex-event/muk_dms/doc/changelog.rst new file mode 100644 index 000000000..48b69e6d3 --- /dev/null +++ b/odex-event/muk_dms/doc/changelog.rst @@ -0,0 +1,62 @@ +`2.7.0` +------- + +- Added Kanban Search Panel + +`2.6.0` +------- + +- Added Kanban Mega Menu + +`2.5.0` +------- + +- Added Onboarding + +`2.4.0` +------- + +- Added migration view + +`2.3.0` +------- + +- Restructuring + +`2.2.0` +------- + +- Moved document view to a separate module + +`2.1.0` +------- + +- Added small and medium thumbnail size fields + +`2.0.0` +------- + +- Migrated to Python 3 +- Updated dependencies +- Updated document views and widgets +- Updated database models (no automatic migration!) + +`1.3.0` +------- + +- Updated dependencies + +`1.2.0` +------- + +- Updated database models + +`1.1.0` +------- + +- Updated database models + +`1.0.0` +------- + +- Init version diff --git a/odex-event/muk_dms/doc/index.rst b/odex-event/muk_dms/doc/index.rst new file mode 100644 index 000000000..dc2b70be9 --- /dev/null +++ b/odex-event/muk_dms/doc/index.rst @@ -0,0 +1,123 @@ +============================== +MuK Document Management System +============================== + +MuK Documents is a module to create, manage and view files directly within Odoo. +In addition to views for files and folders, it offers its own all in one view +to make working with documents easier. This module is only the basis for an +entire ecosystem of apps that extend and seamlessly integrate with the document +management system. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI <https://pypi.org/project/pip/>`_). + +To install our modules using the package manager make sure +`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo<version>-addon-<module_name>`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_ +and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +To configure this module, you need to: + +#. Go to *Documents -> Configuration -> Storages*. +#. Create a new document setting. +#. Afterwards go to *Documents -> Directories*. +#. Create a new directory, mark it as root and select the previously created setting. + +Usage +============= + +The best way to manage the documents is to switch to the Documents view. Existing +documents can be managed there and new documents can be created. + +Credits +======= + +Contributors +------------ + +* Mathias Markl <mathias.markl@mukit.at> + +Images +------------ + +Some pictures are based on or inspired by: + +* `Roundicons <https://www.flaticon.com/authors/roundicons>`_ +* `Smashicons <https://www.flaticon.com/authors/smashicons>`_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_dms/i18n/de.po b/odex-event/muk_dms/i18n/de.po new file mode 100644 index 000000000..2532f0a28 --- /dev/null +++ b/odex-event/muk_dms/i18n/de.po @@ -0,0 +1,1512 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190128\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-05 18:29+0000\n" +"PO-Revision-Date: 2019-06-25 11:04+0000\n" +"Last-Translator: MuK IT <admin@mukit.at>\n" +"Language-Team: German <http://weblate.mukit.at/projects/dms-12/muk_dms/de/>\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.7\n" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +msgid "/muk_dms/static/src/img/banner/documents_onboarding_directory.png" +msgstr "/muk_dms/static/src/img/banner/documents_onboarding_directory.png" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "/muk_dms/static/src/img/banner/documents_onboarding_file.png" +msgstr "/muk_dms/static/src/img/banner/documents_onboarding_file.png" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-download\"/> Download" +msgstr "<i class=\"fa fa-download\"/> Herunterladen" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-external-link\"/> Open" +msgstr "<i class=\"fa fa-external-link\"/> Öffnen" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-lock\"/> Lock" +msgstr "<i class=\"fa fa-lock\"/> Sperren" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-pencil-square-o\"/> Edit" +msgstr "<i class=\"fa fa-pencil-square-o\"/> Bearbeiten" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-trash-o\"/> Delete" +msgstr "<i class=\"fa fa-trash-o\"/> Löschen" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-unlock-alt\"/> Unlock" +msgstr "<i class=\"fa fa-unlock-alt\"/> Entsperren" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<span class=\"o_form_label\">File Extensions</span>" +msgstr "<span class=\"o_form_label\">Dateiendungen</span>" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<span class=\"o_form_label\">File Size</span>" +msgstr "<span class=\"o_form_label\">Dateigröße</span>" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<strong>Save</strong> this page and come back here to set up the feature." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "<strong>This file is locked!</strong>" +msgstr "<strong>Diese Datei ist gesperrt!</strong>" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:332 +#, python-format +msgid "A directory can't be a root and have a parent directory." +msgstr "Ein Wurzelverzeichnis kann kein Elternelement besitzen." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:330 +#, python-format +msgid "A directory has to have a parent directory." +msgstr "Ein Verzeichnis muss ein übergeordnetes Verzeichnis haben." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:350 +#, python-format +msgid "A directory with the same name already exists." +msgstr "Ein Verzeichnis mit dem gleichen Namen existiert bereits." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:414 +#, python-format +msgid "A file is locked, the folder cannot be deleted." +msgstr "Eine Datei ist gesperrt, der Ordner kann nicht gelöscht werden." + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:402 +#, python-format +msgid "A file with the same name already exists." +msgstr "Eine Datei mit dem gleichen Namen existiert bereits." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:328 +#, python-format +msgid "A root directory has to have a root storage." +msgstr "Ein Root-Verzeichnis muss einen Root-Speicher haben." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_access +msgid "Access Control" +msgstr "Zugriffskontrolle" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Access Information" +msgstr "Zugriffsinformationen" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_07_demo +msgid "Accounting" +msgstr "Buchhaltung" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Activates a file trash to restore deleted files" +msgstr "Aktiviert einen Papierkorb, um gelöschte Dateien wiederherzustellen" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_trash +msgid "Activates a file trash to restore deleted files." +msgstr "Aktiviert einen Papierkorb, um gelöschte Dateien wiederherzustellen." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Activates the preview function on files" +msgstr "Aktiviert die Vorschaufunktion für Dateien" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_preview +msgid "Activates the preview function on files." +msgstr "Aktiviert die Vorschaufunktion für Dateien." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__active +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__active +msgid "Active" +msgstr "Aktiv" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directory +msgid "Add a new Directory." +msgstr "Füge ein neues Verzeichnis hinzu." + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "Fügt eine neue Datei hinzu." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Adds support for messages and activities on directories and files" +msgstr "" +"Aktiviert Unterstützung für Nachrichten und Aktivitäten in Verzeichnissen " +"und Dateien" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_mail +msgid "Adds support for messages and activities on directories and files." +msgstr "" +"Aktiviert Unterstützung für Nachrichten und Aktivitäten in Verzeichnissen " +"und Dateien." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_search +msgid "All" +msgstr "Alle" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "All Files" +msgstr "Alle Dateien" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_rules +msgid "Allows attachments to be automatically placed in the right directory." +msgstr "" +"Ermöglicht es, Anhänge automatisch in das richtige Verzeichnis zu " +"verschieben." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows attachments to be stored inside of Documents" +msgstr "" +"Ermöglicht das Speichern von Anhängen innerhalb der Dokumentenverwaltung" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment +msgid "Allows attachments to be stored inside of Documents." +msgstr "" +"Ermöglicht das Speichern von Anhängen innerhalb der Dokumentenverwaltung." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_wizard +msgid "Allows documents to be used as attachments." +msgstr "Ermöglicht die Verwendung von Dokumenten als Anhang." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_export +msgid "Allows the conversion of existing files." +msgstr "Ermöglicht die Konvertierung vorhandener Dateien." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows the creation of groups to define access rights" +msgstr "" +"Ermöglicht die Erstellung von Gruppen zur Definition von Zugriffsrechten" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_access +msgid "Allows the creation of groups to define access rights." +msgstr "" +"Ermöglicht die Erstellung von Gruppen zur Definition von Zugriffsrechten." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_thumbnails +msgid "Allows the creation of thumbnails for files." +msgstr "Ermöglicht die Erstellung von Miniaturansichten für Dateien." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_widget +msgid "Allows the user to use DMS documents as input for any binary field." +msgstr "" +"Ermöglicht es dem Benutzer, DMS-Dokumente als Eingabe für jedes Binärfeld zu " +"verwenden." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_archive +msgid "Allows to download directories as a archive file." +msgstr "Ermöglicht das Herunterladen von Verzeichnissen als Archivdatei." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows to placed attachments in the right directory" +msgstr "Ermöglicht das Platzieren von Anhängen im rechten Verzeichnis" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows you to create rule templates to create attachment rules" +msgstr "" +"Ermöglicht es Ihnen, Regelvorlagen zu erstellen, um Anlagenregeln zu " +"erstellen" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_automation +msgid "Allows you to create rule templates to create attachment rules." +msgstr "" +"Ermöglicht es Ihnen, Regelvorlagen zu erstellen, um Anlagenregeln zu " +"erstellen." + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_06_demo +msgid "Apps" +msgstr "Apps" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__active +msgid "Archived" +msgstr "Archiviert" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_automation +msgid "Attachment Rule Automation" +msgstr "Automatisierung von Anlagenregeln" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_wizard +msgid "Attachment Wizard" +msgstr "Assistent für Anhänge" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Attachments" +msgstr "Dateianhänge" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_thumbnails +msgid "Automatic Thumbnails" +msgstr "Automatische Miniaturansichten" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_widget +msgid "Binary Widget Support" +msgstr "Binary Widget Unterstützung" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_new_form +msgid "Cancel" +msgstr "Abbrechen" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:46 +#: model:ir.actions.act_window,name:muk_dms.action_dms_category +#: model:ir.ui.menu,name:muk_dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_tree +#, python-format +msgid "Categories" +msgstr "Kategorien" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "Kategorien werden verwendet, um Dokumente zu kategorisieren." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__category +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__category +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Category" +msgstr "Kategorie" + +#. module: muk_dms +#: sql_constraint:muk_dms.category:0 +msgid "Category name already exists!" +msgstr "Der Kategoriename existiert bereits!" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "Checksumme/SHA1" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__child_categories +msgid "Child Categories" +msgstr "Kinderkategorien" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "Klicken Sie hier, um ein neues Verzeichnis hinzuzufügen." + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "Klicken Sie hier, um eine neue Datei hinzuzufügen." + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "Klicken Sie hier, um ein neues Tag zu erstellen." + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Closed" +msgstr "Geschlossen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__color +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__color +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Color" +msgstr "Farbe" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__color +msgid "Color Index" +msgstr "Farbkennzeichnung" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_res_company +msgid "Companies" +msgstr "Unternehmen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__company +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__company +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__company +msgid "Company" +msgstr "Unternehmen" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_res_config_settings +msgid "Config Settings" +msgstr "Konfiguration" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config +msgid "Configuration" +msgstr "Konfiguration" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__content +msgid "Content" +msgstr "Inhalt" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__content_binary +msgid "Content Binary" +msgstr "Inhalt Binär" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_11_demo +msgid "Contract" +msgstr "Vertrag" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_03_demo +msgid "Contracts" +msgstr "Verträge" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__count_storage_directories +msgid "Count Directories" +msgstr "Zählverzeichnisse" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_elements +msgid "Count Elements" +msgstr "Elemente zählen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__count_storage_files +msgid "Count Files" +msgstr "Dateien zählen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_directories +msgid "Count Subdirectories" +msgstr "Unterverzeichnisse zählen" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_new_form +msgid "Create" +msgstr "Erstellen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_create +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_create +msgid "Create Access" +msgstr "Objekterzeugung erlauben" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +msgid "Create Directory" +msgstr "Verzeichnis erstellen" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +msgid "Create Storage" +msgstr "Speicher anlegen" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_category +msgid "Create a new Category." +msgstr "Erstellen Sie eine neue Kategorie." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +msgid "Create a new Document Storage." +msgstr "Erstellen Sie einen neuen Dokumentenspeicher." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +msgid "Create a new Root Directory." +msgstr "Erstellen Sie ein neues Stammverzeichnis." + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "Erstellen Sie ein neues Speicherobjekt." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Creation Date" +msgstr "Erzeugt am" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__save_type +msgid "Current Save Type" +msgstr "Aktueller Speichertyp" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail +msgid "Custom Thumbnail" +msgstr "Benutzerdefinierte Miniaturansicht" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_01_demo +msgid "Customer" +msgstr "Kunde" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_08_demo +msgid "Customer Invoice" +msgstr "Kundenrechnung" + +#. module: muk_dms +#: code:addons/muk_dms/models/storage.py:42 +#: selection:muk_dms.storage,save_type:0 +#, python-format +msgid "Database" +msgstr "Datenbank" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "Verbotene Dateierweiterungen definieren" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "Definieren Sie die maximale Upload-Größe einer Datei in MB" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "Definiert eine Liste der verbotenen Dateiendungen. (Beispiel:'exe,msi')" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "Definiert die maximale Upload-Größe in MB. Standard (25MB)" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_unlink +msgid "Delete Access" +msgstr "Zugang löschen" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:37 +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:muk_dms.action_dms_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__directories +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__storage_directories +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__directories +#: model:ir.ui.menu,name:muk_dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +#, python-format +msgid "Directories" +msgstr "Verzeichnisse" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directory +msgid "Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" +"Verzeichnisse können verwendet werden, um zu strukturieren und zu " +"organisieren._x000D_\n" +"\t\t\tDateien direkt in Odoo." + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__directory +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Directory" +msgstr "Verzeichnis" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_category +msgid "Document Category" +msgstr "Dokumenttyp" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_tag +msgid "Document Tag" +msgstr "Dokumenten-Tag" + +#. module: muk_dms +#: model:ir.module.category,name:muk_dms.category_dms_security +#: model:ir.ui.menu,name:muk_dms.main_menu_muk_dms +msgid "Documents" +msgstr "Dokumente" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "Dokumente Onboarding Verzeichnisstatus" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "Dokumente Onboarding Dateistatus" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "Dokumente Onboarding-Status" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "Dokumente Onboarding Speicherzustand" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment +msgid "Documents Storage Location" +msgstr "Dokumente Speicherort" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_rules +msgid "Documents Storage Rules" +msgstr "Aufbewahrungsregeln für Dokumente" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Done" +msgstr "Erledigt" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_archive +msgid "Download Directories" +msgstr "Verzeichnisse herunterladen" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "Dropdown menu" +msgstr "Dropdownmenu" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_lock_editor +msgid "Editor" +msgstr "Redakteur" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Elements" +msgstr "Elemente" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables a new save option to store files into a filestore" +msgstr "" +"Ermöglicht eine neue Speicheroption zum Speichern von Dateien in einem " +"Filestore" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_file +msgid "Enables a new save option to store files into a filestore." +msgstr "" +"Ermöglicht eine neue Speicheroption zum Speichern von Dateien in einem " +"Filestore." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables a new save option to store files into large objects" +msgstr "" +"Ermöglicht eine neue Speicheroption zum Speichern von Dateien in großen " +"Objekten" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_lobject +msgid "Enables a new save option to store files into large objects." +msgstr "" +"Ermöglicht eine neue Speicheroption zum Speichern von Dateien in großen " +"Objekten." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_finder +msgid "Enables the Document Finder." +msgstr "Aktiviert den Document Finder." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables version control for files" +msgstr "Ermöglicht Versionskontrolle für Dateien" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_version +msgid "Enables version control for files." +msgstr "Ermöglicht die Versionskontrolle von Dateien." + +#. module: muk_dms +#: code:addons/muk_dms/models/category.py:123 +#, python-format +msgid "Error! You cannot create recursive categories." +msgstr "Fehler! Sie können keine rekursiven Kategorien erstellen." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:321 +#, python-format +msgid "Error! You cannot create recursive directories." +msgstr "Fehler! Sie können keine rekursiven Verzeichnisse erstellen." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_export +msgid "Export Files" +msgstr "Dateien exportieren" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__extension +msgid "Extension" +msgstr "Erweiterung" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__documents_forbidden_extensions +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Extensions" +msgstr "Erweiterungen" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_05_demo +msgid "External" +msgstr "Extern" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "File" +msgstr "Datei" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_preview +msgid "File Preview" +msgstr "Dateivorschau" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "File Upload" +msgstr "Datei-Upload" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__name +msgid "Filename" +msgstr "Dateiname" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_file +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_migration +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__storage_files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__files +#: model:ir.ui.menu,name:muk_dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Files" +msgstr "Dateien" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "Dateien werden verwendet, um Inhalte direkt in Odoo zu speichern." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_file +msgid "Filestore Storage" +msgstr "Filestore Speicher" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_finder +msgid "Finder" +msgstr "Finder" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_settings_general +#: model:ir.ui.menu,name:muk_dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_search +msgid "Group By" +msgstr "Gruppieren nach" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-Routing" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_02_demo +msgid "Human Resource" +msgstr "Personalwesen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__id +msgid "ID" +msgstr "ID" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" +"Wenn eine Datei auf archiviert gesetzt ist, wird sie nicht angezeigt, " +"existiert aber noch." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__company +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__company +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__company +msgid "If set, directories and files will only be available for the selected company." +msgstr "" +"Wenn gesetzt, sind Verzeichnisse und Dateien nur für das ausgewählte " +"Unternehmen verfügbar." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__is_hidden +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__is_hidden +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "Zeigt an, ob Verzeichnisse und Dateien standardmäßig ausgeblendet sind." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__is_root_directory +msgid "Indicates if the directory is a root directory. A root directory has a settings object,\n" +" while a directory with a set parent inherits the settings form its parent." +msgstr "" +"Zeigt an, ob es sich bei dem Verzeichnis um ein Stammverzeichnis handelt. " +"Ein Stammverzeichnis hat ein Einstellungsobjekt,_x000D_\n" +" während ein Verzeichnis mit einem gesetzten Elternteil die " +"Einstellungen von seinem Elternteil übernimmt." + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_01_demo +msgid "Internal" +msgstr "Intern" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "Intern / Personalwesen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "Ist Wurzelverzeichnis" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Just done" +msgstr "Gerade fertig" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_lobject +msgid "Large Objects Storage" +msgstr "Speicherung großer Objekte" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag____last_update +msgid "Last Modified on" +msgstr "Zuletzt geändert am" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert durch" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Lock" +msgstr "Sperren" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_locked +msgid "Locked" +msgstr "Gesperrt" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__locked_by +msgid "Locked by" +msgstr "Gesperrt durch" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_mail +msgid "Mail Support" +msgstr "Mail-Support" + +#. module: muk_dms +#: model:res.groups,name:muk_dms.group_dms_manager +msgid "Manager" +msgstr "Manager" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "Manuelle Datei-Migration" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail_medium +msgid "Medium Custom Thumbnail" +msgstr "Mittleres benutzerdefiniertes Miniaturbild" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail_medium +msgid "Medium Thumbnail" +msgstr "Mittleres Miniaturbild" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Meta Information" +msgstr "Meta-Informationen" + +#. module: muk_dms +#: model:ir.actions.server,name:muk_dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "Migrieren" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:221 +#, python-format +msgid "Migrate File %s of %s [ %s ]" +msgstr "Datei migrieren %s von %s [ %s ]" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "Dateien migrieren" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.menu_dms_file_migration +msgid "Migration" +msgstr "Migration" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__migration +msgid "Migration Status" +msgstr "Migrationsstatus" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Modification Date" +msgstr "Änderungsdatum" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +msgid "My Directories" +msgstr "Meine Verzeichnisse" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "My Documents" +msgstr "Meine Dokumente" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "My Files" +msgstr "Meine Dateien" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__name +msgid "Name" +msgstr "Name" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_directory_new +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_new +msgid "New Root Directory" +msgstr "Neues Stammverzeichnis" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_storage_new +msgid "New Storage" +msgstr "Neuer Speicher" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_06_demo +msgid "News" +msgstr "Neuigkeiten" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js:92 +#, python-format +msgid "No Directory has been selected!" +msgstr "Es wurde kein Verzeichnis ausgewählt!" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Not done" +msgstr "Nicht erledigt" + +#. module: muk_dms +#: code:addons/muk_dms/models/storage.py:99 +#, python-format +msgid "Only managers can execute this action." +msgstr "Nur Manager können diese Aktion ausführen." + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config_organizing +msgid "Organizing" +msgstr "Organisieren" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_category +msgid "Parent Category" +msgstr "Oberkategorie" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_directory +msgid "Parent Directory" +msgstr "Übergeordnetes Verzeichnis" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path +msgid "Parent Path" +msgstr "Übergeordneter Pfad" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_02_demo +msgid "Partner" +msgstr "Partner" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_tree +msgid "Path" +msgstr "Pfad" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path_json +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path_json +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__path_json +msgid "Path Json" +msgstr "Pfad Json" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path_names +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path_names +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__path_names +msgid "Path Names" +msgstr "Pfadnamen" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_05_demo +msgid "Portal" +msgstr "Portal" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_10_demo +msgid "Product" +msgstr "Produkt" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_03_demo +msgid "Project" +msgstr "Projekt" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_read +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_read +msgid "Read Access" +msgstr "Leserecht" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_trash +msgid "Restore Files" +msgstr "Dateien wiederherstellen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__root_directories +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Root Directories" +msgstr "Wurzelverzeichnisse" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__root_storage +msgid "Root Storage" +msgstr "Wurzelspeicher" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_04_demo +msgid "Sales" +msgstr "Umsatz" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_search +msgid "Save Type" +msgstr "Speichertyp" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__size +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__size +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__documents_binary_max_size +msgid "Size" +msgstr "Größe" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail_small +msgid "Small Custom Thumbnail" +msgstr "Kleines benutzerdefiniertes Miniaturbild" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail_small +msgid "Small Thumbnail" +msgstr "Kleines Miniaturbild" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:28 +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__starred +#, python-format +msgid "Starred" +msgstr "Sternenhimmel" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +msgid "Starred Directories" +msgstr "Sternenverzeichnisse" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__user_stars +msgid "Stars" +msgstr "Sterne" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__storage +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Storage" +msgstr "Lagerung" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__is_hidden +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_hidden +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "Lagerung ist versteckt" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_storage +#: model:ir.ui.menu,name:muk_dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_tree +msgid "Storages" +msgstr "Lager" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "Speicher werden verwendet, um Ihre Dokumente zu konfigurieren." + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__child_directories +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "Unterverzeichnisse" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config_system +msgid "System" +msgstr "System" + +#. module: muk_dms +#: sql_constraint:muk_dms.tag:0 +msgid "Tag name already exists!" +msgstr "Tag-Name existiert bereits!" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:55 +#: model:ir.actions.act_window,name:muk_dms.action_dms_tag +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__tags +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__tags +#: model:ir.ui.menu,name:muk_dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_tag_tree +#, python-format +msgid "Tags" +msgstr "Stichwörter" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "Tags werden verwendet, um Dokumente zu kategorisieren." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Tags..." +msgstr "Tags....." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Technical Information" +msgstr "Technische Informationen" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "Das \"Aktiv\" Feld erlaubt das Verstecken der Kategorie ohne diese zu löschen." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "" +"Das aktive Feld ermöglicht es Ihnen, das Tag auszublenden, ohne es zu " +"entfernen." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "The configuration is done!" +msgstr "Die Konfiguration ist abgeschlossen!" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:420 +#, python-format +msgid "The directory has to have the permission to create files." +msgstr "Das Verzeichnis muss die Berechtigung haben, Dateien zu erstellen." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:344 +#, python-format +msgid "The directory name is invalid." +msgstr "Der Verzeichnisname ist ungültig." + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:408 +#, python-format +msgid "The file has a forbidden file extension." +msgstr "Die Datei hat eine verbotene Dateiendung." + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:399 +#, python-format +msgid "The file name is invalid." +msgstr "Der Dateiname ist ungültig." + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:414 +#, python-format +msgid "The maximum upload size is %s MB)." +msgstr "Die maximale Upload-Größe beträgt %s MB)." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:338 +#, python-format +msgid "The parent directory has to have the permission to create directories." +msgstr "" +"Das übergeordnete Verzeichnis muss die Berechtigung zum Erstellen von " +"Verzeichnissen haben." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__save_type +msgid "The save type is used to determine how a file is saved by the system. If you change \n" +" this setting, you can migrate existing files manually by triggering the action." +msgstr "" +"Der Speichertyp wird verwendet, um festzulegen, wie eine Datei vom System " +"gespeichert wird. Wenn du dich änderst _x000D_\n" +" Mit dieser Einstellung können Sie bestehende Dateien manuell " +"migrieren, indem Sie die Aktion auslösen." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "Thumbnail" +msgstr "Vorschaubild" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_mixins_thumbnail +msgid "Thumbnail Mixin" +msgstr "Miniaturansicht Mixin" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "Gesamte Elemente" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_files +msgid "Total Files" +msgstr "Gesamtzahl der Dateien" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "Gesamtzahl der Unterverzeichnisse" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_04_demo +msgid "Traveling" +msgstr "Reisen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__mimetype +msgid "Type" +msgstr "Typ" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Unlock" +msgstr "Freischalten" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js:92 +#, python-format +msgid "Upload Error" +msgstr "Upload-Fehler" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "Upload File" +msgstr "Datei hochladen" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/mixins/file_upload.js:63 +#, python-format +msgid "Upload Files" +msgstr "Dateien hochladen" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "Upload your first File." +msgstr "Lade deine erste Datei hoch." + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/mixins/file_upload.js:64 +#, python-format +msgid "Uploading..." +msgstr "Hochladen....." + +#. module: muk_dms +#: model:res.groups,name:muk_dms.group_dms_user +msgid "User" +msgstr "Benutzer" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_09_demo +msgid "Vendor Bill" +msgstr "Lieferantenrechnung" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_version +msgid "Versioning" +msgstr "Versionierung" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Views" +msgstr "Ansichten" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_write +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_write +msgid "Write Access" +msgstr "Schreibrechte" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "action_close_documents_onboarding" +msgstr "action_close_dokumente_onboarding" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "exe,msi" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "o_onboarding_blue" +msgstr "o_onboarding_blau_blau" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +msgid "o_onboarding_orange" +msgstr "o_onboarding_orange" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "res.company" +msgstr "res.company" diff --git a/odex-event/muk_dms/i18n/es.po b/odex-event/muk_dms/i18n/es.po new file mode 100644 index 000000000..840a0bee5 --- /dev/null +++ b/odex-event/muk_dms/i18n/es.po @@ -0,0 +1,1465 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190128\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-05 18:29+0000\n" +"PO-Revision-Date: 2019-06-25 08:16+0000\n" +"Last-Translator: MuK IT <admin@mukit.at>\n" +"Language-Team: Spanish <http://weblate.mukit.at/projects/dms-12/muk_dms/es/>" +"\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.7\n" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +msgid "/muk_dms/static/src/img/banner/documents_onboarding_directory.png" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "/muk_dms/static/src/img/banner/documents_onboarding_file.png" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-download\"/> Download" +msgstr "<i class=\"fa fa-download\"/> Descargar" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-external-link\"/> Open" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-lock\"/> Lock" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-pencil-square-o\"/> Edit" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-trash-o\"/> Delete" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-unlock-alt\"/> Unlock" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<span class=\"o_form_label\">File Extensions</span>" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<span class=\"o_form_label\">File Size</span>" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<strong>Save</strong> this page and come back here to set up the feature." +msgstr "Guarde esa página y regrese aquí para configurar la función." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:332 +#, python-format +msgid "A directory can't be a root and have a parent directory." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:330 +#, python-format +msgid "A directory has to have a parent directory." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:350 +#, python-format +msgid "A directory with the same name already exists." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:414 +#, python-format +msgid "A file is locked, the folder cannot be deleted." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:402 +#, python-format +msgid "A file with the same name already exists." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:328 +#, python-format +msgid "A root directory has to have a root storage." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_access +msgid "Access Control" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Access Information" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_07_demo +msgid "Accounting" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Activates a file trash to restore deleted files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_trash +msgid "Activates a file trash to restore deleted files." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Activates the preview function on files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_preview +msgid "Activates the preview function on files." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__active +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__active +msgid "Active" +msgstr "Activo" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directory +msgid "Add a new Directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Adds support for messages and activities on directories and files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_mail +msgid "Adds support for messages and activities on directories and files." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_search +msgid "All" +msgstr "Todos" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "All Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_rules +msgid "Allows attachments to be automatically placed in the right directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows attachments to be stored inside of Documents" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment +msgid "Allows attachments to be stored inside of Documents." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_wizard +msgid "Allows documents to be used as attachments." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_export +msgid "Allows the conversion of existing files." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows the creation of groups to define access rights" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_access +msgid "Allows the creation of groups to define access rights." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_thumbnails +msgid "Allows the creation of thumbnails for files." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_widget +msgid "Allows the user to use DMS documents as input for any binary field." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_archive +msgid "Allows to download directories as a archive file." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows to placed attachments in the right directory" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows you to create rule templates to create attachment rules" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_automation +msgid "Allows you to create rule templates to create attachment rules." +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_06_demo +msgid "Apps" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__active +msgid "Archived" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_automation +msgid "Attachment Rule Automation" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_wizard +msgid "Attachment Wizard" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Attachments" +msgstr "Adjuntos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_thumbnails +msgid "Automatic Thumbnails" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_widget +msgid "Binary Widget Support" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_new_form +msgid "Cancel" +msgstr "Cancelar" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:46 +#: model:ir.actions.act_window,name:muk_dms.action_dms_category +#: model:ir.ui.menu,name:muk_dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_tree +#, python-format +msgid "Categories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__category +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__category +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Category" +msgstr "Categoría" + +#. module: muk_dms +#: sql_constraint:muk_dms.category:0 +msgid "Category name already exists!" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "Suma de verificación/SHA1" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__child_categories +msgid "Child Categories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Closed" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__color +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__color +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Color" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__color +msgid "Color Index" +msgstr "Índice de Colores" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__company +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__company +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__company +msgid "Company" +msgstr "Compañía" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_res_config_settings +msgid "Config Settings" +msgstr "Opciones de Configuración" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config +msgid "Configuration" +msgstr "Configuración" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__content +msgid "Content" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__content_binary +msgid "Content Binary" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_11_demo +msgid "Contract" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_03_demo +msgid "Contracts" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__count_storage_directories +msgid "Count Directories" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_elements +msgid "Count Elements" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__count_storage_files +msgid "Count Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_directories +msgid "Count Subdirectories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_new_form +msgid "Create" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_create +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_create +msgid "Create Access" +msgstr "Acceso para crear" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +msgid "Create Directory" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +msgid "Create Storage" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_category +msgid "Create a new Category." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +msgid "Create a new Document Storage." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +msgid "Create a new Root Directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Creation Date" +msgstr "Fecha de Creación" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__save_type +msgid "Current Save Type" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail +msgid "Custom Thumbnail" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_01_demo +msgid "Customer" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_08_demo +msgid "Customer Invoice" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/storage.py:42 +#: selection:muk_dms.storage,save_type:0 +#, python-format +msgid "Database" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_unlink +msgid "Delete Access" +msgstr "Permiso para eliminar" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:37 +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:muk_dms.action_dms_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__directories +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__storage_directories +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__directories +#: model:ir.ui.menu,name:muk_dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +#, python-format +msgid "Directories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directory +msgid "Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__directory +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Directory" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_category +msgid "Document Category" +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_tag +msgid "Document Tag" +msgstr "" + +#. module: muk_dms +#: model:ir.module.category,name:muk_dms.category_dms_security +#: model:ir.ui.menu,name:muk_dms.main_menu_muk_dms +msgid "Documents" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment +msgid "Documents Storage Location" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_rules +msgid "Documents Storage Rules" +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Done" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_archive +msgid "Download Directories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "Dropdown menu" +msgstr "Menú desplegable" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Elements" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables a new save option to store files into a filestore" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_file +msgid "Enables a new save option to store files into a filestore." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables a new save option to store files into large objects" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_lobject +msgid "Enables a new save option to store files into large objects." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_finder +msgid "Enables the Document Finder." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables version control for files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_version +msgid "Enables version control for files." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/category.py:123 +#, python-format +msgid "Error! You cannot create recursive categories." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:321 +#, python-format +msgid "Error! You cannot create recursive directories." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_export +msgid "Export Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__extension +msgid "Extension" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__documents_forbidden_extensions +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Extensions" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_05_demo +msgid "External" +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "File" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_preview +msgid "File Preview" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "File Upload" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__name +msgid "Filename" +msgstr "Nombre de archivo" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_file +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_migration +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__storage_files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__files +#: model:ir.ui.menu,name:muk_dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Files" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_file +msgid "Filestore Storage" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_finder +msgid "Finder" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_settings_general +#: model:ir.ui.menu,name:muk_dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Opciones Generales" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_02_demo +msgid "Human Resource" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__id +msgid "ID" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__company +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__company +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__company +msgid "If set, directories and files will only be available for the selected company." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__is_hidden +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__is_hidden +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__is_root_directory +msgid "Indicates if the directory is a root directory. A root directory has a settings object,\n" +" while a directory with a set parent inherits the settings form its parent." +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_01_demo +msgid "Internal" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Just done" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_lobject +msgid "Large Objects Storage" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Lock" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_locked +msgid "Locked" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__locked_by +msgid "Locked by" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_mail +msgid "Mail Support" +msgstr "" + +#. module: muk_dms +#: model:res.groups,name:muk_dms.group_dms_manager +msgid "Manager" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail_medium +msgid "Medium Custom Thumbnail" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail_medium +msgid "Medium Thumbnail" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Meta Information" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.server,name:muk_dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:221 +#, python-format +msgid "Migrate File %s of %s [ %s ]" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.menu_dms_file_migration +msgid "Migration" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__migration +msgid "Migration Status" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Modification Date" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +msgid "My Directories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "My Documents" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "My Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__name +msgid "Name" +msgstr "Nombre" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_directory_new +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_new +msgid "New Root Directory" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_storage_new +msgid "New Storage" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_06_demo +msgid "News" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js:92 +#, python-format +msgid "No Directory has been selected!" +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Not done" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/storage.py:99 +#, python-format +msgid "Only managers can execute this action." +msgstr "" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config_organizing +msgid "Organizing" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_category +msgid "Parent Category" +msgstr "Categoría padre" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_directory +msgid "Parent Directory" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path +msgid "Parent Path" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_02_demo +msgid "Partner" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_tree +msgid "Path" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path_json +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path_json +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__path_json +msgid "Path Json" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path_names +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path_names +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__path_names +msgid "Path Names" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_05_demo +msgid "Portal" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_10_demo +msgid "Product" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_03_demo +msgid "Project" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_read +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_read +msgid "Read Access" +msgstr "Permiso para leer" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_trash +msgid "Restore Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__root_directories +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Root Directories" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__root_storage +msgid "Root Storage" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_04_demo +msgid "Sales" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_search +msgid "Save Type" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__size +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__size +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__documents_binary_max_size +msgid "Size" +msgstr "Tamaño" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail_small +msgid "Small Custom Thumbnail" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail_small +msgid "Small Thumbnail" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:28 +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__starred +#, python-format +msgid "Starred" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +msgid "Starred Directories" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__user_stars +msgid "Stars" +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__storage +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Storage" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__is_hidden +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_hidden +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_storage +#: model:ir.ui.menu,name:muk_dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_tree +msgid "Storages" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__child_directories +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config_system +msgid "System" +msgstr "" + +#. module: muk_dms +#: sql_constraint:muk_dms.tag:0 +msgid "Tag name already exists!" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:55 +#: model:ir.actions.act_window,name:muk_dms.action_dms_tag +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__tags +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__tags +#: model:ir.ui.menu,name:muk_dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_tag_tree +#, python-format +msgid "Tags" +msgstr "Etiquetas" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Tags..." +msgstr "Etiquetas..." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Technical Information" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "El campo activo le permite ocultar la categoría sin tener que eliminarla." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "The configuration is done!" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:420 +#, python-format +msgid "The directory has to have the permission to create files." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:344 +#, python-format +msgid "The directory name is invalid." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:408 +#, python-format +msgid "The file has a forbidden file extension." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:399 +#, python-format +msgid "The file name is invalid." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:414 +#, python-format +msgid "The maximum upload size is %s MB)." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:338 +#, python-format +msgid "The parent directory has to have the permission to create directories." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__save_type +msgid "The save type is used to determine how a file is saved by the system. If you change \n" +" this setting, you can migrate existing files manually by triggering the action." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "Thumbnail" +msgstr "Miniatura" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_mixins_thumbnail +msgid "Thumbnail Mixin" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_files +msgid "Total Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_04_demo +msgid "Traveling" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__mimetype +msgid "Type" +msgstr "Tipo" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Unlock" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js:92 +#, python-format +msgid "Upload Error" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "Upload File" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/mixins/file_upload.js:63 +#, python-format +msgid "Upload Files" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "Upload your first File." +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/mixins/file_upload.js:64 +#, python-format +msgid "Uploading..." +msgstr "" + +#. module: muk_dms +#: model:res.groups,name:muk_dms.group_dms_user +msgid "User" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_09_demo +msgid "Vendor Bill" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_version +msgid "Versioning" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Views" +msgstr "Vistas" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_write +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_write +msgid "Write Access" +msgstr "Permiso de escritura" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "action_close_documents_onboarding" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "o_onboarding_blue" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +msgid "o_onboarding_orange" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "res.company" +msgstr "" diff --git a/odex-event/muk_dms/i18n/fr.po b/odex-event/muk_dms/i18n/fr.po new file mode 100644 index 000000000..afa996ad2 --- /dev/null +++ b/odex-event/muk_dms/i18n/fr.po @@ -0,0 +1,1463 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190128\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-05 18:29+0000\n" +"PO-Revision-Date: 2019-03-05 18:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +msgid "/muk_dms/static/src/img/banner/documents_onboarding_directory.png" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "/muk_dms/static/src/img/banner/documents_onboarding_file.png" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-download\"/> Download" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-external-link\"/> Open" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-lock\"/> Lock" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-pencil-square-o\"/> Edit" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-trash-o\"/> Delete" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-unlock-alt\"/> Unlock" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<span class=\"o_form_label\">File Extensions</span>" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<span class=\"o_form_label\">File Size</span>" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<strong>Save</strong> this page and come back here to set up the feature." +msgstr "<strong>Sauvegardez</strong> cette page et revenez ici pour configurer la fonctionnalité." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:332 +#, python-format +msgid "A directory can't be a root and have a parent directory." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:330 +#, python-format +msgid "A directory has to have a parent directory." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:350 +#, python-format +msgid "A directory with the same name already exists." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:414 +#, python-format +msgid "A file is locked, the folder cannot be deleted." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:402 +#, python-format +msgid "A file with the same name already exists." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:328 +#, python-format +msgid "A root directory has to have a root storage." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_access +msgid "Access Control" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Access Information" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_07_demo +msgid "Accounting" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Activates a file trash to restore deleted files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_trash +msgid "Activates a file trash to restore deleted files." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Activates the preview function on files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_preview +msgid "Activates the preview function on files." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__active +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__active +msgid "Active" +msgstr "Actif" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directory +msgid "Add a new Directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Adds support for messages and activities on directories and files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_mail +msgid "Adds support for messages and activities on directories and files." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_search +msgid "All" +msgstr "Tous" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "All Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_rules +msgid "Allows attachments to be automatically placed in the right directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows attachments to be stored inside of Documents" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment +msgid "Allows attachments to be stored inside of Documents." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_wizard +msgid "Allows documents to be used as attachments." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_export +msgid "Allows the conversion of existing files." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows the creation of groups to define access rights" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_access +msgid "Allows the creation of groups to define access rights." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_thumbnails +msgid "Allows the creation of thumbnails for files." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_widget +msgid "Allows the user to use DMS documents as input for any binary field." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_archive +msgid "Allows to download directories as a archive file." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows to placed attachments in the right directory" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows you to create rule templates to create attachment rules" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_automation +msgid "Allows you to create rule templates to create attachment rules." +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_06_demo +msgid "Apps" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__active +msgid "Archived" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_automation +msgid "Attachment Rule Automation" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_wizard +msgid "Attachment Wizard" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Attachments" +msgstr "Pièces jointes" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_thumbnails +msgid "Automatic Thumbnails" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_widget +msgid "Binary Widget Support" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_new_form +msgid "Cancel" +msgstr "Annuler" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:46 +#: model:ir.actions.act_window,name:muk_dms.action_dms_category +#: model:ir.ui.menu,name:muk_dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_tree +#, python-format +msgid "Categories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__category +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__category +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Category" +msgstr "Catégorie" + +#. module: muk_dms +#: sql_constraint:muk_dms.category:0 +msgid "Category name already exists!" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "Somme de Contrôle/SHA1" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__child_categories +msgid "Child Categories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Closed" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__color +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__color +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Color" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__color +msgid "Color Index" +msgstr "Couleur" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_res_company +msgid "Companies" +msgstr "Sociétés" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__company +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__company +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__company +msgid "Company" +msgstr "Société" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de config" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config +msgid "Configuration" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__content +msgid "Content" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__content_binary +msgid "Content Binary" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_11_demo +msgid "Contract" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_03_demo +msgid "Contracts" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__count_storage_directories +msgid "Count Directories" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_elements +msgid "Count Elements" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__count_storage_files +msgid "Count Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_directories +msgid "Count Subdirectories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_new_form +msgid "Create" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_create +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_create +msgid "Create Access" +msgstr "Droit de création" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +msgid "Create Directory" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +msgid "Create Storage" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_category +msgid "Create a new Category." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +msgid "Create a new Document Storage." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +msgid "Create a new Root Directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Creation Date" +msgstr "Date de création" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__save_type +msgid "Current Save Type" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail +msgid "Custom Thumbnail" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_01_demo +msgid "Customer" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_08_demo +msgid "Customer Invoice" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/storage.py:42 +#: selection:muk_dms.storage,save_type:0 +#, python-format +msgid "Database" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_unlink +msgid "Delete Access" +msgstr "Droit de suppression" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:37 +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:muk_dms.action_dms_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__directories +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__storage_directories +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__directories +#: model:ir.ui.menu,name:muk_dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +#, python-format +msgid "Directories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directory +msgid "Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__directory +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Directory" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_category +msgid "Document Category" +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_tag +msgid "Document Tag" +msgstr "" + +#. module: muk_dms +#: model:ir.module.category,name:muk_dms.category_dms_security +#: model:ir.ui.menu,name:muk_dms.main_menu_muk_dms +msgid "Documents" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment +msgid "Documents Storage Location" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_rules +msgid "Documents Storage Rules" +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Done" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_archive +msgid "Download Directories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "Dropdown menu" +msgstr "Menu déroulant" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Elements" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables a new save option to store files into a filestore" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_file +msgid "Enables a new save option to store files into a filestore." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables a new save option to store files into large objects" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_lobject +msgid "Enables a new save option to store files into large objects." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_finder +msgid "Enables the Document Finder." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables version control for files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_version +msgid "Enables version control for files." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/category.py:123 +#, python-format +msgid "Error! You cannot create recursive categories." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:321 +#, python-format +msgid "Error! You cannot create recursive directories." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_export +msgid "Export Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__extension +msgid "Extension" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__documents_forbidden_extensions +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Extensions" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_05_demo +msgid "External" +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "File" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_preview +msgid "File Preview" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "File Upload" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__name +msgid "Filename" +msgstr "Nom du fichier" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_file +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_migration +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__storage_files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__files +#: model:ir.ui.menu,name:muk_dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Files" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_file +msgid "Filestore Storage" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_finder +msgid "Finder" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_settings_general +#: model:ir.ui.menu,name:muk_dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Paramètres Généraux" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_search +msgid "Group By" +msgstr "Regrouper par" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_02_demo +msgid "Human Resource" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__id +msgid "ID" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__company +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__company +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__company +msgid "If set, directories and files will only be available for the selected company." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__is_hidden +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__is_hidden +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__is_root_directory +msgid "Indicates if the directory is a root directory. A root directory has a settings object,\n" +" while a directory with a set parent inherits the settings form its parent." +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_01_demo +msgid "Internal" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Just done" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_lobject +msgid "Large Objects Storage" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Lock" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_locked +msgid "Locked" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__locked_by +msgid "Locked by" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_mail +msgid "Mail Support" +msgstr "" + +#. module: muk_dms +#: model:res.groups,name:muk_dms.group_dms_manager +msgid "Manager" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail_medium +msgid "Medium Custom Thumbnail" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail_medium +msgid "Medium Thumbnail" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Meta Information" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.server,name:muk_dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:221 +#, python-format +msgid "Migrate File %s of %s [ %s ]" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.menu_dms_file_migration +msgid "Migration" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__migration +msgid "Migration Status" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Modification Date" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +msgid "My Directories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "My Documents" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "My Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__name +msgid "Name" +msgstr "Nom" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_directory_new +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_new +msgid "New Root Directory" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_storage_new +msgid "New Storage" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_06_demo +msgid "News" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js:92 +#, python-format +msgid "No Directory has been selected!" +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Not done" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/storage.py:99 +#, python-format +msgid "Only managers can execute this action." +msgstr "" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config_organizing +msgid "Organizing" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_category +msgid "Parent Category" +msgstr "Catégorie mère" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_directory +msgid "Parent Directory" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path +msgid "Parent Path" +msgstr "Chemin parent" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_02_demo +msgid "Partner" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_tree +msgid "Path" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path_json +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path_json +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__path_json +msgid "Path Json" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path_names +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path_names +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__path_names +msgid "Path Names" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_05_demo +msgid "Portal" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_10_demo +msgid "Product" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_03_demo +msgid "Project" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_read +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_read +msgid "Read Access" +msgstr "Accès en lecture" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_trash +msgid "Restore Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__root_directories +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Root Directories" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__root_storage +msgid "Root Storage" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_04_demo +msgid "Sales" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_search +msgid "Save Type" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__size +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__size +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__documents_binary_max_size +msgid "Size" +msgstr "Taille" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail_small +msgid "Small Custom Thumbnail" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail_small +msgid "Small Thumbnail" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:28 +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__starred +#, python-format +msgid "Starred" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +msgid "Starred Directories" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__user_stars +msgid "Stars" +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__storage +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Storage" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__is_hidden +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_hidden +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_storage +#: model:ir.ui.menu,name:muk_dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_tree +msgid "Storages" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__child_directories +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config_system +msgid "System" +msgstr "" + +#. module: muk_dms +#: sql_constraint:muk_dms.tag:0 +msgid "Tag name already exists!" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:55 +#: model:ir.actions.act_window,name:muk_dms.action_dms_tag +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__tags +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__tags +#: model:ir.ui.menu,name:muk_dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_tag_tree +#, python-format +msgid "Tags" +msgstr "Étiquettes" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Tags..." +msgstr "Étiquettes..." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Technical Information" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "Décochez le champ 'Actif' pour cacher la catégorie sans la supprimer." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "The configuration is done!" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:420 +#, python-format +msgid "The directory has to have the permission to create files." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:344 +#, python-format +msgid "The directory name is invalid." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:408 +#, python-format +msgid "The file has a forbidden file extension." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:399 +#, python-format +msgid "The file name is invalid." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:414 +#, python-format +msgid "The maximum upload size is %s MB)." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:338 +#, python-format +msgid "The parent directory has to have the permission to create directories." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__save_type +msgid "The save type is used to determine how a file is saved by the system. If you change \n" +" this setting, you can migrate existing files manually by triggering the action." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "Thumbnail" +msgstr "Miniature" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_mixins_thumbnail +msgid "Thumbnail Mixin" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_files +msgid "Total Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_04_demo +msgid "Traveling" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__mimetype +msgid "Type" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Unlock" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js:92 +#, python-format +msgid "Upload Error" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "Upload File" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/mixins/file_upload.js:63 +#, python-format +msgid "Upload Files" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "Upload your first File." +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/mixins/file_upload.js:64 +#, python-format +msgid "Uploading..." +msgstr "" + +#. module: muk_dms +#: model:res.groups,name:muk_dms.group_dms_user +msgid "User" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_09_demo +msgid "Vendor Bill" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_version +msgid "Versioning" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Views" +msgstr "Vues" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_write +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_write +msgid "Write Access" +msgstr "Accès en écriture" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "action_close_documents_onboarding" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "o_onboarding_blue" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +msgid "o_onboarding_orange" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "res.company" +msgstr "" + diff --git a/odex-event/muk_dms/i18n/nl.po b/odex-event/muk_dms/i18n/nl.po new file mode 100644 index 000000000..6ec7fc7ad --- /dev/null +++ b/odex-event/muk_dms/i18n/nl.po @@ -0,0 +1,1463 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190128\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-05 18:29+0000\n" +"PO-Revision-Date: 2019-03-05 18:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +msgid "/muk_dms/static/src/img/banner/documents_onboarding_directory.png" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "/muk_dms/static/src/img/banner/documents_onboarding_file.png" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-download\"/> Download" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-external-link\"/> Open" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-lock\"/> Lock" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-pencil-square-o\"/> Edit" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-trash-o\"/> Delete" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-unlock-alt\"/> Unlock" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<span class=\"o_form_label\">File Extensions</span>" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<span class=\"o_form_label\">File Size</span>" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<strong>Save</strong> this page and come back here to set up the feature." +msgstr "<strong>Bewaar</strong> deze pagina en kom terug naar deze pagina om de optie op te zetten." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:332 +#, python-format +msgid "A directory can't be a root and have a parent directory." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:330 +#, python-format +msgid "A directory has to have a parent directory." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:350 +#, python-format +msgid "A directory with the same name already exists." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:414 +#, python-format +msgid "A file is locked, the folder cannot be deleted." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:402 +#, python-format +msgid "A file with the same name already exists." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:328 +#, python-format +msgid "A root directory has to have a root storage." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_access +msgid "Access Control" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Access Information" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_07_demo +msgid "Accounting" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Activates a file trash to restore deleted files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_trash +msgid "Activates a file trash to restore deleted files." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Activates the preview function on files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_preview +msgid "Activates the preview function on files." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__active +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__active +msgid "Active" +msgstr "Actief" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directory +msgid "Add a new Directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Adds support for messages and activities on directories and files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_mail +msgid "Adds support for messages and activities on directories and files." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_search +msgid "All" +msgstr "Alle" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "All Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_rules +msgid "Allows attachments to be automatically placed in the right directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows attachments to be stored inside of Documents" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment +msgid "Allows attachments to be stored inside of Documents." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_wizard +msgid "Allows documents to be used as attachments." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_export +msgid "Allows the conversion of existing files." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows the creation of groups to define access rights" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_access +msgid "Allows the creation of groups to define access rights." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_thumbnails +msgid "Allows the creation of thumbnails for files." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_widget +msgid "Allows the user to use DMS documents as input for any binary field." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_archive +msgid "Allows to download directories as a archive file." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows to placed attachments in the right directory" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows you to create rule templates to create attachment rules" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_automation +msgid "Allows you to create rule templates to create attachment rules." +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_06_demo +msgid "Apps" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__active +msgid "Archived" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_automation +msgid "Attachment Rule Automation" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_wizard +msgid "Attachment Wizard" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Attachments" +msgstr "Bijlagen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_thumbnails +msgid "Automatic Thumbnails" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_widget +msgid "Binary Widget Support" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_new_form +msgid "Cancel" +msgstr "Annuleren" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:46 +#: model:ir.actions.act_window,name:muk_dms.action_dms_category +#: model:ir.ui.menu,name:muk_dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_tree +#, python-format +msgid "Categories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__category +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__category +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Category" +msgstr "Categorie" + +#. module: muk_dms +#: sql_constraint:muk_dms.category:0 +msgid "Category name already exists!" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__child_categories +msgid "Child Categories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Closed" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__color +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__color +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Color" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__color +msgid "Color Index" +msgstr "Kleurindex" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_res_company +msgid "Companies" +msgstr "Bedrijven" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__company +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__company +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__company +msgid "Company" +msgstr "Bedrijf" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_res_config_settings +msgid "Config Settings" +msgstr "Configuratie instellingen" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config +msgid "Configuration" +msgstr "Instellingen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__content +msgid "Content" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__content_binary +msgid "Content Binary" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_11_demo +msgid "Contract" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_03_demo +msgid "Contracts" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__count_storage_directories +msgid "Count Directories" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_elements +msgid "Count Elements" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__count_storage_files +msgid "Count Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_directories +msgid "Count Subdirectories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_new_form +msgid "Create" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_create +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_create +msgid "Create Access" +msgstr "Aanmaken" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +msgid "Create Directory" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +msgid "Create Storage" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_category +msgid "Create a new Category." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +msgid "Create a new Document Storage." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +msgid "Create a new Root Directory." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Creation Date" +msgstr "Aanmaakdatum" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__save_type +msgid "Current Save Type" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail +msgid "Custom Thumbnail" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_01_demo +msgid "Customer" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_08_demo +msgid "Customer Invoice" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/storage.py:42 +#: selection:muk_dms.storage,save_type:0 +#, python-format +msgid "Database" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_unlink +msgid "Delete Access" +msgstr "Verwijderen" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:37 +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:muk_dms.action_dms_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__directories +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__storage_directories +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__directories +#: model:ir.ui.menu,name:muk_dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +#, python-format +msgid "Directories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directory +msgid "Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__directory +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Directory" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__display_name +msgid "Display Name" +msgstr "Weergave naam" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_category +msgid "Document Category" +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_tag +msgid "Document Tag" +msgstr "" + +#. module: muk_dms +#: model:ir.module.category,name:muk_dms.category_dms_security +#: model:ir.ui.menu,name:muk_dms.main_menu_muk_dms +msgid "Documents" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment +msgid "Documents Storage Location" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_rules +msgid "Documents Storage Rules" +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Done" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_archive +msgid "Download Directories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "Dropdown menu" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Elements" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables a new save option to store files into a filestore" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_file +msgid "Enables a new save option to store files into a filestore." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables a new save option to store files into large objects" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_lobject +msgid "Enables a new save option to store files into large objects." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_finder +msgid "Enables the Document Finder." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables version control for files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_version +msgid "Enables version control for files." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/category.py:123 +#, python-format +msgid "Error! You cannot create recursive categories." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:321 +#, python-format +msgid "Error! You cannot create recursive directories." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_export +msgid "Export Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__extension +msgid "Extension" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__documents_forbidden_extensions +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Extensions" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_05_demo +msgid "External" +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "File" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_preview +msgid "File Preview" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "File Upload" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__name +msgid "Filename" +msgstr "Bestandsnaam" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_file +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_migration +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__storage_files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__files +#: model:ir.ui.menu,name:muk_dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Files" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_file +msgid "Filestore Storage" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_finder +msgid "Finder" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_settings_general +#: model:ir.ui.menu,name:muk_dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Algemene instellingen" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_search +msgid "Group By" +msgstr "Groepeer op" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP routing" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_02_demo +msgid "Human Resource" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__id +msgid "ID" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__company +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__company +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__company +msgid "If set, directories and files will only be available for the selected company." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__is_hidden +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__is_hidden +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__is_root_directory +msgid "Indicates if the directory is a root directory. A root directory has a settings object,\n" +" while a directory with a set parent inherits the settings form its parent." +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_01_demo +msgid "Internal" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Just done" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_lobject +msgid "Large Objects Storage" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag____last_update +msgid "Last Modified on" +msgstr "Laatst gewijzigd op" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Lock" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_locked +msgid "Locked" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__locked_by +msgid "Locked by" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_mail +msgid "Mail Support" +msgstr "" + +#. module: muk_dms +#: model:res.groups,name:muk_dms.group_dms_manager +msgid "Manager" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail_medium +msgid "Medium Custom Thumbnail" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail_medium +msgid "Medium Thumbnail" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Meta Information" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.server,name:muk_dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:221 +#, python-format +msgid "Migrate File %s of %s [ %s ]" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.menu_dms_file_migration +msgid "Migration" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__migration +msgid "Migration Status" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Modification Date" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +msgid "My Directories" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "My Documents" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "My Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__name +msgid "Name" +msgstr "Naam" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_directory_new +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_new +msgid "New Root Directory" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_storage_new +msgid "New Storage" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_06_demo +msgid "News" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js:92 +#, python-format +msgid "No Directory has been selected!" +msgstr "" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Not done" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/storage.py:99 +#, python-format +msgid "Only managers can execute this action." +msgstr "" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config_organizing +msgid "Organizing" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_category +msgid "Parent Category" +msgstr "Hoofdcategorie" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_directory +msgid "Parent Directory" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path +msgid "Parent Path" +msgstr "Bovenliggend pad" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_02_demo +msgid "Partner" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_tree +msgid "Path" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path_json +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path_json +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__path_json +msgid "Path Json" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path_names +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path_names +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__path_names +msgid "Path Names" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_05_demo +msgid "Portal" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_10_demo +msgid "Product" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_03_demo +msgid "Project" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_read +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_read +msgid "Read Access" +msgstr "Lezen" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_trash +msgid "Restore Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__root_directories +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Root Directories" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__root_storage +msgid "Root Storage" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_04_demo +msgid "Sales" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_search +msgid "Save Type" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__size +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__size +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__documents_binary_max_size +msgid "Size" +msgstr "Grootte" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail_small +msgid "Small Custom Thumbnail" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail_small +msgid "Small Thumbnail" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:28 +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__starred +#, python-format +msgid "Starred" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +msgid "Starred Directories" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__user_stars +msgid "Stars" +msgstr "" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__storage +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Storage" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__is_hidden +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_hidden +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_storage +#: model:ir.ui.menu,name:muk_dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_tree +msgid "Storages" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__child_directories +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config_system +msgid "System" +msgstr "" + +#. module: muk_dms +#: sql_constraint:muk_dms.tag:0 +msgid "Tag name already exists!" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:55 +#: model:ir.actions.act_window,name:muk_dms.action_dms_tag +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__tags +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__tags +#: model:ir.ui.menu,name:muk_dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_tag_tree +#, python-format +msgid "Tags" +msgstr "Labels" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Tags..." +msgstr "Labels..." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Technical Information" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "Het veld actief staat toe categorieën te verbergen zonder deze te verwijderen." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "The configuration is done!" +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:420 +#, python-format +msgid "The directory has to have the permission to create files." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:344 +#, python-format +msgid "The directory name is invalid." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:408 +#, python-format +msgid "The file has a forbidden file extension." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:399 +#, python-format +msgid "The file name is invalid." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:414 +#, python-format +msgid "The maximum upload size is %s MB)." +msgstr "" + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:338 +#, python-format +msgid "The parent directory has to have the permission to create directories." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__save_type +msgid "The save type is used to determine how a file is saved by the system. If you change \n" +" this setting, you can migrate existing files manually by triggering the action." +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "Thumbnail" +msgstr "Miniatuur" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_mixins_thumbnail +msgid "Thumbnail Mixin" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_files +msgid "Total Files" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_04_demo +msgid "Traveling" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__mimetype +msgid "Type" +msgstr "Soort" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Unlock" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js:92 +#, python-format +msgid "Upload Error" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "Upload File" +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/mixins/file_upload.js:63 +#, python-format +msgid "Upload Files" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "Upload your first File." +msgstr "" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/mixins/file_upload.js:64 +#, python-format +msgid "Uploading..." +msgstr "" + +#. module: muk_dms +#: model:res.groups,name:muk_dms.group_dms_user +msgid "User" +msgstr "" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_09_demo +msgid "Vendor Bill" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_version +msgid "Versioning" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Views" +msgstr "Weergaven" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_write +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_write +msgid "Write Access" +msgstr "Schrijven" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "action_close_documents_onboarding" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "o_onboarding_blue" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +msgid "o_onboarding_orange" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "res.company" +msgstr "" + diff --git a/odex-event/muk_dms/i18n/pt_BR.po b/odex-event/muk_dms/i18n/pt_BR.po new file mode 100644 index 000000000..c0989aac4 --- /dev/null +++ b/odex-event/muk_dms/i18n/pt_BR.po @@ -0,0 +1,1502 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190128\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-03-05 18:28+0000\n" +"PO-Revision-Date: 2019-09-27 20:22-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 2.2.3\n" +"Last-Translator: \n" +"Language: pt_BR\n" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +msgid "/muk_dms/static/src/img/banner/documents_onboarding_directory.png" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "/muk_dms/static/src/img/banner/documents_onboarding_file.png" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-download\"/> Download" +msgstr "<i class=\"fa fa-download\"/> Download" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-external-link\"/> Open" +msgstr "<i class=\"fa fa-external-link\"/> Aberto" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-lock\"/> Lock" +msgstr "<i class=\"fa fa-lock\"/> Trancar" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-pencil-square-o\"/> Edit" +msgstr "<i class=\"fa fa-pencil-square-o\"/> Editar" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-trash-o\"/> Delete" +msgstr "<i class=\"fa fa-trash-o\"/> Excluir" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "<i class=\"fa fa-unlock-alt\"/> Unlock" +msgstr "<i class=\"fa fa-unlock-alt\"/> Desbloquear" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<span class=\"o_form_label\">File Extensions</span>" +msgstr "<span class=\"o_form_label\">Extensões de Arquivo</span>" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "<span class=\"o_form_label\">File Size</span>" +msgstr "<span class=\"o_form_label\">Tamanho do Arquivo</span>" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "" +"<strong>Save</strong> this page and come back here to set up the feature." +msgstr "" +"<strong>Salvar</strong> esta página e volte aqui para configurar a " +"funcionalidade." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:332 +#, python-format +msgid "A directory can't be a root and have a parent directory." +msgstr "Um diretório não pode ser uma raiz e ter um diretório pai." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:330 +#, python-format +msgid "A directory has to have a parent directory." +msgstr "Um diretório precisa ter um diretório pai." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:350 +#, python-format +msgid "A directory with the same name already exists." +msgstr "Um diretório com o mesmo nome já existe." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:414 +#, python-format +msgid "A file is locked, the folder cannot be deleted." +msgstr "Um arquivo está bloqueado, a pasta não pode ser excluída." + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:402 +#, python-format +msgid "A file with the same name already exists." +msgstr "Um arquivo com o mesmo nome já existe." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:328 +#, python-format +msgid "A root directory has to have a root storage." +msgstr "Um diretório raiz precisa ter um armazenamento raiz." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_access +msgid "Access Control" +msgstr "Controle de Acesso" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Access Information" +msgstr "Información para el acceso" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_07_demo +msgid "Accounting" +msgstr "Contabilidade" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Activates a file trash to restore deleted files" +msgstr "Ativa uma lixeira de arquivo para restaurar arquivos apagados" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_trash +msgid "Activates a file trash to restore deleted files." +msgstr "Ativa uma lixeira de arquivo para restaurar arquivos apagados." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Activates the preview function on files" +msgstr "Ativa a função de visualização em arquivos" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_preview +msgid "Activates the preview function on files." +msgstr "Ativa a função de visualização em arquivos." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__active +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__active +msgid "Active" +msgstr "Ativo" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directory +msgid "Add a new Directory." +msgstr "Adicione um novo Diretório." + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "Adicione um novo Arquivo." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Adds support for messages and activities on directories and files" +msgstr "Adiciona suporte para mensagens e atividades em diretórios e arquivos" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_mail +msgid "Adds support for messages and activities on directories and files." +msgstr "Adiciona suporte para mensagens e atividades em diretórios e arquivos." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_search +msgid "All" +msgstr "Todos" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "All Files" +msgstr "Todos os Arquivos" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_rules +msgid "Allows attachments to be automatically placed in the right directory." +msgstr "" +"Permite que os anexos sejam colocados automaticamente no diretório correto." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows attachments to be stored inside of Documents" +msgstr "Permite que os anexos sejam armazenados dentro de documentos" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment +msgid "Allows attachments to be stored inside of Documents." +msgstr "Permite que os anexos sejam armazenados dentro de documentos." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_wizard +msgid "Allows documents to be used as attachments." +msgstr "Permite que os documentos sejam usados como anexos." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_export +msgid "Allows the conversion of existing files." +msgstr "Permite a conversão de arquivos existentes." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows the creation of groups to define access rights" +msgstr "Permite a criação de grupos para definir direitos de acesso" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_access +msgid "Allows the creation of groups to define access rights." +msgstr "Permite a criação de grupos para definir direitos de acesso." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_thumbnails +msgid "Allows the creation of thumbnails for files." +msgstr "Permite a criação de miniaturas para arquivos." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_widget +msgid "Allows the user to use DMS documents as input for any binary field." +msgstr "" +"Permite que o usuário use documentos DMS como entrada para qualquer campo " +"binário." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_archive +msgid "Allows to download directories as a archive file." +msgstr "Permite baixar diretórios como um arquivo morto." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows to placed attachments in the right directory" +msgstr "Permite colocar anexos no diretório certo" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Allows you to create rule templates to create attachment rules" +msgstr "Permite criar modelos de regra para criar regras de anexos" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_attachment_automation +msgid "Allows you to create rule templates to create attachment rules." +msgstr "Permite que você crie modelos de regra para criar regras de anexo." + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_06_demo +msgid "Apps" +msgstr "Aplicativos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__active +msgid "Archived" +msgstr "Arquivado" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_automation +msgid "Attachment Rule Automation" +msgstr "Automação de Regras de Anexos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_wizard +msgid "Attachment Wizard" +msgstr "Assistente de Anexos" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Attachments" +msgstr "Anexos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_thumbnails +msgid "Automatic Thumbnails" +msgstr "Miniaturas Automáticas" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_widget +msgid "Binary Widget Support" +msgstr "Suporte a Widgets Binários" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_new_form +msgid "Cancel" +msgstr "Cancelar" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:46 +#: model:ir.actions.act_window,name:muk_dms.action_dms_category +#: model:ir.ui.menu,name:muk_dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_category_tree +#, python-format +msgid "Categories" +msgstr "Categorias" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "As categorias são usadas para categorizar documentos." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__category +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__category +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Category" +msgstr "Categoria" + +#. module: muk_dms +#: sql_constraint:muk_dms.category:0 +msgid "Category name already exists!" +msgstr "Nome da categoria já existe!" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__child_categories +msgid "Child Categories" +msgstr "Categorias Filhas" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "Clique para adicionar um novo diretório." + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "Clique para adicionar um novo arquivo." + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "Clique para criar uma nova marca." + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Closed" +msgstr "Fechado" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__color +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__color +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Color" +msgstr "Cor" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__color +msgid "Color Index" +msgstr "Índice de Cores" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_res_company +msgid "Companies" +msgstr "Empresas" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__company +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__company +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__company +msgid "Company" +msgstr "Empresa" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_res_config_settings +msgid "Config Settings" +msgstr "Ajuste as Configurações" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config +msgid "Configuration" +msgstr "Configuração" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__content +msgid "Content" +msgstr "Conteúdo" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__content_binary +msgid "Content Binary" +msgstr "Conteúdo Binário" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_11_demo +msgid "Contract" +msgstr "Contrato" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_03_demo +msgid "Contracts" +msgstr "Contratos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__count_storage_directories +msgid "Count Directories" +msgstr "Contagem de Diretórios" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_elements +msgid "Count Elements" +msgstr "Contagem de Elementos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__count_storage_files +msgid "Count Files" +msgstr "Contagem de Arquivos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_directories +msgid "Count Subdirectories" +msgstr "Contagem de Subdiretórios" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_new_form +msgid "Create" +msgstr "Criar" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_create +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_create +msgid "Create Access" +msgstr "Criar Acesso" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +msgid "Create Directory" +msgstr "Criar Imóvel" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +msgid "Create Storage" +msgstr "Criar Armazenamento" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_category +msgid "Create a new Category." +msgstr "Crie uma nova Categoria." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +msgid "Create a new Document Storage." +msgstr "Crie um novo Armazenamento de Documentos." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +msgid "Create a new Root Directory." +msgstr "Crie um novo Diretório Raiz." + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "Crie um novo objeto de Armazenamento." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__create_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__create_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Creation Date" +msgstr "Data de Criação" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__save_type +msgid "Current Save Type" +msgstr "Tipo de Salvamento Atual" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail +msgid "Custom Thumbnail" +msgstr "Miniatura Personalizada" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_01_demo +msgid "Customer" +msgstr "Cliente" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_08_demo +msgid "Customer Invoice" +msgstr "Fatura do Cliente" + +#. module: muk_dms +#: code:addons/muk_dms/models/storage.py:42 +#: selection:muk_dms.storage,save_type:0 +#, python-format +msgid "Database" +msgstr "Banco de dados" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "Definir extensões de arquivo proibidas" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "Definir o tamanho máximo de upload de um arquivo em MB" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "" +"Define uma lista de extensões de arquivo proibidas. (Exemplo: 'exe,msi')" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "Define o tamanho máximo de carregamento em MB. Padrão (25MB)" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_unlink +msgid "Delete Access" +msgstr "Excluir Acesso" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:37 +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:muk_dms.action_dms_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__directories +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__storage_directories +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__directories +#: model:ir.ui.menu,name:muk_dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +#, python-format +msgid "Directories" +msgstr "Diretórios" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +"\t\t\tfiles directly in Odoo." +msgstr "" +"Os diretórios podem ser usados para estruturar e organizar\n" +"\t\t\tarquivos diretamente no Odoo." + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__directory +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_directory_step +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Directory" +msgstr "Diretório" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__display_name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__display_name +msgid "Display Name" +msgstr "Nome de Exibição" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_category +msgid "Document Category" +msgstr "Categoria do Documento" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_tag +msgid "Document Tag" +msgstr "Tag do Documento" + +#. module: muk_dms +#: model:ir.module.category,name:muk_dms.category_dms_security +#: model:ir.ui.menu,name:muk_dms.main_menu_muk_dms +msgid "Documents" +msgstr "Documentos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "Estado do Diretório de Integração de Documentos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "Estado do Arquivo de Integração de Documentos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "Estado de Integração de Documentos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "Estado de Armazenamento de Documentos de Integração" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment +msgid "Documents Storage Location" +msgstr "Local de Armazenamento de Documentos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_attachment_rules +msgid "Documents Storage Rules" +msgstr "Regras de Armazenamento de Documentos" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Done" +msgstr "Feito" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_archive +msgid "Download Directories" +msgstr "Baixar Diretórios" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "Dropdown menu" +msgstr "Menu dropdown" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_lock_editor +msgid "Editor" +msgstr "Editor" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Elements" +msgstr "Elementos" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables a new save option to store files into a filestore" +msgstr "" +"Habilita uma nova opção de salvamento para armazenar arquivos em um " +"armazenamento arquivos" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_file +msgid "Enables a new save option to store files into a filestore." +msgstr "" +"Habilita uma nova opção de salvamento para armazenar arquivos em um " +"armazenamento de registros." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables a new save option to store files into large objects" +msgstr "" +"Habilita uma nova opção de salvamento para armazenar arquivos em objetos " +"grandes" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_lobject +msgid "Enables a new save option to store files into large objects." +msgstr "" +"Habilita uma nova opção de salvamento para armazenar arquivos em objetos " +"grandes." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_finder +msgid "Enables the Document Finder." +msgstr "Habilita o Localizador de Documentos." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Enables version control for files" +msgstr "Habilita o controle de versão para arquivos" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_res_config_settings__module_muk_dms_version +msgid "Enables version control for files." +msgstr "Habilita o controle de versão para arquivos." + +#. module: muk_dms +#: code:addons/muk_dms/models/category.py:123 +#, python-format +msgid "Error! You cannot create recursive categories." +msgstr "Erro! Não é possível criar categorias recursivas." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:321 +#, python-format +msgid "Error! You cannot create recursive directories." +msgstr "Erro! Não é possível criar diretórios recursivos." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_export +msgid "Export Files" +msgstr "Exportar arquivos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__extension +msgid "Extension" +msgstr "Extensão" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__documents_forbidden_extensions +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Extensions" +msgstr "Extensões" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_05_demo +msgid "External" +msgstr "Externo" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "File" +msgstr "Arquivo" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_preview +msgid "File Preview" +msgstr "Visualização de Arquivo" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "File Upload" +msgstr "Upload de Arquivo" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__name +msgid "Filename" +msgstr "Nome do arquivo" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_file +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_migration +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_files_storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__storage_files +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__files +#: model:ir.ui.menu,name:muk_dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Files" +msgstr "Arquivos" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "Os arquivos são usados para salvar conteúdo diretamente no Odoo." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_file +msgid "Filestore Storage" +msgstr "Armazenamento de Filestore" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_finder +msgid "Finder" +msgstr "Buscador" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_settings_general +#: model:ir.ui.menu,name:muk_dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Configurações Gerais" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_ir_http +msgid "HTTP Routing" +msgstr "Roteamento HTTP" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_02_demo +msgid "Human Resource" +msgstr "Recursos Humanos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__id +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__id +msgid "ID" +msgstr "ID" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" +"Se um arquivo for definido como arquivado, ele não será exibido, mas ainda " +"existirá." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__company +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__company +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__company +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "" +"Se definido, diretórios e arquivos só estarão disponíveis para a empresa " +"selecionada." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__is_hidden +#: model:ir.model.fields,help:muk_dms.field_muk_dms_file__is_hidden +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "Indica se os diretórios e arquivos estão ocultos por padrão." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory. A root directory has a " +"settings object,\n" +" while a directory with a set parent inherits the settings form " +"its parent." +msgstr "" +"Indica se o diretório é um diretório raiz. Um diretório raiz tem um objeto " +"de configurações,\n" +" enquanto um diretório com um pai definido herda as configurações " +"formam seu pai." + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_01_demo +msgid "Internal" +msgstr "Interno" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "Recursos Internos/Humanos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "É o Diretório Raiz" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Just done" +msgstr "Acabei de fazer" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_lobject +msgid "Large Objects Storage" +msgstr "Armazenamento de Objetos Grandes" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage____last_update +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag____last_update +msgid "Last Modified on" +msgstr "Modificada pela última vez" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__write_uid +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__write_uid +msgid "Last Updated by" +msgstr "Ultima atualização por" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__write_date +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__write_date +msgid "Last Updated on" +msgstr "Ultima atualização em" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Lock" +msgstr "Bloquear" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_locked +msgid "Locked" +msgstr "Bloqueado" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__locked_by +msgid "Locked by" +msgstr "Bloqueado por" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_mail +msgid "Mail Support" +msgstr "Suporte de Correio" + +#. module: muk_dms +#: model:res.groups,name:muk_dms.group_dms_manager +msgid "Manager" +msgstr "Gerente" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "Migração Manual de Arquivos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail_medium +msgid "Medium Custom Thumbnail" +msgstr "Miniatura Personalizada Média" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail_medium +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail_medium +msgid "Medium Thumbnail" +msgstr "Miniatura Média" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Meta Information" +msgstr "Meta informação" + +#. module: muk_dms +#: model:ir.actions.server,name:muk_dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "Migrar" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:221 +#, python-format +msgid "Migrate File %s of %s [ %s ]" +msgstr "Migrar Arquivo %s de %s [ %s]" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "Migrar Arquivos" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.menu_dms_file_migration +msgid "Migration" +msgstr "Migração" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__migration +msgid "Migration Status" +msgstr "Status da Migração" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "Modification Date" +msgstr "Data de modificação" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +msgid "My Directories" +msgstr "Meus Diretórios" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "My Documents" +msgstr "Meus Documentos" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +msgid "My Files" +msgstr "Meus Arquivos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__name +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_tag__name +msgid "Name" +msgstr "Nome" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_directory_new +#: model:ir.actions.act_window,name:muk_dms.action_dms_file_new +msgid "New Root Directory" +msgstr "Novo Diretório Raiz" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_storage_new +msgid "New Storage" +msgstr "Novo Armazenamento" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_06_demo +msgid "News" +msgstr "Notícias" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js:92 +#, python-format +msgid "No Directory has been selected!" +msgstr "Nenhum diretório foi selecionado!" + +#. module: muk_dms +#: selection:res.company,documents_onboarding_directory_state:0 +#: selection:res.company,documents_onboarding_file_state:0 +#: selection:res.company,documents_onboarding_state:0 +#: selection:res.company,documents_onboarding_storage_state:0 +msgid "Not done" +msgstr "Não feito" + +#. module: muk_dms +#: code:addons/muk_dms/models/storage.py:99 +#, python-format +msgid "Only managers can execute this action." +msgstr "Somente os gerentes podem executar essa ação." + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config_organizing +msgid "Organizing" +msgstr "Organização" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_category +msgid "Parent Category" +msgstr "Categoria Pai" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_directory +msgid "Parent Directory" +msgstr "Diretório Pai" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path +msgid "Parent Path" +msgstr "Caminho Pai" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_02_demo +msgid "Partner" +msgstr "Parceiro" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_tree +msgid "Path" +msgstr "Caminho" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path_json +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path_json +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__path_json +msgid "Path Json" +msgstr "Caminho JSON" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_category__parent_path_names +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__parent_path_names +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__path_names +msgid "Path Names" +msgstr "Nomes de Caminho" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_05_demo +msgid "Portal" +msgstr "Portál" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_10_demo +msgid "Product" +msgstr "Produto" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_03_demo +msgid "Project" +msgstr "Projeto" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_read +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_read +msgid "Read Access" +msgstr "Acesso de Leitura" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_trash +msgid "Restore Files" +msgstr "Restaurar Arquivos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__root_directories +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Root Directories" +msgstr "Diretórios Raiz" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__root_storage +msgid "Root Storage" +msgstr "Armazenamento Raiz" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_04_demo +msgid "Sales" +msgstr "Vendas" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_search +msgid "Save Type" +msgstr "Salvar Tipo" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__size +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__size +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__documents_binary_max_size +msgid "Size" +msgstr "Tamanho" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__custom_thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__custom_thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__custom_thumbnail_small +msgid "Small Custom Thumbnail" +msgstr "Miniatura Personalizada Pequena" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail_small +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail_small +msgid "Small Thumbnail" +msgstr "Miniatura pequena" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:28 +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__starred +#, python-format +msgid "Starred" +msgstr "Favoritos" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +msgid "Starred Directories" +msgstr "Diretórios Favoritos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__user_stars +msgid "Stars" +msgstr "Estrelas" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__storage +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__storage +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_storage_step +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:muk_dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_form +msgid "Storage" +msgstr "Armazenamento" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__is_hidden +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__is_hidden +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "O Armazenamento está Oculto" + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_storage +#: model:ir.ui.menu,name:muk_dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_storage_tree +msgid "Storages" +msgstr "Armazenamentos" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "Os armazenamentos são usados para configurar seus Documentos." + +#. module: muk_dms +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:muk_dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__child_directories +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "Subdiretórios" + +#. module: muk_dms +#: model:ir.ui.menu,name:muk_dms.cat_menu_muk_dms_config_system +msgid "System" +msgstr "Sistema" + +#. module: muk_dms +#: sql_constraint:muk_dms.tag:0 +msgid "Tag name already exists!" +msgstr "Nome do Marcdor já existe!" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/xml/views.xml:55 +#: model:ir.actions.act_window,name:muk_dms.action_dms_tag +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__tags +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__tags +#: model:ir.ui.menu,name:muk_dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_tag_tree +#, python-format +msgid "Tags" +msgstr "Marcadores" + +#. module: muk_dms +#: model_terms:ir.actions.act_window,help:muk_dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "Os marcadores são usadas para categorizar documentos." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Tags..." +msgstr "Marcadores..." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Technical Information" +msgstr "Informação técnica" + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "O campo ativo permite que você oculte a categoria sem removê-la." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "O campo ativo permite que você oculte a marca sem removê-la." + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "The configuration is done!" +msgstr "A configuração está feita!" + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:420 +#, python-format +msgid "The directory has to have the permission to create files." +msgstr "O diretório tem que ter a permissão para criar arquivos." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:344 +#, python-format +msgid "The directory name is invalid." +msgstr "O nome do diretório é inválido." + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:408 +#, python-format +msgid "The file has a forbidden file extension." +msgstr "O arquivo tem uma extensão de arquivo proibida." + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:399 +#, python-format +msgid "The file name is invalid." +msgstr "O nome do arquivo é inválido." + +#. module: muk_dms +#: code:addons/muk_dms/models/file.py:414 +#, python-format +msgid "The maximum upload size is %s MB)." +msgstr "O tamanho máximo de upload é %s MB)." + +#. module: muk_dms +#: code:addons/muk_dms/models/directory.py:338 +#, python-format +msgid "The parent directory has to have the permission to create directories." +msgstr "O diretório pai precisa ter a permissão para criar diretórios." + +#. module: muk_dms +#: model:ir.model.fields,help:muk_dms.field_muk_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you " +"change \n" +" this setting, you can migrate existing files manually by " +"triggering the action." +msgstr "" +"O tipo de salvamento é usado para determinar como um arquivo é salvo pelo " +"sistema. Se você alterar \n" +" Essa configuração, você pode migrar arquivos existentes " +"manualmente, acionando a ação." + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__thumbnail +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_mixins_thumbnail__thumbnail +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_kanban +msgid "Thumbnail" +msgstr "Miniatura" + +#. module: muk_dms +#: model:ir.model,name:muk_dms.model_muk_dms_mixins_thumbnail +msgid "Thumbnail Mixin" +msgstr "Mixin Miniatura" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "Total de Elementos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_files +msgid "Total Files" +msgstr "Total de arquivos" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "Total de Subdiretórios" + +#. module: muk_dms +#: model:muk_dms.category,name:muk_dms.category_04_demo +msgid "Traveling" +msgstr "Viajando" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__mimetype +msgid "Type" +msgstr "Tipo" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.view_dms_file_form +msgid "Unlock" +msgstr "Desbloquear" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js:92 +#, python-format +msgid "Upload Error" +msgstr "Erro de upload" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "Upload File" +msgstr "Enviar Arquivo" + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/mixins/file_upload.js:63 +#, python-format +msgid "Upload Files" +msgstr "Enviar Arquivos" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.onboarding_file_step +msgid "Upload your first File." +msgstr "Carregue o seu primeiro arquivo." + +#. module: muk_dms +#. openerp-web +#: code:addons/muk_dms/static/src/js/views/mixins/file_upload.js:64 +#, python-format +msgid "Uploading..." +msgstr "Enviando..." + +#. module: muk_dms +#: model:res.groups,name:muk_dms.group_dms_user +msgid "User" +msgstr "Usuário" + +#. module: muk_dms +#: model:muk_dms.tag,name:muk_dms.tag_09_demo +msgid "Vendor Bill" +msgstr "Conta de Fornecedor" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_res_config_settings__module_muk_dms_version +msgid "Versioning" +msgstr "Versionamento" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "Views" +msgstr "Visualizações" + +#. module: muk_dms +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_directory__permission_write +#: model:ir.model.fields,field_description:muk_dms.field_muk_dms_file__permission_write +msgid "Write Access" +msgstr "Acesso de Gravação" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "action_close_documents_onboarding" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "o_onboarding_blue" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +msgid "o_onboarding_orange" +msgstr "" + +#. module: muk_dms +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_directory_panel +#: model_terms:ir.ui.view,arch_db:muk_dms.document_onboarding_file_panel +msgid "res.company" +msgstr "" diff --git a/odex-event/muk_dms/models/__init__.py b/odex-event/muk_dms/models/__init__.py new file mode 100644 index 000000000..b1a5bfc33 --- /dev/null +++ b/odex-event/muk_dms/models/__init__.py @@ -0,0 +1,35 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import mixins_thumbnail + +from . import storage +from . import directory +from . import file + +from . import category +from . import tag + +from . import ir_http +from . import res_company +from . import res_config_settings + diff --git a/odex-event/muk_dms/models/category.py b/odex-event/muk_dms/models/category.py new file mode 100644 index 000000000..aa5b481e0 --- /dev/null +++ b/odex-event/muk_dms/models/category.py @@ -0,0 +1,151 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import models, api, fields + +_logger = logging.getLogger(__name__) + +class Category(models.Model): + + _name = 'muk_dms.category' + _description = "Document Category" + + _inherit = [ + 'muk_utils.mixins.hierarchy', + ] + + _order = "name asc" + + _parent_store = True + _parent_name = "parent_category" + + _parent_path_sudo = False + _parent_path_store = True + + _name_path_context = "dms_category_show_path" + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + name = fields.Char( + string='Name', + required=True, + translate=True) + + active = fields.Boolean( + default=True, + help="The active field allows you to hide the category without removing it.") + + parent_category = fields.Many2one( + comodel_name='muk_dms.category', + context="{'dms_category_show_path': True}", + string='Parent Category', + ondelete='cascade', + index=True) + + child_categories = fields.One2many( + comodel_name='muk_dms.category', + inverse_name='parent_category', + string='Child Categories') + + parent_path = fields.Char( + string="Parent Path", + index=True) + + tags = fields.One2many( + comodel_name='muk_dms.tag', + inverse_name='category', + string='Tags') + + directories = fields.One2many( + comodel_name='muk_dms.directory', + inverse_name='category', + string='Directories', + readonly=True) + + files = fields.One2many( + comodel_name='muk_dms.file', + inverse_name='category', + string='Files', + readonly=True) + + count_categories = fields.Integer( + compute='_compute_count_categories', + string="Count Subcategories") + + count_tags = fields.Integer( + compute='_compute_count_tags', + string="Count Tags") + + count_directories = fields.Integer( + compute='_compute_count_directories', + string="Count Directories") + + count_files = fields.Integer( + compute='_compute_count_files', + string="Count Files") + + #---------------------------------------------------------- + # Constrains + #---------------------------------------------------------- + + _sql_constraints = [ + ('name_uniq', 'unique (name)', "Category name already exists!"), + ] + + #---------------------------------------------------------- + # Read + #---------------------------------------------------------- + + @api.depends('child_categories') + def _compute_count_categories(self): + for record in self: + record.count_categories = len(record.child_categories) + + @api.depends('tags') + def _compute_count_tags(self): + for record in self: + record.count_tags = len(record.tags) + + @api.depends('directories') + def _compute_count_directories(self): + for record in self: + record.count_directories = len(record.directories) + + @api.depends('files') + def _compute_count_files(self): + for record in self: + record.count_files = len(record.files) + + #---------------------------------------------------------- + # Create + #---------------------------------------------------------- + + @api.constrains('parent_category') + def _check_category_recursion(self): + if not self._check_recursion(): + raise ValidationError(_('Error! You cannot create recursive categories.')) + return True + \ No newline at end of file diff --git a/odex-event/muk_dms/models/directory.py b/odex-event/muk_dms/models/directory.py new file mode 100644 index 000000000..534820f6d --- /dev/null +++ b/odex-event/muk_dms/models/directory.py @@ -0,0 +1,466 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import json +import base64 +import logging +import functools + +from collections import defaultdict + +from odoo import _, models, api, fields, tools +from odoo.modules.module import get_resource_path +from odoo.exceptions import ValidationError, AccessError +from odoo.osv import expression + +from odoo.addons.muk_utils.tools import file + +_logger = logging.getLogger(__name__) + +class Directory(models.Model): + + _name = 'muk_dms.directory' + _description = "Directory" + + _inherit = [ + 'muk_utils.mixins.hierarchy', + 'muk_security.mixins.access_rights', + 'muk_dms.mixins.thumbnail', + ] + + _order = "name asc" + + _parent_store = True + _parent_name = "parent_directory" + + _parent_path_sudo = False + _parent_path_store = False + + _name_path_context = "dms_directory_show_path" + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + name = fields.Char( + string="Name", + required=True, + index=True) + + is_root_directory = fields.Boolean( + string="Is Root Directory", + default=False, + help="""Indicates if the directory is a root directory. A root directory has a settings object, + while a directory with a set parent inherits the settings form its parent.""") + + root_storage = fields.Many2one( + comodel_name='muk_dms.storage', + string="Root Storage", + ondelete='restrict') + + storage = fields.Many2one( + compute='_compute_storage', + comodel_name='muk_dms.storage', + string="Storage", + ondelete='restrict', + auto_join=True, + readonly=True, + store=True) + + parent_directory = fields.Many2one( + comodel_name='muk_dms.directory', + domain="""[('permission_create', '=', True)]""", + context="{'dms_directory_show_path': True}", + string="Parent Directory", + ondelete='restrict', + auto_join=True, + index=True) + + child_directories = fields.One2many( + comodel_name='muk_dms.directory', + inverse_name='parent_directory', + string="Subdirectories", + auto_join=False, + copy=False) + + is_hidden = fields.Boolean( + string="Storage is Hidden", + related="storage.is_hidden", + readonly=True) + + company = fields.Many2one( + related="storage.company", + comodel_name='res.company', + string='Company', + readonly=True, + store=True, + index=True) + + color = fields.Integer( + string="Color", + default=0) + + category = fields.Many2one( + comodel_name='muk_dms.category', + context="{'dms_category_show_path': True}", + string="Category") + + tags = fields.Many2many( + comodel_name='muk_dms.tag', + relation='muk_dms_directory_tag_rel', + domain="""[ + '|', ['category', '=', False], + ['category', 'child_of', category]] + """, + column1='did', + column2='tid', + string='Tags') + + user_stars = fields.Many2many( + comodel_name='res.users', + relation='muk_dms_directory_star_rel', + column1='did', + column2='uid', + string='Stars') + + starred = fields.Boolean( + compute='_compute_starred', + inverse='_inverse_starred', + search='_search_starred', + string="Starred") + + files = fields.One2many( + comodel_name='muk_dms.file', + inverse_name='directory', + string="Files", + auto_join=False, + copy=False) + + count_directories = fields.Integer( + compute='_compute_count_directories', + string="Count Subdirectories") + + count_files = fields.Integer( + compute='_compute_count_files', + string="Count Files") + + count_elements = fields.Integer( + compute='_compute_count_elements', + string="Count Elements") + + count_total_directories = fields.Integer( + compute='_compute_count_total_directories', + string="Total Subdirectories") + + count_total_files = fields.Integer( + compute='_compute_count_total_files', + string="Total Files") + + count_total_elements = fields.Integer( + compute='_compute_count_total_elements', + string="Total Elements") + + size = fields.Integer( + compute='_compute_size', + string="Size") + + #---------------------------------------------------------- + # Functions + #---------------------------------------------------------- + + + def toggle_starred(self): + updates = defaultdict(set) + for record in self: + vals = {'starred': not record.starred} + updates[tools.frozendict(vals)].add(record.id) + with self.env.norecompute(): + for vals, ids in updates.items(): + self.browse(ids).write(dict(vals)) + self.recompute() + + #---------------------------------------------------------- + # Actions + #---------------------------------------------------------- + + + def action_save_onboarding_directory_step(self): + self.env.user.company_id.set_onboarding_step_done( + 'documents_onboarding_directory_state' + ) + + #---------------------------------------------------------- + # SearchPanel + #---------------------------------------------------------- + + @api.model + def _search_panel_directory(self, **kwargs): + search_domain = kwargs.get('search_domain', []), + if search_domain and len(search_domain): + for domain in search_domain[0]: + if domain[0] == 'parent_directory': + return domain[1], domain[2] + return None, None + + @api.model + def search_panel_select_multi_range(self, field_name, **kwargs): + operator, directory_id = self._search_panel_directory(**kwargs) + if field_name == 'tags': + sql_query = ''' + SELECT t.name AS name, t.id AS id, c.name AS group_name, + c.id AS group_id, COUNT(r.did) AS count + FROM muk_dms_tag t + JOIN muk_dms_category c ON t.category = c.id + LEFT JOIN muk_dms_directory_tag_rel r ON t.id = r.tid + {directory_where_clause} + GROUP BY c.name, c.id, t.name, t.id + ORDER BY c.name, c.id, t.name, t.id; + ''' + where_clause = '' + if directory_id: + directory_ids = [directory_id] + if operator == 'child_of': + directory_ids = self.search([('id', operator, directory_id)]).ids + directory_where_clause = 'WHERE r.did = ANY (VALUES {ids})' + where_clause = '' if not directory_ids else directory_where_clause.format( + ids=', '.join(map(lambda id: '(%s)' % id, directory_ids)) + ) + self.env.cr.execute(sql_query.format(directory_where_clause=where_clause), []) + return self.env.cr.dictfetchall() + if directory_id and field_name == 'category': + comodel_domain = kwargs.pop('comodel_domain', []) + domain = [('directories', operator, directory_id)] + comodel_domain = expression.AND([comodel_domain, domain]) + return super(Directory, self).search_panel_select_multi_range( + field_name, comodel_domain=comodel_domain, **kwargs + ) + if directory_id and field_name == 'parent_directory': + comodel_domain = kwargs.pop('comodel_domain', []) + domain = [('parent_directory', operator, directory_id)] + comodel_domain = expression.AND([comodel_domain, domain]) + return super(Directory, self).search_panel_select_multi_range( + field_name, comodel_domain=comodel_domain, **kwargs + ) + return super(Directory, self).search_panel_select_multi_range(field_name, **kwargs) + + #---------------------------------------------------------- + # Search + #---------------------------------------------------------- + + @api.model + def _search_starred(self, operator, operand): + if operator == '=' and operand: + return [('user_stars', 'in', [self.env.uid])] + return [('user_stars', 'not in', [self.env.uid])] + + #---------------------------------------------------------- + # Read + #---------------------------------------------------------- + + @api.depends('root_storage', 'parent_directory') + def _compute_storage(self): + for record in self: + if record.is_root_directory: + record.storage = record.root_storage + else: + record.storage = record.parent_directory.storage + + @api.depends('user_stars') + def _compute_starred(self): + for record in self: + record.starred = self.env.user in record.user_stars + + @api.depends('child_directories') + def _compute_count_directories(self): + for record in self: + record.count_directories = len(record.child_directories) + + @api.depends('files') + def _compute_count_files(self): + for record in self: + record.count_files = len(record.files) + + @api.depends('child_directories', 'files') + def _compute_count_elements(self): + for record in self: + elements = record.count_files + elements += record.count_directories + record.count_elements = elements + + + def _compute_count_total_directories(self): + for record in self: + count = self.search_count([ + ('id', 'child_of', record.id) + ]) + count = count - 1 if count > 0 else 0 + record.count_total_directories = count + + + def _compute_count_total_files(self): + model = self.env['muk_dms.file'] + for record in self: + record.count_total_files = model.search_count([ + ('directory', 'child_of', record.id) + ]) + + + def _compute_count_total_elements(self): + for record in self: + total_elements = record.count_total_files + total_elements += record.count_total_directories + record.count_total_elements = total_elements + + + def _compute_size(self): + sudo_model = self.env['muk_dms.file'].sudo() + for record in self: + recs = sudo_model.search_read( + domain=[('directory', 'child_of', record.id)], + fields=['size'], + ) + record.size = sum(rec.get('size', 0) for rec in recs) + + #---------------------------------------------------------- + # View + #---------------------------------------------------------- + + @api.onchange('is_root_directory') + def _onchange_directory_type(self): + if self.is_root_directory: + self.parent_directory = None + else: + self.root_storage = None + + @api.onchange('category') + def _change_category(self): + tags = self.tags.filtered( + lambda rec: not rec.category or \ + rec.category == self.category + ) + self.tags = tags + + #---------------------------------------------------------- + # Constrains + #---------------------------------------------------------- + + @api.constrains('parent_directory') + def _check_directory_recursion(self): + if not self._check_recursion(): + raise ValidationError(_('Error! You cannot create recursive directories.')) + return True + + @api.constrains('is_root_directory', 'root_storage', 'parent_directory') + def _check_directory_storage(self): + for record in self: + if record.is_root_directory and not record.root_storage: + raise ValidationError(_("A root directory has to have a root storage.")) + if not record.is_root_directory and not record.parent_directory: + raise ValidationError(_("A directory has to have a parent directory.")) + if record.parent_directory and (record.is_root_directory or record.root_storage): + raise ValidationError(_("A directory can't be a root and have a parent directory.")) + + @api.constrains('parent_directory') + def _check_directory_access(self): + for record in self: + if not record.parent_directory.check_access('create', raise_exception=False): + raise ValidationError(_("The parent directory has to have the permission to create directories.")) + + @api.constrains('name') + def _check_name(self): + for record in self: + if not file.check_name(record.name): + raise ValidationError(_("The directory name is invalid.")) + if record.is_root_directory: + childs = record.sudo().root_storage.root_directories.name_get() + else: + childs = record.sudo().parent_directory.child_directories.name_get() + if list(filter(lambda child: child[1] == record.name and child[0] != record.id, childs)): + raise ValidationError(_("A directory with the same name already exists.")) + + #---------------------------------------------------------- + # Create, Update, Delete + #---------------------------------------------------------- + + + def _inverse_starred(self): + starred_records = self.env['muk_dms.directory'].sudo() + not_starred_records = self.env['muk_dms.directory'].sudo() + for record in self: + if not record.starred and self.env.user in record.user_stars: + starred_records |= record + elif record.starred and self.env.user not in record.user_stars: + not_starred_records |= record + not_starred_records.write({'user_stars': [(4, self.env.uid)]}) + starred_records.write({'user_stars': [(3, self.env.uid)]}) + + + @api.returns('self', lambda value: value.id) + def copy(self, default=None): + self.ensure_one() + default = dict(default or []) + names = [] + if 'root_storage' in default: + storage = self.env['muk_dms.storage'].browse(default['root_storage']) + names = storage.sudo().root_directories.mapped('name') + elif 'parent_directory' in default: + parent_directory = self.browse(default['parent_directory']) + names = parent_directory.sudo().child_directories.mapped('name') + elif self.is_root_directory: + names = self.sudo().root_storage.root_directories.mapped('name') + else: + names = self.sudo().parent_directory.child_directories.mapped('name') + default.update({'name': file.unique_name(self.name, names)}) + new = super(Directory, self).copy(default) + for record in self.files: + record.copy({'directory': new.id}) + for record in self.child_directories: + record.copy({'parent_directory': new.id}) + return new + + + def write(self, vals): + res = super(Directory, self).write(vals) + if self and any(field in vals for field in ['root_storage', 'parent_directory']): + records = self.sudo().search([('id', 'child_of', self.ids)]) - self + if 'root_storage' in vals: + records.write({'storage': vals['root_storage']}) + elif 'parent_directory' in vals: + parent = self.browse([vals['parent_directory']]) + data = next(iter(parent.sudo().read(['storage'])), {}) + records.write({'storage': self._convert_to_write(data).get('storage')}) + return res + + + def unlink(self): + if self and self.check_access('unlink', raise_exception=True): + domain = [ + '&', ('directory', 'child_of', self.ids), + '&', ('locked_by', '!=', self.env.uid), + ('locked_by', '!=', False), + ] + if self.env['muk_dms.file'].sudo().search(domain): + raise AccessError(_("A file is locked, the folder cannot be deleted.")) + self.env['muk_dms.file'].sudo().search([('directory', 'child_of', self.ids)]).unlink() + return super(Directory, self.sudo().search([('id', 'child_of', self.ids)])).unlink() + return super(Directory, self).unlink() diff --git a/odex-event/muk_dms/models/file.py b/odex-event/muk_dms/models/file.py new file mode 100644 index 000000000..75fc11be9 --- /dev/null +++ b/odex-event/muk_dms/models/file.py @@ -0,0 +1,568 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import io +import json +import base64 +import logging +import mimetypes +import itertools +import tempfile +import hashlib +import operator +import functools + +from collections import defaultdict + +from odoo import _, SUPERUSER_ID +from odoo import models, api, fields, tools +from odoo.tools.mimetypes import guess_mimetype +from odoo.exceptions import ValidationError +from odoo.exceptions import AccessError +from odoo.osv import expression + +from odoo.addons.muk_utils.tools import file +from odoo.addons.muk_security.tools.security import NoSecurityUid + +_logger = logging.getLogger(__name__) + +class File(models.Model): + + _name = 'muk_dms.file' + _description = "File" + + _inherit = [ + 'muk_security.mixins.access_rights', + 'muk_security.mixins.locking', + 'muk_dms.mixins.thumbnail', + ] + + _order = "name asc" + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + name = fields.Char( + string="Filename", + required=True, + index=True) + + active = fields.Boolean( + string="Archived", + default=True, + help="If a file is set to archived, it is not displayed, but still exists.") + + directory = fields.Many2one( + comodel_name='muk_dms.directory', + string="Directory", + domain="[('permission_create', '=', True)]", + context="{'dms_directory_show_path': True}", + ondelete='restrict', + auto_join=True, + required=True, + index=True) + + storage = fields.Many2one( + related="directory.storage", + comodel_name='muk_dms.storage', + string="Storage", + auto_join=True, + readonly=True, + store=True) + + is_hidden = fields.Boolean( + string="Storage is Hidden", + related="storage.is_hidden", + readonly=True) + + company = fields.Many2one( + related="storage.company", + comodel_name='res.company', + string='Company', + readonly=True, + store=True, + index=True) + + path_names = fields.Char( + compute='_compute_path', + string="Path Names", + readonly=True, + store=False) + + path_json = fields.Text( + compute='_compute_path', + string="Path Json", + readonly=True, + store=False) + + color = fields.Integer( + string="Color", + default=0) + + category = fields.Many2one( + comodel_name='muk_dms.category', + context="{'dms_category_show_path': True}", + string="Category") + + tags = fields.Many2many( + comodel_name='muk_dms.tag', + relation='muk_dms_file_tag_rel', + column1='fid', + column2='tid', + string='Tags') + + content = fields.Binary( + compute='_compute_content', + inverse='_inverse_content', + string='Content', + attachment=False, + prefetch=False, + required=True, + store=False) + + extension = fields.Char( + compute='_compute_extension', + string='Extension', + readonly=True, + store=True) + + mimetype = fields.Char( + compute='_compute_mimetype', + string='Type', + readonly=True, + store=True) + + size = fields.Integer( + string='Size', + readonly=True) + + checksum = fields.Char( + string="Checksum/SHA1", + readonly=True, + size=40, + index=True) + + content_binary = fields.Binary( + string="Content Binary", + attachment=False, + prefetch=False, + invisible=True) + + save_type = fields.Char( + compute='_compute_save_type', + string='Current Save Type', + invisible=True, + prefetch=False) + + migration = fields.Char( + compute='_compute_migration', + string='Migration Status', + readonly=True, + prefetch=False) + + #---------------------------------------------------------- + # Helper + #---------------------------------------------------------- + + @api.model + def _get_checksum(self, binary): + return hashlib.sha1(binary or b'').hexdigest() + + @api.model + def _get_content_inital_vals(self): + return {'content_binary': False} + + @api.model + def _update_content_vals(self, file, vals, binary): + vals.update({ + 'checksum': self._get_checksum(binary), + 'size': binary and len(binary) or 0, + }) + return vals + + @api.model + def _get_binary_max_size(self): + get_param = self.env['ir.config_parameter'].sudo().get_param + return int(get_param('muk_web_utils.binary_max_size', default=25)) + + @api.model + def _get_forbidden_extensions(self): + get_param = self.env['ir.config_parameter'].sudo().get_param + extensions = get_param('muk_dms.forbidden_extensions', default="") + return [extension.strip() for extension in extensions.split(',')] + + + def _get_thumbnail_placeholder_name(self): + return self.extension and "file_%s.svg" % self.extension or "" + + #---------------------------------------------------------- + # Actions + #---------------------------------------------------------- + + + def action_migrate(self, logging=True): + record_count = len(self) + for index, file in enumerate(self): + if logging: + info = (index + 1, record_count, file.migration) + _logger.info(_("Migrate File %s of %s [ %s ]") % info) + file.with_context(migration=True).write({ + 'content': file.with_context({}).content + }) + + + def action_save_onboarding_file_step(self): + self.env.user.company_id.set_onboarding_step_done( + 'documents_onboarding_file_state' + ) + + #---------------------------------------------------------- + # SearchPanel + #---------------------------------------------------------- + + @api.model + def _search_panel_directory(self, **kwargs): + search_domain = kwargs.get('search_domain', []), + category_domain = kwargs.get('category_domain', []) + if category_domain and len(category_domain): + return '=', category_domain[0][2] + if search_domain and len(search_domain): + for domain in search_domain[0]: + if domain[0] == 'directory': + return domain[1], domain[2] + return None, None + + @api.model + def _search_panel_domain(self, field, operator, directory_id, comodel_domain=[]): + files_ids = self.search([('directory', operator, directory_id)]).ids + return expression.AND([comodel_domain, [(field, 'in', files_ids)]]) + + @api.model + def search_panel_select_range(self, field_name, **kwargs): + operator, directory_id = self._search_panel_directory(**kwargs) + if directory_id and field_name == 'directory': + values = self.env['muk_dms.directory'].search_read( + [('parent_directory', operator, directory_id)], + ['display_name', 'parent_directory'] + ) + return { + 'parent_field': 'parent_directory', + 'values': values if len(values) > 1 else [], + } + return super(File, self).search_panel_select_range(field_name, **kwargs) + + @api.model + def search_panel_select_multi_range(self, field_name, **kwargs): + operator, directory_id = self._search_panel_directory(**kwargs) + if field_name == 'tags': + sql_query = ''' + SELECT t.name AS name, t.id AS id, c.name AS group_name, + c.id AS group_id, COUNT(r.fid) AS count + FROM muk_dms_tag t + JOIN muk_dms_category c ON t.category = c.id + LEFT JOIN muk_dms_file_tag_rel r ON t.id = r.tid + {directory_where_clause} + GROUP BY c.name, c.id, t.name, t.id + ORDER BY c.name, c.id, t.name, t.id; + ''' + where_clause = '' + if directory_id: + directory_where_clause = 'WHERE r.fid = ANY (VALUES {ids})' + file_ids = self.search([('directory', operator, directory_id)]).ids + where_clause = '' if not file_ids else directory_where_clause.format( + ids=', '.join(map(lambda id: '(%s)' % id, file_ids)) + ) + self.env.cr.execute(sql_query.format(directory_where_clause=where_clause), []) + return self.env.cr.dictfetchall() + if directory_id and field_name in ['directory', 'category']: + comodel_domain = kwargs.pop('comodel_domain', []) + directory_comodel_domain = self._search_panel_domain( + 'files', operator, directory_id, comodel_domain + ) + return super(File, self).search_panel_select_multi_range( + field_name, comodel_domain=directory_comodel_domain, **kwargs + ) + return super(File, self).search_panel_select_multi_range(field_name, **kwargs) + + #---------------------------------------------------------- + # Read + #---------------------------------------------------------- + + @api.depends('name', 'directory', 'directory.parent_path') + def _compute_path(self): + records_with_directory = self - self.filtered(lambda rec: not rec.directory) + if records_with_directory: + paths = [list(map(int, rec.directory.parent_path.split('/')[:-1])) for rec in records_with_directory] + model = self.env['muk_dms.directory'].with_context(dms_directory_show_path=False) + directories = model.browse(set(functools.reduce(operator.concat, paths))) + data = dict(directories._filter_access('read').name_get()) + for record in self: + path_names = [] + path_json = [] + for id in reversed(list(map(int, record.directory.parent_path.split('/')[:-1]))): + if id not in data: + break + path_names.append(data[id]) + path_json.append({ + 'model': model._name, + 'name': data[id], + 'id': id, + }) + path_names.reverse() + path_json.reverse() + name = record.name_get() + path_names.append(name[0][1]) + path_json.append({ + 'model': record._name, + 'name': name[0][1], + 'id': isinstance(record.id, int) and record.id or 0, + }) + record.update({ + 'path_names': '/'.join(path_names), + 'path_json': json.dumps(path_json), + }) + + @api.depends('name') + def _compute_extension(self): + for record in self: + record.extension = file.guess_extension(record.name) + + @api.depends('name') + def _compute_mimetype(self): + for record in self: + mimetype = record.name and mimetypes.guess_type(record.name)[0] + if not mimetype: + binary = base64.b64decode(record.with_context({}).content or "") + mimetype = guess_mimetype(binary, default='application/octet-stream') + record.mimetype = mimetype + + @api.depends('content_binary') + def _compute_content(self): + for record in self: + record.content = record.content_binary + + @api.depends('content_binary') + def _compute_save_type(self): + for record in self: + record.save_type = "database" + + @api.depends('storage', 'storage.save_type') + def _compute_migration(self): + storage_model = self.env['muk_dms.storage'] + save_field = storage_model._fields['save_type'] + values = save_field._description_selection(self.env) + selection = {value[0]: value[1] for value in values} + for record in self: + storage_type = record.storage.save_type + if storage_type != record.save_type: + storage_label = selection.get(storage_type) + file_label = selection.get(record.save_type) + record.migration = "%s > %s" % (file_label, storage_label) + else: + record.migration = selection.get(storage_type) + + + def read(self, fields=None, load='_classic_read'): + self.check_directory_access('read', {}, True) + return super(File, self).read(fields, load=load) + + #---------------------------------------------------------- + # View + #---------------------------------------------------------- + + @api.onchange('category') + def _change_category(self): + res = {'domain': { + 'tags': [('category', '=', False)] + }} + if self.category: + res.update({'domain': { + 'tags': ['|', + ('category', '=', False), + ('category', 'child_of', self.category.id) + ] + }}) + tags = self.tags.filtered( + lambda rec: not rec.category or \ + rec.category == self.category + ) + self.tags = tags + return res + + #---------------------------------------------------------- + # Security + #---------------------------------------------------------- + + @api.model + def _get_directories_from_database(self, file_ids): + if not file_ids: + return self.env['muk_dms.directory'] + sql_query = ''' + SELECT directory + FROM muk_dms_file + WHERE id = ANY (VALUES {ids}); + '''.format( + ids=', '.join(map(lambda id: '(%s)' % id, file_ids)) + ) + self.env.cr.execute(sql_query, []) + result = set(val[0] for val in self.env.cr.fetchall()) + return self.env['muk_dms.directory'].browse(result) + + @api.model + def _read_group_process_groupby(self, gb, query): + if self.env.user.id == SUPERUSER_ID or isinstance(self.env.uid, NoSecurityUid): + return super(File, self)._read_group_process_groupby(gb, query) + directories = self.env['muk_dms.directory'].with_context(prefetch_fields=False).search([]) + if directories: + where_clause = '"{table}"."{field}" = ANY (VALUES {ids})'.format( + table=self._table, + field='directory', + ids=', '.join(map(lambda id: '(%s)' % id, directories.ids)), + ) + query.where_clause += [where_clause] + else: + query.where_clause += ['0=1'] + return super(File, self)._read_group_process_groupby(gb, query) + + @api.model + def _search(self, args, offset=0, limit=None, order=None, count=False, access_rights_uid=None): + result = super(File, self)._search(args, offset, limit, order, False, access_rights_uid) + if self.env.user.id == SUPERUSER_ID or isinstance(self.env.uid, NoSecurityUid): + return len(result) if count else result + if not result: + return 0 if count else [] + file_ids = set(result) + directories = self._get_directories_from_database(result) + for directory in directories - directories._filter_access('read'): + file_ids -= set(directory.sudo().mapped('files').ids) + return len(file_ids) if count else list(file_ids) + + + def _filter_access(self, operation): + records = super(File, self)._filter_access(operation) + if self.env.user.id == SUPERUSER_ID or isinstance(self.env.uid, NoSecurityUid): + return records + directories = self._get_directories_from_database(records.ids) + for directory in directories - directories._filter_access('read'): + records -= self.browse(directory.sudo().mapped('files').ids) + return records + + + def check_access(self, operation, raise_exception=False): + res = super(File, self).check_access(operation, raise_exception) + try: + return res and self.check_directory_access(operation) == None + except AccessError: + if raise_exception: + raise + return False + + + def check_directory_access(self, operation, vals={}, raise_exception=False): + if self.env.user.id == SUPERUSER_ID or isinstance(self.env.uid, NoSecurityUid): + return None + if 'directory' in vals and vals['directory']: + records = self.env['muk_dms.directory'].browse(vals['directory']) + else: + records = self._get_directories_from_database(self.ids) + return records.check_access(operation, raise_exception) + + #---------------------------------------------------------- + # Constrains + #---------------------------------------------------------- + + @api.constrains('name') + def _check_name(self): + for record in self: + if not file.check_name(record.name): + raise ValidationError(_("The file name is invalid.")) + files = record.sudo().directory.files.name_get() + if list(filter(lambda file: file[1] == record.name and file[0] != record.id, files)): + raise ValidationError(_("A file with the same name already exists.")) + + @api.constrains('extension') + def _check_extension(self): + for record in self: + if record.extension and record.extension in self._get_forbidden_extensions(): + raise ValidationError(_("The file has a forbidden file extension.")) + + @api.constrains('size') + def _check_size(self): + for record in self: + if record.size and record.size > self._get_binary_max_size() * 1024 * 1024: + raise ValidationError(_("The maximum upload size is %s MB).") % self._get_binary_max_size()) + + @api.constrains('directory') + def _check_directory_access(self): + for record in self: + if not record.directory.check_access('create', raise_exception=False): + raise ValidationError(_("The directory has to have the permission to create files.")) + + #---------------------------------------------------------- + # Create, Update, Delete + #---------------------------------------------------------- + + + def _inverse_content(self): + updates = defaultdict(set) + for record in self: + values = self._get_content_inital_vals() + binary = base64.b64decode(record.content or "") + values = self._update_content_vals(record, values, binary) + values.update({ + 'content_binary': record.content, + }) + updates[tools.frozendict(values)].add(record.id) + with self.env.norecompute(): + for vals, ids in updates.items(): + self.browse(ids).write(dict(vals)) + self.recompute() + + + @api.returns('self', lambda value: value.id) + def copy(self, default=None): + self.ensure_one() + default = dict(default or []) + names = [] + if 'directory' in default: + model = self.env['muk_dms.directory'] + directory = model.browse(default['directory']) + names = directory.sudo().files.mapped('name') + else: + names = self.sudo().directory.files.mapped('name') + default.update({ + 'name': file.unique_name(self.name, names, self.extension) + }) + self.check_directory_access('create', default, True) + return super(File, self).copy(default) + + + def write(self, vals): + self.check_directory_access('write', vals, True) + return super(File, self).write(vals) + + + def unlink(self): + self.check_directory_access('unlink', {}, True) + return super(File, self).unlink() \ No newline at end of file diff --git a/odex-event/muk_dms/models/ir_http.py b/odex-event/muk_dms/models/ir_http.py new file mode 100644 index 000000000..3e100b414 --- /dev/null +++ b/odex-event/muk_dms/models/ir_http.py @@ -0,0 +1,62 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import base64 +import logging +import mimetypes + +from odoo import models +from odoo.exceptions import AccessError +from odoo.http import request, STATIC_CACHE +from odoo.tools.mimetypes import guess_mimetype + +_logger = logging.getLogger(__name__) + +class IrHttp(models.AbstractModel): + + _inherit = 'ir.http' + + @classmethod + def binary_content(cls, xmlid=None, model='ir.attachment', id=None, field='datas', unique=False, filename=None, + filename_field='datas_fname', download=False, mimetype=None, default_mimetype='application/octet-stream', + access_token=None, related_id=None, access_mode=None, env=None): + res_status, res_headers, res_content = super(IrHttp, cls).binary_content( + xmlid=xmlid, model=model, id=id, field=field, unique=unique, filename=filename, mimetype=mimetype, + filename_field=filename_field, download=download, access_mode=access_mode, related_id=related_id, + default_mimetype=default_mimetype, access_token=access_token, env=env) + if res_status == 200: + env = env or request.env + if model == "muk_dms.file" and field != 'content': + obj = cls._xmlid_to_obj(env, xmlid) if xmlid else env[model].browse(int(id)) + filename = obj[filename_field] if not filename and filename_field in obj else filename + mimetype = filename and mimetypes.guess_type(filename)[0] + if not mimetype: + mimetype = guess_mimetype(base64.b64decode(res_content), default=default_mimetype) + headers = [] + for header in res_headers: + if header[0] == 'Content-Type': + headers.append(('Content-Type', mimetype)) + else: + headers.append(header) + return res_status, headers, res_content + return res_status, res_headers, res_content + \ No newline at end of file diff --git a/odex-event/muk_dms/models/mixins_thumbnail.py b/odex-event/muk_dms/models/mixins_thumbnail.py new file mode 100644 index 000000000..8b97556c4 --- /dev/null +++ b/odex-event/muk_dms/models/mixins_thumbnail.py @@ -0,0 +1,158 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import json +import base64 +import operator +import functools +import collections + +from odoo import models, fields, api, tools +from odoo.modules.module import get_resource_path + +class Thumbnail(models.AbstractModel): + + _name = 'muk_dms.mixins.thumbnail' + _description = 'Thumbnail Mixin' + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + custom_thumbnail = fields.Binary( + string="Custom Thumbnail", + attachment=False, + prefetch=False) + + custom_thumbnail_medium = fields.Binary( + string="Medium Custom Thumbnail", + attachment=False, + prefetch=False) + + custom_thumbnail_small = fields.Binary( + string="Small Custom Thumbnail", + attachment=False, + prefetch=False) + + thumbnail = fields.Binary( + compute='_compute_thumbnail', + string="Thumbnail") + + thumbnail_medium = fields.Binary( + compute='_compute_thumbnail_medium', + string="Medium Thumbnail") + + thumbnail_small = fields.Binary( + compute='_compute_thumbnail_small', + string="Small Thumbnail") + + #---------------------------------------------------------- + # Helper + #---------------------------------------------------------- + + @api.model + def _get_thumbnail_placeholder(self, field, size, name): + if self._check_context_bin_size(field): + return self._get_thumbnail_placeholder_size(size, name) + else: + return self._get_thumbnail_placeholder_image(size, name) + + @api.model + def _get_thumbnail_placeholder_image(self, size, name): + path = self._get_thumbnail_path(size, name) + with open(path, "rb") as image: + return base64.b64encode(image.read()) + + @api.model + def _get_thumbnail_placeholder_size(self, size, name): + return os.path.getsize(self._get_thumbnail_path(size, name)) + + @api.model + def _get_thumbnail_path(self, size, name): + folders = ['static', 'src', 'img', 'thumbnails'] + path = get_resource_path('muk_dms', *folders, name) + if not os.path.isfile(path): + path = get_resource_path('muk_dms', *folders, "file_unkown.svg") + return path + + + def _get_thumbnail_placeholder_name(self): + return "folder.svg" + + #---------------------------------------------------------- + # Read + #---------------------------------------------------------- + + @api.depends('custom_thumbnail') + def _compute_thumbnail(self): + for record in self: + if record.custom_thumbnail: + record.thumbnail = record.custom_thumbnail + else: + record.thumbnail = self._get_thumbnail_placeholder( + 'thumbnail', 'original', record._get_thumbnail_placeholder_name() + ) + + @api.depends('custom_thumbnail_medium') + def _compute_thumbnail_medium(self): + for record in self: + if record.custom_thumbnail_medium: + record.thumbnail_medium = record.custom_thumbnail_medium + else: + record.thumbnail_medium = self._get_thumbnail_placeholder( + 'thumbnail_medium', 'medium', record._get_thumbnail_placeholder_name() + ) + + @api.depends('custom_thumbnail_small') + def _compute_thumbnail_small(self): + for record in self: + if record.custom_thumbnail_small: + record.thumbnail_small = record.custom_thumbnail_small + else: + record.thumbnail_small = self._get_thumbnail_placeholder( + 'thumbnail_small', 'small', record._get_thumbnail_placeholder_name() + ) + + #---------------------------------------------------------- + # Create, Update, Delete + #---------------------------------------------------------- + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + tools.image_resize_images(vals, + big_name='custom_thumbnail', + medium_name='custom_thumbnail_medium', + small_name='custom_thumbnail_small' + ) + return super(Thumbnail, self).create(vals_list) + + + def write(self, vals): + tools.image_resize_images(vals, + big_name='custom_thumbnail', + medium_name='custom_thumbnail_medium', + small_name='custom_thumbnail_small' + ) + return super(Thumbnail, self).write(vals) + \ No newline at end of file diff --git a/odex-event/muk_dms/models/res_company.py b/odex-event/muk_dms/models/res_company.py new file mode 100644 index 000000000..efcfe0890 --- /dev/null +++ b/odex-event/muk_dms/models/res_company.py @@ -0,0 +1,123 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import models, api, fields + +_logger = logging.getLogger(__name__) + +class ResCompany(models.Model): + + _inherit = 'res.company' + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + documents_onboarding_state = fields.Selection( + selection=[ + ('not_done', "Not done"), + ('just_done', "Just done"), + ('done', "Done"), + ('closed', "Closed") + ], + string="Documents Onboarding State", + default='not_done') + + documents_onboarding_storage_state = fields.Selection( + selection=[ + ('not_done', "Not done"), + ('just_done', "Just done"), + ('done', "Done"), + ('closed', "Closed") + ], + string="Documents Onboarding Storage State", + default='not_done') + + documents_onboarding_directory_state = fields.Selection( + selection=[ + ('not_done', "Not done"), + ('just_done', "Just done"), + ('done', "Done"), + ('closed', "Closed") + ], + string="Documents Onboarding Directory State", + default='not_done') + + documents_onboarding_file_state = fields.Selection( + selection=[ + ('not_done', "Not done"), + ('just_done', "Just done"), + ('done', "Done"), + ('closed', "Closed") + ], + string="Documents Onboarding File State", + default='not_done') + + #---------------------------------------------------------- + # Functions + #---------------------------------------------------------- + + def get_and_update_documents_onboarding_state(self): + return self.get_and_update_onbarding_state( + 'documents_onboarding_state', + self.get_documents_steps_states_names() + ) + + def get_documents_steps_states_names(self): + return [ + 'documents_onboarding_storage_state', + 'documents_onboarding_directory_state', + 'documents_onboarding_file_state', + ] + + #---------------------------------------------------------- + # Actions + #---------------------------------------------------------- + + @api.model + def action_open_documents_onboarding_storage(self): + return self.env.ref('muk_dms.action_dms_storage_new').read()[0] + + @api.model + def action_open_documents_onboarding_directory(self): + storage = self.env['muk_dms.storage'].search([], order="create_date desc", limit=1) + action = self.env.ref('muk_dms.action_dms_directory_new').read()[0] + action['context'] = {**self.env.context, **{ + 'default_is_root_directory': True, + 'default_root_storage': storage and storage.id + }} + return action + + @api.model + def action_open_documents_onboarding_file(self): + directory = self.env['muk_dms.directory'].search([], order="create_date desc", limit=1) + action = self.env.ref('muk_dms.action_dms_file_new').read()[0] + action['context'] = {**self.env.context, **{ + 'default_directory': directory and directory.id + }} + return action + + @api.model + def action_close_documents_onboarding(self): + self.env.user.company_id.documents_onboarding_state = 'closed' diff --git a/odex-event/muk_dms/models/res_config_settings.py b/odex-event/muk_dms/models/res_config_settings.py new file mode 100644 index 000000000..1693dd21b --- /dev/null +++ b/odex-event/muk_dms/models/res_config_settings.py @@ -0,0 +1,171 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from odoo import api, fields, models + +class ResConfigSettings(models.TransientModel): + + _inherit = 'res.config.settings' + + #---------------------------------------------------------- + # Base Addons + #---------------------------------------------------------- + + module_muk_dms_access = fields.Boolean( + string="Access Control", + help="Allows the creation of groups to define access rights.") + + module_muk_dms_mail = fields.Boolean( + string="Mail Support", + help="Adds support for messages and activities on directories and files.") + + module_muk_dms_version = fields.Boolean( + string="Versioning", + help="Enables version control for files.") + + module_muk_dms_trash = fields.Boolean( + string="Restore Files", + help="Activates a file trash to restore deleted files.") + + module_muk_dms_widget = fields.Boolean( + string="Binary Widget Support", + help="Allows the user to use documents as input for any binary field.") + + module_muk_dms_archive = fields.Boolean( + string="Download Directories", + help="Allows to download directories as a archive file.") + + module_muk_dms_thumbnails = fields.Boolean( + string="File Thumbnails", + help="Automatically create file thumbnails based on the content.") + + module_muk_dms_index = fields.Boolean( + string="File Indexation", + help="Automatically create a file index based on the content.") + + #---------------------------------------------------------- + # Views + #---------------------------------------------------------- + + module_muk_dms_preview = fields.Boolean( + string="File Preview", + help="Activates the preview function on files.") + + module_muk_dms_view = fields.Boolean( + string="Tree View", + help="Activates the documents tree view.") + + module_muk_dms_finder = fields.Boolean( + string="Finder", + help="Enables the Document Finder.") + + #---------------------------------------------------------- + # Storage Addons + #---------------------------------------------------------- + + module_muk_dms_lobject = fields.Boolean( + string="Large Objects Storage", + help="Enables a new save option to store files into large objects.") + + module_muk_dms_file = fields.Boolean( + string="Filestore Storage", + help="Enables a new save option to store files into a filestore.") + + #---------------------------------------------------------- + # Attachment Addons + #---------------------------------------------------------- + + module_muk_dms_attachment = fields.Boolean( + string="Documents Storage Location", + help="Allows attachments to be stored inside of Documents.") + + module_muk_dms_attachment_rules = fields.Boolean( + string="Documents Storage Rules", + help="Allows attachments to be automatically placed in the right directory.") + + module_muk_dms_attachment_automation = fields.Boolean( + string="Attachment Rule Automation", + help="Allows you to create rule templates to create attachment rules.") + + module_muk_dms_attachment_wizard = fields.Boolean( + string="Attachment Wizard", + help="Allows documents to be used as attachments.") + + #---------------------------------------------------------- + # Integrations + #---------------------------------------------------------- + + module_muk_dms_actions = fields.Boolean( + string="Document Actions", + help="Create custom file operations.") + + module_muk_dms_users = fields.Boolean( + string="Personal Documents", + help="Automatic creation of user directories.") + + #---------------------------------------------------------- + # ... Addons + #---------------------------------------------------------- + + + + module_muk_dms_thumbnails = fields.Boolean( + string="Automatic Thumbnails", + help="Allows the creation of thumbnails for files.") + + module_muk_dms_export = fields.Boolean( + string="Export Files", + help="Allows the conversion of existing files.") + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + documents_binary_max_size = fields.Integer( + string="Size", + help="Defines the maximum upload size in MB. Default (25MB)") + + documents_forbidden_extensions = fields.Char( + string="Extensions", + help="Defines a list of forbidden file extensions. (Example: 'exe,msi')") + + #---------------------------------------------------------- + # Functions + #---------------------------------------------------------- + + + def set_values(self): + res = super(ResConfigSettings, self).set_values() + param = self.env['ir.config_parameter'].sudo() + param.set_param('muk_web_utils.binary_max_size', self.documents_binary_max_size) + param.set_param('muk_dms.forbidden_extensions', self.documents_forbidden_extensions) + return res + + @api.model + def get_values(self): + res = super(ResConfigSettings, self).get_values() + params = self.env['ir.config_parameter'].sudo() + res.update( + documents_binary_max_size=int(params.get_param('muk_web_utils.binary_max_size', default=25)), + documents_forbidden_extensions=params.get_param('muk_dms.forbidden_extensions', default=""), + ) + return res diff --git a/odex-event/muk_dms/models/storage.py b/odex-event/muk_dms/models/storage.py new file mode 100644 index 000000000..d3e9da917 --- /dev/null +++ b/odex-event/muk_dms/models/storage.py @@ -0,0 +1,128 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging +import textwrap + +from odoo import _, models, api, fields +from odoo.exceptions import AccessError + +_logger = logging.getLogger(__name__) + +class Storage(models.Model): + + _name = 'muk_dms.storage' + _description = "Storage" + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + name = fields.Char( + string="Name", + required=True) + + save_type = fields.Selection( + selection=[("database", _('Database'))], + string="Save Type", + default="database", + required=True, + help="""The save type is used to determine how a file is saved by the system. If you change + this setting, you can migrate existing files manually by triggering the action.""") + + company = fields.Many2one( + comodel_name='res.company', + string='Company', + default=lambda self: self.env.user.company_id, + help="If set, directories and files will only be available for the selected company.") + + is_hidden = fields.Boolean( + string="Storage is Hidden", + default=False, + help="Indicates if directories and files are hidden by default.") + + root_directories = fields.One2many( + comodel_name='muk_dms.directory', + inverse_name='root_storage', + string="Root Directories", + auto_join=False, + readonly=False, + copy=False) + + storage_directories = fields.One2many( + comodel_name='muk_dms.directory', + inverse_name='storage', + string="Directories", + auto_join=False, + readonly=True, + copy=False) + + storage_files = fields.One2many( + comodel_name='muk_dms.file', + inverse_name='storage', + string="Files", + auto_join=False, + readonly=True, + copy=False) + + count_storage_directories = fields.Integer( + compute='_compute_count_storage_directories', + string="Count Directories") + + count_storage_files = fields.Integer( + compute='_compute_count_storage_files', + string="Count Files") + + #---------------------------------------------------------- + # Actions + #---------------------------------------------------------- + + + def action_storage_migrate(self): + if not self.env.user.has_group('muk_dms.group_dms_manager'): + raise AccessError(_('Only managers can execute this action.')) + files = self.env['muk_dms.file'].with_context(active_test=False).sudo() + for record in self: + domain = ['&', ('content_binary', '=', False), ('storage', '=', record.id)] + files |= files.search(domain) + files.action_migrate() + + + def action_save_onboarding_storage_step(self): + self.env.user.company_id.set_onboarding_step_done( + 'documents_onboarding_storage_state' + ) + + #---------------------------------------------------------- + # Read, View + #---------------------------------------------------------- + + @api.depends('storage_directories') + def _compute_count_storage_directories(self): + for record in self: + record.count_storage_directories = len(record.storage_directories) + + @api.depends('storage_files') + def _compute_count_storage_files(self): + for record in self: + record.count_storage_files = len(record.storage_files) + \ No newline at end of file diff --git a/odex-event/muk_dms/models/tag.py b/odex-event/muk_dms/models/tag.py new file mode 100644 index 000000000..b16ffd0df --- /dev/null +++ b/odex-event/muk_dms/models/tag.py @@ -0,0 +1,101 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import models, api, fields + +_logger = logging.getLogger(__name__) + +class Tag(models.Model): + + _name = 'muk_dms.tag' + _description = "Document Tag" + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + name = fields.Char( + string='Name', + required=True, + translate=True) + + active = fields.Boolean( + default=True, + help="The active field allows you to hide the tag without removing it.") + + category = fields.Many2one( + comodel_name='muk_dms.category', + context="{'dms_category_show_path': True}", + string='Category', + ondelete='set null') + + color = fields.Integer( + string='Color Index', + default=10) + + directories = fields.Many2many( + comodel_name='muk_dms.directory', + relation='muk_dms_directory_tag_rel', + column1='tid', + column2='did', + string='Directories', + readonly=True) + + files = fields.Many2many( + comodel_name='muk_dms.file', + relation='muk_dms_file_tag_rel', + column1='tid', + column2='fid', + string='Files', + readonly=True) + + count_directories = fields.Integer( + compute='_compute_count_directories', + string="Count Directories") + + count_files = fields.Integer( + compute='_compute_count_files', + string="Count Files") + + #---------------------------------------------------------- + # Constrains + #---------------------------------------------------------- + + _sql_constraints = [ + ('name_uniq', 'unique (name, category)', "Tag name already exists!"), + ] + + #---------------------------------------------------------- + # Read + #---------------------------------------------------------- + + @api.depends('directories') + def _compute_count_directories(self): + for record in self: + record.count_directories = len(record.directories) + + @api.depends('files') + def _compute_count_files(self): + for record in self: + record.count_files = len(record.files) \ No newline at end of file diff --git a/odex-event/muk_dms/security/ir.model.access.csv b/odex-event/muk_dms/security/ir.model.access.csv new file mode 100644 index 000000000..7866d6358 --- /dev/null +++ b/odex-event/muk_dms/security/ir.model.access.csv @@ -0,0 +1,10 @@ +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink + +access_dms_tag_user,dms_tag_user,model_muk_dms_tag,group_dms_user,1,1,1,1 +access_dms_category_user,dms_category_user,model_muk_dms_category,group_dms_user,1,1,1,1 + +access_dms_storage_user,dms_storage_user,model_muk_dms_storage,group_dms_user,1,0,0,0 +access_dms_storage_manager,dms_storage_manager,model_muk_dms_storage,group_dms_manager,1,1,1,1 + +access_dms_directory_user,dms_directory_user,model_muk_dms_directory,group_dms_user,1,1,1,1 +access_dms_file_user,dms_file_user,model_muk_dms_file,group_dms_user,1,1,1,1 \ No newline at end of file diff --git a/odex-event/muk_dms/security/security.xml b/odex-event/muk_dms/security/security.xml new file mode 100644 index 000000000..1486980b6 --- /dev/null +++ b/odex-event/muk_dms/security/security.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="category_dms_security" model="ir.module.category"> + <field name="name">Documents</field> +</record> + +<record id="group_dms_user" model="res.groups"> + <field name="name">User</field> + <field name="category_id" ref="category_dms_security" /> +</record> + +<record id="group_dms_manager" model="res.groups"> + <field name="name">Manager</field> + <field name="implied_ids" eval="[(4, ref('group_dms_user'))]" /> + <field name="category_id" ref="category_dms_security" /> + <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]" /> +</record> + +<record id="rule_multi_company_storage" model="ir.rule"> + <field name="name">DMS Storage multi-company</field> + <field name="model_id" ref="model_muk_dms_storage" /> + <field name="global" eval="True" /> + <field name="domain_force">['|',('company','=',False),('company','child_of',[user.company_id.id])]</field> +</record> + +<record id="rule_multi_company_directory" model="ir.rule"> + <field name="name">DMS Directory multi-company</field> + <field name="model_id" ref="model_muk_dms_directory" /> + <field name="global" eval="True" /> + <field name="domain_force">['|',('company','=',False),('company','child_of',[user.company_id.id])]</field> +</record> + +<record id="rule_multi_company_file" model="ir.rule"> + <field name="name">File multi-company</field> + <field name="model_id" ref="model_muk_dms_file" /> + <field name="global" eval="True" /> + <field name="domain_force">['|',('company','=',False),('company','child_of',[user.company_id.id])]</field> +</record> + +</odoo> + diff --git a/odex-event/muk_dms/static/description/banner.png b/odex-event/muk_dms/static/description/banner.png new file mode 100644 index 000000000..a5fba8464 Binary files /dev/null and b/odex-event/muk_dms/static/description/banner.png differ diff --git a/odex-event/muk_dms/static/description/icon.png b/odex-event/muk_dms/static/description/icon.png new file mode 100644 index 000000000..a561495f1 Binary files /dev/null and b/odex-event/muk_dms/static/description/icon.png differ diff --git a/odex-event/muk_dms/static/description/icon.svg b/odex-event/muk_dms/static/description/icon.svg new file mode 100644 index 000000000..91c822dfa --- /dev/null +++ b/odex-event/muk_dms/static/description/icon.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 250 250" width="250" height="250"><defs><clipPath id="_clipPath_M77k6snJnD3BvTjxH0tJqBxZnrt5TSUJ"><rect width="250" height="250"/></clipPath></defs><g clip-path="url(#_clipPath_M77k6snJnD3BvTjxH0tJqBxZnrt5TSUJ)"><rect width="250" height="250" style="fill:rgb(0,0,0)" fill-opacity="0"/><defs><filter id="ut21eioDgedz5CWzXOUbRjLNasX8GLDS" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feOffset xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" dx="0" dy="3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_100_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_offsetBlur" result="pf_100_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#FFFFFF" flood-opacity="0.5" result="pf_100_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_color" in2="pf_100_inverse" operator="in" result="pf_100_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_shadow" in2="SourceGraphic" operator="over" result="_out_nTPDw1dPOE4dI1bI0U8DfzdsY3ERWsZA"/><feOffset xmlns="http://www.w3.org/2000/svg" in="_out_nTPDw1dPOE4dI1bI0U8DfzdsY3ERWsZA" dx="0" dy="-3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_101_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="_out_nTPDw1dPOE4dI1bI0U8DfzdsY3ERWsZA" in2="pf_101_offsetBlur" result="pf_101_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.5" result="pf_101_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_color" in2="pf_101_inverse" operator="in" result="pf_101_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_shadow" in2="_out_nTPDw1dPOE4dI1bI0U8DfzdsY3ERWsZA" operator="over" result="_out_XeauSaJy413IM9SlDJsE762c4bfV03q3"/><feMerge><feMergeNode in="_out_XeauSaJy413IM9SlDJsE762c4bfV03q3"/></feMerge></filter></defs><g filter="url(#ut21eioDgedz5CWzXOUbRjLNasX8GLDS)"><path d="M 15 0 L 235 0 C 243.279 0 250 6.721 250 15 L 250 235 C 250 243.279 243.279 250 235 250 L 15 250 C 6.721 250 0 243.279 0 235 L 0 15 C 0 6.721 6.721 0 15 0 Z" style="stroke:none;fill:#C83737;stroke-miterlimit:10;"/></g><image xlink:href="data:image/png;base64,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" x="14.323" y="47.27" width="223.449" height="177.46" style=""/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/description/index.html b/odex-event/muk_dms/static/description/index.html new file mode 100644 index 000000000..7701d6380 --- /dev/null +++ b/odex-event/muk_dms/static/description/index.html @@ -0,0 +1,176 @@ +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <h2 class="oe_slogan">MuK Documents</h2> + <h3 class="oe_slogan">Document Management System</h3> + <h4 class="oe_slogan" style="font-size: 23px;">MuK IT GmbH - + www.mukit.at</h4> + <div class="oe_demo oe_screenshot" + style="max-width: 84%; margin: 16px 8%;"> + <img src="screenshot.png"> + </div> + </div> +</section> + +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <div class="text-justify" style="max-width: 84%; margin: 16px 8%;"> + <h3 class="oe_slogan">Overview</h3> + <p class="oe_mt32 text-justify">MuK Documents is a module to create, manage + and view files directly within Odoo. This module is only the basis for + an entire ecosystem of apps that extend and seamlessly integrate with the + document management system.</p> + </div> + </div> +</section> + +<section class="oe_container oe_dark"> + <div class="oe_row oe_spaced"> + <h3 class="oe_slogan">Views</h3> + <div class="oe_span6"> + <p class="oe_mt32 text-justify">The standard Odoo views, Kanban, + List and Form are implemented for folders and Files. The Kanban View can + be used to directly display the subfolders or files of a particular + folder.</p> + </div> + <div class="oe_span6"> + <img class="oe_picture oe_screenshot" src="screenshot_folder.png"> + </div> + </div> +</section> + +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <h3 class="oe_slogan">Document Settings</h3> + <div class="oe_span6"> + <img class="oe_picture oe_screenshot" src="screenshot_settings.png"> + </div> + <div class="oe_span6"> + <p class="oe_mt32 text-justify">There is the possibility to + create own settings for different folder structure cures. This gives + you the option of adapting the structure even further to your + requirements.</p> + </div> + </div> +</section> + +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <h3 class="oe_slogan">Documents Extension</h3> + <div class="oe_span6"> + <p class="oe_mt32 text-justify">This module is just the basis for + a complete ecosystem of applications that can expand and seamlessly + integrate into the document management system. You can download the + extensions in the <a href="https://www.odoo.com/apps/modules/category/Document%20Management/browse?author=MuK+IT"> + store</a>.</p> + </div> + <div class="oe_span6"> + <a href="https://www.odoo.com/apps/modules/category/Document%20Management/browse?author=MuK+IT"> + <img class="oe_picture oe_screenshot" src="screenshot_apps.png"> + </a> + </div> + </div> +</section> + +<section class="oe_container oe_dark"> + <div class="oe_row oe_spaced"> + <h3 class="oe_slogan">Our Services</h3> + <div + style="display: flex; padding-top: 20px; justify-content: space-between;"> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/MQ5" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_implementation.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Implementation + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/u7c" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_integration.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Integration + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/xDJ" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_customization.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Customization + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href=" https://mukit.at/r/J3A" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_development.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Development + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href=" https://mukit.at/r/R1v" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_support.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Support + </h3> + </a> + </div> + </div> + </div> +</section> + +<section class="oe_container" style="padding: 32px 0;"> + <div class="oe_row oe_spaced" style="margin: auto;"> + <div class="oe_demo oe_picture oe_screenshot"> + <a href="https://mukit.at/r/SgN" target="_blank"> <img src="preview.png"> + </a> + </div> + </div> +</section> + +<section class="oe_container oe_dark"> + <h3 class="oe_slogan">Help and Support</h3> + <h5 class="oe_slogan" style="font-size: 20px;">Feel free to + contact us, if you need any help with your Odoo integration or + addiontal features.</h5> + <div class="oe_slogan"> + <a class="btn btn-primary btn-lg mt8" href="https://mukit.at" target="_blank"> + <i class="fa fa-globe"></i> Website + </a> + <a class="btn btn-primary btn-lg mt8" href="mailto:sale@mukit.at"> + <i class="fa fa-envelope"></i> Contact Us + </a> + <a class="btn btn-primary btn-lg mt8" href="https://github.com/muk-it" target="_blank"> + <i class="fa fa-github"></i> Issues + </a> + </div> + <img src="logo.png" + style="width: 200px; margin-bottom: 20px; display: block;" + class="mx-auto center-block"> +</section> \ No newline at end of file diff --git a/odex-event/muk_dms/static/description/logo.png b/odex-event/muk_dms/static/description/logo.png new file mode 100644 index 000000000..9427ce33e Binary files /dev/null and b/odex-event/muk_dms/static/description/logo.png differ diff --git a/odex-event/muk_dms/static/description/preview.png b/odex-event/muk_dms/static/description/preview.png new file mode 100644 index 000000000..1deb1ccef Binary files /dev/null and b/odex-event/muk_dms/static/description/preview.png differ diff --git a/odex-event/muk_dms/static/description/screenshot.png b/odex-event/muk_dms/static/description/screenshot.png new file mode 100644 index 000000000..67885b4ac Binary files /dev/null and b/odex-event/muk_dms/static/description/screenshot.png differ diff --git a/odex-event/muk_dms/static/description/screenshot_apps.png b/odex-event/muk_dms/static/description/screenshot_apps.png new file mode 100644 index 000000000..075b168ad Binary files /dev/null and b/odex-event/muk_dms/static/description/screenshot_apps.png differ diff --git a/odex-event/muk_dms/static/description/screenshot_folder.png b/odex-event/muk_dms/static/description/screenshot_folder.png new file mode 100644 index 000000000..058e3f591 Binary files /dev/null and b/odex-event/muk_dms/static/description/screenshot_folder.png differ diff --git a/odex-event/muk_dms/static/description/screenshot_settings.png b/odex-event/muk_dms/static/description/screenshot_settings.png new file mode 100644 index 000000000..8c5f3b4b4 Binary files /dev/null and b/odex-event/muk_dms/static/description/screenshot_settings.png differ diff --git a/odex-event/muk_dms/static/description/service_customization.png b/odex-event/muk_dms/static/description/service_customization.png new file mode 100644 index 000000000..3eac66488 Binary files /dev/null and b/odex-event/muk_dms/static/description/service_customization.png differ diff --git a/odex-event/muk_dms/static/description/service_development.png b/odex-event/muk_dms/static/description/service_development.png new file mode 100644 index 000000000..580d46046 Binary files /dev/null and b/odex-event/muk_dms/static/description/service_development.png differ diff --git a/odex-event/muk_dms/static/description/service_implementation.png b/odex-event/muk_dms/static/description/service_implementation.png new file mode 100644 index 000000000..d64b66bda Binary files /dev/null and b/odex-event/muk_dms/static/description/service_implementation.png differ diff --git a/odex-event/muk_dms/static/description/service_integration.png b/odex-event/muk_dms/static/description/service_integration.png new file mode 100644 index 000000000..76c5e80f4 Binary files /dev/null and b/odex-event/muk_dms/static/description/service_integration.png differ diff --git a/odex-event/muk_dms/static/description/service_support.png b/odex-event/muk_dms/static/description/service_support.png new file mode 100644 index 000000000..4c530fafd Binary files /dev/null and b/odex-event/muk_dms/static/description/service_support.png differ diff --git a/odex-event/muk_dms/static/src/img/banner/documents_onboarding_directory.png b/odex-event/muk_dms/static/src/img/banner/documents_onboarding_directory.png new file mode 100644 index 000000000..d79387705 Binary files /dev/null and b/odex-event/muk_dms/static/src/img/banner/documents_onboarding_directory.png differ diff --git a/odex-event/muk_dms/static/src/img/banner/documents_onboarding_file.png b/odex-event/muk_dms/static/src/img/banner/documents_onboarding_file.png new file mode 100644 index 000000000..ac830fa6b Binary files /dev/null and b/odex-event/muk_dms/static/src/img/banner/documents_onboarding_file.png differ diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_ai.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_ai.svg new file mode 100644 index 000000000..393473205 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_ai.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_DIUxPpL1A4o6jIKxrY3KVZ5F1CHA2mKL"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_DIUxPpL1A4o6jIKxrY3KVZ5F1CHA2mKL)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(255,193,79)"/><path d=" M 128.095 203.746 L 126.023 197.594 L 115.236 197.594 L 113.186 203.746 L 106.644 203.746 L 117.759 173.887 L 123.46 173.887 L 134.637 203.746 L 128.095 203.746 L 128.095 203.746 Z M 120.609 181.434 L 116.897 192.61 L 124.362 192.61 L 120.609 181.434 L 120.609 181.434 Z M 143.968 173.887 L 143.968 203.746 L 137.815 203.746 L 137.815 173.887 L 143.968 173.887 L 143.968 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><path d=" M 157.857 74.571 L 157.857 76.02 C 148.205 79.063 140.562 86.649 137.422 96.26 C 135.263 94.516 132.557 93.429 129.571 93.429 C 123.729 93.429 118.851 97.451 117.446 102.857 L 107.571 102.857 L 107.571 96.571 L 88.714 96.571 L 88.714 115.429 L 107.571 115.429 L 107.571 109.143 L 116.752 109.143 C 115.696 117.512 110.513 124.788 102.958 128.512 C 100.858 124.493 96.697 121.714 91.857 121.714 C 84.924 121.714 79.286 127.353 79.286 134.286 C 79.286 141.219 84.924 146.857 91.857 146.857 C 98.602 146.857 104.077 141.508 104.372 134.836 C 112.716 131.218 118.977 124.191 121.733 115.749 C 123.889 117.487 126.592 118.571 129.571 118.571 C 135.414 118.571 140.292 114.549 141.697 109.143 L 151.571 109.143 L 151.571 115.429 L 170.429 115.429 L 170.429 96.571 L 151.571 96.571 L 151.571 102.857 L 142.36 102.857 C 143.551 93.369 150.041 85.527 158.772 82.372 C 160.632 87.001 165.142 90.286 170.429 90.286 C 177.362 90.286 183 84.647 183 77.714 L 183 74.571 L 157.857 74.571 Z M 101.286 109.143 L 95 109.143 L 95 102.857 L 101.286 102.857 L 101.286 109.143 Z M 91.857 140.571 C 88.391 140.571 85.571 137.752 85.571 134.286 C 85.571 130.819 88.391 128 91.857 128 C 95.324 128 98.143 130.819 98.143 134.286 C 98.143 137.752 95.324 140.571 91.857 140.571 Z M 157.857 102.857 L 164.143 102.857 L 164.143 109.143 L 157.857 109.143 L 157.857 102.857 Z M 129.571 112.286 C 126.105 112.286 123.286 109.467 123.286 106 C 123.286 102.533 126.105 99.714 129.571 99.714 C 133.038 99.714 135.857 102.533 135.857 106 C 135.857 109.467 133.038 112.286 129.571 112.286 Z M 170.429 84 C 168.156 84 166.176 82.777 165.073 80.97 C 165.802 80.904 166.538 80.857 167.286 80.857 L 175.869 80.857 C 174.785 82.733 172.751 84 170.429 84 Z " fill="rgb(200,189,184)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/></g></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_aj.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_aj.svg new file mode 100644 index 000000000..ea6677b51 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_aj.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_6nAp4GoljLPqc74aMxxhpy3ZhrUJqOMK"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_6nAp4GoljLPqc74aMxxhpy3ZhrUJqOMK)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(93,93,93)"/><g><path d=" M 112.936 91.207 C 111.707 89.978 109.721 89.978 108.492 91.207 L 89.635 110.064 C 88.406 111.293 88.406 113.279 89.635 114.508 L 108.492 133.365 C 109.105 133.978 109.91 134.286 110.714 134.286 C 111.519 134.286 112.323 133.978 112.936 133.365 C 114.165 132.136 114.165 130.15 112.936 128.921 L 96.301 112.286 L 112.936 95.651 C 114.165 94.422 114.165 92.435 112.936 91.207 Z " fill="rgb(93,93,93)"/><path d=" M 169.508 110.064 L 161.722 102.278 L 150.651 91.207 C 149.422 89.978 147.435 89.978 146.207 91.207 C 144.978 92.435 144.978 94.422 146.207 95.651 L 162.842 112.286 L 146.207 128.921 C 144.978 130.15 144.978 132.136 146.207 133.365 C 146.819 133.978 147.624 134.286 148.429 134.286 C 149.233 134.286 150.038 133.978 150.651 133.365 L 169.508 114.508 C 170.737 113.279 170.737 111.293 169.508 110.064 Z " fill="rgb(93,93,93)"/></g></g></g><path d=" M 122.595 203.746 L 120.523 197.594 L 109.736 197.594 L 107.686 203.746 L 101.144 203.746 L 112.259 173.887 L 117.96 173.887 L 129.137 203.746 L 122.595 203.746 L 122.595 203.746 Z M 115.109 181.434 L 111.397 192.61 L 118.862 192.61 L 115.109 181.434 L 115.109 181.434 Z M 143.964 194.559 L 143.964 173.887 L 150.116 173.887 L 150.116 194.559 L 150.116 194.559 Q 150.116 197.409 148.855 199.593 L 148.855 199.593 L 148.855 199.593 Q 147.594 201.777 145.297 202.967 L 145.297 202.967 L 145.297 202.967 Q 143 204.156 140.108 204.156 L 140.108 204.156 L 140.108 204.156 Q 135.371 204.156 132.726 201.747 L 132.726 201.747 L 132.726 201.747 Q 130.08 199.337 130.08 194.928 L 130.08 194.928 L 136.273 194.928 L 136.273 194.928 Q 136.273 197.122 137.196 198.168 L 137.196 198.168 L 137.196 198.168 Q 138.119 199.214 140.108 199.214 L 140.108 199.214 L 140.108 199.214 Q 141.872 199.214 142.918 198.004 L 142.918 198.004 L 142.918 198.004 Q 143.964 196.794 143.964 194.559 L 143.964 194.559 L 143.964 194.559 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_avi.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_avi.svg new file mode 100644 index 000000000..74784ac70 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_avi.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_FLHZ43wzdKFmTHD21bIUvTuw3Pzi3Qlw"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_FLHZ43wzdKFmTHD21bIUvTuw3Pzi3Qlw)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(215,94,114)"/><path d=" M 114.595 203.746 L 112.523 197.594 L 101.736 197.594 L 99.686 203.746 L 93.144 203.746 L 104.259 173.887 L 109.96 173.887 L 121.137 203.746 L 114.595 203.746 L 114.595 203.746 Z M 107.109 181.434 L 103.397 192.61 L 110.862 192.61 L 107.109 181.434 L 107.109 181.434 Z M 128.232 173.887 L 134.959 196.343 L 141.727 173.887 L 148.576 173.887 L 138.179 203.746 L 131.76 203.746 L 121.403 173.887 L 128.232 173.887 L 128.232 173.887 Z M 157.928 173.887 L 157.928 203.746 L 151.775 203.746 L 151.775 173.887 L 157.928 173.887 L 157.928 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><path d=" M 113.857 128 L 113.857 105.855 L 113.857 84 L 148.429 106 L 113.857 128 Z " fill="rgb(200,189,184)"/></g></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_c.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_c.svg new file mode 100644 index 000000000..f517ec41b --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_c.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_QDq7UHuMAP1DndjZvSJ7oBHBPdwuwQhy"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_QDq7UHuMAP1DndjZvSJ7oBHBPdwuwQhy)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(128,140,155)"/></g></g><path d=" M 132.954 195.8 L 139.106 195.8 L 139.106 195.8 Q 138.758 200.619 135.548 203.388 L 135.548 203.388 L 135.548 203.388 Q 132.339 206.156 127.089 206.156 L 127.089 206.156 L 127.089 206.156 Q 121.347 206.156 118.055 202.291 L 118.055 202.291 L 118.055 202.291 Q 114.764 198.425 114.764 191.678 L 114.764 191.678 L 114.764 189.853 L 114.764 189.853 Q 114.764 185.546 116.281 182.265 L 116.281 182.265 L 116.281 182.265 Q 117.799 178.983 120.619 177.23 L 120.619 177.23 L 120.619 177.23 Q 123.438 175.477 127.171 175.477 L 127.171 175.477 L 127.171 175.477 Q 132.339 175.477 135.497 178.245 L 135.497 178.245 L 135.497 178.245 Q 138.655 181.014 139.147 186.018 L 139.147 186.018 L 132.995 186.018 L 132.995 186.018 Q 132.77 183.126 131.385 181.824 L 131.385 181.824 L 131.385 181.824 Q 130.001 180.521 127.171 180.521 L 127.171 180.521 L 127.171 180.521 Q 124.095 180.521 122.567 182.726 L 122.567 182.726 L 122.567 182.726 Q 121.039 184.931 120.998 189.565 L 120.998 189.565 L 120.998 191.821 L 120.998 191.821 Q 120.998 196.661 122.464 198.896 L 122.464 198.896 L 122.464 198.896 Q 123.931 201.132 127.089 201.132 L 127.089 201.132 L 127.089 201.132 Q 129.939 201.132 131.344 199.83 L 131.344 199.83 L 131.344 199.83 Q 132.749 198.527 132.954 195.8 L 132.954 195.8 L 132.954 195.8 Z " fill="rgb(255,255,255)"/><path d=" M 131.94 106.301 L 131.94 106.301 L 131.94 106.301 Q 127.32 106.301 124.86 109.121 L 124.86 109.121 L 124.86 109.121 Q 122.4 111.941 122.4 117.101 L 122.4 117.101 L 122.4 117.101 Q 122.4 122.321 125.13 125.141 L 125.13 125.141 L 125.13 125.141 Q 127.86 127.961 132.48 127.961 L 132.48 127.961 L 132.48 127.961 Q 134.94 127.961 136.65 127.301 L 136.65 127.301 L 136.65 127.301 Q 138.36 126.641 139.92 125.801 L 139.92 125.801 L 139.92 125.801 Q 140.94 126.641 141.51 127.811 L 141.51 127.811 L 141.51 127.811 Q 142.08 128.981 142.08 130.541 L 142.08 130.541 L 142.08 130.541 Q 142.08 133.001 139.35 134.711 L 139.35 134.711 L 139.35 134.711 Q 136.62 136.421 131.04 136.421 L 131.04 136.421 L 131.04 136.421 Q 127.02 136.421 123.48 135.281 L 123.48 135.281 L 123.48 135.281 Q 119.94 134.141 117.3 131.771 L 117.3 131.771 L 117.3 131.771 Q 114.66 129.401 113.13 125.771 L 113.13 125.771 L 113.13 125.771 Q 111.6 122.141 111.6 117.101 L 111.6 117.101 L 111.6 117.101 Q 111.6 112.421 113.07 108.851 L 113.07 108.851 L 113.07 108.851 Q 114.54 105.281 117.09 102.821 L 117.09 102.821 L 117.09 102.821 Q 119.64 100.361 123.06 99.101 L 123.06 99.101 L 123.06 99.101 Q 126.48 97.841 130.38 97.841 L 130.38 97.841 L 130.38 97.841 Q 135.9 97.841 138.93 99.641 L 138.93 99.641 L 138.93 99.641 Q 141.96 101.441 141.96 104.261 L 141.96 104.261 L 141.96 104.261 Q 141.96 105.821 141.18 106.961 L 141.18 106.961 L 141.18 106.961 Q 140.4 108.101 139.38 108.761 L 139.38 108.761 L 139.38 108.761 Q 137.82 107.741 136.05 107.021 L 136.05 107.021 L 136.05 107.021 Q 134.28 106.301 131.94 106.301 Z " fill="rgb(128,140,155)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_cbl.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_cbl.svg new file mode 100644 index 000000000..3807ebf2f --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_cbl.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_TQmEGhsjtrLEyjf6zmhvf3bpAZU65XHf"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_TQmEGhsjtrLEyjf6zmhvf3bpAZU65XHf)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(93,93,93)"/><g><path d=" M 112.936 91.207 C 111.707 89.978 109.721 89.978 108.492 91.207 L 89.635 110.064 C 88.406 111.293 88.406 113.279 89.635 114.508 L 108.492 133.365 C 109.105 133.978 109.91 134.286 110.714 134.286 C 111.519 134.286 112.323 133.978 112.936 133.365 C 114.165 132.136 114.165 130.15 112.936 128.921 L 96.301 112.286 L 112.936 95.651 C 114.165 94.422 114.165 92.435 112.936 91.207 Z " fill="rgb(93,93,93)"/><path d=" M 169.508 110.064 L 161.722 102.278 L 150.651 91.207 C 149.422 89.978 147.435 89.978 146.207 91.207 C 144.978 92.435 144.978 94.422 146.207 95.651 L 162.842 112.286 L 146.207 128.921 C 144.978 130.15 144.978 132.136 146.207 133.365 C 146.819 133.978 147.624 134.286 148.429 134.286 C 149.233 134.286 150.038 133.978 150.651 133.365 L 169.508 114.508 C 170.737 113.279 170.737 111.293 169.508 110.064 Z " fill="rgb(93,93,93)"/></g></g></g><path d=" M 107.954 195.8 L 114.106 195.8 L 114.106 195.8 Q 113.758 200.619 110.548 203.388 L 110.548 203.388 L 110.548 203.388 Q 107.339 206.156 102.089 206.156 L 102.089 206.156 L 102.089 206.156 Q 96.347 206.156 93.055 202.291 L 93.055 202.291 L 93.055 202.291 Q 89.764 198.425 89.764 191.678 L 89.764 191.678 L 89.764 189.853 L 89.764 189.853 Q 89.764 185.546 91.281 182.265 L 91.281 182.265 L 91.281 182.265 Q 92.799 178.983 95.619 177.23 L 95.619 177.23 L 95.619 177.23 Q 98.438 175.477 102.171 175.477 L 102.171 175.477 L 102.171 175.477 Q 107.339 175.477 110.497 178.245 L 110.497 178.245 L 110.497 178.245 Q 113.655 181.014 114.147 186.018 L 114.147 186.018 L 107.995 186.018 L 107.995 186.018 Q 107.77 183.126 106.385 181.824 L 106.385 181.824 L 106.385 181.824 Q 105.001 180.521 102.171 180.521 L 102.171 180.521 L 102.171 180.521 Q 99.095 180.521 97.567 182.726 L 97.567 182.726 L 97.567 182.726 Q 96.039 184.931 95.998 189.565 L 95.998 189.565 L 95.998 191.821 L 95.998 191.821 Q 95.998 196.661 97.464 198.896 L 97.464 198.896 L 97.464 198.896 Q 98.931 201.132 102.089 201.132 L 102.089 201.132 L 102.089 201.132 Q 104.939 201.132 106.344 199.83 L 106.344 199.83 L 106.344 199.83 Q 107.749 198.527 107.954 195.8 L 107.954 195.8 L 107.954 195.8 Z M 129.754 205.746 L 118.146 205.746 L 118.146 175.887 L 128.605 175.887 L 128.605 175.887 Q 134.04 175.887 136.85 177.968 L 136.85 177.968 L 136.85 177.968 Q 139.659 180.05 139.659 184.069 L 139.659 184.069 L 139.659 184.069 Q 139.659 186.264 138.531 187.935 L 138.531 187.935 L 138.531 187.935 Q 137.403 189.606 135.394 190.386 L 135.394 190.386 L 135.394 190.386 Q 137.69 190.96 139.013 192.703 L 139.013 192.703 L 139.013 192.703 Q 140.336 194.446 140.336 196.969 L 140.336 196.969 L 140.336 196.969 Q 140.336 201.275 137.588 203.49 L 137.588 203.49 L 137.588 203.49 Q 134.84 205.705 129.754 205.746 L 129.754 205.746 L 129.754 205.746 Z M 129.938 192.744 L 124.299 192.744 L 124.299 200.804 L 129.569 200.804 L 129.569 200.804 Q 131.743 200.804 132.963 199.768 L 132.963 199.768 L 132.963 199.768 Q 134.184 198.732 134.184 196.907 L 134.184 196.907 L 134.184 196.907 Q 134.184 192.806 129.938 192.744 L 129.938 192.744 L 129.938 192.744 Z M 124.299 180.87 L 124.299 188.396 L 128.852 188.396 L 128.852 188.396 Q 133.507 188.314 133.507 184.685 L 133.507 184.685 L 133.507 184.685 Q 133.507 182.654 132.328 181.762 L 132.328 181.762 L 132.328 181.762 Q 131.148 180.87 128.605 180.87 L 128.605 180.87 L 124.299 180.87 L 124.299 180.87 Z M 151.103 175.887 L 151.103 200.804 L 164.166 200.804 L 164.166 205.746 L 144.95 205.746 L 144.95 175.887 L 151.103 175.887 L 151.103 175.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_cc.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_cc.svg new file mode 100644 index 000000000..36e6ad3b5 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_cc.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_wrlz0YXlpzf35A8gC3cXMOtqgow8U4R1"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_wrlz0YXlpzf35A8gC3cXMOtqgow8U4R1)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(55,85,134)"/></g></g><path d=" M 109.954 193.8 L 116.106 193.8 L 116.106 193.8 Q 115.758 198.619 112.548 201.388 L 112.548 201.388 L 112.548 201.388 Q 109.339 204.156 104.089 204.156 L 104.089 204.156 L 104.089 204.156 Q 98.347 204.156 95.055 200.291 L 95.055 200.291 L 95.055 200.291 Q 91.764 196.425 91.764 189.678 L 91.764 189.678 L 91.764 187.853 L 91.764 187.853 Q 91.764 183.546 93.281 180.265 L 93.281 180.265 L 93.281 180.265 Q 94.799 176.983 97.619 175.23 L 97.619 175.23 L 97.619 175.23 Q 100.438 173.477 104.171 173.477 L 104.171 173.477 L 104.171 173.477 Q 109.339 173.477 112.497 176.245 L 112.497 176.245 L 112.497 176.245 Q 115.655 179.014 116.147 184.018 L 116.147 184.018 L 109.995 184.018 L 109.995 184.018 Q 109.77 181.126 108.385 179.824 L 108.385 179.824 L 108.385 179.824 Q 107.001 178.521 104.171 178.521 L 104.171 178.521 L 104.171 178.521 Q 101.095 178.521 99.567 180.726 L 99.567 180.726 L 99.567 180.726 Q 98.039 182.931 97.998 187.565 L 97.998 187.565 L 97.998 189.821 L 97.998 189.821 Q 97.998 194.661 99.464 196.896 L 99.464 196.896 L 99.464 196.896 Q 100.931 199.132 104.089 199.132 L 104.089 199.132 L 104.089 199.132 Q 106.939 199.132 108.344 197.83 L 108.344 197.83 L 108.344 197.83 Q 109.749 196.527 109.954 193.8 L 109.954 193.8 L 109.954 193.8 Z M 131.713 179.014 L 131.713 187.032 L 139.116 187.032 L 139.116 192.385 L 131.713 192.385 L 131.713 200.752 L 126.073 200.752 L 126.073 192.385 L 118.649 192.385 L 118.649 187.032 L 126.073 187.032 L 126.073 179.014 L 131.713 179.014 L 131.713 179.014 Z M 154.641 179.014 L 154.641 187.032 L 162.044 187.032 L 162.044 192.385 L 154.641 192.385 L 154.641 200.752 L 149.001 200.752 L 149.001 192.385 L 141.577 192.385 L 141.577 187.032 L 149.001 187.032 L 149.001 179.014 L 154.641 179.014 L 154.641 179.014 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><path d=" M 99.44 104.96 L 99.44 104.96 L 99.44 104.96 Q 94.82 104.96 92.36 107.78 L 92.36 107.78 L 92.36 107.78 Q 89.9 110.6 89.9 115.76 L 89.9 115.76 L 89.9 115.76 Q 89.9 120.98 92.63 123.8 L 92.63 123.8 L 92.63 123.8 Q 95.36 126.62 99.98 126.62 L 99.98 126.62 L 99.98 126.62 Q 102.44 126.62 104.15 125.96 L 104.15 125.96 L 104.15 125.96 Q 105.86 125.3 107.42 124.46 L 107.42 124.46 L 107.42 124.46 Q 108.44 125.3 109.01 126.47 L 109.01 126.47 L 109.01 126.47 Q 109.58 127.64 109.58 129.2 L 109.58 129.2 L 109.58 129.2 Q 109.58 131.66 106.85 133.37 L 106.85 133.37 L 106.85 133.37 Q 104.12 135.08 98.54 135.08 L 98.54 135.08 L 98.54 135.08 Q 94.52 135.08 90.98 133.94 L 90.98 133.94 L 90.98 133.94 Q 87.44 132.8 84.8 130.43 L 84.8 130.43 L 84.8 130.43 Q 82.16 128.06 80.63 124.43 L 80.63 124.43 L 80.63 124.43 Q 79.1 120.8 79.1 115.76 L 79.1 115.76 L 79.1 115.76 Q 79.1 111.08 80.57 107.51 L 80.57 107.51 L 80.57 107.51 Q 82.04 103.94 84.59 101.48 L 84.59 101.48 L 84.59 101.48 Q 87.14 99.02 90.56 97.76 L 90.56 97.76 L 90.56 97.76 Q 93.98 96.5 97.88 96.5 L 97.88 96.5 L 97.88 96.5 Q 103.4 96.5 106.43 98.3 L 106.43 98.3 L 106.43 98.3 Q 109.46 100.1 109.46 102.92 L 109.46 102.92 L 109.46 102.92 Q 109.46 104.48 108.68 105.62 L 108.68 105.62 L 108.68 105.62 Q 107.9 106.76 106.88 107.42 L 106.88 107.42 L 106.88 107.42 Q 105.32 106.4 103.55 105.68 L 103.55 105.68 L 103.55 105.68 Q 101.78 104.96 99.44 104.96 Z M 132.32 120.68 L 132.32 131 L 132.32 131 Q 131.84 131.24 130.55 131.39 L 130.55 131.39 L 130.55 131.39 Q 129.26 131.54 128.06 131.54 L 128.06 131.54 L 128.06 131.54 Q 125.6 131.54 124.34 130.73 L 124.34 130.73 L 124.34 130.73 Q 123.08 129.92 123.08 127.28 L 123.08 127.28 L 123.08 120.68 L 114.02 120.68 L 114.02 120.68 Q 113.6 120.02 113.33 118.94 L 113.33 118.94 L 113.33 118.94 Q 113.06 117.86 113.06 116.78 L 113.06 116.78 L 113.06 116.78 Q 113.06 114.62 114.02 113.63 L 114.02 113.63 L 114.02 113.63 Q 114.98 112.64 116.6 112.64 L 116.6 112.64 L 123.08 112.64 L 123.08 102.56 L 123.08 102.56 Q 123.68 102.38 124.91 102.17 L 124.91 102.17 L 124.91 102.17 Q 126.14 101.96 127.34 101.96 L 127.34 101.96 L 127.34 101.96 Q 129.74 101.96 131.03 102.8 L 131.03 102.8 L 131.03 102.8 Q 132.32 103.64 132.32 106.34 L 132.32 106.34 L 132.32 112.64 L 141.2 112.64 L 141.2 112.64 Q 141.5 113.36 141.83 114.41 L 141.83 114.41 L 141.83 114.41 Q 142.16 115.46 142.16 116.6 L 142.16 116.6 L 142.16 116.6 Q 142.16 118.7 141.2 119.69 L 141.2 119.69 L 141.2 119.69 Q 140.24 120.68 138.68 120.68 L 138.68 120.68 L 132.32 120.68 L 132.32 120.68 Z M 165.02 120.68 L 165.02 131 L 165.02 131 Q 164.54 131.24 163.25 131.39 L 163.25 131.39 L 163.25 131.39 Q 161.96 131.54 160.76 131.54 L 160.76 131.54 L 160.76 131.54 Q 158.3 131.54 157.04 130.73 L 157.04 130.73 L 157.04 130.73 Q 155.78 129.92 155.78 127.28 L 155.78 127.28 L 155.78 120.68 L 146.72 120.68 L 146.72 120.68 Q 146.3 120.02 146.03 118.94 L 146.03 118.94 L 146.03 118.94 Q 145.76 117.86 145.76 116.78 L 145.76 116.78 L 145.76 116.78 Q 145.76 114.62 146.72 113.63 L 146.72 113.63 L 146.72 113.63 Q 147.68 112.64 149.3 112.64 L 149.3 112.64 L 155.78 112.64 L 155.78 102.56 L 155.78 102.56 Q 156.38 102.38 157.61 102.17 L 157.61 102.17 L 157.61 102.17 Q 158.84 101.96 160.04 101.96 L 160.04 101.96 L 160.04 101.96 Q 162.44 101.96 163.73 102.8 L 163.73 102.8 L 163.73 102.8 Q 165.02 103.64 165.02 106.34 L 165.02 106.34 L 165.02 112.64 L 173.9 112.64 L 173.9 112.64 Q 174.2 113.36 174.53 114.41 L 174.53 114.41 L 174.53 114.41 Q 174.86 115.46 174.86 116.6 L 174.86 116.6 L 174.86 116.6 Q 174.86 118.7 173.9 119.69 L 173.9 119.69 L 173.9 119.69 Q 172.94 120.68 171.38 120.68 L 171.38 120.68 L 165.02 120.68 L 165.02 120.68 Z " fill-rule="evenodd" fill="rgb(55,85,134)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_coffee.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_coffee.svg new file mode 100644 index 000000000..10a84d2c3 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_coffee.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_ZrO8e7BAT8xhESkr8uOMTOa6R0UZ2xQT"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_ZrO8e7BAT8xhESkr8uOMTOa6R0UZ2xQT)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(40,51,75)"/></g></g><path d=" M 79.604 193.873 L 84.877 193.873 L 84.877 193.873 Q 84.578 198.004 81.827 200.377 L 81.827 200.377 L 81.827 200.377 Q 79.076 202.75 74.576 202.75 L 74.576 202.75 L 74.576 202.75 Q 69.654 202.75 66.833 199.437 L 66.833 199.437 L 66.833 199.437 Q 64.012 196.123 64.012 190.34 L 64.012 190.34 L 64.012 188.775 L 64.012 188.775 Q 64.012 185.084 65.313 182.271 L 65.313 182.271 L 65.313 182.271 Q 66.613 179.459 69.03 177.956 L 69.03 177.956 L 69.03 177.956 Q 71.447 176.453 74.646 176.453 L 74.646 176.453 L 74.646 176.453 Q 79.076 176.453 81.783 178.826 L 81.783 178.826 L 81.783 178.826 Q 84.49 181.199 84.912 185.488 L 84.912 185.488 L 79.639 185.488 L 79.639 185.488 Q 79.445 183.01 78.259 181.894 L 78.259 181.894 L 78.259 181.894 Q 77.072 180.777 74.646 180.777 L 74.646 180.777 L 74.646 180.777 Q 72.01 180.777 70.7 182.667 L 70.7 182.667 L 70.7 182.667 Q 69.391 184.557 69.355 188.529 L 69.355 188.529 L 69.355 190.463 L 69.355 190.463 Q 69.355 194.611 70.612 196.527 L 70.612 196.527 L 70.612 196.527 Q 71.869 198.443 74.576 198.443 L 74.576 198.443 L 74.576 198.443 Q 77.02 198.443 78.224 197.327 L 78.224 197.327 L 78.224 197.327 Q 79.428 196.211 79.604 193.873 L 79.604 193.873 L 79.604 193.873 Z M 109.363 189.039 L 109.363 190.182 L 109.363 190.182 Q 109.363 193.961 108.027 196.809 L 108.027 196.809 L 108.027 196.809 Q 106.691 199.656 104.204 201.203 L 104.204 201.203 L 104.204 201.203 Q 101.717 202.75 98.5 202.75 L 98.5 202.75 L 98.5 202.75 Q 95.318 202.75 92.822 201.221 L 92.822 201.221 L 92.822 201.221 Q 90.326 199.691 88.955 196.853 L 88.955 196.853 L 88.955 196.853 Q 87.584 194.014 87.566 190.322 L 87.566 190.322 L 87.566 189.057 L 87.566 189.057 Q 87.566 185.277 88.929 182.403 L 88.929 182.403 L 88.929 182.403 Q 90.291 179.529 92.778 177.991 L 92.778 177.991 L 92.778 177.991 Q 95.266 176.453 98.465 176.453 L 98.465 176.453 L 98.465 176.453 Q 101.664 176.453 104.151 177.991 L 104.151 177.991 L 104.151 177.991 Q 106.639 179.529 108.001 182.403 L 108.001 182.403 L 108.001 182.403 Q 109.363 185.277 109.363 189.039 L 109.363 189.039 L 109.363 189.039 Z M 104.02 190.27 L 104.02 189.021 L 104.02 189.021 Q 104.02 184.996 102.578 182.904 L 102.578 182.904 L 102.578 182.904 Q 101.137 180.813 98.465 180.813 L 98.465 180.813 L 98.465 180.813 Q 95.811 180.813 94.369 182.878 L 94.369 182.878 L 94.369 182.878 Q 92.928 184.943 92.91 188.934 L 92.91 188.934 L 92.91 190.182 L 92.91 190.182 Q 92.91 194.102 94.352 196.264 L 94.352 196.264 L 94.352 196.264 Q 95.793 198.426 98.5 198.426 L 98.5 198.426 L 98.5 198.426 Q 101.154 198.426 102.578 196.343 L 102.578 196.343 L 102.578 196.343 Q 104.002 194.26 104.02 190.27 L 104.02 190.27 L 104.02 190.27 Z M 128.594 187.686 L 128.594 191.939 L 118.469 191.939 L 118.469 202.398 L 113.195 202.398 L 113.195 176.805 L 129.859 176.805 L 129.859 181.076 L 118.469 181.076 L 118.469 187.686 L 128.594 187.686 L 128.594 187.686 Z M 148.316 187.686 L 148.316 191.939 L 138.191 191.939 L 138.191 202.398 L 132.918 202.398 L 132.918 176.805 L 149.582 176.805 L 149.582 181.076 L 138.191 181.076 L 138.191 187.686 L 148.316 187.686 L 148.316 187.686 Z M 168.039 187.176 L 168.039 191.307 L 157.914 191.307 L 157.914 198.162 L 169.797 198.162 L 169.797 202.398 L 152.641 202.398 L 152.641 176.805 L 169.762 176.805 L 169.762 181.076 L 157.914 181.076 L 157.914 187.176 L 168.039 187.176 L 168.039 187.176 Z M 188.289 187.176 L 188.289 191.307 L 178.164 191.307 L 178.164 198.162 L 190.047 198.162 L 190.047 202.398 L 172.891 202.398 L 172.891 176.805 L 190.012 176.805 L 190.012 181.076 L 178.164 181.076 L 178.164 187.176 L 188.289 187.176 L 188.289 187.176 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><path d=" M 120.761 92.014 C 120.825 92.397 120.633 92.717 119.994 93.036 C 119.164 92.589 117.375 92.333 115.906 92.461 C 114.308 92.589 112.967 93.1 113.158 94.186 C 113.414 95.272 114.947 95.911 117.694 95.655 C 124.402 95.08 124.338 90.544 134.177 89.65 C 141.844 88.947 146.124 91.311 146.699 94.186 C 147.146 96.422 145.293 98.594 139.735 99.041 C 134.816 99.489 131.941 98.147 131.685 96.805 C 131.558 96.103 131.941 95.08 134.305 94.825 C 134.56 95.911 135.902 97.061 139.096 96.742 C 141.396 96.55 143.313 95.719 143.057 94.442 C 142.802 93.1 140.374 92.333 136.541 92.653 C 128.747 93.355 126.83 97.636 120.186 98.211 C 115.458 98.658 111.625 96.933 111.114 94.378 C 110.922 93.419 110.922 91.183 115.906 90.736 C 118.461 90.544 120.505 90.992 120.761 92.014 Z M 95.845 118.719 C 93.673 121.466 92.715 124.66 92.906 127.791 C 93.098 130.921 94.631 133.476 97.059 135.457 C 99.614 137.437 102.361 138.012 105.492 137.437 C 106.706 137.246 108.047 136.607 109.261 136.224 C 106.706 136.224 104.534 135.393 102.361 133.668 C 99.998 131.943 98.4 129.515 98.017 126.577 C 97.442 123.829 98.017 121.274 99.551 119.038 C 101.275 116.866 103.511 115.652 106.45 115.269 C 109.389 115.077 111.944 115.844 114.5 117.632 C 113.925 116.802 113.094 116.227 112.328 115.46 C 109.772 113.735 107.025 112.905 103.639 113.735 C 100.572 114.374 98.017 115.971 95.845 118.719 Z M 130.088 103.961 C 121.847 103.961 114.5 103.13 109.197 101.98 C 103.511 100.575 100.509 99.041 100.509 97.061 C 100.509 96.23 100.892 95.527 102.042 94.697 C 98.464 96.103 96.548 97.253 96.548 99.041 C 96.739 101.022 99.934 103.002 106.45 104.536 C 112.583 106.069 120.441 106.899 129.897 106.899 C 139.544 106.899 147.21 106.069 153.343 104.536 C 159.86 103.002 162.99 100.958 162.99 99.041 C 162.99 97.636 161.584 96.294 159.029 95.272 C 159.604 95.655 160.051 96.294 160.051 96.997 C 160.051 98.978 157.112 100.575 151.171 101.916 C 145.677 103.13 138.649 103.961 130.088 103.961 L 130.088 103.961 Z M 153.599 109.455 C 147.465 110.861 139.608 111.819 130.152 111.819 C 120.505 111.819 112.647 110.797 106.514 109.455 C 101.02 108.049 98.081 106.516 97.059 104.919 C 98.081 111.819 100.445 118.335 103.575 124.085 C 105.939 127.663 108.303 130.793 110.667 134.179 C 111.689 136.16 112.392 138.14 112.839 140.121 C 114.372 142.293 116.608 143.698 119.355 144.465 C 122.741 145.679 126.255 146.19 129.833 145.998 L 130.216 145.998 C 133.794 146.19 137.563 145.615 141.013 144.465 C 143.568 143.634 145.741 142.293 147.338 140.121 L 147.529 140.121 C 147.913 138.14 148.552 136.16 149.51 134.179 C 151.874 130.793 154.238 127.663 156.601 124.085 C 159.732 118.399 161.904 111.883 163.118 104.919 C 161.84 106.708 158.901 108.241 153.599 109.455 L 153.599 109.455 Z " fill="rgb(40,51,76)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_cs.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_cs.svg new file mode 100644 index 000000000..c1084f00f --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_cs.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_7VbsU9NlSVoJV8XCfuIzJDKTFiJMv0gW"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_7VbsU9NlSVoJV8XCfuIzJDKTFiJMv0gW)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(97,32,140)"/></g></g><path d=" M 120.454 194.459 L 126.606 194.459 L 126.606 194.459 Q 126.258 199.278 123.048 202.046 L 123.048 202.046 L 123.048 202.046 Q 119.839 204.815 114.589 204.815 L 114.589 204.815 L 114.589 204.815 Q 108.847 204.815 105.555 200.949 L 105.555 200.949 L 105.555 200.949 Q 102.264 197.084 102.264 190.336 L 102.264 190.336 L 102.264 188.511 L 102.264 188.511 Q 102.264 184.205 103.781 180.923 L 103.781 180.923 L 103.781 180.923 Q 105.299 177.642 108.119 175.889 L 108.119 175.889 L 108.119 175.889 Q 110.938 174.135 114.671 174.135 L 114.671 174.135 L 114.671 174.135 Q 119.839 174.135 122.997 176.904 L 122.997 176.904 L 122.997 176.904 Q 126.155 179.672 126.647 184.676 L 126.647 184.676 L 120.495 184.676 L 120.495 184.676 Q 120.27 181.785 118.885 180.482 L 118.885 180.482 L 118.885 180.482 Q 117.501 179.18 114.671 179.18 L 114.671 179.18 L 114.671 179.18 Q 111.595 179.18 110.067 181.385 L 110.067 181.385 L 110.067 181.385 Q 108.539 183.589 108.498 188.224 L 108.498 188.224 L 108.498 190.48 L 108.498 190.48 Q 108.498 195.32 109.964 197.555 L 109.964 197.555 L 109.964 197.555 Q 111.431 199.791 114.589 199.791 L 114.589 199.791 L 114.589 199.791 Q 117.439 199.791 118.844 198.488 L 118.844 198.488 L 118.844 198.488 Q 120.249 197.186 120.454 194.459 L 120.454 194.459 L 120.454 194.459 Z M 140.183 204.405 L 141.659 195.997 L 137.701 195.997 L 136.225 204.405 L 132.472 204.405 L 133.948 195.997 L 129.293 195.997 L 129.293 192.469 L 134.563 192.469 L 135.589 186.645 L 130.831 186.645 L 130.831 183.077 L 136.225 183.077 L 137.722 174.545 L 141.454 174.545 L 139.957 183.077 L 143.936 183.077 L 145.433 174.545 L 149.186 174.545 L 147.688 183.077 L 152.18 183.077 L 152.18 186.645 L 147.053 186.645 L 146.027 192.469 L 150.621 192.469 L 150.621 195.997 L 145.412 195.997 L 143.936 204.405 L 140.183 204.405 L 140.183 204.405 Z M 139.321 186.645 L 138.316 192.469 L 142.274 192.469 L 143.3 186.645 L 139.321 186.645 L 139.321 186.645 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><path d=" M 110.44 104.96 L 110.44 104.96 L 110.44 104.96 Q 105.82 104.96 103.36 107.78 L 103.36 107.78 L 103.36 107.78 Q 100.9 110.6 100.9 115.76 L 100.9 115.76 L 100.9 115.76 Q 100.9 120.98 103.63 123.8 L 103.63 123.8 L 103.63 123.8 Q 106.36 126.62 110.98 126.62 L 110.98 126.62 L 110.98 126.62 Q 113.44 126.62 115.15 125.96 L 115.15 125.96 L 115.15 125.96 Q 116.86 125.3 118.42 124.46 L 118.42 124.46 L 118.42 124.46 Q 119.44 125.3 120.01 126.47 L 120.01 126.47 L 120.01 126.47 Q 120.58 127.64 120.58 129.2 L 120.58 129.2 L 120.58 129.2 Q 120.58 131.66 117.85 133.37 L 117.85 133.37 L 117.85 133.37 Q 115.12 135.08 109.54 135.08 L 109.54 135.08 L 109.54 135.08 Q 105.52 135.08 101.98 133.94 L 101.98 133.94 L 101.98 133.94 Q 98.44 132.8 95.8 130.43 L 95.8 130.43 L 95.8 130.43 Q 93.16 128.06 91.63 124.43 L 91.63 124.43 L 91.63 124.43 Q 90.1 120.8 90.1 115.76 L 90.1 115.76 L 90.1 115.76 Q 90.1 111.08 91.57 107.51 L 91.57 107.51 L 91.57 107.51 Q 93.04 103.94 95.59 101.48 L 95.59 101.48 L 95.59 101.48 Q 98.14 99.02 101.56 97.76 L 101.56 97.76 L 101.56 97.76 Q 104.98 96.5 108.88 96.5 L 108.88 96.5 L 108.88 96.5 Q 114.4 96.5 117.43 98.3 L 117.43 98.3 L 117.43 98.3 Q 120.46 100.1 120.46 102.92 L 120.46 102.92 L 120.46 102.92 Q 120.46 104.48 119.68 105.62 L 119.68 105.62 L 119.68 105.62 Q 118.9 106.76 117.88 107.42 L 117.88 107.42 L 117.88 107.42 Q 116.32 106.4 114.55 105.68 L 114.55 105.68 L 114.55 105.68 Q 112.78 104.96 110.44 104.96 Z M 152.98 126.26 L 151.3 133.94 L 151.3 133.94 Q 150.46 134.06 149.77 134.09 L 149.77 134.09 L 149.77 134.09 Q 149.08 134.12 148.42 134.12 L 148.42 134.12 L 148.42 134.12 Q 145.9 134.12 144.7 133.16 L 144.7 133.16 L 144.7 133.16 Q 143.5 132.2 143.5 130.04 L 143.5 130.04 L 143.5 130.04 Q 143.5 128.66 143.86 126.92 L 143.86 126.92 L 143.98 126.26 L 138.58 126.26 L 136.9 133.94 L 136.9 133.94 Q 136.06 134.06 135.37 134.09 L 135.37 134.09 L 135.37 134.09 Q 134.68 134.12 134.02 134.12 L 134.02 134.12 L 134.02 134.12 Q 131.5 134.12 130.3 133.16 L 130.3 133.16 L 130.3 133.16 Q 129.1 132.2 129.1 130.04 L 129.1 130.04 L 129.1 130.04 Q 129.1 128.66 129.46 126.92 L 129.46 126.92 L 129.58 126.26 L 125.08 126.26 L 125.08 126.26 Q 124.78 125.6 124.42 124.61 L 124.42 124.61 L 124.42 124.61 Q 124.06 123.62 124.06 122.6 L 124.06 122.6 L 124.06 122.6 Q 124.06 120.5 125.05 119.57 L 125.05 119.57 L 125.05 119.57 Q 126.04 118.64 127.48 118.64 L 127.48 118.64 L 131.26 118.64 L 132.58 112.58 L 126.7 112.58 L 126.7 112.58 Q 126.4 111.92 126.04 110.93 L 126.04 110.93 L 126.04 110.93 Q 125.68 109.94 125.68 108.92 L 125.68 108.92 L 125.68 108.92 Q 125.68 106.82 126.67 105.89 L 126.67 105.89 L 126.67 105.89 Q 127.66 104.96 129.1 104.96 L 129.1 104.96 L 134.26 104.96 L 136 97.22 L 136 97.22 Q 136.84 97.1 137.56 97.1 L 137.56 97.1 L 137.56 97.1 Q 138.28 97.1 138.94 97.1 L 138.94 97.1 L 138.94 97.1 Q 141.46 97.1 142.69 98.03 L 142.69 98.03 L 142.69 98.03 Q 143.92 98.96 143.92 101.12 L 143.92 101.12 L 143.92 101.12 Q 143.92 101.78 143.8 102.62 L 143.8 102.62 L 143.8 102.62 Q 143.68 103.46 143.5 104.3 L 143.5 104.3 L 143.32 104.96 L 148.66 104.96 L 150.4 97.22 L 150.4 97.22 Q 151.24 97.1 151.96 97.1 L 151.96 97.1 L 151.96 97.1 Q 152.68 97.1 153.34 97.1 L 153.34 97.1 L 153.34 97.1 Q 155.86 97.1 157.09 98.03 L 157.09 98.03 L 157.09 98.03 Q 158.32 98.96 158.32 101.12 L 158.32 101.12 L 158.32 101.12 Q 158.32 101.78 158.2 102.62 L 158.2 102.62 L 158.2 102.62 Q 158.08 103.46 157.9 104.3 L 157.9 104.3 L 157.72 104.96 L 162.22 104.96 L 162.22 104.96 Q 162.64 105.56 162.97 106.58 L 162.97 106.58 L 162.97 106.58 Q 163.3 107.6 163.3 108.68 L 163.3 108.68 L 163.3 108.68 Q 163.3 110.78 162.31 111.68 L 162.31 111.68 L 162.31 111.68 Q 161.32 112.58 159.94 112.58 L 159.94 112.58 L 156.04 112.58 L 154.72 118.64 L 160.6 118.64 L 160.6 118.64 Q 161.02 119.24 161.35 120.26 L 161.35 120.26 L 161.35 120.26 Q 161.68 121.28 161.68 122.36 L 161.68 122.36 L 161.68 122.36 Q 161.68 124.46 160.69 125.36 L 160.69 125.36 L 160.69 125.36 Q 159.7 126.26 158.32 126.26 L 158.32 126.26 L 152.98 126.26 L 152.98 126.26 Z M 141.64 112.58 L 140.32 118.64 L 145.66 118.64 L 146.98 112.58 L 141.64 112.58 L 141.64 112.58 Z " fill-rule="evenodd" fill="rgb(97,32,140)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_css.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_css.svg new file mode 100644 index 000000000..0289d715b --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_css.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_TmFC4HHluelSgN1NslxujnVenHXdyqsa"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_TmFC4HHluelSgN1NslxujnVenHXdyqsa)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(0,150,230)"/><g><path d=" M 101.286 99.714 L 101.286 87.143 C 101.286 85.411 102.694 84 104.429 84 C 106.167 84 107.571 82.592 107.571 80.857 C 107.571 79.122 106.167 77.714 104.429 77.714 C 99.23 77.714 95 81.945 95 87.143 L 95 99.714 C 95 103.181 92.181 106 88.714 106 C 86.976 106 85.571 107.408 85.571 109.143 C 85.571 110.878 86.976 112.286 88.714 112.286 C 92.181 112.286 95 115.105 95 118.571 L 95 131.143 C 95 136.341 99.23 140.571 104.429 140.571 C 106.167 140.571 107.571 139.163 107.571 137.429 C 107.571 135.694 106.167 134.286 104.429 134.286 C 102.694 134.286 101.286 132.875 101.286 131.143 L 101.286 118.571 C 101.286 114.8 99.582 111.45 96.942 109.143 C 99.582 106.836 101.286 103.486 101.286 99.714 Z " fill="rgb(0,150,230)"/><path d=" M 164.143 106 C 160.676 106 157.857 103.181 157.857 99.714 L 157.857 87.143 C 157.857 81.945 153.627 77.714 148.429 77.714 C 146.691 77.714 145.286 79.122 145.286 80.857 C 145.286 82.592 146.691 84 148.429 84 C 150.163 84 151.571 85.411 151.571 87.143 L 151.571 99.714 C 151.571 103.486 153.275 106.836 155.915 109.143 C 153.275 111.45 151.571 114.8 151.571 118.571 L 151.571 131.143 C 151.571 132.875 150.163 134.286 148.429 134.286 C 146.691 134.286 145.286 135.694 145.286 137.429 C 145.286 139.163 146.691 140.571 148.429 140.571 C 153.627 140.571 157.857 136.341 157.857 131.143 L 157.857 118.571 C 157.857 115.105 160.676 112.286 164.143 112.286 C 165.881 112.286 167.286 110.878 167.286 109.143 C 167.286 107.408 165.881 106 164.143 106 Z " fill="rgb(0,150,230)"/></g></g></g><path d=" M 106.954 193.8 L 113.106 193.8 L 113.106 193.8 Q 112.758 198.619 109.548 201.388 L 109.548 201.388 L 109.548 201.388 Q 106.339 204.156 101.089 204.156 L 101.089 204.156 L 101.089 204.156 Q 95.347 204.156 92.055 200.291 L 92.055 200.291 L 92.055 200.291 Q 88.764 196.425 88.764 189.678 L 88.764 189.678 L 88.764 187.853 L 88.764 187.853 Q 88.764 183.546 90.281 180.265 L 90.281 180.265 L 90.281 180.265 Q 91.799 176.983 94.619 175.23 L 94.619 175.23 L 94.619 175.23 Q 97.438 173.477 101.171 173.477 L 101.171 173.477 L 101.171 173.477 Q 106.339 173.477 109.497 176.245 L 109.497 176.245 L 109.497 176.245 Q 112.655 179.014 113.147 184.018 L 113.147 184.018 L 106.995 184.018 L 106.995 184.018 Q 106.77 181.126 105.385 179.824 L 105.385 179.824 L 105.385 179.824 Q 104.001 178.521 101.171 178.521 L 101.171 178.521 L 101.171 178.521 Q 98.095 178.521 96.567 180.726 L 96.567 180.726 L 96.567 180.726 Q 95.039 182.931 94.998 187.565 L 94.998 187.565 L 94.998 189.821 L 94.998 189.821 Q 94.998 194.661 96.464 196.896 L 96.464 196.896 L 96.464 196.896 Q 97.931 199.132 101.089 199.132 L 101.089 199.132 L 101.089 199.132 Q 103.939 199.132 105.344 197.83 L 105.344 197.83 L 105.344 197.83 Q 106.749 196.527 106.954 193.8 L 106.954 193.8 L 106.954 193.8 Z M 132.63 195.912 L 132.63 195.912 L 132.63 195.912 Q 132.63 194.169 131.399 193.236 L 131.399 193.236 L 131.399 193.236 Q 130.169 192.303 126.97 191.267 L 126.97 191.267 L 126.97 191.267 Q 123.771 190.231 121.904 189.227 L 121.904 189.227 L 121.904 189.227 Q 116.818 186.479 116.818 181.823 L 116.818 181.823 L 116.818 181.823 Q 116.818 179.403 118.182 177.506 L 118.182 177.506 L 118.182 177.506 Q 119.546 175.609 122.099 174.543 L 122.099 174.543 L 122.099 174.543 Q 124.652 173.477 127.831 173.477 L 127.831 173.477 L 127.831 173.477 Q 131.03 173.477 133.532 174.635 L 133.532 174.635 L 133.532 174.635 Q 136.034 175.794 137.418 177.906 L 137.418 177.906 L 137.418 177.906 Q 138.803 180.019 138.803 182.705 L 138.803 182.705 L 132.65 182.705 L 132.65 182.705 Q 132.65 180.654 131.358 179.516 L 131.358 179.516 L 131.358 179.516 Q 130.066 178.378 127.729 178.378 L 127.729 178.378 L 127.729 178.378 Q 125.473 178.378 124.222 179.332 L 124.222 179.332 L 124.222 179.332 Q 122.971 180.285 122.971 181.844 L 122.971 181.844 L 122.971 181.844 Q 122.971 183.3 124.437 184.284 L 124.437 184.284 L 124.437 184.284 Q 125.903 185.269 128.754 186.13 L 128.754 186.13 L 128.754 186.13 Q 134.004 187.709 136.403 190.047 L 136.403 190.047 L 136.403 190.047 Q 138.803 192.385 138.803 195.871 L 138.803 195.871 L 138.803 195.871 Q 138.803 199.747 135.87 201.952 L 135.87 201.952 L 135.87 201.952 Q 132.938 204.156 127.975 204.156 L 127.975 204.156 L 127.975 204.156 Q 124.529 204.156 121.699 202.895 L 121.699 202.895 L 121.699 202.895 Q 118.869 201.634 117.382 199.439 L 117.382 199.439 L 117.382 199.439 Q 115.896 197.245 115.896 194.354 L 115.896 194.354 L 122.068 194.354 L 122.068 194.354 Q 122.068 199.296 127.975 199.296 L 127.975 199.296 L 127.975 199.296 Q 130.169 199.296 131.399 198.404 L 131.399 198.404 L 131.399 198.404 Q 132.63 197.512 132.63 195.912 Z M 158.449 195.912 L 158.449 195.912 L 158.449 195.912 Q 158.449 194.169 157.219 193.236 L 157.219 193.236 L 157.219 193.236 Q 155.988 192.303 152.789 191.267 L 152.789 191.267 L 152.789 191.267 Q 149.59 190.231 147.724 189.227 L 147.724 189.227 L 147.724 189.227 Q 142.638 186.479 142.638 181.823 L 142.638 181.823 L 142.638 181.823 Q 142.638 179.403 144.001 177.506 L 144.001 177.506 L 144.001 177.506 Q 145.365 175.609 147.918 174.543 L 147.918 174.543 L 147.918 174.543 Q 150.472 173.477 153.65 173.477 L 153.65 173.477 L 153.65 173.477 Q 156.85 173.477 159.352 174.635 L 159.352 174.635 L 159.352 174.635 Q 161.854 175.794 163.238 177.906 L 163.238 177.906 L 163.238 177.906 Q 164.622 180.019 164.622 182.705 L 164.622 182.705 L 158.47 182.705 L 158.47 182.705 Q 158.47 180.654 157.178 179.516 L 157.178 179.516 L 157.178 179.516 Q 155.886 178.378 153.548 178.378 L 153.548 178.378 L 153.548 178.378 Q 151.292 178.378 150.041 179.332 L 150.041 179.332 L 150.041 179.332 Q 148.79 180.285 148.79 181.844 L 148.79 181.844 L 148.79 181.844 Q 148.79 183.3 150.256 184.284 L 150.256 184.284 L 150.256 184.284 Q 151.723 185.269 154.573 186.13 L 154.573 186.13 L 154.573 186.13 Q 159.823 187.709 162.223 190.047 L 162.223 190.047 L 162.223 190.047 Q 164.622 192.385 164.622 195.871 L 164.622 195.871 L 164.622 195.871 Q 164.622 199.747 161.689 201.952 L 161.689 201.952 L 161.689 201.952 Q 158.757 204.156 153.794 204.156 L 153.794 204.156 L 153.794 204.156 Q 150.349 204.156 147.519 202.895 L 147.519 202.895 L 147.519 202.895 Q 144.688 201.634 143.202 199.439 L 143.202 199.439 L 143.202 199.439 Q 141.715 197.245 141.715 194.354 L 141.715 194.354 L 147.888 194.354 L 147.888 194.354 Q 147.888 199.296 153.794 199.296 L 153.794 199.296 L 153.794 199.296 Q 155.988 199.296 157.219 198.404 L 157.219 198.404 L 157.219 198.404 Q 158.449 197.512 158.449 195.912 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_csv.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_csv.svg new file mode 100644 index 000000000..087807e2c --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_csv.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_GVDICnlajH4CYfJQXEDowdcqTjvuHKgn"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_GVDICnlajH4CYfJQXEDowdcqTjvuHKgn)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(243,111,160)"/><path d=" M 113.857 90.286 L 113.857 77.714 L 76.143 77.714 L 76.143 90.286 L 76.143 96.571 L 76.143 102.857 L 76.143 109.143 L 76.143 115.429 L 76.143 121.714 L 76.143 128 L 76.143 134.286 L 76.143 146.857 L 107.571 146.857 L 113.857 146.857 L 179.857 146.857 L 179.857 134.286 L 179.857 128 L 179.857 121.714 L 179.857 115.429 L 179.857 109.143 L 179.857 102.857 L 179.857 90.286 L 113.857 90.286 Z M 82.429 84 L 107.571 84 L 107.571 90.286 L 82.429 90.286 L 82.429 84 Z M 82.429 96.571 L 107.571 96.571 L 107.571 102.857 L 82.429 102.857 L 82.429 96.571 Z M 82.429 109.143 L 107.571 109.143 L 107.571 115.429 L 82.429 115.429 L 82.429 109.143 Z M 82.429 121.714 L 107.571 121.714 L 107.571 128 L 82.429 128 L 82.429 121.714 Z M 107.571 140.571 L 82.429 140.571 L 82.429 134.286 L 107.571 134.286 L 107.571 140.571 Z M 173.571 140.571 L 113.857 140.571 L 113.857 134.286 L 173.571 134.286 L 173.571 140.571 Z M 173.571 128 L 113.857 128 L 113.857 121.714 L 173.571 121.714 L 173.571 128 Z M 173.571 115.429 L 113.857 115.429 L 113.857 109.143 L 173.571 109.143 L 173.571 115.429 Z M 113.857 102.857 L 113.857 96.571 L 173.571 96.571 L 173.571 102.857 L 113.857 102.857 Z " fill="rgb(200,189,184)"/></g></g><path d=" M 106.454 193.8 L 112.606 193.8 L 112.606 193.8 Q 112.258 198.619 109.048 201.388 L 109.048 201.388 L 109.048 201.388 Q 105.839 204.156 100.589 204.156 L 100.589 204.156 L 100.589 204.156 Q 94.847 204.156 91.555 200.291 L 91.555 200.291 L 91.555 200.291 Q 88.264 196.425 88.264 189.678 L 88.264 189.678 L 88.264 187.853 L 88.264 187.853 Q 88.264 183.546 89.781 180.265 L 89.781 180.265 L 89.781 180.265 Q 91.299 176.983 94.119 175.23 L 94.119 175.23 L 94.119 175.23 Q 96.938 173.477 100.671 173.477 L 100.671 173.477 L 100.671 173.477 Q 105.839 173.477 108.997 176.245 L 108.997 176.245 L 108.997 176.245 Q 112.155 179.014 112.647 184.018 L 112.647 184.018 L 106.495 184.018 L 106.495 184.018 Q 106.27 181.126 104.885 179.824 L 104.885 179.824 L 104.885 179.824 Q 103.501 178.521 100.671 178.521 L 100.671 178.521 L 100.671 178.521 Q 97.595 178.521 96.067 180.726 L 96.067 180.726 L 96.067 180.726 Q 94.539 182.931 94.498 187.565 L 94.498 187.565 L 94.498 189.821 L 94.498 189.821 Q 94.498 194.661 95.964 196.896 L 95.964 196.896 L 95.964 196.896 Q 97.431 199.132 100.589 199.132 L 100.589 199.132 L 100.589 199.132 Q 103.439 199.132 104.844 197.83 L 104.844 197.83 L 104.844 197.83 Q 106.249 196.527 106.454 193.8 L 106.454 193.8 L 106.454 193.8 Z M 132.13 195.912 L 132.13 195.912 L 132.13 195.912 Q 132.13 194.169 130.899 193.236 L 130.899 193.236 L 130.899 193.236 Q 129.669 192.303 126.47 191.267 L 126.47 191.267 L 126.47 191.267 Q 123.271 190.231 121.404 189.227 L 121.404 189.227 L 121.404 189.227 Q 116.318 186.479 116.318 181.823 L 116.318 181.823 L 116.318 181.823 Q 116.318 179.403 117.682 177.506 L 117.682 177.506 L 117.682 177.506 Q 119.046 175.609 121.599 174.543 L 121.599 174.543 L 121.599 174.543 Q 124.152 173.477 127.331 173.477 L 127.331 173.477 L 127.331 173.477 Q 130.53 173.477 133.032 174.635 L 133.032 174.635 L 133.032 174.635 Q 135.534 175.794 136.918 177.906 L 136.918 177.906 L 136.918 177.906 Q 138.303 180.019 138.303 182.705 L 138.303 182.705 L 132.15 182.705 L 132.15 182.705 Q 132.15 180.654 130.858 179.516 L 130.858 179.516 L 130.858 179.516 Q 129.566 178.378 127.229 178.378 L 127.229 178.378 L 127.229 178.378 Q 124.973 178.378 123.722 179.332 L 123.722 179.332 L 123.722 179.332 Q 122.471 180.285 122.471 181.844 L 122.471 181.844 L 122.471 181.844 Q 122.471 183.3 123.937 184.284 L 123.937 184.284 L 123.937 184.284 Q 125.403 185.269 128.254 186.13 L 128.254 186.13 L 128.254 186.13 Q 133.504 187.709 135.903 190.047 L 135.903 190.047 L 135.903 190.047 Q 138.303 192.385 138.303 195.871 L 138.303 195.871 L 138.303 195.871 Q 138.303 199.747 135.37 201.952 L 135.37 201.952 L 135.37 201.952 Q 132.438 204.156 127.475 204.156 L 127.475 204.156 L 127.475 204.156 Q 124.029 204.156 121.199 202.895 L 121.199 202.895 L 121.199 202.895 Q 118.369 201.634 116.882 199.439 L 116.882 199.439 L 116.882 199.439 Q 115.396 197.245 115.396 194.354 L 115.396 194.354 L 121.568 194.354 L 121.568 194.354 Q 121.568 199.296 127.475 199.296 L 127.475 199.296 L 127.475 199.296 Q 129.669 199.296 130.899 198.404 L 130.899 198.404 L 130.899 198.404 Q 132.13 197.512 132.13 195.912 Z M 146.772 173.887 L 153.499 196.343 L 160.267 173.887 L 167.116 173.887 L 156.719 203.746 L 150.3 203.746 L 139.943 173.887 L 146.772 173.887 L 146.772 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_dbf.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_dbf.svg new file mode 100644 index 000000000..54a7ed4d6 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_dbf.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_AC8gC2Fy7eYKCxX4InFHVsjb6C7TwY0y"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_AC8gC2Fy7eYKCxX4InFHVsjb6C7TwY0y)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(233,99,96)"/><path d=" M 117 90.286 L 117 77.714 L 79.286 77.714 L 79.286 90.286 L 79.286 96.571 L 79.286 102.857 L 79.286 109.143 L 79.286 115.429 L 79.286 121.714 L 79.286 128 L 79.286 134.286 L 79.286 146.857 L 110.714 146.857 L 117 146.857 L 183 146.857 L 183 134.286 L 183 128 L 183 121.714 L 183 115.429 L 183 109.143 L 183 102.857 L 183 90.286 L 117 90.286 Z M 85.571 84 L 110.714 84 L 110.714 90.286 L 85.571 90.286 L 85.571 84 Z M 85.571 96.571 L 110.714 96.571 L 110.714 102.857 L 85.571 102.857 L 85.571 96.571 Z M 85.571 109.143 L 110.714 109.143 L 110.714 115.429 L 85.571 115.429 L 85.571 109.143 Z M 85.571 121.714 L 110.714 121.714 L 110.714 128 L 85.571 128 L 85.571 121.714 Z M 110.714 140.571 L 85.571 140.571 L 85.571 134.286 L 110.714 134.286 L 110.714 140.571 Z M 176.714 140.571 L 117 140.571 L 117 134.286 L 176.714 134.286 L 176.714 140.571 Z M 176.714 128 L 117 128 L 117 121.714 L 176.714 121.714 L 176.714 128 Z M 176.714 115.429 L 117 115.429 L 117 109.143 L 176.714 109.143 L 176.714 115.429 Z M 117 102.857 L 117 96.571 L 176.714 96.571 L 176.714 102.857 L 117 102.857 Z " fill="rgb(200,189,184)"/></g></g><path d=" M 99.915 205.746 L 90.666 205.746 L 90.666 175.887 L 99.854 175.887 L 99.854 175.887 Q 103.791 175.887 106.898 177.661 L 106.898 177.661 L 106.898 177.661 Q 110.005 179.435 111.748 182.706 L 111.748 182.706 L 111.748 182.706 Q 113.491 185.977 113.491 190.14 L 113.491 190.14 L 113.491 191.514 L 113.491 191.514 Q 113.491 195.677 111.779 198.917 L 111.779 198.917 L 111.779 198.917 Q 110.066 202.157 106.949 203.941 L 106.949 203.941 L 106.949 203.941 Q 103.832 205.726 99.915 205.746 L 99.915 205.746 L 99.915 205.746 Z M 99.854 180.87 L 96.818 180.87 L 96.818 200.804 L 99.792 200.804 L 99.792 200.804 Q 103.401 200.804 105.309 198.445 L 105.309 198.445 L 105.309 198.445 Q 107.216 196.087 107.257 191.698 L 107.257 191.698 L 107.257 190.119 L 107.257 190.119 Q 107.257 185.566 105.37 183.218 L 105.37 183.218 L 105.37 183.218 Q 103.483 180.87 99.854 180.87 L 99.854 180.87 L 99.854 180.87 Z M 129.569 205.746 L 117.962 205.746 L 117.962 175.887 L 128.421 175.887 L 128.421 175.887 Q 133.855 175.887 136.665 177.968 L 136.665 177.968 L 136.665 177.968 Q 139.475 180.05 139.475 184.069 L 139.475 184.069 L 139.475 184.069 Q 139.475 186.264 138.347 187.935 L 138.347 187.935 L 138.347 187.935 Q 137.219 189.606 135.209 190.386 L 135.209 190.386 L 135.209 190.386 Q 137.506 190.96 138.829 192.703 L 138.829 192.703 L 138.829 192.703 Q 140.151 194.446 140.151 196.969 L 140.151 196.969 L 140.151 196.969 Q 140.151 201.275 137.403 203.49 L 137.403 203.49 L 137.403 203.49 Q 134.655 205.705 129.569 205.746 L 129.569 205.746 L 129.569 205.746 Z M 129.754 192.744 L 124.114 192.744 L 124.114 200.804 L 129.385 200.804 L 129.385 200.804 Q 131.559 200.804 132.779 199.768 L 132.779 199.768 L 132.779 199.768 Q 133.999 198.732 133.999 196.907 L 133.999 196.907 L 133.999 196.907 Q 133.999 192.806 129.754 192.744 L 129.754 192.744 L 129.754 192.744 Z M 124.114 180.87 L 124.114 188.396 L 128.667 188.396 L 128.667 188.396 Q 133.322 188.314 133.322 184.685 L 133.322 184.685 L 133.322 184.685 Q 133.322 182.654 132.143 181.762 L 132.143 181.762 L 132.143 181.762 Q 130.964 180.87 128.421 180.87 L 128.421 180.87 L 124.114 180.87 L 124.114 180.87 Z M 162.73 188.581 L 162.73 193.544 L 150.918 193.544 L 150.918 205.746 L 144.766 205.746 L 144.766 175.887 L 164.207 175.887 L 164.207 180.87 L 150.918 180.87 L 150.918 188.581 L 162.73 188.581 L 162.73 188.581 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_dll.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_dll.svg new file mode 100644 index 000000000..c31d6df2e --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_dll.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_JRbDI2Nk1iQLWnj5TvFr9peayMg5GuJ2"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_JRbDI2Nk1iQLWnj5TvFr9peayMg5GuJ2)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 38 L 65.027 38 C 62.487 38 60.429 40.059 60.429 44.053 L 60.429 210.857 C 60.429 211.941 62.487 214 65.027 214 L 190.973 214 C 193.513 214 195.571 211.941 195.571 210.857 L 195.571 78.788 C 195.571 76.601 195.279 75.897 194.764 75.378 L 158.193 38.808 C 157.675 38.292 156.971 38 156.239 38 Z " fill="rgb(233,233,224)"/><path d=" M 190.973 214 L 65.027 214 C 62.487 214 60.429 211.941 60.429 209.402 L 60.429 160.571 L 195.571 160.571 L 195.571 209.402 C 195.571 211.941 193.513 214 190.973 214 Z " fill="rgb(62,71,83)"/><path d=" M 157.857 38.475 L 157.857 75.714 L 195.097 75.714 L 157.857 38.475 Z " fill="rgb(217,215,202)"/></g></g><path d=" M 102.415 203.746 L 93.166 203.746 L 93.166 173.887 L 102.354 173.887 L 102.354 173.887 Q 106.291 173.887 109.398 175.661 L 109.398 175.661 L 109.398 175.661 Q 112.505 177.435 114.248 180.706 L 114.248 180.706 L 114.248 180.706 Q 115.991 183.977 115.991 188.14 L 115.991 188.14 L 115.991 189.514 L 115.991 189.514 Q 115.991 193.677 114.279 196.917 L 114.279 196.917 L 114.279 196.917 Q 112.566 200.157 109.449 201.941 L 109.449 201.941 L 109.449 201.941 Q 106.332 203.726 102.415 203.746 L 102.415 203.746 L 102.415 203.746 Z M 102.354 178.87 L 99.318 178.87 L 99.318 198.804 L 102.292 198.804 L 102.292 198.804 Q 105.901 198.804 107.809 196.445 L 107.809 196.445 L 107.809 196.445 Q 109.716 194.087 109.757 189.698 L 109.757 189.698 L 109.757 188.119 L 109.757 188.119 Q 109.757 183.566 107.87 181.218 L 107.87 181.218 L 107.87 181.218 Q 105.983 178.87 102.354 178.87 L 102.354 178.87 L 102.354 178.87 Z M 126.614 173.887 L 126.614 198.804 L 139.678 198.804 L 139.678 203.746 L 120.462 203.746 L 120.462 173.887 L 126.614 173.887 L 126.614 173.887 Z M 149.357 173.887 L 149.357 198.804 L 162.421 198.804 L 162.421 203.746 L 143.205 203.746 L 143.205 173.887 L 149.357 173.887 L 149.357 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><g><g><g><g><path d=" M 128 98.25 C 122.625 98.25 118.25 102.625 118.25 108 C 118.25 113.375 122.625 117.75 128 117.75 C 133.375 117.75 137.75 113.375 137.75 108 C 137.75 102.625 133.375 98.25 128 98.25 Z " fill="rgb(200,189,184)"/><path d=" M 164.364 101.37 L 160.061 100.541 C 158.134 100.174 156.623 98.913 155.905 97.093 C 155.186 95.263 155.44 93.31 156.603 91.727 L 159.304 88.042 C 160.253 86.752 160.113 84.958 158.979 83.827 L 153.146 77.993 C 152.047 76.891 150.312 76.729 149.028 77.6 L 145.398 80.053 C 143.779 81.155 141.823 81.334 140.019 80.554 C 138.222 79.767 137.016 78.207 136.72 76.267 L 136.025 71.756 C 135.78 70.17 134.415 69 132.81 69 L 124.561 69 C 123.005 69 121.666 70.105 121.37 71.636 L 120.301 77.193 C 119.94 79.075 118.718 80.576 116.947 81.308 C 115.175 82.046 113.245 81.847 111.659 80.771 L 106.972 77.6 C 105.689 76.729 103.96 76.891 102.855 77.993 L 97.021 83.827 C 95.887 84.958 95.747 86.752 96.696 88.042 L 99.397 91.73 C 100.56 93.31 100.814 95.263 100.096 97.093 C 99.377 98.913 97.866 100.174 95.936 100.541 L 91.636 101.37 C 90.105 101.666 89 103.005 89 104.561 L 89 112.81 C 89 114.415 90.17 115.78 91.756 116.024 L 96.267 116.72 C 98.207 117.015 99.767 118.221 100.554 120.018 C 101.337 121.816 101.155 123.775 100.053 125.4 L 97.6 129.027 C 96.725 130.314 96.891 132.043 97.993 133.145 L 103.827 138.979 C 104.961 140.116 106.752 140.246 108.042 139.304 L 111.73 136.603 C 113.31 135.443 115.26 135.192 117.093 135.904 C 118.913 136.622 120.174 138.134 120.541 140.064 L 121.37 144.364 C 121.666 145.895 123.005 147 124.561 147 L 132.81 147 C 134.415 147 135.78 145.83 136.024 144.244 L 136.512 141.072 C 136.817 139.086 138.055 137.51 139.908 136.746 C 141.747 135.979 143.746 136.217 145.368 137.406 L 147.958 139.304 C 149.242 140.247 151.039 140.117 152.173 138.979 L 158.007 133.145 C 159.109 132.044 159.275 130.315 158.4 129.028 L 155.947 125.398 C 154.845 123.776 154.663 121.816 155.446 120.019 C 156.233 118.222 157.793 117.016 159.733 116.72 L 164.244 116.025 C 165.83 115.781 167 114.416 167 112.81 L 167 104.562 C 167 103.005 165.895 101.666 164.364 101.37 Z M 128 124.25 C 119.04 124.25 111.75 116.96 111.75 108 C 111.75 99.04 119.04 91.75 128 91.75 C 136.96 91.75 144.25 99.04 144.25 108 C 144.25 116.96 136.96 124.25 128 124.25 Z " fill="rgb(200,189,184)"/></g></g></g></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_doc.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_doc.svg new file mode 100644 index 000000000..b4592ae91 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_doc.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_54SBDTNgQpkFtn3DOaerMxpmQz2WYUVP"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_54SBDTNgQpkFtn3DOaerMxpmQz2WYUVP)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 98.143 80.857 L 79.286 80.857 C 77.551 80.857 76.143 79.449 76.143 77.714 C 76.143 75.979 77.551 74.571 79.286 74.571 L 98.143 74.571 C 99.878 74.571 101.286 75.979 101.286 77.714 C 101.286 79.449 99.878 80.857 98.143 80.857 Z " fill="rgb(134,151,203)"/><path d=" M 107.571 96.571 L 79.286 96.571 C 77.551 96.571 76.143 95.163 76.143 93.429 C 76.143 91.694 77.551 90.286 79.286 90.286 L 107.571 90.286 C 109.306 90.286 110.714 91.694 110.714 93.429 C 110.714 95.163 109.306 96.571 107.571 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 120.143 96.571 C 119.326 96.571 118.509 96.226 117.911 95.66 C 117.346 95.063 117 94.246 117 93.429 C 117 92.611 117.346 91.794 117.911 91.197 C 119.074 90.034 121.211 90.034 122.374 91.197 C 122.94 91.794 123.286 92.611 123.286 93.429 C 123.286 94.246 122.94 95.063 122.374 95.66 C 121.777 96.226 120.96 96.571 120.143 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 157.857 96.571 L 132.714 96.571 C 130.979 96.571 129.571 95.163 129.571 93.429 C 129.571 91.694 130.979 90.286 132.714 90.286 L 157.857 90.286 C 159.592 90.286 161 91.694 161 93.429 C 161 95.163 159.592 96.571 157.857 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 79.286 143.714 C 78.469 143.714 77.651 143.369 77.054 142.803 C 76.489 142.206 76.143 141.389 76.143 140.571 C 76.143 139.754 76.489 138.937 77.054 138.34 C 78.217 137.177 80.354 137.177 81.517 138.34 C 82.083 138.937 82.429 139.723 82.429 140.571 C 82.429 141.389 82.083 142.206 81.517 142.803 C 80.92 143.369 80.103 143.714 79.286 143.714 Z " fill="rgb(134,151,203)"/><path d=" M 117 143.714 L 91.857 143.714 C 90.122 143.714 88.714 142.306 88.714 140.571 C 88.714 138.837 90.122 137.429 91.857 137.429 L 117 137.429 C 118.735 137.429 120.143 138.837 120.143 140.571 C 120.143 142.306 118.735 143.714 117 143.714 Z " fill="rgb(134,151,203)"/><path d=" M 176.714 96.571 L 170.429 96.571 C 168.694 96.571 167.286 95.163 167.286 93.429 C 167.286 91.694 168.694 90.286 170.429 90.286 L 176.714 90.286 C 178.449 90.286 179.857 91.694 179.857 93.429 C 179.857 95.163 178.449 96.571 176.714 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 148.429 112.286 L 79.286 112.286 C 77.551 112.286 76.143 110.878 76.143 109.143 C 76.143 107.408 77.551 106 79.286 106 L 148.429 106 C 150.163 106 151.571 107.408 151.571 109.143 C 151.571 110.878 150.163 112.286 148.429 112.286 Z " fill="rgb(134,151,203)"/><path d=" M 176.714 112.286 L 157.857 112.286 C 156.122 112.286 154.714 110.878 154.714 109.143 C 154.714 107.408 156.122 106 157.857 106 L 176.714 106 C 178.449 106 179.857 107.408 179.857 109.143 C 179.857 110.878 178.449 112.286 176.714 112.286 Z " fill="rgb(134,151,203)"/><path d=" M 91.857 128 L 79.286 128 C 77.551 128 76.143 126.592 76.143 124.857 C 76.143 123.122 77.551 121.714 79.286 121.714 L 91.857 121.714 C 93.592 121.714 95 123.122 95 124.857 C 95 126.592 93.592 128 91.857 128 Z " fill="rgb(134,151,203)"/><path d=" M 135.857 128 L 104.429 128 C 102.694 128 101.286 126.592 101.286 124.857 C 101.286 123.122 102.694 121.714 104.429 121.714 L 135.857 121.714 C 137.592 121.714 139 123.122 139 124.857 C 139 126.592 137.592 128 135.857 128 Z " fill="rgb(134,151,203)"/><path d=" M 176.714 128 L 148.429 128 C 146.694 128 145.286 126.592 145.286 124.857 C 145.286 123.122 146.694 121.714 148.429 121.714 L 176.714 121.714 C 178.449 121.714 179.857 123.122 179.857 124.857 C 179.857 126.592 178.449 128 176.714 128 Z " fill="rgb(134,151,203)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(0,150,230)"/></g></g><path d=" M 96.915 203.746 L 87.666 203.746 L 87.666 173.887 L 96.854 173.887 L 96.854 173.887 Q 100.791 173.887 103.898 175.661 L 103.898 175.661 L 103.898 175.661 Q 107.005 177.435 108.748 180.706 L 108.748 180.706 L 108.748 180.706 Q 110.491 183.977 110.491 188.14 L 110.491 188.14 L 110.491 189.514 L 110.491 189.514 Q 110.491 193.677 108.779 196.917 L 108.779 196.917 L 108.779 196.917 Q 107.066 200.157 103.949 201.941 L 103.949 201.941 L 103.949 201.941 Q 100.832 203.726 96.915 203.746 L 96.915 203.746 L 96.915 203.746 Z M 96.854 178.87 L 93.818 178.87 L 93.818 198.804 L 96.792 198.804 L 96.792 198.804 Q 100.401 198.804 102.309 196.445 L 102.309 196.445 L 102.309 196.445 Q 104.216 194.087 104.257 189.698 L 104.257 189.698 L 104.257 188.119 L 104.257 188.119 Q 104.257 183.566 102.37 181.218 L 102.37 181.218 L 102.37 181.218 Q 100.483 178.87 96.854 178.87 L 96.854 178.87 L 96.854 178.87 Z M 139.489 188.16 L 139.489 189.493 L 139.489 189.493 Q 139.489 193.902 137.931 197.225 L 137.931 197.225 L 137.931 197.225 Q 136.372 200.547 133.47 202.352 L 133.47 202.352 L 133.47 202.352 Q 130.568 204.156 126.815 204.156 L 126.815 204.156 L 126.815 204.156 Q 123.104 204.156 120.191 202.372 L 120.191 202.372 L 120.191 202.372 Q 117.279 200.588 115.68 197.276 L 115.68 197.276 L 115.68 197.276 Q 114.08 193.964 114.06 189.657 L 114.06 189.657 L 114.06 188.181 L 114.06 188.181 Q 114.06 183.771 115.649 180.418 L 115.649 180.418 L 115.649 180.418 Q 117.238 177.065 120.14 175.271 L 120.14 175.271 L 120.14 175.271 Q 123.042 173.477 126.774 173.477 L 126.774 173.477 L 126.774 173.477 Q 130.507 173.477 133.409 175.271 L 133.409 175.271 L 133.409 175.271 Q 136.311 177.065 137.9 180.418 L 137.9 180.418 L 137.9 180.418 Q 139.489 183.771 139.489 188.16 L 139.489 188.16 L 139.489 188.16 Z M 133.255 189.596 L 133.255 188.14 L 133.255 188.14 Q 133.255 183.443 131.573 181.003 L 131.573 181.003 L 131.573 181.003 Q 129.892 178.563 126.774 178.563 L 126.774 178.563 L 126.774 178.563 Q 123.678 178.563 121.996 180.972 L 121.996 180.972 L 121.996 180.972 Q 120.314 183.382 120.294 188.037 L 120.294 188.037 L 120.294 189.493 L 120.294 189.493 Q 120.294 194.066 121.976 196.589 L 121.976 196.589 L 121.976 196.589 Q 123.657 199.111 126.815 199.111 L 126.815 199.111 L 126.815 199.111 Q 129.912 199.111 131.573 196.681 L 131.573 196.681 L 131.573 196.681 Q 133.234 194.251 133.255 189.596 L 133.255 189.596 L 133.255 189.596 Z M 161.248 193.8 L 167.4 193.8 L 167.4 193.8 Q 167.052 198.619 163.842 201.388 L 163.842 201.388 L 163.842 201.388 Q 160.633 204.156 155.383 204.156 L 155.383 204.156 L 155.383 204.156 Q 149.641 204.156 146.349 200.291 L 146.349 200.291 L 146.349 200.291 Q 143.058 196.425 143.058 189.678 L 143.058 189.678 L 143.058 187.853 L 143.058 187.853 Q 143.058 183.546 144.575 180.265 L 144.575 180.265 L 144.575 180.265 Q 146.093 176.983 148.913 175.23 L 148.913 175.23 L 148.913 175.23 Q 151.732 173.477 155.465 173.477 L 155.465 173.477 L 155.465 173.477 Q 160.633 173.477 163.791 176.245 L 163.791 176.245 L 163.791 176.245 Q 166.949 179.014 167.441 184.018 L 167.441 184.018 L 161.289 184.018 L 161.289 184.018 Q 161.063 181.126 159.679 179.824 L 159.679 179.824 L 159.679 179.824 Q 158.295 178.521 155.465 178.521 L 155.465 178.521 L 155.465 178.521 Q 152.389 178.521 150.861 180.726 L 150.861 180.726 L 150.861 180.726 Q 149.333 182.931 149.292 187.565 L 149.292 187.565 L 149.292 189.821 L 149.292 189.821 Q 149.292 194.661 150.758 196.896 L 150.758 196.896 L 150.758 196.896 Q 152.225 199.132 155.383 199.132 L 155.383 199.132 L 155.383 199.132 Q 158.233 199.132 159.638 197.83 L 159.638 197.83 L 159.638 197.83 Q 161.043 196.527 161.248 193.8 L 161.248 193.8 L 161.248 193.8 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_docx.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_docx.svg new file mode 100644 index 000000000..5350ef9ee --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_docx.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_fxEjjACohtE6hFscKN8eThiP8DR0OUr7"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_fxEjjACohtE6hFscKN8eThiP8DR0OUr7)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 98.143 80.857 L 79.286 80.857 C 77.551 80.857 76.143 79.449 76.143 77.714 C 76.143 75.979 77.551 74.571 79.286 74.571 L 98.143 74.571 C 99.878 74.571 101.286 75.979 101.286 77.714 C 101.286 79.449 99.878 80.857 98.143 80.857 Z " fill="rgb(134,151,203)"/><path d=" M 107.571 96.571 L 79.286 96.571 C 77.551 96.571 76.143 95.163 76.143 93.429 C 76.143 91.694 77.551 90.286 79.286 90.286 L 107.571 90.286 C 109.306 90.286 110.714 91.694 110.714 93.429 C 110.714 95.163 109.306 96.571 107.571 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 120.143 96.571 C 119.326 96.571 118.509 96.226 117.911 95.66 C 117.346 95.063 117 94.246 117 93.429 C 117 92.611 117.346 91.794 117.911 91.197 C 119.074 90.034 121.211 90.034 122.374 91.197 C 122.94 91.794 123.286 92.611 123.286 93.429 C 123.286 94.246 122.94 95.063 122.374 95.66 C 121.777 96.226 120.96 96.571 120.143 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 157.857 96.571 L 132.714 96.571 C 130.979 96.571 129.571 95.163 129.571 93.429 C 129.571 91.694 130.979 90.286 132.714 90.286 L 157.857 90.286 C 159.592 90.286 161 91.694 161 93.429 C 161 95.163 159.592 96.571 157.857 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 79.286 143.714 C 78.469 143.714 77.651 143.369 77.054 142.803 C 76.489 142.206 76.143 141.389 76.143 140.571 C 76.143 139.754 76.489 138.937 77.054 138.34 C 78.217 137.177 80.354 137.177 81.517 138.34 C 82.083 138.937 82.429 139.723 82.429 140.571 C 82.429 141.389 82.083 142.206 81.517 142.803 C 80.92 143.369 80.103 143.714 79.286 143.714 Z " fill="rgb(134,151,203)"/><path d=" M 117 143.714 L 91.857 143.714 C 90.122 143.714 88.714 142.306 88.714 140.571 C 88.714 138.837 90.122 137.429 91.857 137.429 L 117 137.429 C 118.735 137.429 120.143 138.837 120.143 140.571 C 120.143 142.306 118.735 143.714 117 143.714 Z " fill="rgb(134,151,203)"/><path d=" M 176.714 96.571 L 170.429 96.571 C 168.694 96.571 167.286 95.163 167.286 93.429 C 167.286 91.694 168.694 90.286 170.429 90.286 L 176.714 90.286 C 178.449 90.286 179.857 91.694 179.857 93.429 C 179.857 95.163 178.449 96.571 176.714 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 148.429 112.286 L 79.286 112.286 C 77.551 112.286 76.143 110.878 76.143 109.143 C 76.143 107.408 77.551 106 79.286 106 L 148.429 106 C 150.163 106 151.571 107.408 151.571 109.143 C 151.571 110.878 150.163 112.286 148.429 112.286 Z " fill="rgb(134,151,203)"/><path d=" M 176.714 112.286 L 157.857 112.286 C 156.122 112.286 154.714 110.878 154.714 109.143 C 154.714 107.408 156.122 106 157.857 106 L 176.714 106 C 178.449 106 179.857 107.408 179.857 109.143 C 179.857 110.878 178.449 112.286 176.714 112.286 Z " fill="rgb(134,151,203)"/><path d=" M 91.857 128 L 79.286 128 C 77.551 128 76.143 126.592 76.143 124.857 C 76.143 123.122 77.551 121.714 79.286 121.714 L 91.857 121.714 C 93.592 121.714 95 123.122 95 124.857 C 95 126.592 93.592 128 91.857 128 Z " fill="rgb(134,151,203)"/><path d=" M 135.857 128 L 104.429 128 C 102.694 128 101.286 126.592 101.286 124.857 C 101.286 123.122 102.694 121.714 104.429 121.714 L 135.857 121.714 C 137.592 121.714 139 123.122 139 124.857 C 139 126.592 137.592 128 135.857 128 Z " fill="rgb(134,151,203)"/><path d=" M 176.714 128 L 148.429 128 C 146.694 128 145.286 126.592 145.286 124.857 C 145.286 123.122 146.694 121.714 148.429 121.714 L 176.714 121.714 C 178.449 121.714 179.857 123.122 179.857 124.857 C 179.857 126.592 178.449 128 176.714 128 Z " fill="rgb(134,151,203)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(0,150,230)"/></g></g><path d=" M 85.415 203.965 L 76.166 203.965 L 76.166 174.105 L 85.354 174.105 L 85.354 174.105 Q 89.291 174.105 92.398 175.879 L 92.398 175.879 L 92.398 175.879 Q 95.505 177.653 97.248 180.924 L 97.248 180.924 L 97.248 180.924 Q 98.991 184.195 98.991 188.358 L 98.991 188.358 L 98.991 189.732 L 98.991 189.732 Q 98.991 193.896 97.279 197.136 L 97.279 197.136 L 97.279 197.136 Q 95.566 200.376 92.449 202.16 L 92.449 202.16 L 92.449 202.16 Q 89.332 203.944 85.415 203.965 L 85.415 203.965 L 85.415 203.965 Z M 85.354 179.089 L 82.318 179.089 L 82.318 199.022 L 85.292 199.022 L 85.292 199.022 Q 88.901 199.022 90.809 196.664 L 90.809 196.664 L 90.809 196.664 Q 92.716 194.306 92.757 189.917 L 92.757 189.917 L 92.757 188.338 L 92.757 188.338 Q 92.757 183.785 90.87 181.437 L 90.87 181.437 L 90.87 181.437 Q 88.983 179.089 85.354 179.089 L 85.354 179.089 L 85.354 179.089 Z M 127.989 188.379 L 127.989 189.712 L 127.989 189.712 Q 127.989 194.121 126.431 197.443 L 126.431 197.443 L 126.431 197.443 Q 124.872 200.766 121.97 202.57 L 121.97 202.57 L 121.97 202.57 Q 119.068 204.375 115.315 204.375 L 115.315 204.375 L 115.315 204.375 Q 111.604 204.375 108.691 202.591 L 108.691 202.591 L 108.691 202.591 Q 105.779 200.807 104.18 197.495 L 104.18 197.495 L 104.18 197.495 Q 102.58 194.183 102.56 189.876 L 102.56 189.876 L 102.56 188.399 L 102.56 188.399 Q 102.56 183.99 104.149 180.637 L 104.149 180.637 L 104.149 180.637 Q 105.738 177.284 108.64 175.49 L 108.64 175.49 L 108.64 175.49 Q 111.542 173.695 115.274 173.695 L 115.274 173.695 L 115.274 173.695 Q 119.007 173.695 121.909 175.49 L 121.909 175.49 L 121.909 175.49 Q 124.811 177.284 126.4 180.637 L 126.4 180.637 L 126.4 180.637 Q 127.989 183.99 127.989 188.379 L 127.989 188.379 L 127.989 188.379 Z M 121.755 189.814 L 121.755 188.358 L 121.755 188.358 Q 121.755 183.662 120.073 181.222 L 120.073 181.222 L 120.073 181.222 Q 118.392 178.781 115.274 178.781 L 115.274 178.781 L 115.274 178.781 Q 112.178 178.781 110.496 181.191 L 110.496 181.191 L 110.496 181.191 Q 108.814 183.601 108.794 188.256 L 108.794 188.256 L 108.794 189.712 L 108.794 189.712 Q 108.794 194.285 110.476 196.808 L 110.476 196.808 L 110.476 196.808 Q 112.157 199.33 115.315 199.33 L 115.315 199.33 L 115.315 199.33 Q 118.412 199.33 120.073 196.9 L 120.073 196.9 L 120.073 196.9 Q 121.734 194.47 121.755 189.814 L 121.755 189.814 L 121.755 189.814 Z M 149.748 194.019 L 155.9 194.019 L 155.9 194.019 Q 155.552 198.838 152.342 201.606 L 152.342 201.606 L 152.342 201.606 Q 149.133 204.375 143.883 204.375 L 143.883 204.375 L 143.883 204.375 Q 138.141 204.375 134.849 200.509 L 134.849 200.509 L 134.849 200.509 Q 131.558 196.644 131.558 189.896 L 131.558 189.896 L 131.558 188.071 L 131.558 188.071 Q 131.558 183.765 133.075 180.483 L 133.075 180.483 L 133.075 180.483 Q 134.593 177.202 137.413 175.449 L 137.413 175.449 L 137.413 175.449 Q 140.232 173.695 143.965 173.695 L 143.965 173.695 L 143.965 173.695 Q 149.133 173.695 152.291 176.464 L 152.291 176.464 L 152.291 176.464 Q 155.449 179.232 155.941 184.236 L 155.941 184.236 L 149.789 184.236 L 149.789 184.236 Q 149.563 181.345 148.179 180.042 L 148.179 180.042 L 148.179 180.042 Q 146.795 178.74 143.965 178.74 L 143.965 178.74 L 143.965 178.74 Q 140.889 178.74 139.361 180.945 L 139.361 180.945 L 139.361 180.945 Q 137.833 183.149 137.792 187.784 L 137.792 187.784 L 137.792 190.04 L 137.792 190.04 Q 137.792 194.88 139.258 197.115 L 139.258 197.115 L 139.258 197.115 Q 140.725 199.351 143.883 199.351 L 143.883 199.351 L 143.883 199.351 Q 146.733 199.351 148.138 198.048 L 148.138 198.048 L 148.138 198.048 Q 149.543 196.746 149.748 194.019 L 149.748 194.019 L 149.748 194.019 Z M 165.026 174.105 L 170.625 184.4 L 176.224 174.105 L 183.299 174.105 L 174.604 188.912 L 183.524 203.965 L 176.367 203.965 L 170.625 193.506 L 164.883 203.965 L 157.726 203.965 L 166.646 188.912 L 157.951 174.105 L 165.026 174.105 L 165.026 174.105 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_dwg.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_dwg.svg new file mode 100644 index 000000000..c8d31f5bd --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_dwg.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_D4Sj8YJrR0Fd21hr8GyZRcCPEVvEhAsA"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_D4Sj8YJrR0Fd21hr8GyZRcCPEVvEhAsA)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(134,151,203)"/><rect x="79.286" y="80.857" width="47.143" height="47.347" transform="matrix(1,0,0,1,0,0)" fill="rgb(200,189,184)"/><rect x="148.429" y="84" width="6.286" height="22" transform="matrix(1,0,0,1,0,0)" fill="rgb(173,162,158)"/><rect x="148.429" y="131.143" width="6.286" height="22" transform="matrix(1,0,0,1,0,0)" fill="rgb(173,162,158)"/><path d=" M 167.286 134.286 L 135.857 134.286 L 135.857 102.857 L 167.286 102.857 L 167.286 134.286 Z M 142.143 128 L 161 128 L 161 109.143 L 142.143 109.143 L 142.143 128 Z " fill="rgb(173,162,158)"/><rect x="164.143" y="115.429" width="22" height="6.286" transform="matrix(1,0,0,1,0,0)" fill="rgb(173,162,158)"/><rect x="117" y="115.429" width="22" height="6.286" transform="matrix(1,0,0,1,0,0)" fill="rgb(173,162,158)"/></g></g><path d=" M 92.415 203.746 L 83.166 203.746 L 83.166 173.887 L 92.354 173.887 L 92.354 173.887 Q 96.291 173.887 99.398 175.661 L 99.398 175.661 L 99.398 175.661 Q 102.505 177.435 104.248 180.706 L 104.248 180.706 L 104.248 180.706 Q 105.991 183.977 105.991 188.14 L 105.991 188.14 L 105.991 189.514 L 105.991 189.514 Q 105.991 193.677 104.279 196.917 L 104.279 196.917 L 104.279 196.917 Q 102.566 200.157 99.449 201.941 L 99.449 201.941 L 99.449 201.941 Q 96.332 203.726 92.415 203.746 L 92.415 203.746 L 92.415 203.746 Z M 92.354 178.87 L 89.318 178.87 L 89.318 198.804 L 92.292 198.804 L 92.292 198.804 Q 95.901 198.804 97.809 196.445 L 97.809 196.445 L 97.809 196.445 Q 99.716 194.087 99.757 189.698 L 99.757 189.698 L 99.757 188.119 L 99.757 188.119 Q 99.757 183.566 97.87 181.218 L 97.87 181.218 L 97.87 181.218 Q 95.983 178.87 92.354 178.87 L 92.354 178.87 L 92.354 178.87 Z M 128.816 173.887 L 133.718 195.133 L 137.737 173.887 L 143.869 173.887 L 137.245 203.746 L 131.052 203.746 L 126.191 183.771 L 121.331 203.746 L 115.138 203.746 L 108.514 173.887 L 114.646 173.887 L 118.686 195.092 L 123.607 173.887 L 128.816 173.887 L 128.816 173.887 Z M 170.816 188.058 L 170.816 199.973 L 170.816 199.973 Q 169.155 201.962 166.12 203.059 L 166.12 203.059 L 166.12 203.059 Q 163.085 204.156 159.394 204.156 L 159.394 204.156 L 159.394 204.156 Q 155.518 204.156 152.595 202.464 L 152.595 202.464 L 152.595 202.464 Q 149.673 200.772 148.083 197.553 L 148.083 197.553 L 148.083 197.553 Q 146.494 194.333 146.453 189.985 L 146.453 189.985 L 146.453 187.955 L 146.453 187.955 Q 146.453 183.484 147.96 180.213 L 147.96 180.213 L 147.96 180.213 Q 149.468 176.942 152.308 175.209 L 152.308 175.209 L 152.308 175.209 Q 155.148 173.477 158.963 173.477 L 158.963 173.477 L 158.963 173.477 Q 164.274 173.477 167.269 176.009 L 167.269 176.009 L 167.269 176.009 Q 170.263 178.542 170.816 183.382 L 170.816 183.382 L 164.828 183.382 L 164.828 183.382 Q 164.418 180.818 163.013 179.629 L 163.013 179.629 L 163.013 179.629 Q 161.608 178.439 159.147 178.439 L 159.147 178.439 L 159.147 178.439 Q 156.01 178.439 154.369 180.798 L 154.369 180.798 L 154.369 180.798 Q 152.729 183.156 152.708 187.812 L 152.708 187.812 L 152.708 189.719 L 152.708 189.719 Q 152.708 194.415 154.492 196.814 L 154.492 196.814 L 154.492 196.814 Q 156.276 199.214 159.722 199.214 L 159.722 199.214 L 159.722 199.214 Q 163.188 199.214 164.664 197.737 L 164.664 197.737 L 164.664 192.59 L 159.065 192.59 L 159.065 188.058 L 170.816 188.058 L 170.816 188.058 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_eml.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_eml.svg new file mode 100644 index 000000000..d508814d2 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_eml.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_eMGLtDmIvhgzWzMJn5Zi3pkjzRQYkoFv"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_eMGLtDmIvhgzWzMJn5Zi3pkjzRQYkoFv)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(74,134,232)"/><path d=" M 157.767 134.37 L 157.767 104.603 Q 156.526 105.999 155.092 107.161 Q 144.705 115.146 138.581 120.262 Q 136.604 121.929 135.364 122.859 Q 134.124 123.789 132.012 124.739 Q 129.899 125.688 128.039 125.688 L 127.961 125.688 Q 126.101 125.688 123.988 124.739 Q 121.876 123.789 120.636 122.859 Q 119.396 121.929 117.419 120.262 Q 111.295 115.146 100.908 107.161 Q 99.474 105.999 98.233 104.603 L 98.233 134.37 Q 98.233 134.874 98.602 135.242 Q 98.97 135.61 99.474 135.61 L 156.526 135.61 Q 157.03 135.61 157.398 135.242 Q 157.767 134.874 157.767 134.37 Z M 157.767 93.635 L 157.767 92.685 L 157.747 92.181 L 157.631 91.697 L 157.418 91.348 L 157.069 91.057 L 156.526 90.96 L 99.474 90.96 Q 98.97 90.96 98.602 91.329 Q 98.233 91.697 98.233 92.201 Q 98.233 98.712 103.931 103.208 Q 111.411 109.099 119.473 115.495 Q 119.706 115.688 120.83 116.638 Q 121.954 117.588 122.613 118.091 Q 123.271 118.595 124.337 119.312 Q 125.403 120.029 126.295 120.378 Q 127.186 120.727 127.961 120.727 L 128.039 120.727 Q 128.814 120.727 129.705 120.378 Q 130.597 120.029 131.663 119.312 Q 132.729 118.595 133.387 118.091 Q 134.046 117.588 135.17 116.638 Q 136.294 115.688 136.527 115.495 Q 144.589 109.099 152.069 103.208 Q 154.162 101.541 155.964 98.731 Q 157.767 95.921 157.767 93.635 Z M 162.728 92.201 L 162.728 134.37 Q 162.728 136.928 160.906 138.75 Q 159.084 140.571 156.526 140.571 L 99.474 140.571 Q 96.916 140.571 95.094 138.75 Q 93.272 136.928 93.272 134.37 L 93.272 92.201 Q 93.272 89.643 95.094 87.821 Q 96.916 85.999 99.474 85.999 L 156.526 85.999 Q 159.084 85.999 160.906 87.821 Q 162.728 89.643 162.728 92.201 Z " fill="rgb(74,134,232)"/><path d=" M 105.631 185.881 L 105.631 190.701 L 93.818 190.701 L 93.818 198.699 L 107.682 198.699 L 107.682 203.641 L 87.666 203.641 L 87.666 173.782 L 107.641 173.782 L 107.641 178.765 L 93.818 178.765 L 93.818 185.881 L 105.631 185.881 L 105.631 185.881 Z M 111.291 173.782 L 119.33 173.782 L 127 195.438 L 134.629 173.782 L 142.709 173.782 L 142.709 203.641 L 136.536 203.641 L 136.536 195.479 L 137.151 181.39 L 129.092 203.641 L 124.867 203.641 L 116.828 181.411 L 117.443 195.479 L 117.443 203.641 L 111.291 203.641 L 111.291 173.782 L 111.291 173.782 Z M 154.234 173.782 L 154.234 198.699 L 167.298 198.699 L 167.298 203.641 L 148.082 203.641 L 148.082 173.782 L 154.234 173.782 L 154.234 173.782 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_eps.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_eps.svg new file mode 100644 index 000000000..bcbdf4b67 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_eps.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_pX2EhZDKziZLF2vOxfDVJTvLoAu4tTxA"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_pX2EhZDKziZLF2vOxfDVJTvLoAu4tTxA)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(229,126,37)"/><path d=" M 183 109.143 L 183 90.286 L 164.143 90.286 L 164.143 96.571 L 145.286 96.571 L 145.286 84 L 113.857 84 L 113.857 96.571 L 95 96.571 L 95 90.286 L 76.143 90.286 L 76.143 109.143 L 95 109.143 L 95 102.857 L 106.151 102.857 C 91.801 111.142 82.429 126.705 82.429 143.714 C 82.429 145.449 83.833 146.857 85.571 146.857 C 87.309 146.857 88.714 145.449 88.714 143.714 C 88.714 127.227 98.863 112.289 113.857 106.016 L 113.857 115.429 L 145.286 115.429 L 145.286 106.016 C 160.28 112.292 170.429 127.23 170.429 143.714 C 170.429 145.449 171.833 146.857 173.571 146.857 C 175.309 146.857 176.714 145.449 176.714 143.714 C 176.714 126.705 167.342 111.142 152.992 102.857 L 164.143 102.857 L 164.143 109.143 L 183 109.143 Z M 88.714 102.857 L 82.429 102.857 L 82.429 96.571 L 88.714 96.571 L 88.714 102.857 Z M 139 109.143 L 120.143 109.143 L 120.143 97.345 L 120.143 90.286 L 139 90.286 L 139 97.345 L 139 109.143 Z M 170.429 96.571 L 176.714 96.571 L 176.714 102.857 L 170.429 102.857 L 170.429 96.571 Z " fill="rgb(200,189,184)"/></g></g><path d=" M 109.131 185.986 L 109.131 190.806 L 97.318 190.806 L 97.318 198.804 L 111.182 198.804 L 111.182 203.746 L 91.166 203.746 L 91.166 173.887 L 111.141 173.887 L 111.141 178.87 L 97.318 178.87 L 97.318 185.986 L 109.131 185.986 L 109.131 185.986 Z M 126.337 193.226 L 120.943 193.226 L 120.943 203.746 L 114.791 203.746 L 114.791 173.887 L 126.439 173.887 L 126.439 173.887 Q 129.803 173.887 132.356 175.117 L 132.356 175.117 L 132.356 175.117 Q 134.909 176.348 136.283 178.614 L 136.283 178.614 L 136.283 178.614 Q 137.657 180.88 137.657 183.771 L 137.657 183.771 L 137.657 183.771 Q 137.657 188.16 134.653 190.693 L 134.653 190.693 L 134.653 190.693 Q 131.648 193.226 126.337 193.226 L 126.337 193.226 L 126.337 193.226 Z M 120.943 178.87 L 120.943 188.242 L 126.439 188.242 L 126.439 188.242 Q 128.88 188.242 130.162 187.094 L 130.162 187.094 L 130.162 187.094 Q 131.443 185.945 131.443 183.813 L 131.443 183.813 L 131.443 183.813 Q 131.443 181.618 130.151 180.265 L 130.151 180.265 L 130.151 180.265 Q 128.859 178.911 126.583 178.87 L 126.583 178.87 L 120.943 178.87 L 120.943 178.87 Z M 157.365 195.912 L 157.365 195.912 L 157.365 195.912 Q 157.365 194.169 156.135 193.236 L 156.135 193.236 L 156.135 193.236 Q 154.904 192.303 151.705 191.267 L 151.705 191.267 L 151.705 191.267 Q 148.506 190.231 146.64 189.227 L 146.64 189.227 L 146.64 189.227 Q 141.554 186.479 141.554 181.823 L 141.554 181.823 L 141.554 181.823 Q 141.554 179.403 142.917 177.506 L 142.917 177.506 L 142.917 177.506 Q 144.281 175.609 146.834 174.543 L 146.834 174.543 L 146.834 174.543 Q 149.388 173.477 152.566 173.477 L 152.566 173.477 L 152.566 173.477 Q 155.766 173.477 158.268 174.635 L 158.268 174.635 L 158.268 174.635 Q 160.77 175.794 162.154 177.906 L 162.154 177.906 L 162.154 177.906 Q 163.538 180.019 163.538 182.705 L 163.538 182.705 L 157.386 182.705 L 157.386 182.705 Q 157.386 180.654 156.094 179.516 L 156.094 179.516 L 156.094 179.516 Q 154.802 178.378 152.464 178.378 L 152.464 178.378 L 152.464 178.378 Q 150.208 178.378 148.957 179.332 L 148.957 179.332 L 148.957 179.332 Q 147.706 180.285 147.706 181.844 L 147.706 181.844 L 147.706 181.844 Q 147.706 183.3 149.172 184.284 L 149.172 184.284 L 149.172 184.284 Q 150.639 185.269 153.489 186.13 L 153.489 186.13 L 153.489 186.13 Q 158.739 187.709 161.139 190.047 L 161.139 190.047 L 161.139 190.047 Q 163.538 192.385 163.538 195.871 L 163.538 195.871 L 163.538 195.871 Q 163.538 199.747 160.605 201.952 L 160.605 201.952 L 160.605 201.952 Q 157.673 204.156 152.71 204.156 L 152.71 204.156 L 152.71 204.156 Q 149.265 204.156 146.435 202.895 L 146.435 202.895 L 146.435 202.895 Q 143.604 201.634 142.118 199.439 L 142.118 199.439 L 142.118 199.439 Q 140.631 197.245 140.631 194.354 L 140.631 194.354 L 146.804 194.354 L 146.804 194.354 Q 146.804 199.296 152.71 199.296 L 152.71 199.296 L 152.71 199.296 Q 154.904 199.296 156.135 198.404 L 156.135 198.404 L 156.135 198.404 Q 157.365 197.512 157.365 195.912 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_exe.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_exe.svg new file mode 100644 index 000000000..c1f6dc1d9 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_exe.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_fuCqdWSzYoowVCmecSUlBS0SWUOdLKXJ"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_fuCqdWSzYoowVCmecSUlBS0SWUOdLKXJ)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(151,119,168)"/><path d=" M 145.286 140.571 C 144.975 140.571 144.657 140.524 144.346 140.427 C 142.69 139.908 141.766 138.145 142.284 136.489 L 157.999 86.203 C 158.517 84.547 160.28 83.623 161.937 84.141 C 163.593 84.66 164.517 86.423 163.998 88.079 L 148.284 138.365 C 147.866 139.71 146.625 140.571 145.286 140.571 Z " fill="rgb(151,119,168)"/><circle vector-effect="non-scaling-stroke" cx="131.14285714285717" cy="101.28571428571428" r="4.714285714285722" fill="rgb(151,119,168)"/><circle vector-effect="non-scaling-stroke" cx="131.14285714285717" cy="123.28571428571428" r="4.714285714285722" fill="rgb(151,119,168)"/><path d=" M 113.857 134.286 L 107.571 134.286 C 95.44 134.286 85.571 124.417 85.571 112.286 C 85.571 100.154 95.44 90.286 107.571 90.286 L 113.857 90.286 C 115.592 90.286 117 91.694 117 93.429 C 117 95.163 115.592 96.571 113.857 96.571 L 107.571 96.571 C 98.907 96.571 91.857 103.621 91.857 112.286 C 91.857 120.951 98.907 128 107.571 128 L 113.857 128 C 115.592 128 117 129.408 117 131.143 C 117 132.878 115.592 134.286 113.857 134.286 Z " fill="rgb(151,119,168)"/></g></g><path d=" M 110.631 185.986 L 110.631 190.806 L 98.818 190.806 L 98.818 198.804 L 112.682 198.804 L 112.682 203.746 L 92.666 203.746 L 92.666 173.887 L 112.641 173.887 L 112.641 178.87 L 98.818 178.87 L 98.818 185.986 L 110.631 185.986 L 110.631 185.986 Z M 121.377 173.887 L 126.976 184.182 L 132.574 173.887 L 139.649 173.887 L 130.954 188.693 L 139.875 203.746 L 132.718 203.746 L 126.976 193.287 L 121.233 203.746 L 114.076 203.746 L 122.997 188.693 L 114.302 173.887 L 121.377 173.887 L 121.377 173.887 Z M 160.937 185.986 L 160.937 190.806 L 149.124 190.806 L 149.124 198.804 L 162.987 198.804 L 162.987 203.746 L 142.972 203.746 L 142.972 173.887 L 162.946 173.887 L 162.946 178.87 L 149.124 178.87 L 149.124 185.986 L 160.937 185.986 L 160.937 185.986 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_f.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_f.svg new file mode 100644 index 000000000..67a86d06e --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_f.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_5oTXkrN31uMQuyZv3FF9Doe4IqTHZzDZ"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_5oTXkrN31uMQuyZv3FF9Doe4IqTHZzDZ)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(93,93,93)"/><g><path d=" M 112.936 91.207 C 111.707 89.978 109.721 89.978 108.492 91.207 L 89.635 110.064 C 88.406 111.293 88.406 113.279 89.635 114.508 L 108.492 133.365 C 109.105 133.978 109.91 134.286 110.714 134.286 C 111.519 134.286 112.323 133.978 112.936 133.365 C 114.165 132.136 114.165 130.15 112.936 128.921 L 96.301 112.286 L 112.936 95.651 C 114.165 94.422 114.165 92.435 112.936 91.207 Z " fill="rgb(93,93,93)"/><path d=" M 169.508 110.064 L 161.722 102.278 L 150.651 91.207 C 149.422 89.978 147.435 89.978 146.207 91.207 C 144.978 92.435 144.978 94.422 146.207 95.651 L 162.842 112.286 L 146.207 128.921 C 144.978 130.15 144.978 132.136 146.207 133.365 C 146.819 133.978 147.624 134.286 148.429 134.286 C 149.233 134.286 150.038 133.978 150.651 133.365 L 169.508 114.508 C 170.737 113.279 170.737 111.293 169.508 110.064 Z " fill="rgb(93,93,93)"/></g></g></g><path d=" M 135.631 188.581 L 135.631 193.544 L 123.818 193.544 L 123.818 205.746 L 117.666 205.746 L 117.666 175.887 L 137.107 175.887 L 137.107 180.87 L 123.818 180.87 L 123.818 188.581 L 135.631 188.581 L 135.631 188.581 Z " fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_fla.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_fla.svg new file mode 100644 index 000000000..7d764f6fd --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_fla.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_2IuqJwMePGGPEksxk56V3JdmHKDktmlJ"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_2IuqJwMePGGPEksxk56V3JdmHKDktmlJ)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(206,60,59)"/><circle vector-effect="non-scaling-stroke" cx="120.14285714285714" cy="90.28571428571439" r="6.285714285714278" fill="rgb(200,189,184)"/><g><path d=" M 149.953 83.777 L 147.731 81.555 C 141.203 75.024 132.519 71.429 123.286 71.429 C 114.052 71.429 105.368 75.024 98.841 81.555 C 92.31 88.083 88.714 96.766 88.714 106 C 88.714 115.234 92.31 123.917 98.841 130.445 C 105.368 136.976 114.052 140.571 123.286 140.571 C 132.519 140.571 141.203 136.976 147.731 130.445 L 149.953 128.223 L 127.73 106 L 149.953 83.777 Z M 140.942 128.101 C 135.945 132.111 129.782 134.286 123.286 134.286 C 115.73 134.286 108.627 131.344 103.285 126.001 C 97.942 120.658 95 113.555 95 106 C 95 98.445 97.942 91.342 103.285 85.999 C 108.627 80.656 115.73 77.714 123.286 77.714 C 129.782 77.714 135.945 79.889 140.942 83.899 L 118.842 106 L 140.942 128.101 Z " fill="rgb(200,189,184)"/><path d=" M 151.571 102.857 L 142.143 102.857 C 140.405 102.857 139 104.262 139 106 C 139 107.738 140.405 109.143 142.143 109.143 L 151.571 109.143 C 153.309 109.143 154.714 107.738 154.714 106 C 154.714 104.262 153.309 102.857 151.571 102.857 Z " fill="rgb(200,189,184)"/><path d=" M 170.429 102.857 L 164.143 102.857 C 162.405 102.857 161 104.262 161 106 C 161 107.738 162.405 109.143 164.143 109.143 L 170.429 109.143 C 172.167 109.143 173.571 107.738 173.571 106 C 173.571 104.262 172.167 102.857 170.429 102.857 Z " fill="rgb(200,189,184)"/></g></g></g><path d=" M 110.131 186.581 L 110.131 191.544 L 98.318 191.544 L 98.318 203.746 L 92.166 203.746 L 92.166 173.887 L 111.607 173.887 L 111.607 178.87 L 98.318 178.87 L 98.318 186.581 L 110.131 186.581 L 110.131 186.581 Z M 121.328 173.887 L 121.328 198.804 L 134.392 198.804 L 134.392 203.746 L 115.176 203.746 L 115.176 173.887 L 121.328 173.887 L 121.328 173.887 Z M 156.848 203.746 L 154.776 197.594 L 143.989 197.594 L 141.938 203.746 L 135.396 203.746 L 146.512 173.887 L 152.213 173.887 L 163.39 203.746 L 156.848 203.746 L 156.848 203.746 Z M 149.362 181.434 L 145.65 192.61 L 153.115 192.61 L 149.362 181.434 L 149.362 181.434 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_gif.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_gif.svg new file mode 100644 index 000000000..d862dec91 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_gif.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_qJ4JQ2vHPl9yNMOIFjFdX7hbAxrDctK3"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_qJ4JQ2vHPl9yNMOIFjFdX7hbAxrDctK3)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><circle vector-effect="non-scaling-stroke" cx="99.49742857142849" cy="85.35457142857132" r="14.35971428571429" fill="rgb(243,213,91)"/><path d=" M 60.429 162.571 L 95 162.571 L 195.571 162.571 L 195.571 128 L 164.143 98.143 L 131.143 134.286 L 113.911 117.053 L 60.429 162.571 Z " fill="rgb(38,114,185)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(24,94,159)"/></g></g><path d=" M 121.291 188.058 L 121.291 199.973 L 121.291 199.973 Q 119.63 201.962 116.595 203.059 L 116.595 203.059 L 116.595 203.059 Q 113.56 204.156 109.868 204.156 L 109.868 204.156 L 109.868 204.156 Q 105.992 204.156 103.07 202.464 L 103.07 202.464 L 103.07 202.464 Q 100.147 200.772 98.558 197.553 L 98.558 197.553 L 98.558 197.553 Q 96.969 194.333 96.928 189.985 L 96.928 189.985 L 96.928 187.955 L 96.928 187.955 Q 96.928 183.484 98.435 180.213 L 98.435 180.213 L 98.435 180.213 Q 99.942 176.942 102.783 175.209 L 102.783 175.209 L 102.783 175.209 Q 105.623 173.477 109.438 173.477 L 109.438 173.477 L 109.438 173.477 Q 114.749 173.477 117.743 176.009 L 117.743 176.009 L 117.743 176.009 Q 120.737 178.542 121.291 183.382 L 121.291 183.382 L 115.303 183.382 L 115.303 183.382 Q 114.893 180.818 113.488 179.629 L 113.488 179.629 L 113.488 179.629 Q 112.083 178.439 109.622 178.439 L 109.622 178.439 L 109.622 178.439 Q 106.484 178.439 104.844 180.798 L 104.844 180.798 L 104.844 180.798 Q 103.203 183.156 103.183 187.812 L 103.183 187.812 L 103.183 189.719 L 103.183 189.719 Q 103.183 194.415 104.967 196.814 L 104.967 196.814 L 104.967 196.814 Q 106.751 199.214 110.196 199.214 L 110.196 199.214 L 110.196 199.214 Q 113.662 199.214 115.139 197.737 L 115.139 197.737 L 115.139 192.59 L 109.54 192.59 L 109.54 188.058 L 121.291 188.058 L 121.291 188.058 Z M 132.816 173.887 L 132.816 203.746 L 126.664 203.746 L 126.664 173.887 L 132.816 173.887 L 132.816 173.887 Z M 156.482 186.581 L 156.482 191.544 L 144.67 191.544 L 144.67 203.746 L 138.518 203.746 L 138.518 173.887 L 157.959 173.887 L 157.959 178.87 L 144.67 178.87 L 144.67 186.581 L 156.482 186.581 L 156.482 186.581 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_go.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_go.svg new file mode 100644 index 000000000..1f1880da8 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_go.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_g24Gte2OrG30DAPUumNJM7BCqXYtetjX"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_g24Gte2OrG30DAPUumNJM7BCqXYtetjX)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(116,206,221)"/><g><path d=" M 112.936 91.207 C 111.707 89.978 109.721 89.978 108.492 91.207 L 89.635 110.064 C 88.406 111.293 88.406 113.279 89.635 114.508 L 108.492 133.365 C 109.105 133.978 109.91 134.286 110.714 134.286 C 111.519 134.286 112.323 133.978 112.936 133.365 C 114.165 132.136 114.165 130.15 112.936 128.921 L 96.301 112.286 L 112.936 95.651 C 114.165 94.422 114.165 92.435 112.936 91.207 Z " fill="rgb(116,206,221)"/><path d=" M 169.508 110.064 L 161.722 102.278 L 150.651 91.207 C 149.422 89.978 147.435 89.978 146.207 91.207 C 144.978 92.435 144.978 94.422 146.207 95.651 L 162.842 112.286 L 146.207 128.921 C 144.978 130.15 144.978 132.136 146.207 133.365 C 146.819 133.978 147.624 134.286 148.429 134.286 C 149.233 134.286 150.038 133.978 150.651 133.365 L 169.508 114.508 C 170.737 113.279 170.737 111.293 169.508 110.064 Z " fill="rgb(116,206,221)"/></g></g></g><path d=" M 124.291 189.058 L 124.291 200.973 L 124.291 200.973 Q 122.63 202.962 119.595 204.059 L 119.595 204.059 L 119.595 204.059 Q 116.56 205.156 112.868 205.156 L 112.868 205.156 L 112.868 205.156 Q 108.992 205.156 106.07 203.464 L 106.07 203.464 L 106.07 203.464 Q 103.147 201.772 101.558 198.553 L 101.558 198.553 L 101.558 198.553 Q 99.969 195.333 99.928 190.985 L 99.928 190.985 L 99.928 188.955 L 99.928 188.955 Q 99.928 184.484 101.435 181.213 L 101.435 181.213 L 101.435 181.213 Q 102.942 177.942 105.783 176.209 L 105.783 176.209 L 105.783 176.209 Q 108.623 174.477 112.438 174.477 L 112.438 174.477 L 112.438 174.477 Q 117.749 174.477 120.743 177.009 L 120.743 177.009 L 120.743 177.009 Q 123.737 179.542 124.291 184.382 L 124.291 184.382 L 118.303 184.382 L 118.303 184.382 Q 117.893 181.818 116.488 180.629 L 116.488 180.629 L 116.488 180.629 Q 115.083 179.439 112.622 179.439 L 112.622 179.439 L 112.622 179.439 Q 109.484 179.439 107.844 181.798 L 107.844 181.798 L 107.844 181.798 Q 106.203 184.156 106.183 188.812 L 106.183 188.812 L 106.183 190.719 L 106.183 190.719 Q 106.183 195.415 107.967 197.814 L 107.967 197.814 L 107.967 197.814 Q 109.751 200.214 113.196 200.214 L 113.196 200.214 L 113.196 200.214 Q 116.662 200.214 118.139 198.737 L 118.139 198.737 L 118.139 193.59 L 112.54 193.59 L 112.54 189.058 L 124.291 189.058 L 124.291 189.058 Z M 153.802 189.16 L 153.802 190.493 L 153.802 190.493 Q 153.802 194.902 152.243 198.225 L 152.243 198.225 L 152.243 198.225 Q 150.685 201.547 147.783 203.352 L 147.783 203.352 L 147.783 203.352 Q 144.881 205.156 141.128 205.156 L 141.128 205.156 L 141.128 205.156 Q 137.416 205.156 134.504 203.372 L 134.504 203.372 L 134.504 203.372 Q 131.592 201.588 129.992 198.276 L 129.992 198.276 L 129.992 198.276 Q 128.393 194.964 128.372 190.657 L 128.372 190.657 L 128.372 189.181 L 128.372 189.181 Q 128.372 184.771 129.961 181.418 L 129.961 181.418 L 129.961 181.418 Q 131.551 178.065 134.453 176.271 L 134.453 176.271 L 134.453 176.271 Q 137.354 174.477 141.087 174.477 L 141.087 174.477 L 141.087 174.477 Q 144.819 174.477 147.721 176.271 L 147.721 176.271 L 147.721 176.271 Q 150.623 178.065 152.212 181.418 L 152.212 181.418 L 152.212 181.418 Q 153.802 184.771 153.802 189.16 L 153.802 189.16 L 153.802 189.16 Z M 147.567 190.596 L 147.567 189.14 L 147.567 189.14 Q 147.567 184.443 145.886 182.003 L 145.886 182.003 L 145.886 182.003 Q 144.204 179.563 141.087 179.563 L 141.087 179.563 L 141.087 179.563 Q 137.99 179.563 136.309 181.972 L 136.309 181.972 L 136.309 181.972 Q 134.627 184.382 134.606 189.037 L 134.606 189.037 L 134.606 190.493 L 134.606 190.493 Q 134.606 195.066 136.288 197.589 L 136.288 197.589 L 136.288 197.589 Q 137.97 200.111 141.128 200.111 L 141.128 200.111 L 141.128 200.111 Q 144.225 200.111 145.886 197.681 L 145.886 197.681 L 145.886 197.681 Q 147.547 195.251 147.567 190.596 L 147.567 190.596 L 147.567 190.596 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_groovy.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_groovy.svg new file mode 100644 index 000000000..464c1f5af --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_groovy.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_ecGPLG9nrQvtE2ypJ2zXrdchBjT2UYsB"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_ecGPLG9nrQvtE2ypJ2zXrdchBjT2UYsB)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(93,93,93)"/><g><path d=" M 112.936 91.207 C 111.707 89.978 109.721 89.978 108.492 91.207 L 89.635 110.064 C 88.406 111.293 88.406 113.279 89.635 114.508 L 108.492 133.365 C 109.105 133.978 109.91 134.286 110.714 134.286 C 111.519 134.286 112.323 133.978 112.936 133.365 C 114.165 132.136 114.165 130.15 112.936 128.921 L 96.301 112.286 L 112.936 95.651 C 114.165 94.422 114.165 92.435 112.936 91.207 Z " fill="rgb(93,93,93)"/><path d=" M 169.508 110.064 L 161.722 102.278 L 150.651 91.207 C 149.422 89.978 147.435 89.978 146.207 91.207 C 144.978 92.435 144.978 94.422 146.207 95.651 L 162.842 112.286 L 146.207 128.921 C 144.978 130.15 144.978 132.136 146.207 133.365 C 146.819 133.978 147.624 134.286 148.429 134.286 C 149.233 134.286 150.038 133.978 150.651 133.365 L 169.508 114.508 C 170.737 113.279 170.737 111.293 169.508 110.064 Z " fill="rgb(93,93,93)"/></g></g></g><path d=" M 92.035 187.951 L 92.035 198.164 L 92.035 198.164 Q 90.611 199.869 88.01 200.81 L 88.01 200.81 L 88.01 200.81 Q 85.408 201.75 82.244 201.75 L 82.244 201.75 L 82.244 201.75 Q 78.922 201.75 76.417 200.3 L 76.417 200.3 L 76.417 200.3 Q 73.912 198.85 72.55 196.09 L 72.55 196.09 L 72.55 196.09 Q 71.188 193.33 71.152 189.604 L 71.152 189.604 L 71.152 187.863 L 71.152 187.863 Q 71.152 184.031 72.444 181.228 L 72.444 181.228 L 72.444 181.228 Q 73.736 178.424 76.171 176.938 L 76.171 176.938 L 76.171 176.938 Q 78.605 175.453 81.875 175.453 L 81.875 175.453 L 81.875 175.453 Q 86.428 175.453 88.994 177.624 L 88.994 177.624 L 88.994 177.624 Q 91.561 179.795 92.035 183.943 L 92.035 183.943 L 86.902 183.943 L 86.902 183.943 Q 86.551 181.746 85.347 180.727 L 85.347 180.727 L 85.347 180.727 Q 84.143 179.707 82.033 179.707 L 82.033 179.707 L 82.033 179.707 Q 79.344 179.707 77.938 181.729 L 77.938 181.729 L 77.938 181.729 Q 76.531 183.75 76.514 187.74 L 76.514 187.74 L 76.514 189.375 L 76.514 189.375 Q 76.514 193.4 78.043 195.457 L 78.043 195.457 L 78.043 195.457 Q 79.572 197.514 82.525 197.514 L 82.525 197.514 L 82.525 197.514 Q 85.496 197.514 86.762 196.248 L 86.762 196.248 L 86.762 191.836 L 81.963 191.836 L 81.963 187.951 L 92.035 187.951 L 92.035 187.951 Z M 106.73 182.256 L 106.66 187.143 L 106.66 187.143 Q 105.623 187.002 104.832 187.002 L 104.832 187.002 L 104.832 187.002 Q 101.949 187.002 101.053 188.953 L 101.053 188.953 L 101.053 201.398 L 95.973 201.398 L 95.973 182.379 L 100.771 182.379 L 100.912 184.646 L 100.912 184.646 Q 102.441 182.027 105.148 182.027 L 105.148 182.027 L 105.148 182.027 Q 105.992 182.027 106.73 182.256 L 106.73 182.256 L 106.73 182.256 Z M 108.313 191.941 L 108.313 191.713 L 108.313 191.713 Q 108.313 188.883 109.402 186.668 L 109.402 186.668 L 109.402 186.668 Q 110.492 184.453 112.54 183.24 L 112.54 183.24 L 112.54 183.24 Q 114.588 182.027 117.295 182.027 L 117.295 182.027 L 117.295 182.027 Q 121.145 182.027 123.579 184.383 L 123.579 184.383 L 123.579 184.383 Q 126.014 186.738 126.295 190.781 L 126.295 190.781 L 126.33 192.082 L 126.33 192.082 Q 126.33 196.459 123.887 199.104 L 123.887 199.104 L 123.887 199.104 Q 121.443 201.75 117.33 201.75 L 117.33 201.75 L 117.33 201.75 Q 113.217 201.75 110.765 199.113 L 110.765 199.113 L 110.765 199.113 Q 108.313 196.477 108.313 191.941 L 108.313 191.941 L 108.313 191.941 Z M 113.393 192.082 L 113.393 192.082 L 113.393 192.082 Q 113.393 194.789 114.412 196.222 L 114.412 196.222 L 114.412 196.222 Q 115.432 197.654 117.33 197.654 L 117.33 197.654 L 117.33 197.654 Q 119.176 197.654 120.213 196.239 L 120.213 196.239 L 120.213 196.239 Q 121.25 194.824 121.25 191.713 L 121.25 191.713 L 121.25 191.713 Q 121.25 189.059 120.213 187.6 L 120.213 187.6 L 120.213 187.6 Q 119.176 186.141 117.295 186.141 L 117.295 186.141 L 117.295 186.141 Q 115.432 186.141 114.412 187.591 L 114.412 187.591 L 114.412 187.591 Q 113.393 189.041 113.393 192.082 Z M 128.668 191.941 L 128.668 191.713 L 128.668 191.713 Q 128.668 188.883 129.758 186.668 L 129.758 186.668 L 129.758 186.668 Q 130.848 184.453 132.896 183.24 L 132.896 183.24 L 132.896 183.24 Q 134.943 182.027 137.65 182.027 L 137.65 182.027 L 137.65 182.027 Q 141.5 182.027 143.935 184.383 L 143.935 184.383 L 143.935 184.383 Q 146.369 186.738 146.65 190.781 L 146.65 190.781 L 146.686 192.082 L 146.686 192.082 Q 146.686 196.459 144.242 199.104 L 144.242 199.104 L 144.242 199.104 Q 141.799 201.75 137.686 201.75 L 137.686 201.75 L 137.686 201.75 Q 133.572 201.75 131.12 199.113 L 131.12 199.113 L 131.12 199.113 Q 128.668 196.477 128.668 191.941 L 128.668 191.941 L 128.668 191.941 Z M 133.748 192.082 L 133.748 192.082 L 133.748 192.082 Q 133.748 194.789 134.768 196.222 L 134.768 196.222 L 134.768 196.222 Q 135.787 197.654 137.686 197.654 L 137.686 197.654 L 137.686 197.654 Q 139.531 197.654 140.568 196.239 L 140.568 196.239 L 140.568 196.239 Q 141.605 194.824 141.605 191.713 L 141.605 191.713 L 141.605 191.713 Q 141.605 189.059 140.568 187.6 L 140.568 187.6 L 140.568 187.6 Q 139.531 186.141 137.65 186.141 L 137.65 186.141 L 137.65 186.141 Q 135.787 186.141 134.768 187.591 L 134.768 187.591 L 134.768 187.591 Q 133.748 189.041 133.748 192.082 Z M 153.4 182.379 L 156.934 195.193 L 160.467 182.379 L 165.775 182.379 L 159.359 201.398 L 154.508 201.398 L 148.092 182.379 L 153.4 182.379 L 153.4 182.379 Z M 171.576 182.379 L 175.109 194.209 L 178.625 182.379 L 184.074 182.379 L 176.428 204.352 L 176.006 205.354 L 176.006 205.354 Q 174.301 209.08 170.381 209.08 L 170.381 209.08 L 170.381 209.08 Q 169.273 209.08 168.131 208.746 L 168.131 208.746 L 168.131 204.896 L 168.904 204.914 L 168.904 204.914 Q 170.346 204.914 171.058 204.475 L 171.058 204.475 L 171.058 204.475 Q 171.77 204.035 172.174 203.016 L 172.174 203.016 L 172.771 201.451 L 166.109 182.379 L 171.576 182.379 L 171.576 182.379 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_html.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_html.svg new file mode 100644 index 000000000..73d5c6388 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_html.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_rhplHpdI3DTbrTRaojPyWupcuif0b6PM"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_rhplHpdI3DTbrTRaojPyWupcuif0b6PM)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(236,102,48)"/><g><path d=" M 112.936 91.207 C 111.707 89.978 109.721 89.978 108.492 91.207 L 89.635 110.064 C 88.406 111.293 88.406 113.279 89.635 114.508 L 108.492 133.365 C 109.105 133.978 109.91 134.286 110.714 134.286 C 111.519 134.286 112.323 133.978 112.936 133.365 C 114.165 132.136 114.165 130.15 112.936 128.921 L 96.301 112.286 L 112.936 95.651 C 114.165 94.422 114.165 92.435 112.936 91.207 Z " fill="rgb(236,102,48)"/><path d=" M 169.508 110.064 L 150.651 91.207 C 149.422 89.978 147.435 89.978 146.207 91.207 C 144.978 92.435 144.978 94.422 146.207 95.651 L 162.842 112.286 L 146.207 128.921 C 144.978 130.15 144.978 132.136 146.207 133.365 C 146.819 133.978 147.624 134.286 148.429 134.286 C 149.233 134.286 150.038 133.978 150.651 133.365 L 169.508 114.508 C 170.737 113.279 170.737 111.293 169.508 110.064 Z " fill="rgb(236,102,48)"/></g></g></g><path d=" M 95.968 173.887 L 95.968 203.746 L 89.815 203.746 L 89.815 190.949 L 77.818 190.949 L 77.818 203.746 L 71.666 203.746 L 71.666 173.887 L 77.818 173.887 L 77.818 185.986 L 89.815 185.986 L 89.815 173.887 L 95.968 173.887 L 95.968 173.887 Z M 123.817 173.887 L 123.817 178.87 L 114.671 178.87 L 114.671 203.746 L 108.519 203.746 L 108.519 178.87 L 99.495 178.87 L 99.495 173.887 L 123.817 173.887 L 123.817 173.887 Z M 127.324 173.887 L 135.363 173.887 L 143.033 195.543 L 150.662 173.887 L 158.742 173.887 L 158.742 203.746 L 152.569 203.746 L 152.569 195.584 L 153.185 181.495 L 145.125 203.746 L 140.9 203.746 L 132.861 181.516 L 133.477 195.584 L 133.477 203.746 L 127.324 203.746 L 127.324 173.887 L 127.324 173.887 Z M 170.268 173.887 L 170.268 198.804 L 183.331 198.804 L 183.331 203.746 L 164.115 203.746 L 164.115 173.887 L 170.268 173.887 L 170.268 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_iso.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_iso.svg new file mode 100644 index 000000000..2994d9db6 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_iso.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_I8L7zDWSXvJo2SU3oxoFvWEz06WAotPH"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_I8L7zDWSXvJo2SU3oxoFvWEz06WAotPH)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(113,194,133)"/><circle vector-effect="non-scaling-stroke" cx="126.42857142857144" cy="106.00000000000006" r="37.714285714285715" fill="rgb(200,189,184)"/><circle vector-effect="non-scaling-stroke" cx="126.42857142857144" cy="106.00000000000006" r="9.428571428571423" fill="rgb(233,233,224)"/><path d=" M 119.763 99.334 C 120.177 98.919 120.63 98.564 121.098 98.243 L 113.678 70.545 C 108.602 72.365 103.828 75.269 99.765 79.333 C 95.698 83.397 92.797 88.171 90.977 93.246 L 118.675 100.667 C 118.993 100.201 119.348 99.749 119.763 99.334 Z " fill="rgb(211,204,201)"/><path d=" M 134.509 113.813 L 141.653 140.474 C 145.801 138.645 149.698 136.068 153.096 132.667 C 157.034 128.729 159.884 124.128 161.717 119.231 L 135.983 112.336 C 135.087 112.094 134.267 112.914 134.509 113.813 Z " fill="rgb(211,204,201)"/></g></g><path d=" M 102.208 173.887 L 102.208 203.746 L 96.056 203.746 L 96.056 173.887 L 102.208 173.887 L 102.208 173.887 Z M 123.393 195.912 L 123.393 195.912 L 123.393 195.912 Q 123.393 194.169 122.162 193.236 L 122.162 193.236 L 122.162 193.236 Q 120.932 192.303 117.732 191.267 L 117.732 191.267 L 117.732 191.267 Q 114.533 190.231 112.667 189.227 L 112.667 189.227 L 112.667 189.227 Q 107.581 186.479 107.581 181.823 L 107.581 181.823 L 107.581 181.823 Q 107.581 179.403 108.945 177.506 L 108.945 177.506 L 108.945 177.506 Q 110.309 175.609 112.862 174.543 L 112.862 174.543 L 112.862 174.543 Q 115.415 173.477 118.594 173.477 L 118.594 173.477 L 118.594 173.477 Q 121.793 173.477 124.295 174.635 L 124.295 174.635 L 124.295 174.635 Q 126.797 175.794 128.181 177.906 L 128.181 177.906 L 128.181 177.906 Q 129.565 180.019 129.565 182.705 L 129.565 182.705 L 123.413 182.705 L 123.413 182.705 Q 123.413 180.654 122.121 179.516 L 122.121 179.516 L 122.121 179.516 Q 120.829 178.378 118.491 178.378 L 118.491 178.378 L 118.491 178.378 Q 116.235 178.378 114.984 179.332 L 114.984 179.332 L 114.984 179.332 Q 113.733 180.285 113.733 181.844 L 113.733 181.844 L 113.733 181.844 Q 113.733 183.3 115.2 184.284 L 115.2 184.284 L 115.2 184.284 Q 116.666 185.269 119.517 186.13 L 119.517 186.13 L 119.517 186.13 Q 124.767 187.709 127.166 190.047 L 127.166 190.047 L 127.166 190.047 Q 129.565 192.385 129.565 195.871 L 129.565 195.871 L 129.565 195.871 Q 129.565 199.747 126.633 201.952 L 126.633 201.952 L 126.633 201.952 Q 123.7 204.156 118.737 204.156 L 118.737 204.156 L 118.737 204.156 Q 115.292 204.156 112.462 202.895 L 112.462 202.895 L 112.462 202.895 Q 109.632 201.634 108.145 199.439 L 108.145 199.439 L 108.145 199.439 Q 106.658 197.245 106.658 194.354 L 106.658 194.354 L 112.831 194.354 L 112.831 194.354 Q 112.831 199.296 118.737 199.296 L 118.737 199.296 L 118.737 199.296 Q 120.932 199.296 122.162 198.404 L 122.162 198.404 L 122.162 198.404 Q 123.393 197.512 123.393 195.912 Z M 158.256 188.16 L 158.256 189.493 L 158.256 189.493 Q 158.256 193.902 156.697 197.225 L 156.697 197.225 L 156.697 197.225 Q 155.139 200.547 152.237 202.352 L 152.237 202.352 L 152.237 202.352 Q 149.335 204.156 145.582 204.156 L 145.582 204.156 L 145.582 204.156 Q 141.87 204.156 138.958 202.372 L 138.958 202.372 L 138.958 202.372 Q 136.046 200.588 134.446 197.276 L 134.446 197.276 L 134.446 197.276 Q 132.847 193.964 132.826 189.657 L 132.826 189.657 L 132.826 188.181 L 132.826 188.181 Q 132.826 183.771 134.416 180.418 L 134.416 180.418 L 134.416 180.418 Q 136.005 177.065 138.907 175.271 L 138.907 175.271 L 138.907 175.271 Q 141.809 173.477 145.541 173.477 L 145.541 173.477 L 145.541 173.477 Q 149.273 173.477 152.175 175.271 L 152.175 175.271 L 152.175 175.271 Q 155.077 177.065 156.667 180.418 L 156.667 180.418 L 156.667 180.418 Q 158.256 183.771 158.256 188.16 L 158.256 188.16 L 158.256 188.16 Z M 152.021 189.596 L 152.021 188.14 L 152.021 188.14 Q 152.021 183.443 150.34 181.003 L 150.34 181.003 L 150.34 181.003 Q 148.658 178.563 145.541 178.563 L 145.541 178.563 L 145.541 178.563 Q 142.444 178.563 140.763 180.972 L 140.763 180.972 L 140.763 180.972 Q 139.081 183.382 139.061 188.037 L 139.061 188.037 L 139.061 189.493 L 139.061 189.493 Q 139.061 194.066 140.742 196.589 L 140.742 196.589 L 140.742 196.589 Q 142.424 199.111 145.582 199.111 L 145.582 199.111 L 145.582 199.111 Q 148.679 199.111 150.34 196.681 L 150.34 196.681 L 150.34 196.681 Q 152.001 194.251 152.021 189.596 L 152.021 189.596 L 152.021 189.596 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_java.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_java.svg new file mode 100644 index 000000000..5847561bc --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_java.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_tzb20NZdwmzJtcPrkSM8TiNbSfTIls7F"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_tzb20NZdwmzJtcPrkSM8TiNbSfTIls7F)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(219,56,14)"/><g><g><g><path d=" M 117.928 131.339 C 117.928 131.339 115.03 133.103 119.944 133.607 C 125.866 134.363 129.016 134.237 135.568 132.977 C 135.568 132.977 137.332 134.111 139.726 134.993 C 124.984 141.293 106.336 134.615 117.928 131.339 L 117.928 131.339 Z M 116.038 123.149 C 116.038 123.149 112.888 125.543 117.802 126.047 C 124.228 126.677 129.268 126.803 137.962 125.039 C 137.962 125.039 139.096 126.299 140.986 126.929 C 123.22 132.221 103.312 127.433 116.038 123.149 L 116.038 123.149 Z M 150.814 137.513 C 150.814 137.513 152.956 139.277 148.42 140.663 C 139.978 143.183 113.014 143.939 105.453 140.663 C 102.807 139.529 107.848 137.891 109.485 137.639 C 111.124 137.261 112.006 137.261 112.006 137.261 C 109.108 135.245 92.727 141.419 103.689 143.183 C 133.804 148.097 158.627 141.041 150.814 137.513 L 150.814 137.513 Z M 119.314 114.581 C 119.314 114.581 105.58 117.857 114.4 118.991 C 118.18 119.495 125.614 119.369 132.544 118.865 C 138.214 118.361 143.884 117.353 143.884 117.353 C 143.884 117.353 141.868 118.235 140.482 119.117 C 126.496 122.771 99.657 121.133 107.344 117.353 C 113.896 114.203 119.314 114.581 119.314 114.581 L 119.314 114.581 Z M 143.884 128.315 C 157.997 121.007 151.445 113.951 146.908 114.833 C 145.774 115.085 145.27 115.337 145.27 115.337 C 145.27 115.337 145.648 114.581 146.53 114.329 C 155.477 111.179 162.533 123.779 143.632 128.693 C 143.632 128.693 143.758 128.567 143.884 128.315 L 143.884 128.315 Z M 120.7 148.223 C 134.308 149.105 155.099 147.719 155.603 141.293 C 155.603 141.293 154.595 143.813 144.388 145.703 C 132.796 147.845 118.432 147.593 109.99 146.207 C 109.99 146.207 111.754 147.719 120.7 148.223 L 120.7 148.223 Z " fill="rgb(78,120,150)"/><path d=" M 135.316 73 C 135.316 73 143.128 80.938 127.882 92.908 C 115.66 102.611 125.11 108.155 127.882 114.455 C 120.7 108.029 115.534 102.359 119.062 97.066 C 124.228 89.254 138.466 85.474 135.316 73 L 135.316 73 L 135.316 73 L 135.316 73 Z M 131.284 109.163 C 134.938 113.321 130.276 117.101 130.276 117.101 C 130.276 117.101 139.6 112.313 135.316 106.391 C 131.41 100.721 128.386 97.949 144.766 88.498 C 144.766 88.498 118.936 94.924 131.284 109.163 L 131.284 109.163 L 131.284 109.163 L 131.284 109.163 Z M 133.804 176.826 L 129.394 176.826 L 124.102 159.564 L 127.882 159.564 L 131.158 170.148 L 131.914 173.298 C 133.552 168.762 134.812 164.1 135.316 159.564 L 139.096 159.564 C 138.088 165.234 136.324 171.408 133.804 176.826 L 133.804 176.826 L 133.804 176.826 L 133.804 176.826 Z M 104.446 179.724 C 103.438 181.236 101.925 182.37 100.036 183 L 98.397 180.984 C 99.657 180.228 100.918 179.094 101.421 178.086 C 101.926 177.204 102.052 175.944 102.052 173.046 L 102.052 153.39 L 105.832 153.39 L 105.832 172.794 C 105.832 176.7 105.454 178.212 104.446 179.724 L 104.446 179.724 L 104.446 179.724 L 104.446 179.724 Z M 121.96 176.826 L 121.96 164.478 C 121.96 161.328 120.196 159.186 115.786 159.186 C 113.266 159.186 111.124 159.816 109.234 160.572 L 109.864 162.84 C 111.25 162.336 113.014 161.832 114.904 161.832 C 116.101 161.832 116.983 162.084 117.566 162.588 C 118.148 163.092 118.432 163.848 118.432 164.856 L 118.432 166.494 L 117.172 166.494 C 111.124 166.494 108.352 168.762 108.352 172.416 C 108.352 175.44 110.242 177.204 113.644 177.204 C 115.786 177.204 117.424 176.196 118.936 174.936 L 119.188 176.826 L 121.96 176.826 L 121.96 176.826 L 121.96 176.826 L 121.96 176.826 Z M 118.432 172.794 C 117.172 173.928 115.786 174.558 114.526 174.558 C 112.888 174.558 111.88 173.55 111.88 171.786 C 111.88 170.022 112.888 168.762 116.92 168.762 L 118.432 168.762 L 118.432 172.794 L 118.432 172.794 L 118.432 172.794 L 118.432 172.794 Z M 154.217 176.826 L 154.217 164.478 C 154.217 161.328 152.453 159.186 148.042 159.186 C 145.522 159.186 143.38 159.816 141.49 160.572 L 141.994 162.84 C 143.506 162.336 145.27 161.832 147.16 161.832 C 149.555 161.832 150.689 162.84 150.689 164.856 L 150.689 166.494 L 149.429 166.494 C 143.38 166.494 140.608 168.762 140.608 172.416 C 140.608 175.44 142.372 177.204 145.774 177.204 C 148.042 177.204 149.681 176.196 151.193 174.936 L 151.445 176.826 L 154.217 176.826 L 154.217 176.826 L 154.217 176.826 L 154.217 176.826 Z M 150.689 172.794 C 149.429 173.928 148.042 174.558 146.782 174.558 C 145.144 174.558 144.136 173.55 144.136 171.786 C 144.136 170.022 145.144 168.762 149.176 168.762 L 150.688 168.762 L 150.688 172.794 L 150.689 172.794 L 150.689 172.794 L 150.689 172.794 Z " fill="rgb(245,130,25)"/></g></g></g><rect x="98.397" y="162.571" width="57.205" height="20.429" transform="matrix(1,0,0,1,0,0)" fill="rgb(219,56,14)"/><rect x="99.397" y="151" width="57.205" height="11.571" transform="matrix(1,0,0,1,0,0)" fill="rgb(233,233,224)"/><rect x="-294" y="289" width="86" height="29" transform="matrix(1,0,0,1,0,0)" fill="rgb(235,235,235)"/><path d=" M 87.704 194.454 L 87.704 173.782 L 93.856 173.782 L 93.856 194.454 L 93.856 194.454 Q 93.856 197.304 92.595 199.488 L 92.595 199.488 L 92.595 199.488 Q 91.334 201.672 89.037 202.862 L 89.037 202.862 L 89.037 202.862 Q 86.74 204.051 83.849 204.051 L 83.849 204.051 L 83.849 204.051 Q 79.111 204.051 76.466 201.642 L 76.466 201.642 L 76.466 201.642 Q 73.82 199.232 73.82 194.823 L 73.82 194.823 L 80.014 194.823 L 80.014 194.823 Q 80.014 197.017 80.937 198.063 L 80.937 198.063 L 80.937 198.063 Q 81.859 199.109 83.849 199.109 L 83.849 199.109 L 83.849 199.109 Q 85.612 199.109 86.658 197.899 L 86.658 197.899 L 86.658 197.899 Q 87.704 196.689 87.704 194.454 L 87.704 194.454 L 87.704 194.454 Z M 118.056 203.641 L 115.984 197.489 L 105.197 197.489 L 103.146 203.641 L 96.604 203.641 L 107.72 173.782 L 113.421 173.782 L 124.598 203.641 L 118.056 203.641 L 118.056 203.641 Z M 110.57 181.329 L 106.858 192.505 L 114.323 192.505 L 110.57 181.329 L 110.57 181.329 Z M 131.693 173.782 L 138.42 196.238 L 145.188 173.782 L 152.037 173.782 L 141.64 203.641 L 135.221 203.641 L 124.864 173.782 L 131.693 173.782 L 131.693 173.782 Z M 173.775 203.641 L 171.704 197.489 L 160.917 197.489 L 158.866 203.641 L 152.324 203.641 L 163.439 173.782 L 169.141 173.782 L 180.317 203.641 L 173.775 203.641 L 173.775 203.641 Z M 166.29 181.329 L 162.578 192.505 L 170.043 192.505 L 166.29 181.329 L 166.29 181.329 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_jpg.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_jpg.svg new file mode 100644 index 000000000..c18867816 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_jpg.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_cfbSQzBKfRUXVWtELZ5utsl7ZhZ3mlDk"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_cfbSQzBKfRUXVWtELZ5utsl7ZhZ3mlDk)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><circle vector-effect="non-scaling-stroke" cx="99.49742857142849" cy="85.35457142857132" r="14.35971428571429" fill="rgb(243,213,91)"/><path d=" M 60.429 162.571 L 95 162.571 L 195.571 162.571 L 195.571 128 L 164.143 98.143 L 131.143 134.286 L 113.911 117.053 L 60.429 162.571 Z " fill="rgb(38,185,154)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(20,160,133)"/></g></g><path d=" M 101.704 194.559 L 101.704 173.887 L 107.856 173.887 L 107.856 194.559 L 107.856 194.559 Q 107.856 197.409 106.595 199.593 L 106.595 199.593 L 106.595 199.593 Q 105.334 201.777 103.037 202.967 L 103.037 202.967 L 103.037 202.967 Q 100.74 204.156 97.849 204.156 L 97.849 204.156 L 97.849 204.156 Q 93.111 204.156 90.466 201.747 L 90.466 201.747 L 90.466 201.747 Q 87.82 199.337 87.82 194.928 L 87.82 194.928 L 94.014 194.928 L 94.014 194.928 Q 94.014 197.122 94.937 198.168 L 94.937 198.168 L 94.937 198.168 Q 95.859 199.214 97.849 199.214 L 97.849 199.214 L 97.849 199.214 Q 99.612 199.214 100.658 198.004 L 100.658 198.004 L 100.658 198.004 Q 101.704 196.794 101.704 194.559 L 101.704 194.559 L 101.704 194.559 Z M 124.673 193.226 L 119.279 193.226 L 119.279 203.746 L 113.127 203.746 L 113.127 173.887 L 124.775 173.887 L 124.775 173.887 Q 128.139 173.887 130.692 175.117 L 130.692 175.117 L 130.692 175.117 Q 133.245 176.348 134.619 178.614 L 134.619 178.614 L 134.619 178.614 Q 135.993 180.88 135.993 183.771 L 135.993 183.771 L 135.993 183.771 Q 135.993 188.16 132.989 190.693 L 132.989 190.693 L 132.989 190.693 Q 129.984 193.226 124.673 193.226 L 124.673 193.226 L 124.673 193.226 Z M 119.279 178.87 L 119.279 188.242 L 124.775 188.242 L 124.775 188.242 Q 127.216 188.242 128.498 187.094 L 128.498 187.094 L 128.498 187.094 Q 129.779 185.945 129.779 183.813 L 129.779 183.813 L 129.779 183.813 Q 129.779 181.618 128.487 180.265 L 128.487 180.265 L 128.487 180.265 Q 127.195 178.911 124.919 178.87 L 124.919 178.87 L 119.279 178.87 L 119.279 178.87 Z M 163.843 188.058 L 163.843 199.973 L 163.843 199.973 Q 162.182 201.962 159.146 203.059 L 159.146 203.059 L 159.146 203.059 Q 156.111 204.156 152.42 204.156 L 152.42 204.156 L 152.42 204.156 Q 148.544 204.156 145.622 202.464 L 145.622 202.464 L 145.622 202.464 Q 142.699 200.772 141.11 197.553 L 141.11 197.553 L 141.11 197.553 Q 139.521 194.333 139.479 189.985 L 139.479 189.985 L 139.479 187.955 L 139.479 187.955 Q 139.479 183.484 140.987 180.213 L 140.987 180.213 L 140.987 180.213 Q 142.494 176.942 145.334 175.209 L 145.334 175.209 L 145.334 175.209 Q 148.175 173.477 151.989 173.477 L 151.989 173.477 L 151.989 173.477 Q 157.301 173.477 160.295 176.009 L 160.295 176.009 L 160.295 176.009 Q 163.289 178.542 163.843 183.382 L 163.843 183.382 L 157.854 183.382 L 157.854 183.382 Q 157.444 180.818 156.04 179.629 L 156.04 179.629 L 156.04 179.629 Q 154.635 178.439 152.174 178.439 L 152.174 178.439 L 152.174 178.439 Q 149.036 178.439 147.396 180.798 L 147.396 180.798 L 147.396 180.798 Q 145.755 183.156 145.734 187.812 L 145.734 187.812 L 145.734 189.719 L 145.734 189.719 Q 145.734 194.415 147.519 196.814 L 147.519 196.814 L 147.519 196.814 Q 149.303 199.214 152.748 199.214 L 152.748 199.214 L 152.748 199.214 Q 156.214 199.214 157.69 197.737 L 157.69 197.737 L 157.69 192.59 L 152.092 192.59 L 152.092 188.058 L 163.843 188.058 L 163.843 188.058 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_js.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_js.svg new file mode 100644 index 000000000..b799c7711 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_js.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_E4H1tqw7zfkQ6YEFiYQ7OyQWoazHlr0a"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_E4H1tqw7zfkQ6YEFiYQ7OyQWoazHlr0a)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(238,175,75)"/><g><path d=" M 101.286 99.714 L 101.286 87.143 C 101.286 85.411 102.694 84 104.429 84 C 106.167 84 107.571 82.592 107.571 80.857 C 107.571 79.122 106.167 77.714 104.429 77.714 C 99.23 77.714 95 81.945 95 87.143 L 95 99.714 C 95 103.181 92.181 106 88.714 106 C 86.976 106 85.571 107.408 85.571 109.143 C 85.571 110.878 86.976 112.286 88.714 112.286 C 92.181 112.286 95 115.105 95 118.571 L 95 131.143 C 95 136.341 99.23 140.571 104.429 140.571 C 106.167 140.571 107.571 139.163 107.571 137.429 C 107.571 135.694 106.167 134.286 104.429 134.286 C 102.694 134.286 101.286 132.875 101.286 131.143 L 101.286 118.571 C 101.286 114.8 99.582 111.45 96.942 109.143 C 99.582 106.836 101.286 103.486 101.286 99.714 Z " fill="rgb(238,175,75)"/><circle vector-effect="non-scaling-stroke" cx="126.42857142857144" cy="98.14285714285722" r="4.714285714285715" fill="rgb(238,175,75)"/><path d=" M 164.143 106 C 160.676 106 157.857 103.181 157.857 99.714 L 157.857 87.143 C 157.857 81.945 153.627 77.714 148.429 77.714 C 146.691 77.714 145.286 79.122 145.286 80.857 C 145.286 82.592 146.691 84 148.429 84 C 150.163 84 151.571 85.411 151.571 87.143 L 151.571 99.714 C 151.571 103.486 153.275 106.836 155.915 109.143 C 153.275 111.45 151.571 114.8 151.571 118.571 L 151.571 131.143 C 151.571 132.875 150.163 134.286 148.429 134.286 C 146.691 134.286 145.286 135.694 145.286 137.429 C 145.286 139.163 146.691 140.571 148.429 140.571 C 153.627 140.571 157.857 136.341 157.857 131.143 L 157.857 118.571 C 157.857 115.105 160.676 112.286 164.143 112.286 C 165.881 112.286 167.286 110.878 167.286 109.143 C 167.286 107.408 165.881 106 164.143 106 Z " fill="rgb(238,175,75)"/><path d=" M 126.429 115.429 C 124.691 115.429 123.286 116.837 123.286 118.571 L 123.286 128 C 123.286 129.735 124.691 131.143 126.429 131.143 C 128.167 131.143 129.571 129.735 129.571 128 L 129.571 118.571 C 129.571 116.837 128.167 115.429 126.429 115.429 Z " fill="rgb(238,175,75)"/></g></g></g><path d=" M 116.704 194.559 L 116.704 173.887 L 122.856 173.887 L 122.856 194.559 L 122.856 194.559 Q 122.856 197.409 121.595 199.593 L 121.595 199.593 L 121.595 199.593 Q 120.334 201.777 118.037 202.967 L 118.037 202.967 L 118.037 202.967 Q 115.74 204.156 112.849 204.156 L 112.849 204.156 L 112.849 204.156 Q 108.111 204.156 105.466 201.747 L 105.466 201.747 L 105.466 201.747 Q 102.82 199.337 102.82 194.928 L 102.82 194.928 L 109.014 194.928 L 109.014 194.928 Q 109.014 197.122 109.937 198.168 L 109.937 198.168 L 109.937 198.168 Q 110.859 199.214 112.849 199.214 L 112.849 199.214 L 112.849 199.214 Q 114.612 199.214 115.658 198.004 L 115.658 198.004 L 115.658 198.004 Q 116.704 196.794 116.704 194.559 L 116.704 194.559 L 116.704 194.559 Z M 143.61 195.912 L 143.61 195.912 L 143.61 195.912 Q 143.61 194.169 142.38 193.236 L 142.38 193.236 L 142.38 193.236 Q 141.149 192.303 137.95 191.267 L 137.95 191.267 L 137.95 191.267 Q 134.751 190.231 132.885 189.227 L 132.885 189.227 L 132.885 189.227 Q 127.799 186.479 127.799 181.823 L 127.799 181.823 L 127.799 181.823 Q 127.799 179.403 129.163 177.506 L 129.163 177.506 L 129.163 177.506 Q 130.526 175.609 133.08 174.543 L 133.08 174.543 L 133.08 174.543 Q 135.633 173.477 138.812 173.477 L 138.812 173.477 L 138.812 173.477 Q 142.011 173.477 144.513 174.635 L 144.513 174.635 L 144.513 174.635 Q 147.015 175.794 148.399 177.906 L 148.399 177.906 L 148.399 177.906 Q 149.783 180.019 149.783 182.705 L 149.783 182.705 L 143.631 182.705 L 143.631 182.705 Q 143.631 180.654 142.339 179.516 L 142.339 179.516 L 142.339 179.516 Q 141.047 178.378 138.709 178.378 L 138.709 178.378 L 138.709 178.378 Q 136.453 178.378 135.202 179.332 L 135.202 179.332 L 135.202 179.332 Q 133.951 180.285 133.951 181.844 L 133.951 181.844 L 133.951 181.844 Q 133.951 183.3 135.417 184.284 L 135.417 184.284 L 135.417 184.284 Q 136.884 185.269 139.734 186.13 L 139.734 186.13 L 139.734 186.13 Q 144.984 187.709 147.384 190.047 L 147.384 190.047 L 147.384 190.047 Q 149.783 192.385 149.783 195.871 L 149.783 195.871 L 149.783 195.871 Q 149.783 199.747 146.851 201.952 L 146.851 201.952 L 146.851 201.952 Q 143.918 204.156 138.955 204.156 L 138.955 204.156 L 138.955 204.156 Q 135.51 204.156 132.68 202.895 L 132.68 202.895 L 132.68 202.895 Q 129.85 201.634 128.363 199.439 L 128.363 199.439 L 128.363 199.439 Q 126.876 197.245 126.876 194.354 L 126.876 194.354 L 133.049 194.354 L 133.049 194.354 Q 133.049 199.296 138.955 199.296 L 138.955 199.296 L 138.955 199.296 Q 141.149 199.296 142.38 198.404 L 142.38 198.404 L 142.38 198.404 Q 143.61 197.512 143.61 195.912 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_json.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_json.svg new file mode 100644 index 000000000..21bcf233f --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_json.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_9rHa4C3LkgLToHBz4So6TnGZJFVUx7w0"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_9rHa4C3LkgLToHBz4So6TnGZJFVUx7w0)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(151,119,168)"/><g><path d=" M 101.286 99.714 L 101.286 87.143 C 101.286 85.411 102.694 84 104.429 84 C 106.167 84 107.571 82.592 107.571 80.857 C 107.571 79.122 106.167 77.714 104.429 77.714 C 99.23 77.714 95 81.945 95 87.143 L 95 99.714 C 95 103.181 92.181 106 88.714 106 C 86.976 106 85.571 107.408 85.571 109.143 C 85.571 110.878 86.976 112.286 88.714 112.286 C 92.181 112.286 95 115.105 95 118.571 L 95 131.143 C 95 136.341 99.23 140.571 104.429 140.571 C 106.167 140.571 107.571 139.163 107.571 137.429 C 107.571 135.694 106.167 134.286 104.429 134.286 C 102.694 134.286 101.286 132.875 101.286 131.143 L 101.286 118.571 C 101.286 114.8 99.582 111.45 96.942 109.143 C 99.582 106.836 101.286 103.486 101.286 99.714 Z " fill="rgb(151,119,168)"/><circle vector-effect="non-scaling-stroke" cx="126.42857142857144" cy="98.14285714285722" r="4.714285714285715" fill="rgb(151,119,168)"/><path d=" M 164.143 106 C 160.676 106 157.857 103.181 157.857 99.714 L 157.857 87.143 C 157.857 81.945 153.627 77.714 148.429 77.714 C 146.691 77.714 145.286 79.122 145.286 80.857 C 145.286 82.592 146.691 84 148.429 84 C 150.163 84 151.571 85.411 151.571 87.143 L 151.571 99.714 C 151.571 103.486 153.275 106.836 155.915 109.143 C 153.275 111.45 151.571 114.8 151.571 118.571 L 151.571 131.143 C 151.571 132.875 150.163 134.286 148.429 134.286 C 146.691 134.286 145.286 135.694 145.286 137.429 C 145.286 139.163 146.691 140.571 148.429 140.571 C 153.627 140.571 157.857 136.341 157.857 131.143 L 157.857 118.571 C 157.857 115.105 160.676 112.286 164.143 112.286 C 165.881 112.286 167.286 110.878 167.286 109.143 C 167.286 107.408 165.881 106 164.143 106 Z " fill="rgb(151,119,168)"/><path d=" M 126.429 115.429 C 124.691 115.429 123.286 116.837 123.286 118.571 L 123.286 128 C 123.286 129.735 124.691 131.143 126.429 131.143 C 128.167 131.143 129.571 129.735 129.571 128 L 129.571 118.571 C 129.571 116.837 128.167 115.429 126.429 115.429 Z " fill="rgb(151,119,168)"/></g></g></g><path d=" M 87.704 194.559 L 87.704 173.887 L 93.856 173.887 L 93.856 194.559 L 93.856 194.559 Q 93.856 197.409 92.595 199.593 L 92.595 199.593 L 92.595 199.593 Q 91.334 201.777 89.037 202.967 L 89.037 202.967 L 89.037 202.967 Q 86.74 204.156 83.849 204.156 L 83.849 204.156 L 83.849 204.156 Q 79.111 204.156 76.466 201.747 L 76.466 201.747 L 76.466 201.747 Q 73.82 199.337 73.82 194.928 L 73.82 194.928 L 80.014 194.928 L 80.014 194.928 Q 80.014 197.122 80.937 198.168 L 80.937 198.168 L 80.937 198.168 Q 81.859 199.214 83.849 199.214 L 83.849 199.214 L 83.849 199.214 Q 85.612 199.214 86.658 198.004 L 86.658 198.004 L 86.658 198.004 Q 87.704 196.794 87.704 194.559 L 87.704 194.559 L 87.704 194.559 Z M 114.61 195.912 L 114.61 195.912 L 114.61 195.912 Q 114.61 194.169 113.38 193.236 L 113.38 193.236 L 113.38 193.236 Q 112.149 192.303 108.95 191.267 L 108.95 191.267 L 108.95 191.267 Q 105.751 190.231 103.885 189.227 L 103.885 189.227 L 103.885 189.227 Q 98.799 186.479 98.799 181.823 L 98.799 181.823 L 98.799 181.823 Q 98.799 179.403 100.163 177.506 L 100.163 177.506 L 100.163 177.506 Q 101.526 175.609 104.08 174.543 L 104.08 174.543 L 104.08 174.543 Q 106.633 173.477 109.812 173.477 L 109.812 173.477 L 109.812 173.477 Q 113.011 173.477 115.513 174.635 L 115.513 174.635 L 115.513 174.635 Q 118.015 175.794 119.399 177.906 L 119.399 177.906 L 119.399 177.906 Q 120.783 180.019 120.783 182.705 L 120.783 182.705 L 114.631 182.705 L 114.631 182.705 Q 114.631 180.654 113.339 179.516 L 113.339 179.516 L 113.339 179.516 Q 112.047 178.378 109.709 178.378 L 109.709 178.378 L 109.709 178.378 Q 107.453 178.378 106.202 179.332 L 106.202 179.332 L 106.202 179.332 Q 104.951 180.285 104.951 181.844 L 104.951 181.844 L 104.951 181.844 Q 104.951 183.3 106.417 184.284 L 106.417 184.284 L 106.417 184.284 Q 107.884 185.269 110.734 186.13 L 110.734 186.13 L 110.734 186.13 Q 115.984 187.709 118.384 190.047 L 118.384 190.047 L 118.384 190.047 Q 120.783 192.385 120.783 195.871 L 120.783 195.871 L 120.783 195.871 Q 120.783 199.747 117.851 201.952 L 117.851 201.952 L 117.851 201.952 Q 114.918 204.156 109.955 204.156 L 109.955 204.156 L 109.955 204.156 Q 106.51 204.156 103.68 202.895 L 103.68 202.895 L 103.68 202.895 Q 100.85 201.634 99.363 199.439 L 99.363 199.439 L 99.363 199.439 Q 97.876 197.245 97.876 194.354 L 97.876 194.354 L 104.049 194.354 L 104.049 194.354 Q 104.049 199.296 109.955 199.296 L 109.955 199.296 L 109.955 199.296 Q 112.149 199.296 113.38 198.404 L 113.38 198.404 L 113.38 198.404 Q 114.61 197.512 114.61 195.912 Z M 149.474 188.16 L 149.474 189.493 L 149.474 189.493 Q 149.474 193.902 147.915 197.225 L 147.915 197.225 L 147.915 197.225 Q 146.356 200.547 143.455 202.352 L 143.455 202.352 L 143.455 202.352 Q 140.553 204.156 136.8 204.156 L 136.8 204.156 L 136.8 204.156 Q 133.088 204.156 130.176 202.372 L 130.176 202.372 L 130.176 202.372 Q 127.264 200.588 125.664 197.276 L 125.664 197.276 L 125.664 197.276 Q 124.064 193.964 124.044 189.657 L 124.044 189.657 L 124.044 188.181 L 124.044 188.181 Q 124.044 183.771 125.633 180.418 L 125.633 180.418 L 125.633 180.418 Q 127.223 177.065 130.125 175.271 L 130.125 175.271 L 130.125 175.271 Q 133.026 173.477 136.759 173.477 L 136.759 173.477 L 136.759 173.477 Q 140.491 173.477 143.393 175.271 L 143.393 175.271 L 143.393 175.271 Q 146.295 177.065 147.884 180.418 L 147.884 180.418 L 147.884 180.418 Q 149.474 183.771 149.474 188.16 L 149.474 188.16 L 149.474 188.16 Z M 143.239 189.596 L 143.239 188.14 L 143.239 188.14 Q 143.239 183.443 141.558 181.003 L 141.558 181.003 L 141.558 181.003 Q 139.876 178.563 136.759 178.563 L 136.759 178.563 L 136.759 178.563 Q 133.662 178.563 131.98 180.972 L 131.98 180.972 L 131.98 180.972 Q 130.299 183.382 130.278 188.037 L 130.278 188.037 L 130.278 189.493 L 130.278 189.493 Q 130.278 194.066 131.96 196.589 L 131.96 196.589 L 131.96 196.589 Q 133.642 199.111 136.8 199.111 L 136.8 199.111 L 136.8 199.111 Q 139.896 199.111 141.558 196.681 L 141.558 196.681 L 141.558 196.681 Q 143.219 194.251 143.239 189.596 L 143.239 189.596 L 143.239 189.596 Z M 178.226 173.887 L 178.226 203.746 L 172.073 203.746 L 160.097 184.1 L 160.097 203.746 L 153.944 203.746 L 153.944 173.887 L 160.097 173.887 L 172.094 193.574 L 172.094 173.887 L 178.226 173.887 L 178.226 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_less.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_less.svg new file mode 100644 index 000000000..9934ccd61 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_less.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_3wrRNQhSBwb8cTCoRcXedTcqzIEQBo0H"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_3wrRNQhSBwb8cTCoRcXedTcqzIEQBo0H)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(30,65,111)"/></g></g><path d=" M 86.318 173.887 L 86.318 198.804 L 99.382 198.804 L 99.382 203.746 L 80.166 203.746 L 80.166 173.887 L 86.318 173.887 L 86.318 173.887 Z M 120.874 185.986 L 120.874 190.806 L 109.062 190.806 L 109.062 198.804 L 122.925 198.804 L 122.925 203.746 L 102.909 203.746 L 102.909 173.887 L 122.884 173.887 L 122.884 178.87 L 109.062 178.87 L 109.062 185.986 L 120.874 185.986 L 120.874 185.986 Z M 142.018 195.912 L 142.018 195.912 L 142.018 195.912 Q 142.018 194.169 140.787 193.236 L 140.787 193.236 L 140.787 193.236 Q 139.557 192.303 136.357 191.267 L 136.357 191.267 L 136.357 191.267 Q 133.158 190.231 131.292 189.227 L 131.292 189.227 L 131.292 189.227 Q 126.206 186.479 126.206 181.823 L 126.206 181.823 L 126.206 181.823 Q 126.206 179.403 127.57 177.506 L 127.57 177.506 L 127.57 177.506 Q 128.934 175.609 131.487 174.543 L 131.487 174.543 L 131.487 174.543 Q 134.04 173.477 137.219 173.477 L 137.219 173.477 L 137.219 173.477 Q 140.418 173.477 142.92 174.635 L 142.92 174.635 L 142.92 174.635 Q 145.422 175.794 146.806 177.906 L 146.806 177.906 L 146.806 177.906 Q 148.19 180.019 148.19 182.705 L 148.19 182.705 L 142.038 182.705 L 142.038 182.705 Q 142.038 180.654 140.746 179.516 L 140.746 179.516 L 140.746 179.516 Q 139.454 178.378 137.116 178.378 L 137.116 178.378 L 137.116 178.378 Q 134.86 178.378 133.609 179.332 L 133.609 179.332 L 133.609 179.332 Q 132.358 180.285 132.358 181.844 L 132.358 181.844 L 132.358 181.844 Q 132.358 183.3 133.825 184.284 L 133.825 184.284 L 133.825 184.284 Q 135.291 185.269 138.142 186.13 L 138.142 186.13 L 138.142 186.13 Q 143.392 187.709 145.791 190.047 L 145.791 190.047 L 145.791 190.047 Q 148.19 192.385 148.19 195.871 L 148.19 195.871 L 148.19 195.871 Q 148.19 199.747 145.258 201.952 L 145.258 201.952 L 145.258 201.952 Q 142.325 204.156 137.362 204.156 L 137.362 204.156 L 137.362 204.156 Q 133.917 204.156 131.087 202.895 L 131.087 202.895 L 131.087 202.895 Q 128.257 201.634 126.77 199.439 L 126.77 199.439 L 126.77 199.439 Q 125.283 197.245 125.283 194.354 L 125.283 194.354 L 131.456 194.354 L 131.456 194.354 Q 131.456 199.296 137.362 199.296 L 137.362 199.296 L 137.362 199.296 Q 139.557 199.296 140.787 198.404 L 140.787 198.404 L 140.787 198.404 Q 142.018 197.512 142.018 195.912 Z M 167.837 195.912 L 167.837 195.912 L 167.837 195.912 Q 167.837 194.169 166.606 193.236 L 166.606 193.236 L 166.606 193.236 Q 165.376 192.303 162.177 191.267 L 162.177 191.267 L 162.177 191.267 Q 158.978 190.231 157.111 189.227 L 157.111 189.227 L 157.111 189.227 Q 152.025 186.479 152.025 181.823 L 152.025 181.823 L 152.025 181.823 Q 152.025 179.403 153.389 177.506 L 153.389 177.506 L 153.389 177.506 Q 154.753 175.609 157.306 174.543 L 157.306 174.543 L 157.306 174.543 Q 159.859 173.477 163.038 173.477 L 163.038 173.477 L 163.038 173.477 Q 166.237 173.477 168.739 174.635 L 168.739 174.635 L 168.739 174.635 Q 171.241 175.794 172.625 177.906 L 172.625 177.906 L 172.625 177.906 Q 174.01 180.019 174.01 182.705 L 174.01 182.705 L 167.857 182.705 L 167.857 182.705 Q 167.857 180.654 166.565 179.516 L 166.565 179.516 L 166.565 179.516 Q 165.273 178.378 162.936 178.378 L 162.936 178.378 L 162.936 178.378 Q 160.68 178.378 159.429 179.332 L 159.429 179.332 L 159.429 179.332 Q 158.178 180.285 158.178 181.844 L 158.178 181.844 L 158.178 181.844 Q 158.178 183.3 159.644 184.284 L 159.644 184.284 L 159.644 184.284 Q 161.11 185.269 163.961 186.13 L 163.961 186.13 L 163.961 186.13 Q 169.211 187.709 171.61 190.047 L 171.61 190.047 L 171.61 190.047 Q 174.01 192.385 174.01 195.871 L 174.01 195.871 L 174.01 195.871 Q 174.01 199.747 171.077 201.952 L 171.077 201.952 L 171.077 201.952 Q 168.145 204.156 163.182 204.156 L 163.182 204.156 L 163.182 204.156 Q 159.736 204.156 156.906 202.895 L 156.906 202.895 L 156.906 202.895 Q 154.076 201.634 152.589 199.439 L 152.589 199.439 L 152.589 199.439 Q 151.103 197.245 151.103 194.354 L 151.103 194.354 L 157.275 194.354 L 157.275 194.354 Q 157.275 199.296 163.182 199.296 L 163.182 199.296 L 163.182 199.296 Q 165.376 199.296 166.606 198.404 L 166.606 198.404 L 166.606 198.404 Q 167.837 197.512 167.837 195.912 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g><path d=" M 87.666 133.807 L 86.518 137.129 L 86.518 137.129 Q 79.135 135.058 79.135 127.593 L 79.135 127.593 L 79.135 123.512 L 79.135 123.512 Q 79.135 119.185 75.484 119.185 L 75.484 119.185 L 75.484 114.939 L 75.484 114.939 Q 79.053 114.939 79.135 110.858 L 79.135 110.858 L 79.135 106.511 L 79.135 106.511 Q 79.135 102.717 80.98 100.379 L 80.98 100.379 L 80.98 100.379 Q 82.826 98.041 86.518 96.995 L 86.518 96.995 L 87.666 100.297 L 87.666 100.297 Q 86.107 100.871 85.308 102.296 L 85.308 102.296 L 85.308 102.296 Q 84.508 103.722 84.467 106.244 L 84.467 106.244 L 84.467 110.551 L 84.467 110.551 Q 84.467 115.186 80.796 117.052 L 80.796 117.052 L 80.796 117.052 Q 84.467 118.938 84.467 123.594 L 84.467 123.594 L 84.467 127.941 L 84.467 127.941 Q 84.569 132.74 87.666 133.807 L 87.666 133.807 L 87.666 133.807 Z M 96.895 98.246 L 96.895 129.746 L 90.947 129.746 L 90.947 98.246 L 96.895 98.246 L 96.895 98.246 Z M 111.988 130.156 L 111.988 130.156 L 111.988 130.156 Q 107.107 130.156 104.042 127.162 L 104.042 127.162 L 104.042 127.162 Q 100.976 124.168 100.976 119.185 L 100.976 119.185 L 100.976 118.61 L 100.976 118.61 Q 100.976 115.268 102.268 112.632 L 102.268 112.632 L 102.268 112.632 Q 103.56 109.997 105.928 108.572 L 105.928 108.572 L 105.928 108.572 Q 108.297 107.146 111.332 107.146 L 111.332 107.146 L 111.332 107.146 Q 115.885 107.146 118.5 110.018 L 118.5 110.018 L 118.5 110.018 Q 121.114 112.889 121.114 118.159 L 121.114 118.159 L 121.114 120.579 L 106.984 120.579 L 106.984 120.579 Q 107.271 122.753 108.717 124.065 L 108.717 124.065 L 108.717 124.065 Q 110.163 125.378 112.378 125.378 L 112.378 125.378 L 112.378 125.378 Q 115.803 125.378 117.73 122.896 L 117.73 122.896 L 120.643 126.157 L 120.643 126.157 Q 119.31 128.044 117.033 129.1 L 117.033 129.1 L 117.033 129.1 Q 114.757 130.156 111.988 130.156 Z M 111.312 111.945 L 111.312 111.945 L 111.312 111.945 Q 109.548 111.945 108.451 113.135 L 108.451 113.135 L 108.451 113.135 Q 107.354 114.324 107.046 116.539 L 107.046 116.539 L 115.29 116.539 L 115.29 116.067 L 115.29 116.067 Q 115.249 114.099 114.224 113.022 L 114.224 113.022 L 114.224 113.022 Q 113.198 111.945 111.312 111.945 Z M 136.495 123.614 L 136.495 123.614 L 136.495 123.614 Q 136.495 122.527 135.418 121.902 L 135.418 121.902 L 135.418 121.902 Q 134.342 121.276 131.963 120.784 L 131.963 120.784 L 131.963 120.784 Q 124.047 119.123 124.047 114.058 L 124.047 114.058 L 124.047 114.058 Q 124.047 111.104 126.498 109.125 L 126.498 109.125 L 126.498 109.125 Q 128.948 107.146 132.906 107.146 L 132.906 107.146 L 132.906 107.146 Q 137.131 107.146 139.664 109.136 L 139.664 109.136 L 139.664 109.136 Q 142.196 111.125 142.196 114.304 L 142.196 114.304 L 136.27 114.304 L 136.27 114.304 Q 136.27 113.032 135.449 112.202 L 135.449 112.202 L 135.449 112.202 Q 134.629 111.371 132.886 111.371 L 132.886 111.371 L 132.886 111.371 Q 131.389 111.371 130.568 112.048 L 130.568 112.048 L 130.568 112.048 Q 129.748 112.725 129.748 113.771 L 129.748 113.771 L 129.748 113.771 Q 129.748 114.755 130.681 115.36 L 130.681 115.36 L 130.681 115.36 Q 131.614 115.965 133.829 116.406 L 133.829 116.406 L 133.829 116.406 Q 136.044 116.847 137.562 117.4 L 137.562 117.4 L 137.562 117.4 Q 142.258 119.123 142.258 123.368 L 142.258 123.368 L 142.258 123.368 Q 142.258 126.403 139.653 128.28 L 139.653 128.28 L 139.653 128.28 Q 137.049 130.156 132.927 130.156 L 132.927 130.156 L 132.927 130.156 Q 130.138 130.156 127.974 129.162 L 127.974 129.162 L 127.974 129.162 Q 125.811 128.167 124.58 126.434 L 124.58 126.434 L 124.58 126.434 Q 123.35 124.701 123.35 122.691 L 123.35 122.691 L 128.969 122.691 L 128.969 122.691 Q 129.051 124.271 130.138 125.111 L 130.138 125.111 L 130.138 125.111 Q 131.225 125.952 133.05 125.952 L 133.05 125.952 L 133.05 125.952 Q 134.752 125.952 135.624 125.306 L 135.624 125.306 L 135.624 125.306 Q 136.495 124.66 136.495 123.614 Z M 158.09 123.614 L 158.09 123.614 L 158.09 123.614 Q 158.09 122.527 157.013 121.902 L 157.013 121.902 L 157.013 121.902 Q 155.937 121.276 153.558 120.784 L 153.558 120.784 L 153.558 120.784 Q 145.642 119.123 145.642 114.058 L 145.642 114.058 L 145.642 114.058 Q 145.642 111.104 148.092 109.125 L 148.092 109.125 L 148.092 109.125 Q 150.543 107.146 154.501 107.146 L 154.501 107.146 L 154.501 107.146 Q 158.726 107.146 161.258 109.136 L 161.258 109.136 L 161.258 109.136 Q 163.791 111.125 163.791 114.304 L 163.791 114.304 L 157.864 114.304 L 157.864 114.304 Q 157.864 113.032 157.044 112.202 L 157.044 112.202 L 157.044 112.202 Q 156.224 111.371 154.48 111.371 L 154.48 111.371 L 154.48 111.371 Q 152.983 111.371 152.163 112.048 L 152.163 112.048 L 152.163 112.048 Q 151.343 112.725 151.343 113.771 L 151.343 113.771 L 151.343 113.771 Q 151.343 114.755 152.276 115.36 L 152.276 115.36 L 152.276 115.36 Q 153.209 115.965 155.424 116.406 L 155.424 116.406 L 155.424 116.406 Q 157.639 116.847 159.156 117.4 L 159.156 117.4 L 159.156 117.4 Q 163.853 119.123 163.853 123.368 L 163.853 123.368 L 163.853 123.368 Q 163.853 126.403 161.248 128.28 L 161.248 128.28 L 161.248 128.28 Q 158.644 130.156 154.521 130.156 L 154.521 130.156 L 154.521 130.156 Q 151.732 130.156 149.569 129.162 L 149.569 129.162 L 149.569 129.162 Q 147.405 128.167 146.175 126.434 L 146.175 126.434 L 146.175 126.434 Q 144.944 124.701 144.944 122.691 L 144.944 122.691 L 150.563 122.691 L 150.563 122.691 Q 150.646 124.271 151.732 125.111 L 151.732 125.111 L 151.732 125.111 Q 152.819 125.952 154.645 125.952 L 154.645 125.952 L 154.645 125.952 Q 156.347 125.952 157.218 125.306 L 157.218 125.306 L 157.218 125.306 Q 158.09 124.66 158.09 123.614 Z M 167.236 137.129 L 166.088 133.807 L 166.088 133.807 Q 169.205 132.699 169.287 127.859 L 169.287 127.859 L 169.287 123.512 L 169.287 123.512 Q 169.287 118.877 173.04 117.072 L 173.04 117.072 L 173.04 117.072 Q 169.287 115.268 169.287 110.53 L 169.287 110.53 L 169.287 106.244 L 169.287 106.244 Q 169.205 101.466 166.088 100.297 L 166.088 100.297 L 167.236 96.995 L 167.236 96.995 Q 170.907 98.021 172.753 100.348 L 172.753 100.348 L 172.753 100.348 Q 174.599 102.676 174.619 106.449 L 174.619 106.449 L 174.619 110.858 L 174.619 110.858 Q 174.701 114.939 178.27 114.939 L 178.27 114.939 L 178.27 119.185 L 178.27 119.185 Q 174.619 119.185 174.619 123.471 L 174.619 123.471 L 174.619 127.921 L 174.619 127.921 Q 174.455 135.099 167.236 137.129 L 167.236 137.129 L 167.236 137.129 Z " fill-rule="evenodd" fill="rgb(30,65,111)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_md.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_md.svg new file mode 100644 index 000000000..9f11fbd1c --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_md.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_I1G28y1htKKMJgcF7pHEbsBWAMJckYyY"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_I1G28y1htKKMJgcF7pHEbsBWAMJckYyY)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(149,203,165)"/></g></g><path d=" M 97.333 174.887 L 105.372 174.887 L 113.042 196.543 L 120.671 174.887 L 128.751 174.887 L 128.751 204.746 L 122.578 204.746 L 122.578 196.584 L 123.193 182.495 L 115.133 204.746 L 110.909 204.746 L 102.87 182.516 L 103.485 196.584 L 103.485 204.746 L 97.333 204.746 L 97.333 174.887 L 97.333 174.887 Z M 143.373 204.746 L 134.124 204.746 L 134.124 174.887 L 143.311 174.887 L 143.311 174.887 Q 147.249 174.887 150.356 176.661 L 150.356 176.661 L 150.356 176.661 Q 153.463 178.435 155.206 181.706 L 155.206 181.706 L 155.206 181.706 Q 156.949 184.977 156.949 189.14 L 156.949 189.14 L 156.949 190.514 L 156.949 190.514 Q 156.949 194.677 155.236 197.917 L 155.236 197.917 L 155.236 197.917 Q 153.524 201.157 150.407 202.941 L 150.407 202.941 L 150.407 202.941 Q 147.29 204.726 143.373 204.746 L 143.373 204.746 L 143.373 204.746 Z M 143.311 179.87 L 140.276 179.87 L 140.276 199.804 L 143.25 199.804 L 143.25 199.804 Q 146.859 199.804 148.766 197.445 L 148.766 197.445 L 148.766 197.445 Q 150.674 195.087 150.715 190.698 L 150.715 190.698 L 150.715 189.119 L 150.715 189.119 Q 150.715 184.566 148.828 182.218 L 148.828 182.218 L 148.828 182.218 Q 146.941 179.87 143.311 179.87 L 143.311 179.87 L 143.311 179.87 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><g><path d="M 93.808 90.667 L 162.192 90.667 C 164.312 90.667 166.034 92.388 166.034 94.508 L 166.034 132.158 C 166.034 134.279 164.312 136 162.192 136 L 93.808 136 C 91.688 136 89.966 134.279 89.966 132.158 L 89.966 94.508 C 89.966 92.388 91.688 90.667 93.808 90.667 Z" style="fill:none;stroke:#95CBA5;stroke-width:4;"/><path d=" M 99.737 126.395 L 99.737 100.271 L 107.421 100.271 L 115.105 109.876 L 122.788 100.271 L 130.472 100.271 L 130.472 126.395 L 122.788 126.395 L 122.788 111.412 L 115.105 121.017 L 107.421 111.412 L 107.421 126.395 L 99.737 126.395 Z M 147.76 126.395 L 136.234 113.718 L 143.918 113.718 L 143.918 100.271 L 151.602 100.271 L 151.602 113.718 L 159.285 113.718 L 147.76 126.395 Z " fill="rgb(149,203,165)"/></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_mov.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_mov.svg new file mode 100644 index 000000000..3ab4cce1a --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_mov.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_asVcXb5ArovgRsAnstkkJMmj7NXPC138"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_asVcXb5ArovgRsAnstkkJMmj7NXPC138)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(215,94,114)"/><path d=" M 82.666 173.887 L 90.705 173.887 L 98.375 195.543 L 106.004 173.887 L 114.084 173.887 L 114.084 203.746 L 107.911 203.746 L 107.911 195.584 L 108.526 181.495 L 100.467 203.746 L 96.242 203.746 L 88.203 181.516 L 88.818 195.584 L 88.818 203.746 L 82.666 203.746 L 82.666 173.887 L 82.666 173.887 Z M 143.984 188.16 L 143.984 189.493 L 143.984 189.493 Q 143.984 193.902 142.426 197.225 L 142.426 197.225 L 142.426 197.225 Q 140.867 200.547 137.965 202.352 L 137.965 202.352 L 137.965 202.352 Q 135.063 204.156 131.311 204.156 L 131.311 204.156 L 131.311 204.156 Q 127.599 204.156 124.687 202.372 L 124.687 202.372 L 124.687 202.372 Q 121.774 200.588 120.175 197.276 L 120.175 197.276 L 120.175 197.276 Q 118.575 193.964 118.555 189.657 L 118.555 189.657 L 118.555 188.181 L 118.555 188.181 Q 118.555 183.771 120.144 180.418 L 120.144 180.418 L 120.144 180.418 Q 121.733 177.065 124.635 175.271 L 124.635 175.271 L 124.635 175.271 Q 127.537 173.477 131.27 173.477 L 131.27 173.477 L 131.27 173.477 Q 135.002 173.477 137.904 175.271 L 137.904 175.271 L 137.904 175.271 Q 140.806 177.065 142.395 180.418 L 142.395 180.418 L 142.395 180.418 Q 143.984 183.771 143.984 188.16 L 143.984 188.16 L 143.984 188.16 Z M 137.75 189.596 L 137.75 188.14 L 137.75 188.14 Q 137.75 183.443 136.068 181.003 L 136.068 181.003 L 136.068 181.003 Q 134.387 178.562 131.27 178.562 L 131.27 178.562 L 131.27 178.562 Q 128.173 178.562 126.491 180.972 L 126.491 180.972 L 126.491 180.972 Q 124.81 183.382 124.789 188.037 L 124.789 188.037 L 124.789 189.493 L 124.789 189.493 Q 124.789 194.066 126.471 196.589 L 126.471 196.589 L 126.471 196.589 Q 128.152 199.111 131.311 199.111 L 131.311 199.111 L 131.311 199.111 Q 134.407 199.111 136.068 196.681 L 136.068 196.681 L 136.068 196.681 Q 137.729 194.251 137.75 189.596 L 137.75 189.596 L 137.75 189.596 Z M 152.762 173.887 L 159.488 196.343 L 166.256 173.887 L 173.105 173.887 L 162.708 203.746 L 156.289 203.746 L 145.933 173.887 L 152.762 173.887 L 152.762 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><path d=" M 113.857 128 L 113.857 105.855 L 113.857 84 L 148.429 106 L 113.857 128 Z " fill="rgb(200,189,184)"/></g></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_mp3.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_mp3.svg new file mode 100644 index 000000000..c21d4aa92 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_mp3.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_rSDCv1ZLteIn99d6mz6ZlH7jmbO0kenH"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_rSDCv1ZLteIn99d6mz6ZlH7jmbO0kenH)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(125,101,153)"/><path d=" M 152.106 87.099 C 150.324 84.597 148.02 82.249 144.852 79.71 C 132.551 69.87 129.901 59.982 129.571 58.533 L 129.571 55.714 C 129.571 53.976 128.167 52.571 126.429 52.571 C 124.691 52.571 123.286 53.976 123.286 55.714 L 123.286 58.857 L 123.286 85.128 L 123.286 113.581 L 111.638 113.581 C 99.438 113.581 91.857 119.744 91.857 129.663 C 91.857 140.556 98.897 147.596 109.79 147.596 C 120.699 147.596 129.571 138.723 129.571 127.815 L 129.571 91.757 L 130.508 92.52 C 131.577 93.576 133.214 94.783 135.288 96.307 C 142.573 101.679 154.774 110.661 151.707 120.8 C 151.615 121.108 151.571 121.413 151.571 121.714 C 151.571 123.066 152.445 124.31 153.803 124.722 C 154.108 124.813 154.413 124.857 154.714 124.857 C 156.066 124.857 157.31 123.983 157.722 122.626 C 162.835 105.733 156.396 93.114 152.106 87.099 Z M 123.286 127.815 C 123.286 135.257 117.233 141.31 109.79 141.31 C 102.389 141.31 98.143 137.064 98.143 129.663 C 98.143 121.567 105.481 119.866 111.638 119.866 L 123.286 119.866 L 123.286 127.815 Z M 139.016 91.254 C 137.221 89.927 135.669 88.787 134.707 87.856 L 129.571 83.645 L 129.571 72.73 C 132.171 76.419 135.816 80.533 140.923 84.619 C 143.62 86.781 145.55 88.73 146.986 90.748 C 149.236 93.9 151.483 98.099 152.605 103.25 C 148.435 98.19 142.913 94.123 139.016 91.254 Z " fill="rgb(200,189,184)"/></g></g><path d=" M 85.666 173.887 L 93.705 173.887 L 101.375 195.543 L 109.004 173.887 L 117.084 173.887 L 117.084 203.746 L 110.911 203.746 L 110.911 195.584 L 111.526 181.495 L 103.467 203.746 L 99.242 203.746 L 91.203 181.516 L 91.818 195.584 L 91.818 203.746 L 85.666 203.746 L 85.666 173.887 L 85.666 173.887 Z M 134.003 193.226 L 128.609 193.226 L 128.609 203.746 L 122.457 203.746 L 122.457 173.887 L 134.105 173.887 L 134.105 173.887 Q 137.469 173.887 140.022 175.117 L 140.022 175.117 L 140.022 175.117 Q 142.575 176.348 143.949 178.614 L 143.949 178.614 L 143.949 178.614 Q 145.323 180.88 145.323 183.771 L 145.323 183.771 L 145.323 183.771 Q 145.323 188.16 142.319 190.693 L 142.319 190.693 L 142.319 190.693 Q 139.314 193.226 134.003 193.226 L 134.003 193.226 L 134.003 193.226 Z M 128.609 178.87 L 128.609 188.242 L 134.105 188.242 L 134.105 188.242 Q 136.546 188.242 137.828 187.094 L 137.828 187.094 L 137.828 187.094 Q 139.109 185.945 139.109 183.813 L 139.109 183.813 L 139.109 183.813 Q 139.109 181.618 137.817 180.265 L 137.817 180.265 L 137.817 180.265 Q 136.525 178.911 134.249 178.87 L 134.249 178.87 L 128.609 178.87 L 128.609 178.87 Z M 154.941 190.826 L 154.941 186.191 L 158.1 186.191 L 158.1 186.191 Q 160.355 186.191 161.442 185.063 L 161.442 185.063 L 161.442 185.063 Q 162.529 183.936 162.529 182.069 L 162.529 182.069 L 162.529 182.069 Q 162.529 180.265 161.453 179.26 L 161.453 179.26 L 161.453 179.26 Q 160.376 178.255 158.489 178.255 L 158.489 178.255 L 158.489 178.255 Q 156.787 178.255 155.639 179.188 L 155.639 179.188 L 155.639 179.188 Q 154.49 180.121 154.49 181.618 L 154.49 181.618 L 148.563 181.618 L 148.563 181.618 Q 148.563 179.28 149.825 177.424 L 149.825 177.424 L 149.825 177.424 Q 151.086 175.568 153.352 174.522 L 153.352 174.522 L 153.352 174.522 Q 155.618 173.477 158.346 173.477 L 158.346 173.477 L 158.346 173.477 Q 163.083 173.477 165.77 175.743 L 165.77 175.743 L 165.77 175.743 Q 168.456 178.009 168.456 181.987 L 168.456 181.987 L 168.456 181.987 Q 168.456 184.038 167.205 185.761 L 167.205 185.761 L 167.205 185.761 Q 165.954 187.483 163.924 188.406 L 163.924 188.406 L 163.924 188.406 Q 166.446 189.309 167.687 191.113 L 167.687 191.113 L 167.687 191.113 Q 168.928 192.918 168.928 195.379 L 168.928 195.379 L 168.928 195.379 Q 168.928 199.357 166.026 201.757 L 166.026 201.757 L 166.026 201.757 Q 163.124 204.156 158.346 204.156 L 158.346 204.156 L 158.346 204.156 Q 153.875 204.156 151.035 201.798 L 151.035 201.798 L 151.035 201.798 Q 148.194 199.439 148.194 195.563 L 148.194 195.563 L 154.121 195.563 L 154.121 195.563 Q 154.121 197.245 155.382 198.312 L 155.382 198.312 L 155.382 198.312 Q 156.644 199.378 158.489 199.378 L 158.489 199.378 L 158.489 199.378 Q 160.602 199.378 161.801 198.26 L 161.801 198.26 L 161.801 198.26 Q 163.001 197.143 163.001 195.297 L 163.001 195.297 L 163.001 195.297 Q 163.001 190.826 158.079 190.826 L 158.079 190.826 L 154.941 190.826 L 154.941 190.826 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_mp4.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_mp4.svg new file mode 100644 index 000000000..0f3dcaead --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_mp4.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_noUtHHGzPYvyzCKWl55c2UQn5veEgJAP"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_noUtHHGzPYvyzCKWl55c2UQn5veEgJAP)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(255,83,100)"/><path d=" M 117 128 C 116.478 128 115.96 127.871 115.488 127.613 C 114.483 127.06 113.857 126.004 113.857 124.857 L 113.857 80.857 C 113.857 79.71 114.483 78.654 115.488 78.101 C 116.497 77.551 117.72 77.592 118.691 78.205 L 153.262 100.205 C 154.164 100.783 154.714 101.782 154.714 102.857 C 154.714 103.932 154.164 104.931 153.259 105.51 L 118.688 127.51 C 118.175 127.833 117.588 128 117 128 Z M 120.143 86.58 L 120.143 119.131 L 145.716 102.857 L 120.143 86.58 Z " fill="rgb(200,189,184)"/><path d=" M 129.571 150 C 103.577 150 82.429 128.852 82.429 102.857 C 82.429 76.863 103.577 55.714 129.571 55.714 C 155.566 55.714 176.714 76.863 176.714 102.857 C 176.714 128.852 155.566 150 129.571 150 Z M 129.571 62 C 107.043 62 88.714 80.329 88.714 102.857 C 88.714 125.385 107.043 143.714 129.571 143.714 C 152.099 143.714 170.429 125.385 170.429 102.857 C 170.429 80.329 152.099 62 129.571 62 Z " fill="rgb(200,189,184)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/></g></g><path d=" M 85.666 173.887 L 93.705 173.887 L 101.375 195.543 L 109.004 173.887 L 117.084 173.887 L 117.084 203.746 L 110.911 203.746 L 110.911 195.584 L 111.526 181.495 L 103.467 203.746 L 99.242 203.746 L 91.203 181.516 L 91.818 195.584 L 91.818 203.746 L 85.666 203.746 L 85.666 173.887 L 85.666 173.887 Z M 134.003 193.226 L 128.609 193.226 L 128.609 203.746 L 122.457 203.746 L 122.457 173.887 L 134.105 173.887 L 134.105 173.887 Q 137.469 173.887 140.022 175.117 L 140.022 175.117 L 140.022 175.117 Q 142.575 176.348 143.949 178.614 L 143.949 178.614 L 143.949 178.614 Q 145.323 180.88 145.323 183.771 L 145.323 183.771 L 145.323 183.771 Q 145.323 188.16 142.319 190.693 L 142.319 190.693 L 142.319 190.693 Q 139.314 193.226 134.003 193.226 L 134.003 193.226 L 134.003 193.226 Z M 128.609 178.87 L 128.609 188.242 L 134.105 188.242 L 134.105 188.242 Q 136.546 188.242 137.828 187.094 L 137.828 187.094 L 137.828 187.094 Q 139.109 185.945 139.109 183.813 L 139.109 183.813 L 139.109 183.813 Q 139.109 181.618 137.817 180.265 L 137.817 180.265 L 137.817 180.265 Q 136.525 178.911 134.249 178.87 L 134.249 178.87 L 128.609 178.87 L 128.609 178.87 Z M 166.446 173.887 L 166.446 192.508 L 169.83 192.508 L 169.83 197.286 L 166.446 197.286 L 166.446 203.746 L 160.52 203.746 L 160.52 197.286 L 148.276 197.286 L 148.01 193.554 L 160.458 173.887 L 166.446 173.887 L 166.446 173.887 Z M 160.13 182.644 L 153.916 192.508 L 160.52 192.508 L 160.52 181.967 L 160.13 182.644 L 160.13 182.644 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_odp.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_odp.svg new file mode 100644 index 000000000..8ba4b924f --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_odp.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_GcvNcjzlqMQRv3qvkP0mgSat3iemD2zV"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_GcvNcjzlqMQRv3qvkP0mgSat3iemD2zV)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(246,113,46)"/><path d=" M 164.143 134.286 L 88.714 134.286 L 88.714 84 L 164.143 84 L 164.143 134.286 Z M 95 128 L 157.857 128 L 157.857 90.286 L 95 90.286 L 95 128 Z " fill="rgb(200,189,184)"/><path d=" M 104.425 150 C 103.875 150 103.316 149.855 102.81 149.551 C 101.32 148.658 100.839 146.728 101.732 145.239 L 111.161 129.524 C 112.053 128.035 113.983 127.554 115.473 128.446 C 116.962 129.339 117.443 131.269 116.551 132.758 L 107.122 148.473 C 106.534 149.456 105.494 150 104.425 150 Z " fill="rgb(200,189,184)"/><path d=" M 148.432 150 C 147.363 150 146.323 149.456 145.735 148.476 L 136.307 132.761 C 135.414 131.272 135.895 129.342 137.385 128.449 C 138.874 127.56 140.804 128.038 141.697 129.527 L 151.125 145.242 C 152.018 146.731 151.537 148.661 150.047 149.554 C 149.541 149.855 148.982 150 148.432 150 Z " fill="rgb(200,189,184)"/><path d=" M 126.429 90.286 C 124.694 90.286 123.286 88.881 123.286 87.143 L 123.286 77.714 C 123.286 75.976 124.694 74.571 126.429 74.571 C 128.163 74.571 129.571 75.976 129.571 77.714 L 129.571 87.143 C 129.571 88.881 128.163 90.286 126.429 90.286 Z " fill="rgb(200,189,184)"/><rect x="95" y="90.286" width="62.857" height="37.714" transform="matrix(1,0,0,1,0,0)" fill="rgb(211,204,201)"/></g></g><path d=" M 112.193 190.16 L 112.193 191.493 L 112.193 191.493 Q 112.193 195.902 110.635 199.225 L 110.635 199.225 L 110.635 199.225 Q 109.076 202.547 106.174 204.352 L 106.174 204.352 L 106.174 204.352 Q 103.272 206.156 99.52 206.156 L 99.52 206.156 L 99.52 206.156 Q 95.808 206.156 92.896 204.372 L 92.896 204.372 L 92.896 204.372 Q 89.983 202.588 88.384 199.276 L 88.384 199.276 L 88.384 199.276 Q 86.784 195.964 86.764 191.657 L 86.764 191.657 L 86.764 190.181 L 86.764 190.181 Q 86.764 185.771 88.353 182.418 L 88.353 182.418 L 88.353 182.418 Q 89.942 179.065 92.844 177.271 L 92.844 177.271 L 92.844 177.271 Q 95.746 175.477 99.479 175.477 L 99.479 175.477 L 99.479 175.477 Q 103.211 175.477 106.113 177.271 L 106.113 177.271 L 106.113 177.271 Q 109.015 179.065 110.604 182.418 L 110.604 182.418 L 110.604 182.418 Q 112.193 185.771 112.193 190.16 L 112.193 190.16 L 112.193 190.16 Z M 105.959 191.596 L 105.959 190.14 L 105.959 190.14 Q 105.959 185.443 104.277 183.003 L 104.277 183.003 L 104.277 183.003 Q 102.596 180.563 99.479 180.563 L 99.479 180.563 L 99.479 180.563 Q 96.382 180.563 94.7 182.972 L 94.7 182.972 L 94.7 182.972 Q 93.019 185.382 92.998 190.037 L 92.998 190.037 L 92.998 191.493 L 92.998 191.493 Q 92.998 196.066 94.68 198.589 L 94.68 198.589 L 94.68 198.589 Q 96.361 201.111 99.52 201.111 L 99.52 201.111 L 99.52 201.111 Q 102.616 201.111 104.277 198.681 L 104.277 198.681 L 104.277 198.681 Q 105.938 196.251 105.959 191.596 L 105.959 191.596 L 105.959 191.596 Z M 125.913 205.746 L 116.664 205.746 L 116.664 175.887 L 125.852 175.887 L 125.852 175.887 Q 129.789 175.887 132.896 177.661 L 132.896 177.661 L 132.896 177.661 Q 136.003 179.435 137.746 182.706 L 137.746 182.706 L 137.746 182.706 Q 139.489 185.977 139.489 190.14 L 139.489 190.14 L 139.489 191.514 L 139.489 191.514 Q 139.489 195.677 137.777 198.917 L 137.777 198.917 L 137.777 198.917 Q 136.064 202.157 132.947 203.941 L 132.947 203.941 L 132.947 203.941 Q 129.83 205.726 125.913 205.746 L 125.913 205.746 L 125.913 205.746 Z M 125.852 180.87 L 122.816 180.87 L 122.816 200.804 L 125.79 200.804 L 125.79 200.804 Q 129.399 200.804 131.307 198.445 L 131.307 198.445 L 131.307 198.445 Q 133.214 196.087 133.255 191.698 L 133.255 191.698 L 133.255 190.119 L 133.255 190.119 Q 133.255 185.566 131.368 183.218 L 131.368 183.218 L 131.368 183.218 Q 129.481 180.87 125.852 180.87 L 125.852 180.87 L 125.852 180.87 Z M 155.506 195.226 L 150.112 195.226 L 150.112 205.746 L 143.96 205.746 L 143.96 175.887 L 155.608 175.887 L 155.608 175.887 Q 158.972 175.887 161.525 177.117 L 161.525 177.117 L 161.525 177.117 Q 164.078 178.348 165.452 180.614 L 165.452 180.614 L 165.452 180.614 Q 166.826 182.88 166.826 185.771 L 166.826 185.771 L 166.826 185.771 Q 166.826 190.16 163.822 192.693 L 163.822 192.693 L 163.822 192.693 Q 160.817 195.226 155.506 195.226 L 155.506 195.226 L 155.506 195.226 Z M 150.112 180.87 L 150.112 190.242 L 155.608 190.242 L 155.608 190.242 Q 158.049 190.242 159.331 189.094 L 159.331 189.094 L 159.331 189.094 Q 160.612 187.945 160.612 185.813 L 160.612 185.813 L 160.612 185.813 Q 160.612 183.618 159.32 182.265 L 159.32 182.265 L 159.32 182.265 Q 158.028 180.911 155.752 180.87 L 155.752 180.87 L 150.112 180.87 L 150.112 180.87 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_ods.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_ods.svg new file mode 100644 index 000000000..490143529 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_ods.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_3S2N93pd32mzHHCF1p3qXXbnz5ExHLEh"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_3S2N93pd32mzHHCF1p3qXXbnz5ExHLEh)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(145,205,160)"/><path d=" M 113.857 90.286 L 113.857 77.714 L 76.143 77.714 L 76.143 90.286 L 76.143 96.571 L 76.143 102.857 L 76.143 109.143 L 76.143 115.429 L 76.143 121.714 L 76.143 128 L 76.143 134.286 L 76.143 146.857 L 107.571 146.857 L 113.857 146.857 L 179.857 146.857 L 179.857 134.286 L 179.857 128 L 179.857 121.714 L 179.857 115.429 L 179.857 109.143 L 179.857 102.857 L 179.857 90.286 L 113.857 90.286 Z M 82.429 84 L 107.571 84 L 107.571 90.286 L 82.429 90.286 L 82.429 84 Z M 82.429 96.571 L 107.571 96.571 L 107.571 102.857 L 82.429 102.857 L 82.429 96.571 Z M 82.429 109.143 L 107.571 109.143 L 107.571 115.429 L 82.429 115.429 L 82.429 109.143 Z M 82.429 121.714 L 107.571 121.714 L 107.571 128 L 82.429 128 L 82.429 121.714 Z M 107.571 140.571 L 82.429 140.571 L 82.429 134.286 L 107.571 134.286 L 107.571 140.571 Z M 173.571 140.571 L 113.857 140.571 L 113.857 134.286 L 173.571 134.286 L 173.571 140.571 Z M 173.571 128 L 113.857 128 L 113.857 121.714 L 173.571 121.714 L 173.571 128 Z M 173.571 115.429 L 113.857 115.429 L 113.857 109.143 L 173.571 109.143 L 173.571 115.429 Z M 113.857 102.857 L 113.857 96.571 L 173.571 96.571 L 173.571 102.857 L 113.857 102.857 Z " fill="rgb(200,189,184)"/></g></g><path d=" M 112.693 190.16 L 112.693 191.493 L 112.693 191.493 Q 112.693 195.902 111.135 199.225 L 111.135 199.225 L 111.135 199.225 Q 109.576 202.547 106.674 204.352 L 106.674 204.352 L 106.674 204.352 Q 103.772 206.156 100.02 206.156 L 100.02 206.156 L 100.02 206.156 Q 96.308 206.156 93.396 204.372 L 93.396 204.372 L 93.396 204.372 Q 90.483 202.588 88.884 199.276 L 88.884 199.276 L 88.884 199.276 Q 87.284 195.964 87.264 191.657 L 87.264 191.657 L 87.264 190.181 L 87.264 190.181 Q 87.264 185.771 88.853 182.418 L 88.853 182.418 L 88.853 182.418 Q 90.442 179.065 93.344 177.271 L 93.344 177.271 L 93.344 177.271 Q 96.246 175.477 99.979 175.477 L 99.979 175.477 L 99.979 175.477 Q 103.711 175.477 106.613 177.271 L 106.613 177.271 L 106.613 177.271 Q 109.515 179.065 111.104 182.418 L 111.104 182.418 L 111.104 182.418 Q 112.693 185.771 112.693 190.16 L 112.693 190.16 L 112.693 190.16 Z M 106.459 191.596 L 106.459 190.14 L 106.459 190.14 Q 106.459 185.443 104.777 183.003 L 104.777 183.003 L 104.777 183.003 Q 103.096 180.563 99.979 180.563 L 99.979 180.563 L 99.979 180.563 Q 96.882 180.563 95.2 182.972 L 95.2 182.972 L 95.2 182.972 Q 93.519 185.382 93.498 190.037 L 93.498 190.037 L 93.498 191.493 L 93.498 191.493 Q 93.498 196.066 95.18 198.589 L 95.18 198.589 L 95.18 198.589 Q 96.861 201.111 100.02 201.111 L 100.02 201.111 L 100.02 201.111 Q 103.116 201.111 104.777 198.681 L 104.777 198.681 L 104.777 198.681 Q 106.438 196.251 106.459 191.596 L 106.459 191.596 L 106.459 191.596 Z M 126.413 205.746 L 117.164 205.746 L 117.164 175.887 L 126.352 175.887 L 126.352 175.887 Q 130.289 175.887 133.396 177.661 L 133.396 177.661 L 133.396 177.661 Q 136.503 179.435 138.246 182.706 L 138.246 182.706 L 138.246 182.706 Q 139.989 185.977 139.989 190.14 L 139.989 190.14 L 139.989 191.514 L 139.989 191.514 Q 139.989 195.677 138.277 198.917 L 138.277 198.917 L 138.277 198.917 Q 136.564 202.157 133.447 203.941 L 133.447 203.941 L 133.447 203.941 Q 130.33 205.726 126.413 205.746 L 126.413 205.746 L 126.413 205.746 Z M 126.352 180.87 L 123.316 180.87 L 123.316 200.804 L 126.29 200.804 L 126.29 200.804 Q 129.899 200.804 131.807 198.445 L 131.807 198.445 L 131.807 198.445 Q 133.714 196.087 133.755 191.698 L 133.755 191.698 L 133.755 190.119 L 133.755 190.119 Q 133.755 185.566 131.868 183.218 L 131.868 183.218 L 131.868 183.218 Q 129.981 180.87 126.352 180.87 L 126.352 180.87 L 126.352 180.87 Z M 159.943 197.912 L 159.943 197.912 L 159.943 197.912 Q 159.943 196.169 158.713 195.236 L 158.713 195.236 L 158.713 195.236 Q 157.482 194.303 154.283 193.267 L 154.283 193.267 L 154.283 193.267 Q 151.084 192.231 149.218 191.227 L 149.218 191.227 L 149.218 191.227 Q 144.132 188.479 144.132 183.823 L 144.132 183.823 L 144.132 183.823 Q 144.132 181.403 145.496 179.506 L 145.496 179.506 L 145.496 179.506 Q 146.859 177.609 149.413 176.543 L 149.413 176.543 L 149.413 176.543 Q 151.966 175.477 155.145 175.477 L 155.145 175.477 L 155.145 175.477 Q 158.344 175.477 160.846 176.635 L 160.846 176.635 L 160.846 176.635 Q 163.348 177.794 164.732 179.906 L 164.732 179.906 L 164.732 179.906 Q 166.116 182.019 166.116 184.705 L 166.116 184.705 L 159.964 184.705 L 159.964 184.705 Q 159.964 182.654 158.672 181.516 L 158.672 181.516 L 158.672 181.516 Q 157.38 180.378 155.042 180.378 L 155.042 180.378 L 155.042 180.378 Q 152.786 180.378 151.535 181.332 L 151.535 181.332 L 151.535 181.332 Q 150.284 182.285 150.284 183.844 L 150.284 183.844 L 150.284 183.844 Q 150.284 185.3 151.75 186.284 L 151.75 186.284 L 151.75 186.284 Q 153.217 187.269 156.067 188.13 L 156.067 188.13 L 156.067 188.13 Q 161.317 189.709 163.717 192.047 L 163.717 192.047 L 163.717 192.047 Q 166.116 194.385 166.116 197.871 L 166.116 197.871 L 166.116 197.871 Q 166.116 201.747 163.184 203.952 L 163.184 203.952 L 163.184 203.952 Q 160.251 206.156 155.288 206.156 L 155.288 206.156 L 155.288 206.156 Q 151.843 206.156 149.013 204.895 L 149.013 204.895 L 149.013 204.895 Q 146.183 203.634 144.696 201.439 L 144.696 201.439 L 144.696 201.439 Q 143.209 199.245 143.209 196.354 L 143.209 196.354 L 149.382 196.354 L 149.382 196.354 Q 149.382 201.296 155.288 201.296 L 155.288 201.296 L 155.288 201.296 Q 157.482 201.296 158.713 200.404 L 158.713 200.404 L 158.713 200.404 Q 159.943 199.512 159.943 197.912 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_odt.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_odt.svg new file mode 100644 index 000000000..731b433b9 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_odt.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_e3M9aOpWrhk7MFkAQlbZCi589S2F2L4O"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_e3M9aOpWrhk7MFkAQlbZCi589S2F2L4O)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 98.143 80.857 L 79.286 80.857 C 77.551 80.857 76.143 79.449 76.143 77.714 C 76.143 75.979 77.551 74.571 79.286 74.571 L 98.143 74.571 C 99.878 74.571 101.286 75.979 101.286 77.714 C 101.286 79.449 99.878 80.857 98.143 80.857 Z " fill="rgb(134,151,203)"/><path d=" M 107.571 96.571 L 79.286 96.571 C 77.551 96.571 76.143 95.163 76.143 93.429 C 76.143 91.694 77.551 90.286 79.286 90.286 L 107.571 90.286 C 109.306 90.286 110.714 91.694 110.714 93.429 C 110.714 95.163 109.306 96.571 107.571 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 120.143 96.571 C 119.326 96.571 118.509 96.226 117.911 95.66 C 117.346 95.063 117 94.246 117 93.429 C 117 92.611 117.346 91.794 117.911 91.197 C 119.074 90.034 121.211 90.034 122.374 91.197 C 122.94 91.794 123.286 92.611 123.286 93.429 C 123.286 94.246 122.94 95.063 122.374 95.66 C 121.777 96.226 120.96 96.571 120.143 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 157.857 96.571 L 132.714 96.571 C 130.979 96.571 129.571 95.163 129.571 93.429 C 129.571 91.694 130.979 90.286 132.714 90.286 L 157.857 90.286 C 159.592 90.286 161 91.694 161 93.429 C 161 95.163 159.592 96.571 157.857 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 79.286 143.714 C 78.469 143.714 77.651 143.369 77.054 142.803 C 76.489 142.206 76.143 141.389 76.143 140.571 C 76.143 139.754 76.489 138.937 77.054 138.34 C 78.217 137.177 80.354 137.177 81.517 138.34 C 82.083 138.937 82.429 139.723 82.429 140.571 C 82.429 141.389 82.083 142.206 81.517 142.803 C 80.92 143.369 80.103 143.714 79.286 143.714 Z " fill="rgb(134,151,203)"/><path d=" M 117 143.714 L 91.857 143.714 C 90.122 143.714 88.714 142.306 88.714 140.571 C 88.714 138.837 90.122 137.429 91.857 137.429 L 117 137.429 C 118.735 137.429 120.143 138.837 120.143 140.571 C 120.143 142.306 118.735 143.714 117 143.714 Z " fill="rgb(134,151,203)"/><path d=" M 176.714 96.571 L 170.429 96.571 C 168.694 96.571 167.286 95.163 167.286 93.429 C 167.286 91.694 168.694 90.286 170.429 90.286 L 176.714 90.286 C 178.449 90.286 179.857 91.694 179.857 93.429 C 179.857 95.163 178.449 96.571 176.714 96.571 Z " fill="rgb(134,151,203)"/><path d=" M 148.429 112.286 L 79.286 112.286 C 77.551 112.286 76.143 110.878 76.143 109.143 C 76.143 107.408 77.551 106 79.286 106 L 148.429 106 C 150.163 106 151.571 107.408 151.571 109.143 C 151.571 110.878 150.163 112.286 148.429 112.286 Z " fill="rgb(134,151,203)"/><path d=" M 176.714 112.286 L 157.857 112.286 C 156.122 112.286 154.714 110.878 154.714 109.143 C 154.714 107.408 156.122 106 157.857 106 L 176.714 106 C 178.449 106 179.857 107.408 179.857 109.143 C 179.857 110.878 178.449 112.286 176.714 112.286 Z " fill="rgb(134,151,203)"/><path d=" M 91.857 128 L 79.286 128 C 77.551 128 76.143 126.592 76.143 124.857 C 76.143 123.122 77.551 121.714 79.286 121.714 L 91.857 121.714 C 93.592 121.714 95 123.122 95 124.857 C 95 126.592 93.592 128 91.857 128 Z " fill="rgb(134,151,203)"/><path d=" M 135.857 128 L 104.429 128 C 102.694 128 101.286 126.592 101.286 124.857 C 101.286 123.122 102.694 121.714 104.429 121.714 L 135.857 121.714 C 137.592 121.714 139 123.122 139 124.857 C 139 126.592 137.592 128 135.857 128 Z " fill="rgb(134,151,203)"/><path d=" M 176.714 128 L 148.429 128 C 146.694 128 145.286 126.592 145.286 124.857 C 145.286 123.122 146.694 121.714 148.429 121.714 L 176.714 121.714 C 178.449 121.714 179.857 123.122 179.857 124.857 C 179.857 126.592 178.449 128 176.714 128 Z " fill="rgb(134,151,203)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(0,150,230)"/></g></g><path d=" M 112.693 190.16 L 112.693 191.493 L 112.693 191.493 Q 112.693 195.902 111.135 199.225 L 111.135 199.225 L 111.135 199.225 Q 109.576 202.547 106.674 204.352 L 106.674 204.352 L 106.674 204.352 Q 103.772 206.156 100.02 206.156 L 100.02 206.156 L 100.02 206.156 Q 96.308 206.156 93.396 204.372 L 93.396 204.372 L 93.396 204.372 Q 90.483 202.588 88.884 199.276 L 88.884 199.276 L 88.884 199.276 Q 87.284 195.964 87.264 191.657 L 87.264 191.657 L 87.264 190.181 L 87.264 190.181 Q 87.264 185.771 88.853 182.418 L 88.853 182.418 L 88.853 182.418 Q 90.442 179.065 93.344 177.271 L 93.344 177.271 L 93.344 177.271 Q 96.246 175.477 99.979 175.477 L 99.979 175.477 L 99.979 175.477 Q 103.711 175.477 106.613 177.271 L 106.613 177.271 L 106.613 177.271 Q 109.515 179.065 111.104 182.418 L 111.104 182.418 L 111.104 182.418 Q 112.693 185.771 112.693 190.16 L 112.693 190.16 L 112.693 190.16 Z M 106.459 191.596 L 106.459 190.14 L 106.459 190.14 Q 106.459 185.443 104.777 183.003 L 104.777 183.003 L 104.777 183.003 Q 103.096 180.563 99.979 180.563 L 99.979 180.563 L 99.979 180.563 Q 96.882 180.563 95.2 182.972 L 95.2 182.972 L 95.2 182.972 Q 93.519 185.382 93.498 190.037 L 93.498 190.037 L 93.498 191.493 L 93.498 191.493 Q 93.498 196.066 95.18 198.589 L 95.18 198.589 L 95.18 198.589 Q 96.861 201.111 100.02 201.111 L 100.02 201.111 L 100.02 201.111 Q 103.116 201.111 104.777 198.681 L 104.777 198.681 L 104.777 198.681 Q 106.438 196.251 106.459 191.596 L 106.459 191.596 L 106.459 191.596 Z M 126.413 205.746 L 117.164 205.746 L 117.164 175.887 L 126.352 175.887 L 126.352 175.887 Q 130.289 175.887 133.396 177.661 L 133.396 177.661 L 133.396 177.661 Q 136.503 179.435 138.246 182.706 L 138.246 182.706 L 138.246 182.706 Q 139.989 185.977 139.989 190.14 L 139.989 190.14 L 139.989 191.514 L 139.989 191.514 Q 139.989 195.677 138.277 198.917 L 138.277 198.917 L 138.277 198.917 Q 136.564 202.157 133.447 203.941 L 133.447 203.941 L 133.447 203.941 Q 130.33 205.726 126.413 205.746 L 126.413 205.746 L 126.413 205.746 Z M 126.352 180.87 L 123.316 180.87 L 123.316 200.804 L 126.29 200.804 L 126.29 200.804 Q 129.899 200.804 131.807 198.445 L 131.807 198.445 L 131.807 198.445 Q 133.714 196.087 133.755 191.698 L 133.755 191.698 L 133.755 190.119 L 133.755 190.119 Q 133.755 185.566 131.868 183.218 L 131.868 183.218 L 131.868 183.218 Q 129.981 180.87 126.352 180.87 L 126.352 180.87 L 126.352 180.87 Z M 166.937 175.887 L 166.937 180.87 L 157.79 180.87 L 157.79 205.746 L 151.638 205.746 L 151.638 180.87 L 142.614 180.87 L 142.614 175.887 L 166.937 175.887 L 166.937 175.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_pdf.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_pdf.svg new file mode 100644 index 000000000..fd555e40c --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_pdf.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_T4lYH0jQ4ugwp6GLbfIkOPUBVBRKI4bF"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_T4lYH0jQ4ugwp6GLbfIkOPUBVBRKI4bF)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 101.33 144.733 L 101.33 144.733 C 100.236 144.733 99.186 144.377 98.291 143.708 C 95.019 141.253 94.579 138.522 94.786 136.662 C 95.358 131.545 101.685 126.19 113.596 120.734 C 118.323 110.375 122.821 97.612 125.501 86.948 C 122.365 80.122 119.316 71.265 121.538 66.07 C 122.318 64.25 123.289 62.855 125.102 62.251 C 125.819 62.013 127.629 61.711 128.295 61.711 C 129.879 61.711 131.272 63.751 132.259 65.008 C 133.186 66.189 135.288 68.694 131.086 86.385 C 135.323 95.135 141.326 104.048 147.077 110.152 C 151.197 109.407 154.743 109.027 157.631 109.027 C 162.553 109.027 165.535 110.174 166.751 112.537 C 167.757 114.492 167.345 116.777 165.526 119.326 C 163.775 121.774 161.361 123.069 158.549 123.069 C 154.727 123.069 150.277 120.655 145.314 115.887 C 136.398 117.751 125.985 121.076 117.569 124.757 C 114.941 130.332 112.424 134.823 110.079 138.117 C 106.858 142.627 104.08 144.733 101.33 144.733 Z M 109.696 128.622 C 102.98 132.397 100.242 135.499 100.044 137.246 C 100.013 137.535 99.928 138.296 101.399 139.421 C 101.867 139.273 104.601 138.026 109.696 128.622 Z M 152.555 114.662 C 155.117 116.632 155.742 117.629 157.417 117.629 C 158.153 117.629 160.249 117.597 161.22 116.243 C 161.688 115.586 161.871 115.165 161.943 114.938 C 161.556 114.734 161.044 114.319 158.25 114.319 C 156.663 114.322 154.667 114.391 152.555 114.662 Z M 129.078 93.975 C 126.831 101.751 123.864 110.145 120.674 117.748 C 127.243 115.199 134.383 112.974 141.09 111.399 C 136.847 106.471 132.607 100.318 129.078 93.975 Z M 127.17 67.381 C 126.862 67.484 122.99 72.903 127.472 77.488 C 130.455 70.841 127.305 67.337 127.17 67.381 Z " fill="rgb(204,75,76)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(204,75,76)"/></g></g><path d=" M 102.212 193.226 L 96.818 193.226 L 96.818 203.746 L 90.666 203.746 L 90.666 173.887 L 102.314 173.887 L 102.314 173.887 Q 105.678 173.887 108.231 175.117 L 108.231 175.117 L 108.231 175.117 Q 110.784 176.348 112.158 178.614 L 112.158 178.614 L 112.158 178.614 Q 113.532 180.88 113.532 183.771 L 113.532 183.771 L 113.532 183.771 Q 113.532 188.16 110.528 190.693 L 110.528 190.693 L 110.528 190.693 Q 107.523 193.226 102.212 193.226 L 102.212 193.226 L 102.212 193.226 Z M 96.818 178.87 L 96.818 188.242 L 102.314 188.242 L 102.314 188.242 Q 104.755 188.242 106.037 187.094 L 106.037 187.094 L 106.037 187.094 Q 107.318 185.945 107.318 183.813 L 107.318 183.813 L 107.318 183.813 Q 107.318 181.618 106.026 180.265 L 106.026 180.265 L 106.026 180.265 Q 104.734 178.911 102.458 178.87 L 102.458 178.87 L 96.818 178.87 L 96.818 178.87 Z M 127.006 203.746 L 117.757 203.746 L 117.757 173.887 L 126.944 173.887 L 126.944 173.887 Q 130.882 173.887 133.989 175.661 L 133.989 175.661 L 133.989 175.661 Q 137.096 177.435 138.839 180.706 L 138.839 180.706 L 138.839 180.706 Q 140.582 183.977 140.582 188.14 L 140.582 188.14 L 140.582 189.514 L 140.582 189.514 Q 140.582 193.677 138.87 196.917 L 138.87 196.917 L 138.87 196.917 Q 137.157 200.157 134.04 201.941 L 134.04 201.941 L 134.04 201.941 Q 130.923 203.726 127.006 203.746 L 127.006 203.746 L 127.006 203.746 Z M 126.944 178.87 L 123.909 178.87 L 123.909 198.804 L 126.883 198.804 L 126.883 198.804 Q 130.492 198.804 132.399 196.445 L 132.399 196.445 L 132.399 196.445 Q 134.307 194.087 134.348 189.698 L 134.348 189.698 L 134.348 188.119 L 134.348 188.119 Q 134.348 183.566 132.461 181.218 L 132.461 181.218 L 132.461 181.218 Q 130.574 178.87 126.944 178.87 L 126.944 178.87 L 126.944 178.87 Z M 163.018 186.581 L 163.018 191.544 L 151.205 191.544 L 151.205 203.746 L 145.053 203.746 L 145.053 173.887 L 164.494 173.887 L 164.494 178.87 L 151.205 178.87 L 151.205 186.581 L 163.018 186.581 L 163.018 186.581 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_php.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_php.svg new file mode 100644 index 000000000..92f22d755 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_php.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_CSCnFZmK6EwoMF84uCsUiFl4cfgVJNZp"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_CSCnFZmK6EwoMF84uCsUiFl4cfgVJNZp)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(119,123,179)"/></g></g><path d=" M 99.212 193.226 L 93.818 193.226 L 93.818 203.746 L 87.666 203.746 L 87.666 173.887 L 99.314 173.887 L 99.314 173.887 Q 102.678 173.887 105.231 175.117 L 105.231 175.117 L 105.231 175.117 Q 107.784 176.348 109.158 178.614 L 109.158 178.614 L 109.158 178.614 Q 110.532 180.88 110.532 183.771 L 110.532 183.771 L 110.532 183.771 Q 110.532 188.16 107.528 190.693 L 107.528 190.693 L 107.528 190.693 Q 104.523 193.226 99.212 193.226 L 99.212 193.226 L 99.212 193.226 Z M 93.818 178.87 L 93.818 188.242 L 99.314 188.242 L 99.314 188.242 Q 101.755 188.242 103.037 187.094 L 103.037 187.094 L 103.037 187.094 Q 104.318 185.945 104.318 183.813 L 104.318 183.813 L 104.318 183.813 Q 104.318 181.618 103.026 180.265 L 103.026 180.265 L 103.026 180.265 Q 101.734 178.911 99.458 178.87 L 99.458 178.87 L 93.818 178.87 L 93.818 178.87 Z M 139.059 173.887 L 139.059 203.746 L 132.906 203.746 L 132.906 190.949 L 120.909 190.949 L 120.909 203.746 L 114.757 203.746 L 114.757 173.887 L 120.909 173.887 L 120.909 185.986 L 132.906 185.986 L 132.906 173.887 L 139.059 173.887 L 139.059 173.887 Z M 155.978 193.226 L 150.584 193.226 L 150.584 203.746 L 144.432 203.746 L 144.432 173.887 L 156.08 173.887 L 156.08 173.887 Q 159.443 173.887 161.997 175.117 L 161.997 175.117 L 161.997 175.117 Q 164.55 176.348 165.924 178.614 L 165.924 178.614 L 165.924 178.614 Q 167.298 180.88 167.298 183.771 L 167.298 183.771 L 167.298 183.771 Q 167.298 188.16 164.293 190.693 L 164.293 190.693 L 164.293 190.693 Q 161.289 193.226 155.978 193.226 L 155.978 193.226 L 155.978 193.226 Z M 150.584 178.87 L 150.584 188.242 L 156.08 188.242 L 156.08 188.242 Q 158.521 188.242 159.802 187.094 L 159.802 187.094 L 159.802 187.094 Q 161.084 185.945 161.084 183.813 L 161.084 183.813 L 161.084 183.813 Q 161.084 181.618 159.792 180.265 L 159.792 180.265 L 159.792 180.265 Q 158.5 178.911 156.224 178.87 L 156.224 178.87 L 150.584 178.87 L 150.584 178.87 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><g><g><clipPath id="_clipPath_w8i8yiHLzkUQfxhZF70FnAGYKGjmD1xd"><path d=" M 81.92 113 C 81.92 126.387 102.551 137.24 128 137.24 L 128 137.24 C 153.449 137.24 174.08 126.387 174.08 113 L 174.08 113 C 174.08 99.613 153.449 88.76 128 88.76 L 128 88.76 C 102.551 88.76 81.92 99.613 81.92 113 Z " fill="rgb(255,255,255)"/></clipPath><g clip-path="url(#_clipPath_w8i8yiHLzkUQfxhZF70FnAGYKGjmD1xd)"><g><g><g><radialGradient id="_rgradient_0" fx="0.30020203956517727" fy="0.8242154098969326" cx="0.30020203956517727" cy="0.8242154098969326" r="1" gradientTransform="matrix(-92.16,0,0,48.48,81.92,137.24)" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-opacity="1" style="stop-color:rgb(174,178,213)"/><stop offset="30%" stop-opacity="1" style="stop-color:rgb(174,178,213)"/><stop offset="75%" stop-opacity="1" style="stop-color:rgb(72,76,137)"/><stop offset="100%" stop-opacity="1" style="stop-color:rgb(72,76,137)"/></radialGradient><path d=" M 81.92 113 C 81.92 126.387 102.551 137.24 128 137.24 L 128 137.24 C 153.449 137.24 174.08 126.387 174.08 113 L 174.08 113 C 174.08 99.613 153.449 88.76 128 88.76 L 128 88.76 C 102.551 88.76 81.92 99.613 81.92 113 Z " fill="url(#_rgradient_0)"/></g></g></g></g></g><g><clipPath id="_clipPath_GIOKE402KsdWTc8zrExx08rElTuo0gbI"><path d=" M 80 86 L 176 86 L 176 140 L 80 140 L 80 86 Z " fill="rgb(255,255,255)"/></clipPath><g clip-path="url(#_clipPath_GIOKE402KsdWTc8zrExx08rElTuo0gbI)"><g><g><path d=" M 128 135.44 C 152.455 135.44 172.28 125.393 172.28 113 C 172.28 100.607 152.455 90.56 128 90.56 C 103.545 90.56 83.72 100.607 83.72 113 C 83.72 125.393 103.545 135.44 128 135.44 Z " fill="rgb(119,123,179)"/></g></g></g></g><g><clipPath id="_clipPath_2BThWv5AkrAQ6iovMzGs7kf8X42se5hU"><path d=" M 80 86 L 176 86 L 176 140 L 80 140 L 80 86 Z " fill="rgb(255,255,255)"/></clipPath><g clip-path="url(#_clipPath_2BThWv5AkrAQ6iovMzGs7kf8X42se5hU)"><g><g><path d=" M 106.956 115.782 C 108.967 115.782 110.468 115.411 111.418 114.68 C 112.357 113.957 113.006 112.703 113.346 110.955 C 113.664 109.321 113.543 108.179 112.987 107.564 C 112.42 106.935 111.192 106.616 109.339 106.616 L 106.125 106.616 L 104.344 115.782 L 106.956 115.782 Z M 96.445 127.074 C 96.296 127.074 96.154 127.007 96.06 126.892 C 95.965 126.777 95.926 126.625 95.955 126.479 L 100.676 102.187 C 100.722 101.952 100.927 101.782 101.167 101.782 L 111.342 101.782 C 114.54 101.782 116.921 102.651 118.417 104.363 C 119.921 106.085 120.386 108.492 119.797 111.517 C 119.558 112.749 119.146 113.894 118.574 114.918 C 118.001 115.944 117.243 116.893 116.322 117.74 C 115.219 118.772 113.971 119.52 112.616 119.961 C 111.282 120.395 109.569 120.616 107.525 120.616 L 103.404 120.616 L 102.228 126.669 C 102.182 126.904 101.976 127.074 101.737 127.074 L 96.445 127.074 Z " fill="rgb(0,0,0)"/></g><g><path d=" M 106.537 107.115 L 109.339 107.115 C 111.575 107.115 112.352 107.606 112.616 107.899 C 113.054 108.384 113.137 109.408 112.856 110.86 C 112.539 112.485 111.953 113.637 111.113 114.284 C 110.252 114.946 108.854 115.282 106.956 115.282 L 104.95 115.282 L 106.537 107.115 Z M 111.342 101.282 L 101.167 101.282 C 100.688 101.282 100.276 101.621 100.185 102.091 L 95.464 126.383 C 95.407 126.676 95.484 126.979 95.674 127.21 C 95.864 127.44 96.147 127.574 96.445 127.574 L 101.737 127.574 C 102.216 127.574 102.627 127.234 102.719 126.765 L 103.817 121.115 L 107.525 121.115 C 109.622 121.115 111.387 120.887 112.771 120.436 C 114.195 119.973 115.504 119.189 116.664 118.105 C 117.622 117.223 118.412 116.233 119.01 115.162 C 119.609 114.091 120.039 112.897 120.288 111.612 C 120.907 108.428 120.404 105.878 118.793 104.034 C 117.198 102.208 114.691 101.282 111.342 101.282 Z M 103.737 116.282 L 106.956 116.282 C 109.089 116.282 110.678 115.88 111.723 115.076 C 112.767 114.272 113.471 112.931 113.837 111.05 C 114.187 109.245 114.028 107.971 113.359 107.229 C 112.689 106.487 111.349 106.115 109.339 106.115 L 105.713 106.115 L 103.737 116.282 Z M 111.342 102.282 C 114.404 102.282 116.637 103.085 118.04 104.692 C 119.444 106.299 119.867 108.542 119.307 111.421 C 119.076 112.608 118.686 113.692 118.137 114.675 C 117.588 115.658 116.87 116.557 115.984 117.372 C 114.927 118.361 113.753 119.065 112.462 119.485 C 111.17 119.906 109.525 120.115 107.525 120.115 L 102.992 120.115 L 101.737 126.574 L 96.445 126.574 L 101.167 102.282 L 111.342 102.282 Z " fill="rgb(255,255,255)"/></g><g><path d=" M 131.931 120.616 C 131.781 120.616 131.64 120.549 131.545 120.434 C 131.45 120.318 131.411 120.167 131.44 120.02 L 133.528 109.272 C 133.727 108.25 133.678 107.516 133.39 107.206 C 133.214 107.017 132.686 106.699 131.123 106.699 L 127.339 106.699 L 124.713 120.211 C 124.667 120.446 124.461 120.616 124.222 120.616 L 118.972 120.616 C 118.823 120.616 118.681 120.549 118.586 120.434 C 118.491 120.318 118.453 120.167 118.481 120.02 L 123.203 95.728 C 123.248 95.494 123.454 95.324 123.693 95.324 L 128.944 95.324 C 129.093 95.324 129.234 95.391 129.329 95.506 C 129.424 95.621 129.463 95.773 129.434 95.919 L 128.295 101.782 L 132.365 101.782 C 135.466 101.782 137.569 102.329 138.794 103.454 C 140.042 104.601 140.431 106.435 139.951 108.907 L 137.755 120.211 C 137.709 120.446 137.503 120.616 137.264 120.616 L 131.931 120.616 Z " fill="rgb(0,0,0)"/></g><g><path d=" M 128.944 94.824 L 123.694 94.824 C 123.215 94.824 122.803 95.163 122.712 95.633 L 117.991 119.925 C 117.934 120.218 118.011 120.521 118.201 120.752 C 118.391 120.982 118.674 121.115 118.972 121.115 L 124.222 121.115 C 124.701 121.115 125.113 120.776 125.204 120.306 L 127.751 107.199 L 131.123 107.199 C 132.683 107.199 133.011 107.532 133.024 107.546 C 133.118 107.648 133.243 108.12 133.037 109.177 L 130.949 119.925 C 130.892 120.218 130.969 120.521 131.159 120.752 C 131.349 120.982 131.632 121.115 131.931 121.115 L 137.264 121.115 C 137.743 121.115 138.154 120.776 138.246 120.306 L 140.442 109.002 C 140.958 106.349 140.517 104.358 139.132 103.085 C 137.811 101.872 135.597 101.282 132.365 101.282 L 128.901 101.282 L 129.925 96.015 C 129.982 95.721 129.905 95.418 129.715 95.188 C 129.525 94.957 129.242 94.824 128.944 94.824 Z M 128.944 95.824 L 127.688 102.282 L 132.365 102.282 C 135.308 102.282 137.338 102.796 138.455 103.822 C 139.572 104.848 139.907 106.512 139.461 108.811 L 137.264 120.115 L 131.931 120.115 L 134.019 109.367 C 134.257 108.145 134.169 107.311 133.757 106.866 C 133.344 106.421 132.466 106.199 131.123 106.199 L 126.927 106.199 L 124.222 120.115 L 118.972 120.115 L 123.694 95.824 L 128.944 95.824 Z " fill="rgb(255,255,255)"/></g><g><path d=" M 148.258 115.782 C 150.269 115.782 151.77 115.411 152.72 114.68 C 153.66 113.957 154.309 112.704 154.649 110.955 C 154.966 109.321 154.845 108.179 154.29 107.564 C 153.722 106.935 152.494 106.616 150.641 106.616 L 147.428 106.616 L 145.646 115.782 L 148.258 115.782 Z M 137.748 127.074 C 137.599 127.074 137.457 127.007 137.362 126.892 C 137.267 126.777 137.229 126.625 137.257 126.479 L 141.978 102.187 C 142.024 101.952 142.23 101.782 142.469 101.782 L 152.645 101.782 C 155.843 101.782 158.223 102.651 159.72 104.363 C 161.224 106.085 161.688 108.492 161.1 111.517 C 160.86 112.749 160.449 113.894 159.876 114.918 C 159.303 115.944 158.546 116.893 157.625 117.74 C 156.522 118.772 155.274 119.52 153.919 119.961 C 152.585 120.395 150.872 120.616 148.827 120.616 L 144.707 120.616 L 143.531 126.669 C 143.485 126.904 143.279 127.074 143.04 127.074 L 137.748 127.074 Z " fill="rgb(0,0,0)"/></g><g><path d=" M 147.84 107.115 L 150.641 107.115 C 152.878 107.115 153.655 107.606 153.919 107.899 C 154.357 108.384 154.44 109.408 154.158 110.86 C 153.842 112.485 153.255 113.637 152.415 114.284 C 151.555 114.946 150.156 115.282 148.258 115.282 L 146.253 115.282 L 147.84 107.115 Z M 152.645 101.282 L 142.469 101.282 C 141.991 101.282 141.579 101.621 141.488 102.091 L 136.767 126.383 C 136.71 126.676 136.787 126.979 136.976 127.21 C 137.166 127.44 137.449 127.574 137.748 127.574 L 143.04 127.574 C 143.518 127.574 143.93 127.234 144.021 126.765 L 145.119 121.115 L 148.827 121.115 C 150.924 121.115 152.69 120.887 154.074 120.436 C 155.497 119.973 156.807 119.189 157.967 118.105 C 158.925 117.223 159.715 116.233 160.313 115.162 C 160.911 114.091 161.341 112.897 161.591 111.612 C 162.21 108.428 161.707 105.878 160.096 104.034 C 158.501 102.208 155.994 101.282 152.645 101.282 Z M 145.04 116.282 L 148.258 116.282 C 150.392 116.282 151.981 115.88 153.025 115.076 C 154.07 114.272 154.774 112.931 155.14 111.05 C 155.49 109.245 155.331 107.971 154.661 107.229 C 153.991 106.487 152.652 106.115 150.641 106.115 L 147.016 106.115 L 145.04 116.282 Z M 152.645 102.282 C 155.706 102.282 157.939 103.085 159.343 104.692 C 160.747 106.299 161.169 108.542 160.609 111.421 C 160.379 112.608 159.989 113.692 159.44 114.675 C 158.891 115.658 158.173 116.557 157.286 117.372 C 156.23 118.361 155.056 119.065 153.764 119.485 C 152.473 119.906 150.827 120.115 148.827 120.115 L 144.295 120.115 L 143.04 126.574 L 137.748 126.574 L 142.469 102.282 L 152.645 102.282 Z " fill="rgb(255,255,255)"/></g></g></g></g></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_png.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_png.svg new file mode 100644 index 000000000..844bcbeec --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_png.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_Xu6Svd8MOCya3GRcaHMcl15tZ7rN2nye"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_Xu6Svd8MOCya3GRcaHMcl15tZ7rN2nye)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(101,156,53)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><circle vector-effect="non-scaling-stroke" cx="99.4974285714286" cy="85.35457142857143" r="14.35971428571429" fill="rgb(243,213,91)"/><path d=" M 60.429 162.571 L 95 162.571 L 195.571 162.571 L 195.571 128 L 164.143 98.143 L 131.143 134.286 L 113.911 117.053 L 60.429 162.571 Z " fill="rgb(136,192,87)"/></g></g><path d=" M 98.212 193.226 L 92.818 193.226 L 92.818 203.746 L 86.666 203.746 L 86.666 173.887 L 98.314 173.887 L 98.314 173.887 Q 101.678 173.887 104.231 175.117 L 104.231 175.117 L 104.231 175.117 Q 106.784 176.348 108.158 178.614 L 108.158 178.614 L 108.158 178.614 Q 109.532 180.88 109.532 183.771 L 109.532 183.771 L 109.532 183.771 Q 109.532 188.16 106.528 190.693 L 106.528 190.693 L 106.528 190.693 Q 103.523 193.226 98.212 193.226 L 98.212 193.226 L 98.212 193.226 Z M 92.818 178.87 L 92.818 188.242 L 98.314 188.242 L 98.314 188.242 Q 100.755 188.242 102.037 187.094 L 102.037 187.094 L 102.037 187.094 Q 103.318 185.945 103.318 183.813 L 103.318 183.813 L 103.318 183.813 Q 103.318 181.618 102.026 180.265 L 102.026 180.265 L 102.026 180.265 Q 100.734 178.911 98.458 178.87 L 98.458 178.87 L 92.818 178.87 L 92.818 178.87 Z M 138.038 173.887 L 138.038 203.746 L 131.886 203.746 L 119.909 184.1 L 119.909 203.746 L 113.757 203.746 L 113.757 173.887 L 119.909 173.887 L 131.906 193.574 L 131.906 173.887 L 138.038 173.887 L 138.038 173.887 Z M 167.036 188.058 L 167.036 199.973 L 167.036 199.973 Q 165.375 201.962 162.34 203.059 L 162.34 203.059 L 162.34 203.059 Q 159.305 204.156 155.613 204.156 L 155.613 204.156 L 155.613 204.156 Q 151.737 204.156 148.815 202.464 L 148.815 202.464 L 148.815 202.464 Q 145.893 200.772 144.303 197.553 L 144.303 197.553 L 144.303 197.553 Q 142.714 194.333 142.673 189.985 L 142.673 189.985 L 142.673 187.955 L 142.673 187.955 Q 142.673 183.484 144.18 180.213 L 144.18 180.213 L 144.18 180.213 Q 145.688 176.942 148.528 175.209 L 148.528 175.209 L 148.528 175.209 Q 151.368 173.477 155.183 173.477 L 155.183 173.477 L 155.183 173.477 Q 160.494 173.477 163.488 176.009 L 163.488 176.009 L 163.488 176.009 Q 166.482 178.542 167.036 183.382 L 167.036 183.382 L 161.048 183.382 L 161.048 183.382 Q 160.638 180.818 159.233 179.629 L 159.233 179.629 L 159.233 179.629 Q 157.828 178.439 155.367 178.439 L 155.367 178.439 L 155.367 178.439 Q 152.229 178.439 150.589 180.798 L 150.589 180.798 L 150.589 180.798 Q 148.948 183.156 148.928 187.812 L 148.928 187.812 L 148.928 189.719 L 148.928 189.719 Q 148.928 194.415 150.712 196.814 L 150.712 196.814 L 150.712 196.814 Q 152.496 199.214 155.941 199.214 L 155.941 199.214 L 155.941 199.214 Q 159.407 199.214 160.884 197.737 L 160.884 197.737 L 160.884 192.59 L 155.285 192.59 L 155.285 188.058 L 167.036 188.058 L 167.036 188.058 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_ppt.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_ppt.svg new file mode 100644 index 000000000..cb0f6a2d1 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_ppt.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_aHGuroPPSn3bQvMdTobuKZlOp1kZ4lEM"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_aHGuroPPSn3bQvMdTobuKZlOp1kZ4lEM)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(246,113,46)"/><path d=" M 164.143 134.286 L 88.714 134.286 L 88.714 84 L 164.143 84 L 164.143 134.286 Z M 95 128 L 157.857 128 L 157.857 90.286 L 95 90.286 L 95 128 Z " fill="rgb(200,189,184)"/><path d=" M 104.425 150 C 103.875 150 103.316 149.855 102.81 149.551 C 101.32 148.658 100.839 146.728 101.732 145.239 L 111.161 129.524 C 112.053 128.035 113.983 127.554 115.473 128.446 C 116.962 129.339 117.443 131.269 116.551 132.758 L 107.122 148.473 C 106.534 149.456 105.494 150 104.425 150 Z " fill="rgb(200,189,184)"/><path d=" M 148.432 150 C 147.363 150 146.323 149.456 145.735 148.476 L 136.307 132.761 C 135.414 131.272 135.895 129.342 137.385 128.449 C 138.874 127.56 140.804 128.038 141.697 129.527 L 151.125 145.242 C 152.018 146.731 151.537 148.661 150.047 149.554 C 149.541 149.855 148.982 150 148.432 150 Z " fill="rgb(200,189,184)"/><path d=" M 126.429 90.286 C 124.694 90.286 123.286 88.881 123.286 87.143 L 123.286 77.714 C 123.286 75.976 124.694 74.571 126.429 74.571 C 128.163 74.571 129.571 75.976 129.571 77.714 L 129.571 87.143 C 129.571 88.881 128.163 90.286 126.429 90.286 Z " fill="rgb(200,189,184)"/><rect x="95" y="90.286" width="62.857" height="37.714" transform="matrix(1,0,0,1,0,0)" fill="rgb(211,204,201)"/></g></g><path d=" M 100.712 193.226 L 95.318 193.226 L 95.318 203.746 L 89.166 203.746 L 89.166 173.887 L 100.814 173.887 L 100.814 173.887 Q 104.178 173.887 106.731 175.117 L 106.731 175.117 L 106.731 175.117 Q 109.284 176.348 110.658 178.614 L 110.658 178.614 L 110.658 178.614 Q 112.032 180.88 112.032 183.771 L 112.032 183.771 L 112.032 183.771 Q 112.032 188.16 109.028 190.693 L 109.028 190.693 L 109.028 190.693 Q 106.023 193.226 100.712 193.226 L 100.712 193.226 L 100.712 193.226 Z M 95.318 178.87 L 95.318 188.242 L 100.814 188.242 L 100.814 188.242 Q 103.255 188.242 104.537 187.094 L 104.537 187.094 L 104.537 187.094 Q 105.818 185.945 105.818 183.813 L 105.818 183.813 L 105.818 183.813 Q 105.818 181.618 104.526 180.265 L 104.526 180.265 L 104.526 180.265 Q 103.234 178.911 100.958 178.87 L 100.958 178.87 L 95.318 178.87 L 95.318 178.87 Z M 127.803 193.226 L 122.409 193.226 L 122.409 203.746 L 116.257 203.746 L 116.257 173.887 L 127.905 173.887 L 127.905 173.887 Q 131.269 173.887 133.822 175.117 L 133.822 175.117 L 133.822 175.117 Q 136.375 176.348 137.749 178.614 L 137.749 178.614 L 137.749 178.614 Q 139.123 180.88 139.123 183.771 L 139.123 183.771 L 139.123 183.771 Q 139.123 188.16 136.119 190.693 L 136.119 190.693 L 136.119 190.693 Q 133.114 193.226 127.803 193.226 L 127.803 193.226 L 127.803 193.226 Z M 122.409 178.87 L 122.409 188.242 L 127.905 188.242 L 127.905 188.242 Q 130.346 188.242 131.627 187.094 L 131.627 187.094 L 131.627 187.094 Q 132.909 185.945 132.909 183.813 L 132.909 183.813 L 132.909 183.813 Q 132.909 181.618 131.617 180.265 L 131.617 180.265 L 131.617 180.265 Q 130.325 178.911 128.049 178.87 L 128.049 178.87 L 122.409 178.87 L 122.409 178.87 Z M 165.824 173.887 L 165.824 178.87 L 156.678 178.87 L 156.678 203.746 L 150.525 203.746 L 150.525 178.87 L 141.502 178.87 L 141.502 173.887 L 165.824 173.887 L 165.824 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_pptx.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_pptx.svg new file mode 100644 index 000000000..62c9aff03 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_pptx.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_lMyuGubRIotblXMnQ7jMCoNnqqKJSGxl"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_lMyuGubRIotblXMnQ7jMCoNnqqKJSGxl)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(246,113,46)"/><path d=" M 164.143 134.286 L 88.714 134.286 L 88.714 84 L 164.143 84 L 164.143 134.286 Z M 95 128 L 157.857 128 L 157.857 90.286 L 95 90.286 L 95 128 Z " fill="rgb(200,189,184)"/><path d=" M 104.425 150 C 103.875 150 103.316 149.855 102.81 149.551 C 101.32 148.658 100.839 146.728 101.732 145.239 L 111.161 129.524 C 112.053 128.035 113.983 127.554 115.473 128.446 C 116.962 129.339 117.443 131.269 116.551 132.758 L 107.122 148.473 C 106.534 149.456 105.494 150 104.425 150 Z " fill="rgb(200,189,184)"/><path d=" M 148.432 150 C 147.363 150 146.323 149.456 145.735 148.476 L 136.307 132.761 C 135.414 131.272 135.895 129.342 137.385 128.449 C 138.874 127.56 140.804 128.038 141.697 129.527 L 151.125 145.242 C 152.018 146.731 151.537 148.661 150.047 149.554 C 149.541 149.855 148.982 150 148.432 150 Z " fill="rgb(200,189,184)"/><path d=" M 126.429 90.286 C 124.694 90.286 123.286 88.881 123.286 87.143 L 123.286 77.714 C 123.286 75.976 124.694 74.571 126.429 74.571 C 128.163 74.571 129.571 75.976 129.571 77.714 L 129.571 87.143 C 129.571 88.881 128.163 90.286 126.429 90.286 Z " fill="rgb(200,189,184)"/><rect x="95" y="90.286" width="62.857" height="37.714" transform="matrix(1,0,0,1,0,0)" fill="rgb(211,204,201)"/></g></g><path d=" M 87.712 193.444 L 82.318 193.444 L 82.318 203.965 L 76.166 203.965 L 76.166 174.105 L 87.814 174.105 L 87.814 174.105 Q 91.178 174.105 93.731 175.336 L 93.731 175.336 L 93.731 175.336 Q 96.284 176.566 97.658 178.833 L 97.658 178.833 L 97.658 178.833 Q 99.032 181.099 99.032 183.99 L 99.032 183.99 L 99.032 183.99 Q 99.032 188.379 96.028 190.912 L 96.028 190.912 L 96.028 190.912 Q 93.023 193.444 87.712 193.444 L 87.712 193.444 L 87.712 193.444 Z M 82.318 179.089 L 82.318 188.461 L 87.814 188.461 L 87.814 188.461 Q 90.255 188.461 91.537 187.313 L 91.537 187.313 L 91.537 187.313 Q 92.818 186.164 92.818 184.031 L 92.818 184.031 L 92.818 184.031 Q 92.818 181.837 91.526 180.483 L 91.526 180.483 L 91.526 180.483 Q 90.234 179.13 87.958 179.089 L 87.958 179.089 L 82.318 179.089 L 82.318 179.089 Z M 114.803 193.444 L 109.409 193.444 L 109.409 203.965 L 103.257 203.965 L 103.257 174.105 L 114.905 174.105 L 114.905 174.105 Q 118.269 174.105 120.822 175.336 L 120.822 175.336 L 120.822 175.336 Q 123.375 176.566 124.749 178.833 L 124.749 178.833 L 124.749 178.833 Q 126.123 181.099 126.123 183.99 L 126.123 183.99 L 126.123 183.99 Q 126.123 188.379 123.119 190.912 L 123.119 190.912 L 123.119 190.912 Q 120.114 193.444 114.803 193.444 L 114.803 193.444 L 114.803 193.444 Z M 109.409 179.089 L 109.409 188.461 L 114.905 188.461 L 114.905 188.461 Q 117.346 188.461 118.627 187.313 L 118.627 187.313 L 118.627 187.313 Q 119.909 186.164 119.909 184.031 L 119.909 184.031 L 119.909 184.031 Q 119.909 181.837 118.617 180.483 L 118.617 180.483 L 118.617 180.483 Q 117.325 179.13 115.049 179.089 L 115.049 179.089 L 109.409 179.089 L 109.409 179.089 Z M 152.824 174.105 L 152.824 179.089 L 143.678 179.089 L 143.678 203.965 L 137.525 203.965 L 137.525 179.089 L 128.502 179.089 L 128.502 174.105 L 152.824 174.105 L 152.824 174.105 Z M 161.417 174.105 L 167.016 184.4 L 172.614 174.105 L 179.689 174.105 L 170.994 188.912 L 179.915 203.965 L 172.758 203.965 L 167.016 193.506 L 161.273 203.965 L 154.116 203.965 L 163.037 188.912 L 154.342 174.105 L 161.417 174.105 L 161.417 174.105 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_psd.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_psd.svg new file mode 100644 index 000000000..0f8259c8f --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_psd.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_zAIJaBBFxZ4xllLjqtNpT4CVTvqyBDCc"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_zAIJaBBFxZ4xllLjqtNpT4CVTvqyBDCc)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(88,137,196)"/><path d=" M 162.238 75.084 C 160.783 74.138 158.838 74.546 157.889 75.998 C 153.385 82.9 145.383 92.228 141.577 96.034 L 132.815 104.796 L 123.927 95.908 L 132.683 87.143 C 138.249 81.577 152.392 70.039 158.19 67.965 C 158.316 67.946 158.476 67.918 158.542 67.902 C 160.18 67.535 161.141 65.963 160.852 64.31 C 160.56 62.657 158.916 61.529 157.26 61.752 L 156.371 61.947 C 148.705 64.502 132.934 78 128.236 82.702 L 105.654 105.283 C 105.356 105.271 105.06 105.239 104.759 105.239 C 95.421 105.239 87.589 111.918 85.955 121.004 L 85.615 121.233 L 85.553 122.918 C 85.446 125.879 84.603 135.653 78.189 137.205 C 76.564 137.611 75.492 139.17 75.697 140.826 L 76.206 143.714 L 98.143 143.714 L 98.206 143.714 L 98.206 143.714 L 104.762 143.62 C 115.344 143.62 123.955 135.009 123.955 124.427 C 123.955 123.82 123.921 123.223 123.864 122.629 L 146.018 100.478 C 150.119 96.377 158.354 86.781 163.15 79.433 C 164.099 77.978 163.69 76.033 162.238 75.084 Z M 104.762 137.334 L 93.011 137.334 L 93.058 137.429 L 87.837 137.429 C 90.625 133.214 91.486 127.884 91.747 124.716 L 92.005 123.132 C 92.674 116.513 98.159 111.522 104.765 111.522 C 105.145 111.522 105.503 111.601 105.877 111.635 L 106.402 111.701 C 109.687 112.122 112.55 113.76 114.574 116.136 C 114.756 116.353 114.945 116.56 115.111 116.789 C 115.369 117.135 115.598 117.503 115.821 117.874 C 115.979 118.141 116.126 118.414 116.268 118.691 C 116.466 119.087 116.657 119.489 116.815 119.907 C 116.909 120.159 116.978 120.423 117.057 120.683 C 117.198 121.145 117.343 121.607 117.434 122.095 L 117.449 122.176 C 117.578 122.912 117.676 123.657 117.676 124.427 C 117.669 131.542 111.88 137.334 104.762 137.334 Z M 120.193 113.062 C 120.171 113.034 120.152 113.009 120.13 112.98 C 118.229 110.431 115.715 108.376 112.801 107.025 L 119.473 100.352 L 128.361 109.24 L 121.853 115.746 C 121.378 114.803 120.819 113.907 120.193 113.062 Z " fill="rgb(200,189,184)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/></g></g><path d=" M 100.712 193.226 L 95.318 193.226 L 95.318 203.746 L 89.166 203.746 L 89.166 173.887 L 100.814 173.887 L 100.814 173.887 Q 104.178 173.887 106.731 175.117 L 106.731 175.117 L 106.731 175.117 Q 109.284 176.348 110.658 178.614 L 110.658 178.614 L 110.658 178.614 Q 112.032 180.88 112.032 183.771 L 112.032 183.771 L 112.032 183.771 Q 112.032 188.16 109.028 190.693 L 109.028 190.693 L 109.028 190.693 Q 106.023 193.226 100.712 193.226 L 100.712 193.226 L 100.712 193.226 Z M 95.318 178.87 L 95.318 188.242 L 100.814 188.242 L 100.814 188.242 Q 103.255 188.242 104.537 187.094 L 104.537 187.094 L 104.537 187.094 Q 105.818 185.945 105.818 183.813 L 105.818 183.813 L 105.818 183.813 Q 105.818 181.618 104.526 180.265 L 104.526 180.265 L 104.526 180.265 Q 103.234 178.911 100.958 178.87 L 100.958 178.87 L 95.318 178.87 L 95.318 178.87 Z M 131.74 195.912 L 131.74 195.912 L 131.74 195.912 Q 131.74 194.169 130.51 193.236 L 130.51 193.236 L 130.51 193.236 Q 129.279 192.303 126.08 191.267 L 126.08 191.267 L 126.08 191.267 Q 122.881 190.231 121.015 189.227 L 121.015 189.227 L 121.015 189.227 Q 115.929 186.479 115.929 181.823 L 115.929 181.823 L 115.929 181.823 Q 115.929 179.403 117.292 177.506 L 117.292 177.506 L 117.292 177.506 Q 118.656 175.609 121.209 174.543 L 121.209 174.543 L 121.209 174.543 Q 123.763 173.477 126.941 173.477 L 126.941 173.477 L 126.941 173.477 Q 130.141 173.477 132.643 174.635 L 132.643 174.635 L 132.643 174.635 Q 135.145 175.794 136.529 177.906 L 136.529 177.906 L 136.529 177.906 Q 137.913 180.019 137.913 182.705 L 137.913 182.705 L 131.761 182.705 L 131.761 182.705 Q 131.761 180.654 130.469 179.516 L 130.469 179.516 L 130.469 179.516 Q 129.177 178.378 126.839 178.378 L 126.839 178.378 L 126.839 178.378 Q 124.583 178.378 123.332 179.332 L 123.332 179.332 L 123.332 179.332 Q 122.081 180.285 122.081 181.844 L 122.081 181.844 L 122.081 181.844 Q 122.081 183.3 123.547 184.284 L 123.547 184.284 L 123.547 184.284 Q 125.014 185.269 127.864 186.13 L 127.864 186.13 L 127.864 186.13 Q 133.114 187.709 135.514 190.047 L 135.514 190.047 L 135.514 190.047 Q 137.913 192.385 137.913 195.871 L 137.913 195.871 L 137.913 195.871 Q 137.913 199.747 134.98 201.952 L 134.98 201.952 L 134.98 201.952 Q 132.048 204.156 127.085 204.156 L 127.085 204.156 L 127.085 204.156 Q 123.64 204.156 120.81 202.895 L 120.81 202.895 L 120.81 202.895 Q 117.979 201.634 116.493 199.439 L 116.493 199.439 L 116.493 199.439 Q 115.006 197.245 115.006 194.354 L 115.006 194.354 L 121.179 194.354 L 121.179 194.354 Q 121.179 199.296 127.085 199.296 L 127.085 199.296 L 127.085 199.296 Q 129.279 199.296 130.51 198.404 L 130.51 198.404 L 130.51 198.404 Q 131.74 197.512 131.74 195.912 Z M 151.325 203.746 L 142.076 203.746 L 142.076 173.887 L 151.264 173.887 L 151.264 173.887 Q 155.201 173.887 158.308 175.661 L 158.308 175.661 L 158.308 175.661 Q 161.415 177.435 163.158 180.706 L 163.158 180.706 L 163.158 180.706 Q 164.901 183.977 164.901 188.14 L 164.901 188.14 L 164.901 189.514 L 164.901 189.514 Q 164.901 193.677 163.189 196.917 L 163.189 196.917 L 163.189 196.917 Q 161.477 200.157 158.359 201.941 L 158.359 201.941 L 158.359 201.941 Q 155.242 203.726 151.325 203.746 L 151.325 203.746 L 151.325 203.746 Z M 151.264 178.87 L 148.229 178.87 L 148.229 198.804 L 151.202 198.804 L 151.202 198.804 Q 154.812 198.804 156.719 196.445 L 156.719 196.445 L 156.719 196.445 Q 158.626 194.087 158.667 189.698 L 158.667 189.698 L 158.667 188.119 L 158.667 188.119 Q 158.667 183.566 156.78 181.218 L 156.78 181.218 L 156.78 181.218 Q 154.894 178.87 151.264 178.87 L 151.264 178.87 L 151.264 178.87 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_py.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_py.svg new file mode 100644 index 000000000..efa13b2e2 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_py.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_2OU59RX26Z25RRKMSSLcaTTjFJr3xE4G"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_2OU59RX26Z25RRKMSSLcaTTjFJr3xE4G)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(248,198,61)"/><path d=" M 114.212 193.121 L 108.818 193.121 L 108.818 203.641 L 102.666 203.641 L 102.666 173.782 L 114.314 173.782 L 114.314 173.782 Q 117.678 173.782 120.231 175.012 L 120.231 175.012 L 120.231 175.012 Q 122.784 176.243 124.158 178.509 L 124.158 178.509 L 124.158 178.509 Q 125.532 180.775 125.532 183.667 L 125.532 183.667 L 125.532 183.667 Q 125.532 188.055 122.528 190.588 L 122.528 190.588 L 122.528 190.588 Q 119.523 193.121 114.212 193.121 L 114.212 193.121 L 114.212 193.121 Z M 108.818 178.765 L 108.818 188.137 L 114.314 188.137 L 114.314 188.137 Q 116.755 188.137 118.037 186.989 L 118.037 186.989 L 118.037 186.989 Q 119.318 185.84 119.318 183.708 L 119.318 183.708 L 119.318 183.708 Q 119.318 181.513 118.026 180.16 L 118.026 180.16 L 118.026 180.16 Q 116.734 178.806 114.458 178.765 L 114.458 178.765 L 108.818 178.765 L 108.818 178.765 Z M 133.879 173.782 L 140.052 187.235 L 146.266 173.782 L 152.992 173.782 L 143.189 192.813 L 143.189 203.641 L 136.935 203.641 L 136.935 192.813 L 127.132 173.782 L 133.879 173.782 L 133.879 173.782 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><g><g><linearGradient id="_lgradient_0" x1="0.12959359372586665" y1="0.1169963052650701" x2="0.7956443961566904" y2="0.7852749007964104" gradientTransform="matrix(51.243,0,0,51.358,93.449,75.258)" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-opacity="1" style="stop-color:rgb(56,126,184)"/><stop offset="100%" stop-opacity="1" style="stop-color:rgb(54,105,148)"/></linearGradient><path d=" M 127.751 75.258 C 110.209 75.258 111.304 82.866 111.304 82.866 L 111.324 90.747 L 128.064 90.747 L 128.064 93.113 L 104.675 93.113 C 104.675 93.113 93.449 91.84 93.449 109.54 C 93.449 127.241 103.247 126.613 103.247 126.613 L 109.094 126.613 L 109.094 118.399 C 109.094 118.399 108.779 108.602 118.735 108.602 C 128.692 108.602 135.339 108.602 135.339 108.602 C 135.339 108.602 144.667 108.752 144.667 99.586 C 144.667 90.42 144.667 84.43 144.667 84.43 C 144.667 84.43 146.083 75.258 127.751 75.258 Z M 118.52 80.558 C 120.186 80.558 121.532 81.904 121.532 83.57 C 121.532 85.235 120.186 86.581 118.52 86.581 C 116.855 86.581 115.509 85.235 115.509 83.57 C 115.509 81.904 116.855 80.558 118.52 80.558 Z " fill="url(#_lgradient_0)"/><linearGradient id="_lgradient_1" x1="0.19127525011261282" y1="0.20315845977702884" x2="0.9066531095995977" y2="0.8885264992652997" gradientTransform="matrix(51.243,0,0,51.358,111.308,92.642)" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-opacity="1" style="stop-color:rgb(255,224,82)"/><stop offset="100%" stop-opacity="1" style="stop-color:rgb(255,195,49)"/></linearGradient><path d=" M 128.249 144 C 145.791 144 144.696 136.393 144.696 136.393 L 144.676 128.511 L 127.936 128.511 L 127.936 126.145 L 151.325 126.145 C 151.325 126.145 162.551 127.418 162.551 109.718 C 162.551 92.018 152.753 92.645 152.753 92.645 L 146.906 92.645 L 146.906 100.859 C 146.906 100.859 147.221 110.657 137.265 110.657 C 127.308 110.657 120.661 110.657 120.661 110.657 C 120.661 110.657 111.333 110.506 111.333 119.672 C 111.333 128.838 111.333 134.828 111.333 134.828 C 111.333 134.828 109.917 144 128.249 144 Z M 137.48 138.7 C 135.814 138.7 134.468 137.354 134.468 135.689 C 134.468 134.023 135.814 132.677 137.48 132.677 C 139.145 132.677 140.491 134.023 140.491 135.689 C 140.491 137.354 139.145 138.7 137.48 138.7 Z " fill="url(#_lgradient_1)"/></g></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_rar.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_rar.svg new file mode 100644 index 000000000..8c53141ab --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_rar.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_vTXj1UBRlX1G4H8YXsC5CxDRBKjcj0iC"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_vTXj1UBRlX1G4H8YXsC5CxDRBKjcj0iC)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(85,96,128)"/><g><path d=" M 129.571 115.429 L 129.571 109.143 L 135.857 109.143 L 135.857 102.857 L 129.571 102.857 L 129.571 96.571 L 135.857 96.571 L 135.857 90.286 L 129.571 90.286 L 129.571 84 L 135.857 84 L 135.857 77.714 L 129.571 77.714 L 129.571 71.429 L 135.857 71.429 L 135.857 65.143 L 129.571 65.143 L 129.571 58.857 L 123.286 58.857 L 123.286 65.143 L 117 65.143 L 117 71.429 L 123.286 71.429 L 123.286 77.714 L 117 77.714 L 117 84 L 123.286 84 L 123.286 90.286 L 117 90.286 L 117 96.571 L 123.286 96.571 L 123.286 102.857 L 117 102.857 L 117 109.143 L 123.286 109.143 L 123.286 115.429 L 110.714 115.429 L 110.714 131.143 C 110.714 139.808 117.764 146.857 126.429 146.857 C 135.093 146.857 142.143 139.808 142.143 131.143 L 142.143 115.429 L 129.571 115.429 Z M 135.857 131.143 C 135.857 136.341 131.627 140.571 126.429 140.571 C 121.23 140.571 117 136.341 117 131.143 L 117 121.714 L 135.857 121.714 L 135.857 131.143 Z " fill="rgb(200,189,184)"/><path d=" M 123.286 134.286 L 129.571 134.286 C 131.306 134.286 132.714 132.881 132.714 131.143 C 132.714 129.405 131.306 128 129.571 128 L 123.286 128 C 121.551 128 120.143 129.405 120.143 131.143 C 120.143 132.881 121.551 134.286 123.286 134.286 Z " fill="rgb(200,189,184)"/></g></g></g><path d=" M 105.318 203.746 L 99.72 192.815 L 94.818 192.815 L 94.818 203.746 L 88.666 203.746 L 88.666 173.887 L 99.761 173.887 L 99.761 173.887 Q 105.052 173.887 107.923 176.245 L 107.923 176.245 L 107.923 176.245 Q 110.794 178.604 110.794 182.91 L 110.794 182.91 L 110.794 182.91 Q 110.794 185.966 109.471 188.006 L 109.471 188.006 L 109.471 188.006 Q 108.148 190.047 105.462 191.257 L 105.462 191.257 L 111.922 203.459 L 111.922 203.746 L 105.318 203.746 L 105.318 203.746 Z M 94.818 178.87 L 94.818 187.832 L 99.781 187.832 L 99.781 187.832 Q 102.099 187.832 103.37 186.653 L 103.37 186.653 L 103.37 186.653 Q 104.642 185.474 104.642 183.402 L 104.642 183.402 L 104.642 183.402 Q 104.642 181.29 103.442 180.08 L 103.442 180.08 L 103.442 180.08 Q 102.242 178.87 99.761 178.87 L 99.761 178.87 L 94.818 178.87 L 94.818 178.87 Z M 134.398 203.746 L 132.327 197.594 L 121.54 197.594 L 119.489 203.746 L 112.947 203.746 L 124.063 173.887 L 129.764 173.887 L 140.94 203.746 L 134.398 203.746 L 134.398 203.746 Z M 126.913 181.434 L 123.201 192.61 L 130.666 192.61 L 126.913 181.434 L 126.913 181.434 Z M 160.382 203.746 L 154.783 192.815 L 149.882 192.815 L 149.882 203.746 L 143.729 203.746 L 143.729 173.887 L 154.824 173.887 L 154.824 173.887 Q 160.115 173.887 162.986 176.245 L 162.986 176.245 L 162.986 176.245 Q 165.857 178.604 165.857 182.91 L 165.857 182.91 L 165.857 182.91 Q 165.857 185.966 164.535 188.006 L 164.535 188.006 L 164.535 188.006 Q 163.212 190.047 160.525 191.257 L 160.525 191.257 L 166.985 203.459 L 166.985 203.746 L 160.382 203.746 L 160.382 203.746 Z M 149.882 178.87 L 149.882 187.832 L 154.845 187.832 L 154.845 187.832 Q 157.162 187.832 158.434 186.653 L 158.434 186.653 L 158.434 186.653 Q 159.705 185.474 159.705 183.402 L 159.705 183.402 L 159.705 183.402 Q 159.705 181.29 158.505 180.08 L 158.505 180.08 L 158.505 180.08 Q 157.306 178.87 154.824 178.87 L 154.824 178.87 L 149.882 178.87 L 149.882 178.87 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_raw.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_raw.svg new file mode 100644 index 000000000..b25258558 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_raw.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_MipeIDFvj6U3h5wRDZn1ZwVQ0JfjCZwd"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_MipeIDFvj6U3h5wRDZn1ZwVQ0JfjCZwd)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(88,137,196)"/><path d=" M 162.238 75.084 C 160.783 74.138 158.838 74.546 157.889 75.998 C 153.385 82.9 145.383 92.228 141.577 96.034 L 132.815 104.796 L 123.927 95.908 L 132.683 87.143 C 138.249 81.577 152.392 70.039 158.19 67.965 C 158.316 67.946 158.476 67.918 158.542 67.902 C 160.18 67.535 161.141 65.963 160.852 64.31 C 160.56 62.657 158.916 61.529 157.26 61.752 L 156.371 61.947 C 148.705 64.502 132.934 78 128.236 82.702 L 105.654 105.283 C 105.356 105.271 105.06 105.239 104.759 105.239 C 95.421 105.239 87.589 111.918 85.955 121.004 L 85.615 121.233 L 85.553 122.918 C 85.446 125.879 84.603 135.653 78.189 137.205 C 76.564 137.611 75.492 139.17 75.697 140.826 L 76.206 143.714 L 98.143 143.714 L 98.206 143.714 L 98.206 143.714 L 104.762 143.62 C 115.344 143.62 123.955 135.009 123.955 124.427 C 123.955 123.82 123.921 123.223 123.864 122.629 L 146.018 100.478 C 150.119 96.377 158.354 86.781 163.15 79.433 C 164.099 77.978 163.69 76.033 162.238 75.084 Z M 104.762 137.334 L 93.011 137.334 L 93.058 137.429 L 87.837 137.429 C 90.625 133.214 91.486 127.884 91.747 124.716 L 92.005 123.132 C 92.674 116.513 98.159 111.522 104.765 111.522 C 105.145 111.522 105.503 111.601 105.877 111.635 L 106.402 111.701 C 109.687 112.122 112.55 113.76 114.574 116.136 C 114.756 116.353 114.945 116.56 115.111 116.789 C 115.369 117.135 115.598 117.503 115.821 117.874 C 115.979 118.141 116.126 118.414 116.268 118.691 C 116.466 119.087 116.657 119.489 116.815 119.907 C 116.909 120.159 116.978 120.423 117.057 120.683 C 117.198 121.145 117.343 121.607 117.434 122.095 L 117.449 122.176 C 117.578 122.912 117.676 123.657 117.676 124.427 C 117.669 131.542 111.88 137.334 104.762 137.334 Z M 120.193 113.062 C 120.171 113.034 120.152 113.009 120.13 112.98 C 118.229 110.431 115.715 108.376 112.801 107.025 L 119.473 100.352 L 128.361 109.24 L 121.853 115.746 C 121.378 114.803 120.819 113.907 120.193 113.062 Z " fill="rgb(200,189,184)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/></g></g><path d=" M 100.318 203.746 L 94.72 192.815 L 89.818 192.815 L 89.818 203.746 L 83.666 203.746 L 83.666 173.887 L 94.761 173.887 L 94.761 173.887 Q 100.052 173.887 102.923 176.245 L 102.923 176.245 L 102.923 176.245 Q 105.794 178.604 105.794 182.91 L 105.794 182.91 L 105.794 182.91 Q 105.794 185.966 104.471 188.006 L 104.471 188.006 L 104.471 188.006 Q 103.148 190.047 100.462 191.257 L 100.462 191.257 L 106.922 203.459 L 106.922 203.746 L 100.318 203.746 L 100.318 203.746 Z M 89.818 178.87 L 89.818 187.832 L 94.781 187.832 L 94.781 187.832 Q 97.099 187.832 98.37 186.653 L 98.37 186.653 L 98.37 186.653 Q 99.642 185.474 99.642 183.402 L 99.642 183.402 L 99.642 183.402 Q 99.642 181.29 98.442 180.08 L 98.442 180.08 L 98.442 180.08 Q 97.242 178.87 94.761 178.87 L 94.761 178.87 L 89.818 178.87 L 89.818 178.87 Z M 129.398 203.746 L 127.327 197.594 L 116.54 197.594 L 114.489 203.746 L 107.947 203.746 L 119.063 173.887 L 124.764 173.887 L 135.94 203.746 L 129.398 203.746 L 129.398 203.746 Z M 121.913 181.434 L 118.201 192.61 L 125.666 192.61 L 121.913 181.434 L 121.913 181.434 Z M 157.084 173.887 L 161.985 195.133 L 166.005 173.887 L 172.137 173.887 L 165.513 203.746 L 159.319 203.746 L 154.459 183.771 L 149.599 203.746 L 143.405 203.746 L 136.781 173.887 L 142.913 173.887 L 146.953 195.092 L 151.875 173.887 L 157.084 173.887 L 157.084 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_rtf.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_rtf.svg new file mode 100644 index 000000000..6f1829ed1 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_rtf.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_rPfTPPFMBnUTQrUQfHFAK59lmjnAyK22"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_rPfTPPFMBnUTQrUQfHFAK59lmjnAyK22)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(144,186,225)"/><g><path d=" M 79.286 80.857 L 98.143 80.857 C 99.881 80.857 101.286 79.449 101.286 77.714 C 101.286 75.979 99.881 74.571 98.143 74.571 L 79.286 74.571 C 77.548 74.571 76.143 75.979 76.143 77.714 C 76.143 79.449 77.548 80.857 79.286 80.857 Z " fill="rgb(200,189,184)"/><path d=" M 79.286 96.571 L 107.571 96.571 C 109.309 96.571 110.714 95.163 110.714 93.429 C 110.714 91.694 109.309 90.286 107.571 90.286 L 79.286 90.286 C 77.548 90.286 76.143 91.694 76.143 93.429 C 76.143 95.163 77.548 96.571 79.286 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 120.143 96.571 C 120.96 96.571 121.777 96.226 122.374 95.66 C 122.94 95.063 123.286 94.246 123.286 93.429 C 123.286 92.611 122.94 91.794 122.374 91.197 C 121.18 90.034 119.106 90.034 117.911 91.197 C 117.343 91.794 117 92.58 117 93.429 C 117 94.277 117.343 95.063 117.911 95.66 C 118.505 96.226 119.326 96.571 120.143 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 132.714 96.571 L 157.857 96.571 C 159.595 96.571 161 95.163 161 93.429 C 161 91.694 159.595 90.286 157.857 90.286 L 132.714 90.286 C 130.976 90.286 129.571 91.694 129.571 93.429 C 129.571 95.163 130.976 96.571 132.714 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 77.054 138.34 C 76.485 138.937 76.143 139.723 76.143 140.571 C 76.143 141.42 76.485 142.206 77.054 142.803 C 77.648 143.369 78.434 143.714 79.286 143.714 C 80.134 143.714 80.92 143.369 81.517 142.803 C 82.083 142.206 82.429 141.389 82.429 140.571 C 82.429 139.754 82.083 138.937 81.517 138.34 C 80.354 137.177 78.217 137.177 77.054 138.34 Z " fill="rgb(200,189,184)"/><path d=" M 117 137.429 L 91.857 137.429 C 90.119 137.429 88.714 138.837 88.714 140.571 C 88.714 142.306 90.119 143.714 91.857 143.714 L 117 143.714 C 118.738 143.714 120.143 142.306 120.143 140.571 C 120.143 138.837 118.738 137.429 117 137.429 Z " fill="rgb(200,189,184)"/><path d=" M 170.429 96.571 L 176.714 96.571 C 178.452 96.571 179.857 95.163 179.857 93.429 C 179.857 91.694 178.452 90.286 176.714 90.286 L 170.429 90.286 C 168.691 90.286 167.286 91.694 167.286 93.429 C 167.286 95.163 168.691 96.571 170.429 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 79.286 112.286 L 148.429 112.286 C 150.167 112.286 151.571 110.878 151.571 109.143 C 151.571 107.408 150.167 106 148.429 106 L 79.286 106 C 77.548 106 76.143 107.408 76.143 109.143 C 76.143 110.878 77.548 112.286 79.286 112.286 Z " fill="rgb(200,189,184)"/><path d=" M 176.714 106 L 157.857 106 C 156.119 106 154.714 107.408 154.714 109.143 C 154.714 110.878 156.119 112.286 157.857 112.286 L 176.714 112.286 C 178.452 112.286 179.857 110.878 179.857 109.143 C 179.857 107.408 178.452 106 176.714 106 Z " fill="rgb(200,189,184)"/><path d=" M 79.286 128 L 91.857 128 C 93.595 128 95 126.592 95 124.857 C 95 123.122 93.595 121.714 91.857 121.714 L 79.286 121.714 C 77.548 121.714 76.143 123.122 76.143 124.857 C 76.143 126.592 77.548 128 79.286 128 Z " fill="rgb(200,189,184)"/><path d=" M 135.857 121.714 L 104.429 121.714 C 102.691 121.714 101.286 123.122 101.286 124.857 C 101.286 126.592 102.691 128 104.429 128 L 135.857 128 C 137.595 128 139 126.592 139 124.857 C 139 123.122 137.595 121.714 135.857 121.714 Z " fill="rgb(200,189,184)"/><path d=" M 176.714 121.714 L 148.429 121.714 C 146.691 121.714 145.286 123.122 145.286 124.857 C 145.286 126.592 146.691 128 148.429 128 L 176.714 128 C 178.452 128 179.857 126.592 179.857 124.857 C 179.857 123.122 178.452 121.714 176.714 121.714 Z " fill="rgb(200,189,184)"/></g></g></g><path d=" M 108.318 203.746 L 102.72 192.815 L 97.818 192.815 L 97.818 203.746 L 91.666 203.746 L 91.666 173.887 L 102.761 173.887 L 102.761 173.887 Q 108.052 173.887 110.923 176.245 L 110.923 176.245 L 110.923 176.245 Q 113.794 178.604 113.794 182.91 L 113.794 182.91 L 113.794 182.91 Q 113.794 185.966 112.471 188.006 L 112.471 188.006 L 112.471 188.006 Q 111.148 190.047 108.462 191.257 L 108.462 191.257 L 114.922 203.459 L 114.922 203.746 L 108.318 203.746 L 108.318 203.746 Z M 97.818 178.87 L 97.818 187.832 L 102.781 187.832 L 102.781 187.832 Q 105.099 187.832 106.37 186.653 L 106.37 186.653 L 106.37 186.653 Q 107.642 185.474 107.642 183.402 L 107.642 183.402 L 107.642 183.402 Q 107.642 181.29 106.442 180.08 L 106.442 180.08 L 106.442 180.08 Q 105.242 178.87 102.761 178.87 L 102.761 178.87 L 97.818 178.87 L 97.818 178.87 Z M 140.946 173.887 L 140.946 178.87 L 131.8 178.87 L 131.8 203.746 L 125.647 203.746 L 125.647 178.87 L 116.624 178.87 L 116.624 173.887 L 140.946 173.887 L 140.946 173.887 Z M 162.418 186.581 L 162.418 191.544 L 150.605 191.544 L 150.605 203.746 L 144.453 203.746 L 144.453 173.887 L 163.895 173.887 L 163.895 178.87 L 150.605 178.87 L 150.605 186.581 L 162.418 186.581 L 162.418 186.581 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_sass.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_sass.svg new file mode 100644 index 000000000..4aca765b2 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_sass.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_NmhFHWVbVhYI4ZKz6Mgmr1klrFV7QdzX"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_NmhFHWVbVhYI4ZKz6Mgmr1klrFV7QdzX)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(205,103,154)"/></g></g><path d=" M 92.149 195.912 L 92.149 195.912 L 92.149 195.912 Q 92.149 194.169 90.919 193.236 L 90.919 193.236 L 90.919 193.236 Q 89.688 192.303 86.489 191.267 L 86.489 191.267 L 86.489 191.267 Q 83.29 190.231 81.424 189.227 L 81.424 189.227 L 81.424 189.227 Q 76.338 186.479 76.338 181.823 L 76.338 181.823 L 76.338 181.823 Q 76.338 179.403 77.702 177.506 L 77.702 177.506 L 77.702 177.506 Q 79.065 175.609 81.619 174.543 L 81.619 174.543 L 81.619 174.543 Q 84.172 173.477 87.351 173.477 L 87.351 173.477 L 87.351 173.477 Q 90.55 173.477 93.052 174.635 L 93.052 174.635 L 93.052 174.635 Q 95.554 175.794 96.938 177.906 L 96.938 177.906 L 96.938 177.906 Q 98.322 180.019 98.322 182.705 L 98.322 182.705 L 92.17 182.705 L 92.17 182.705 Q 92.17 180.654 90.878 179.516 L 90.878 179.516 L 90.878 179.516 Q 89.586 178.378 87.248 178.378 L 87.248 178.378 L 87.248 178.378 Q 84.992 178.378 83.741 179.332 L 83.741 179.332 L 83.741 179.332 Q 82.49 180.285 82.49 181.844 L 82.49 181.844 L 82.49 181.844 Q 82.49 183.3 83.957 184.284 L 83.957 184.284 L 83.957 184.284 Q 85.423 185.269 88.273 186.13 L 88.273 186.13 L 88.273 186.13 Q 93.523 187.709 95.923 190.047 L 95.923 190.047 L 95.923 190.047 Q 98.322 192.385 98.322 195.871 L 98.322 195.871 L 98.322 195.871 Q 98.322 199.747 95.39 201.952 L 95.39 201.952 L 95.39 201.952 Q 92.457 204.156 87.494 204.156 L 87.494 204.156 L 87.494 204.156 Q 84.049 204.156 81.219 202.895 L 81.219 202.895 L 81.219 202.895 Q 78.389 201.634 76.902 199.439 L 76.902 199.439 L 76.902 199.439 Q 75.415 197.245 75.415 194.354 L 75.415 194.354 L 81.588 194.354 L 81.588 194.354 Q 81.588 199.296 87.494 199.296 L 87.494 199.296 L 87.494 199.296 Q 89.688 199.296 90.919 198.404 L 90.919 198.404 L 90.919 198.404 Q 92.149 197.512 92.149 195.912 Z M 121.414 203.746 L 119.343 197.594 L 108.556 197.594 L 106.505 203.746 L 99.963 203.746 L 111.078 173.887 L 116.779 173.887 L 127.956 203.746 L 121.414 203.746 L 121.414 203.746 Z M 113.929 181.434 L 110.217 192.61 L 117.682 192.61 L 113.929 181.434 L 113.929 181.434 Z M 146.229 195.912 L 146.229 195.912 L 146.229 195.912 Q 146.229 194.169 144.998 193.236 L 144.998 193.236 L 144.998 193.236 Q 143.768 192.303 140.568 191.267 L 140.568 191.267 L 140.568 191.267 Q 137.369 190.231 135.503 189.227 L 135.503 189.227 L 135.503 189.227 Q 130.417 186.479 130.417 181.823 L 130.417 181.823 L 130.417 181.823 Q 130.417 179.403 131.781 177.506 L 131.781 177.506 L 131.781 177.506 Q 133.145 175.609 135.698 174.543 L 135.698 174.543 L 135.698 174.543 Q 138.251 173.477 141.43 173.477 L 141.43 173.477 L 141.43 173.477 Q 144.629 173.477 147.131 174.635 L 147.131 174.635 L 147.131 174.635 Q 149.633 175.794 151.017 177.906 L 151.017 177.906 L 151.017 177.906 Q 152.401 180.019 152.401 182.705 L 152.401 182.705 L 146.249 182.705 L 146.249 182.705 Q 146.249 180.654 144.957 179.516 L 144.957 179.516 L 144.957 179.516 Q 143.665 178.378 141.327 178.378 L 141.327 178.378 L 141.327 178.378 Q 139.071 178.378 137.82 179.332 L 137.82 179.332 L 137.82 179.332 Q 136.569 180.285 136.569 181.844 L 136.569 181.844 L 136.569 181.844 Q 136.569 183.3 138.036 184.284 L 138.036 184.284 L 138.036 184.284 Q 139.502 185.269 142.353 186.13 L 142.353 186.13 L 142.353 186.13 Q 147.603 187.709 150.002 190.047 L 150.002 190.047 L 150.002 190.047 Q 152.401 192.385 152.401 195.871 L 152.401 195.871 L 152.401 195.871 Q 152.401 199.747 149.469 201.952 L 149.469 201.952 L 149.469 201.952 Q 146.536 204.156 141.573 204.156 L 141.573 204.156 L 141.573 204.156 Q 138.128 204.156 135.298 202.895 L 135.298 202.895 L 135.298 202.895 Q 132.468 201.634 130.981 199.439 L 130.981 199.439 L 130.981 199.439 Q 129.494 197.245 129.494 194.354 L 129.494 194.354 L 135.667 194.354 L 135.667 194.354 Q 135.667 199.296 141.573 199.296 L 141.573 199.296 L 141.573 199.296 Q 143.768 199.296 144.998 198.404 L 144.998 198.404 L 144.998 198.404 Q 146.229 197.512 146.229 195.912 Z M 172.048 195.912 L 172.048 195.912 L 172.048 195.912 Q 172.048 194.169 170.817 193.236 L 170.817 193.236 L 170.817 193.236 Q 169.587 192.303 166.388 191.267 L 166.388 191.267 L 166.388 191.267 Q 163.188 190.231 161.322 189.227 L 161.322 189.227 L 161.322 189.227 Q 156.236 186.479 156.236 181.823 L 156.236 181.823 L 156.236 181.823 Q 156.236 179.403 157.6 177.506 L 157.6 177.506 L 157.6 177.506 Q 158.964 175.609 161.517 174.543 L 161.517 174.543 L 161.517 174.543 Q 164.07 173.477 167.249 173.477 L 167.249 173.477 L 167.249 173.477 Q 170.448 173.477 172.95 174.635 L 172.95 174.635 L 172.95 174.635 Q 175.452 175.794 176.836 177.906 L 176.836 177.906 L 176.836 177.906 Q 178.221 180.019 178.221 182.705 L 178.221 182.705 L 172.068 182.705 L 172.068 182.705 Q 172.068 180.654 170.776 179.516 L 170.776 179.516 L 170.776 179.516 Q 169.484 178.378 167.146 178.378 L 167.146 178.378 L 167.146 178.378 Q 164.891 178.378 163.64 179.332 L 163.64 179.332 L 163.64 179.332 Q 162.389 180.285 162.389 181.844 L 162.389 181.844 L 162.389 181.844 Q 162.389 183.3 163.855 184.284 L 163.855 184.284 L 163.855 184.284 Q 165.321 185.269 168.172 186.13 L 168.172 186.13 L 168.172 186.13 Q 173.422 187.709 175.821 190.047 L 175.821 190.047 L 175.821 190.047 Q 178.221 192.385 178.221 195.871 L 178.221 195.871 L 178.221 195.871 Q 178.221 199.747 175.288 201.952 L 175.288 201.952 L 175.288 201.952 Q 172.355 204.156 167.393 204.156 L 167.393 204.156 L 167.393 204.156 Q 163.947 204.156 161.117 202.895 L 161.117 202.895 L 161.117 202.895 Q 158.287 201.634 156.8 199.439 L 156.8 199.439 L 156.8 199.439 Q 155.313 197.245 155.313 194.354 L 155.313 194.354 L 161.486 194.354 L 161.486 194.354 Q 161.486 199.296 167.393 199.296 L 167.393 199.296 L 167.393 199.296 Q 169.587 199.296 170.817 198.404 L 170.817 198.404 L 170.817 198.404 Q 172.048 197.512 172.048 195.912 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><path d=" M 161.646 116.188 C 158.386 116.206 155.563 116.989 153.195 118.155 C 152.321 116.425 151.447 114.913 151.301 113.784 C 151.137 112.473 150.937 111.671 151.137 110.105 C 151.337 108.539 152.248 106.317 152.248 106.134 C 152.23 105.971 152.048 105.169 150.172 105.151 C 148.296 105.133 146.675 105.515 146.493 106.007 C 146.311 106.499 145.946 107.628 145.71 108.794 C 145.382 110.506 141.958 116.57 140.009 119.758 C 139.372 118.519 138.825 117.426 138.716 116.552 C 138.552 115.241 138.352 114.439 138.552 112.873 C 138.752 111.307 139.663 109.085 139.663 108.903 C 139.645 108.739 139.463 107.938 137.587 107.919 C 135.711 107.901 134.09 108.284 133.908 108.775 C 133.726 109.267 133.526 110.433 133.125 111.562 C 132.742 112.691 128.189 122.817 127.005 125.458 C 126.404 126.806 125.876 127.88 125.494 128.609 C 125.111 129.337 125.475 128.664 125.439 128.736 C 125.111 129.356 124.929 129.702 124.929 129.702 L 124.929 129.72 C 124.674 130.175 124.401 130.612 124.273 130.612 C 124.182 130.612 124 129.392 124.31 127.717 C 124.983 124.201 126.623 118.72 126.605 118.519 C 126.605 118.428 126.914 117.463 125.548 116.971 C 124.218 116.479 123.745 117.299 123.636 117.299 C 123.526 117.299 123.435 117.59 123.435 117.59 C 123.435 117.59 124.911 111.417 120.612 111.417 C 117.917 111.417 114.201 114.349 112.362 117.026 C 111.196 117.663 108.719 119.011 106.097 120.45 C 105.095 120.996 104.057 121.579 103.073 122.107 L 102.873 121.888 C 97.664 116.334 88.03 112.4 88.431 104.932 C 88.576 102.219 89.523 95.061 106.935 86.392 C 121.196 79.289 132.615 81.238 134.6 85.572 C 137.423 91.765 128.499 103.275 113.674 104.932 C 108.028 105.57 105.059 103.384 104.312 102.565 C 103.529 101.709 103.42 101.672 103.129 101.836 C 102.655 102.091 102.946 102.856 103.129 103.311 C 103.566 104.459 105.387 106.499 108.483 107.519 C 111.197 108.411 117.826 108.903 125.84 105.807 C 134.819 102.328 141.831 92.675 139.773 84.607 C 137.678 76.393 124.055 73.698 111.179 78.269 C 103.511 81.001 95.206 85.263 89.232 90.854 C 82.129 97.483 81 103.275 81.473 105.679 C 83.131 114.257 94.951 119.849 99.686 123.983 C 99.449 124.11 99.231 124.238 99.03 124.347 C 96.663 125.513 87.647 130.23 85.389 135.22 C 82.839 140.866 85.79 144.928 87.757 145.474 C 93.84 147.168 100.069 144.126 103.438 139.118 C 106.789 134.109 106.388 127.607 104.84 124.639 L 104.785 124.529 L 106.643 123.437 C 107.845 122.726 109.029 122.071 110.067 121.506 C 109.485 123.09 109.065 124.966 108.847 127.698 C 108.592 130.904 109.903 135.056 111.634 136.695 C 112.399 137.405 113.309 137.424 113.874 137.424 C 115.877 137.424 116.788 135.766 117.79 133.781 C 119.028 131.359 120.121 128.554 120.121 128.554 C 120.121 128.554 118.755 136.149 122.488 136.149 C 123.854 136.149 125.22 134.382 125.84 133.472 L 125.84 133.49 C 125.84 133.49 125.876 133.435 125.949 133.308 C 126.025 133.195 126.098 133.079 126.167 132.962 L 126.167 132.925 C 126.714 131.978 127.934 129.811 129.755 126.223 C 132.105 121.597 134.363 115.805 134.363 115.805 C 134.363 115.805 134.582 117.226 135.256 119.557 C 135.656 120.942 136.53 122.453 137.204 123.928 C 136.658 124.693 136.33 125.131 136.33 125.131 L 136.348 125.149 C 135.911 125.732 135.419 126.351 134.91 126.97 C 133.052 129.192 130.83 131.724 130.538 132.452 C 130.192 133.308 130.265 133.945 130.939 134.456 C 131.431 134.82 132.305 134.893 133.234 134.82 C 134.91 134.71 136.075 134.292 136.658 134.037 C 137.569 133.709 138.607 133.217 139.608 132.488 C 141.43 131.141 142.541 129.229 142.431 126.679 C 142.377 125.276 141.921 123.892 141.357 122.581 C 141.521 122.344 141.685 122.107 141.849 121.852 C 144.726 117.645 146.948 113.019 146.948 113.019 C 146.948 113.019 147.167 114.44 147.841 116.771 C 148.186 117.955 148.879 119.248 149.498 120.523 C 146.802 122.727 145.109 125.277 144.526 126.952 C 143.451 130.048 144.289 131.451 145.874 131.779 C 146.584 131.924 147.604 131.596 148.369 131.269 C 149.316 130.959 150.463 130.431 151.52 129.648 C 153.341 128.3 155.089 126.424 154.998 123.892 C 154.944 122.727 154.634 121.579 154.215 120.487 C 156.51 119.54 159.478 118.993 163.249 119.449 C 171.353 120.396 172.956 125.459 172.647 127.571 C 172.337 129.684 170.643 130.85 170.078 131.214 C 169.514 131.56 169.332 131.688 169.386 131.942 C 169.459 132.325 169.714 132.307 170.206 132.234 C 170.88 132.125 174.468 130.504 174.613 126.606 C 174.832 121.597 170.078 116.133 161.646 116.188 L 161.646 116.188 Z M 99.14 137.26 C 96.462 140.192 92.692 141.303 91.09 140.356 C 89.359 139.354 90.033 135.038 93.33 131.924 C 95.333 130.03 97.938 128.281 99.65 127.207 C 100.032 126.97 100.615 126.624 101.307 126.205 C 101.416 126.132 101.489 126.096 101.489 126.096 C 101.617 126.023 101.762 125.932 101.908 125.841 C 103.128 130.285 101.963 134.182 99.14 137.26 L 99.14 137.26 Z M 118.718 123.947 C 117.79 126.223 115.823 132.069 114.639 131.742 C 113.619 131.468 113 127.043 114.438 122.672 C 115.167 120.468 116.715 117.845 117.625 116.825 C 119.101 115.186 120.703 114.64 121.104 115.313 C 121.578 116.188 119.301 122.526 118.718 123.947 Z M 134.873 131.669 C 134.472 131.869 134.108 132.015 133.944 131.906 C 133.817 131.833 134.108 131.56 134.108 131.56 C 134.108 131.56 136.13 129.392 136.931 128.391 C 137.386 127.808 137.933 127.134 138.515 126.369 L 138.515 126.588 C 138.516 129.21 136.002 130.958 134.873 131.669 Z M 147.33 128.828 C 147.039 128.609 147.076 127.935 148.059 125.822 C 148.442 124.985 149.316 123.582 150.827 122.253 C 151.009 122.799 151.119 123.327 151.1 123.819 C 151.082 127.097 148.751 128.318 147.33 128.828 Z " fill="rgb(205,103,154)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_sc.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_sc.svg new file mode 100644 index 000000000..7855254ce --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_sc.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_5uhZyPV2qZ92Lmlp8r2jB5SYHO9Nfxfi"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_5uhZyPV2qZ92Lmlp8r2jB5SYHO9Nfxfi)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(192,27,3)"/></g></g><path d=" M 80.785 195.773 L 80.785 195.773 L 80.785 195.773 Q 80.785 194.113 79.613 193.225 L 79.613 193.225 L 79.613 193.225 Q 78.441 192.336 75.395 191.35 L 75.395 191.35 L 75.395 191.35 Q 72.348 190.363 70.57 189.406 L 70.57 189.406 L 70.57 189.406 Q 65.727 186.789 65.727 182.355 L 65.727 182.355 L 65.727 182.355 Q 65.727 180.051 67.025 178.244 L 67.025 178.244 L 67.025 178.244 Q 68.324 176.438 70.756 175.422 L 70.756 175.422 L 70.756 175.422 Q 73.188 174.406 76.215 174.406 L 76.215 174.406 L 76.215 174.406 Q 79.262 174.406 81.645 175.51 L 81.645 175.51 L 81.645 175.51 Q 84.027 176.613 85.346 178.625 L 85.346 178.625 L 85.346 178.625 Q 86.664 180.637 86.664 183.195 L 86.664 183.195 L 80.805 183.195 L 80.805 183.195 Q 80.805 181.242 79.574 180.158 L 79.574 180.158 L 79.574 180.158 Q 78.344 179.074 76.117 179.074 L 76.117 179.074 L 76.117 179.074 Q 73.969 179.074 72.777 179.982 L 72.777 179.982 L 72.777 179.982 Q 71.586 180.891 71.586 182.375 L 71.586 182.375 L 71.586 182.375 Q 71.586 183.762 72.982 184.699 L 72.982 184.699 L 72.982 184.699 Q 74.379 185.637 77.094 186.457 L 77.094 186.457 L 77.094 186.457 Q 82.094 187.961 84.379 190.188 L 84.379 190.188 L 84.379 190.188 Q 86.664 192.414 86.664 195.734 L 86.664 195.734 L 86.664 195.734 Q 86.664 199.426 83.871 201.525 L 83.871 201.525 L 83.871 201.525 Q 81.078 203.625 76.352 203.625 L 76.352 203.625 L 76.352 203.625 Q 73.07 203.625 70.375 202.424 L 70.375 202.424 L 70.375 202.424 Q 67.68 201.223 66.264 199.133 L 66.264 199.133 L 66.264 199.133 Q 64.848 197.043 64.848 194.289 L 64.848 194.289 L 70.727 194.289 L 70.727 194.289 Q 70.727 198.996 76.352 198.996 L 76.352 198.996 L 76.352 198.996 Q 78.441 198.996 79.613 198.146 L 79.613 198.146 L 79.613 198.146 Q 80.785 197.297 80.785 195.773 Z M 107.094 193.762 L 112.953 193.762 L 112.953 193.762 Q 112.621 198.352 109.564 200.988 L 109.564 200.988 L 109.564 200.988 Q 106.508 203.625 101.508 203.625 L 101.508 203.625 L 101.508 203.625 Q 96.039 203.625 92.904 199.943 L 92.904 199.943 L 92.904 199.943 Q 89.77 196.262 89.77 189.836 L 89.77 189.836 L 89.77 188.098 L 89.77 188.098 Q 89.77 183.996 91.215 180.871 L 91.215 180.871 L 91.215 180.871 Q 92.66 177.746 95.346 176.076 L 95.346 176.076 L 95.346 176.076 Q 98.031 174.406 101.586 174.406 L 101.586 174.406 L 101.586 174.406 Q 106.508 174.406 109.516 177.043 L 109.516 177.043 L 109.516 177.043 Q 112.523 179.68 112.992 184.445 L 112.992 184.445 L 107.133 184.445 L 107.133 184.445 Q 106.918 181.691 105.6 180.451 L 105.6 180.451 L 105.6 180.451 Q 104.281 179.211 101.586 179.211 L 101.586 179.211 L 101.586 179.211 Q 98.656 179.211 97.201 181.311 L 97.201 181.311 L 97.201 181.311 Q 95.746 183.41 95.707 187.824 L 95.707 187.824 L 95.707 189.973 L 95.707 189.973 Q 95.707 194.582 97.104 196.711 L 97.104 196.711 L 97.104 196.711 Q 98.5 198.84 101.508 198.84 L 101.508 198.84 L 101.508 198.84 Q 104.223 198.84 105.561 197.6 L 105.561 197.6 L 105.561 197.6 Q 106.898 196.359 107.094 193.762 L 107.094 193.762 L 107.094 193.762 Z M 134.828 203.234 L 132.855 197.375 L 122.582 197.375 L 120.629 203.234 L 114.398 203.234 L 124.984 174.797 L 130.414 174.797 L 141.059 203.234 L 134.828 203.234 L 134.828 203.234 Z M 127.699 181.984 L 124.164 192.629 L 131.273 192.629 L 127.699 181.984 L 127.699 181.984 Z M 149.574 174.797 L 149.574 198.527 L 162.016 198.527 L 162.016 203.234 L 143.715 203.234 L 143.715 174.797 L 149.574 174.797 L 149.574 174.797 Z M 183.402 203.234 L 181.43 197.375 L 171.156 197.375 L 169.203 203.234 L 162.973 203.234 L 173.559 174.797 L 178.988 174.797 L 189.633 203.234 L 183.402 203.234 L 183.402 203.234 Z M 176.273 181.984 L 172.738 192.629 L 179.848 192.629 L 176.273 181.984 L 176.273 181.984 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><g><g><g><g><g><linearGradient id="_lgradient_2" x1="0.00006856743362493312" y1="0.4994311459540839" x2="1.2502545509953666" y2="0.4994311459540839" gradientTransform="matrix(40,0,0,-15,108,130.568)" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-opacity="1" style="stop-color:rgb(68,68,68)"/><stop offset="100%" stop-opacity="1" style="stop-color:rgb(0,0,0)"/></linearGradient><path d=" M 108 120.567 L 108 125.567 C 108 126.41 126.184 127.822 138.031 130.568 L 138.031 130.568 C 143.754 129.241 148 127.604 148 125.567 L 148 125.567 L 148 120.567 C 148 118.533 143.754 116.894 138.031 115.568 L 138.031 115.568 C 126.184 118.314 108 119.725 108 120.567 Z " fill="url(#_lgradient_2)"/></g></g></g></g><g><g><g><g><linearGradient id="_lgradient_3" x1="0.00006856743362493312" y1="0.4995865052523403" x2="1.2502545509953666" y2="0.4995865052523403" gradientTransform="matrix(40,0,0,-15,108,110.568)" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-opacity="1" style="stop-color:rgb(68,68,68)"/><stop offset="100%" stop-opacity="1" style="stop-color:rgb(0,0,0)"/></linearGradient><path d=" M 108 100.567 L 108 105.568 C 108 106.41 126.184 107.822 138.031 110.568 L 138.031 110.568 C 143.754 109.241 148 107.604 148 105.568 L 148 105.568 L 148 100.567 C 148 98.532 143.754 96.894 138.031 95.568 L 138.031 95.568 C 126.184 98.314 108 99.725 108 100.567 Z " fill="url(#_lgradient_3)"/></g></g></g></g><g><g><g><g><linearGradient id="_lgradient_4" x1="0.00006856743362515516" y1="0.499959845404806" x2="1.2502545509953666" y2="0.499959845404806" gradientTransform="matrix(40,0,0,-25,108,125.567)" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-opacity="1" style="stop-color:rgb(166,18,20)"/><stop offset="100%" stop-opacity="1" style="stop-color:rgb(216,32,35)"/></linearGradient><path d=" M 108 110.568 L 108 125.567 C 108 124.317 148 121.817 148 115.568 L 148 115.568 L 148 100.567 C 148 106.817 108 109.317 108 110.568 Z " fill="url(#_lgradient_4)"/></g></g></g></g><g><g><g><g><linearGradient id="_lgradient_5" x1="0.00006856743362493312" y1="0.49960132223345566" x2="1.2502545509953666" y2="0.49960132223345566" gradientTransform="matrix(40,0,0,-25,108,105.567)" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-opacity="1" style="stop-color:rgb(166,18,20)"/><stop offset="100%" stop-opacity="1" style="stop-color:rgb(216,32,35)"/></linearGradient><path d=" M 108 90.567 L 108 105.567 C 108 104.317 148 101.817 148 95.567 L 148 95.567 L 148 80.567 C 148 86.818 108 89.318 108 90.567 Z " fill="url(#_lgradient_5)"/></g></g></g></g><g><g><g><g><linearGradient id="_lgradient_6" x1="0.00006856743362493312" y1="0.499809265672839" x2="1.2502545509953666" y2="0.499809265672839" gradientTransform="matrix(40,0,0,-25,108,145.568)" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-opacity="1" style="stop-color:rgb(166,18,20)"/><stop offset="100%" stop-opacity="1" style="stop-color:rgb(216,32,35)"/></linearGradient><path d=" M 108 130.568 L 108 145.568 C 108 144.318 148 141.817 148 135.568 L 148 135.568 L 148 120.568 C 148 126.818 108 129.318 108 130.568 Z " fill="url(#_lgradient_6)"/></g></g></g></g></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_sh.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_sh.svg new file mode 100644 index 000000000..59e6c6835 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_sh.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_VbvJtGsXngEkjwHKSnY2rI1LAQin1v85"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_VbvJtGsXngEkjwHKSnY2rI1LAQin1v85)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(93,93,93)"/></g></g><path d=" M 153.188 107.262 L 144.047 107.262 L 142.184 115.77 L 149.145 115.77 L 149.145 124.77 L 140.215 124.77 L 137.719 135.703 L 128.438 135.703 L 130.934 124.77 L 122.145 124.77 L 119.648 135.703 L 110.367 135.703 L 112.863 124.77 L 105.586 124.77 L 105.586 115.77 L 114.727 115.77 L 116.695 107.262 L 109.629 107.262 L 109.629 98.262 L 118.699 98.262 L 121.02 87.398 L 130.301 87.398 L 127.98 98.262 L 136.77 98.262 L 139.09 87.398 L 148.371 87.398 L 146.051 98.262 L 153.188 98.262 L 153.188 107.262 L 153.188 107.262 Z M 134.766 107.262 L 125.977 107.262 L 124.043 115.77 L 132.902 115.77 L 134.766 107.262 L 134.766 107.262 Z " fill-rule="evenodd" fill="rgb(93,93,93)"/><path d=" M 119.149 195.912 L 119.149 195.912 L 119.149 195.912 Q 119.149 194.169 117.919 193.236 L 117.919 193.236 L 117.919 193.236 Q 116.688 192.303 113.489 191.267 L 113.489 191.267 L 113.489 191.267 Q 110.29 190.231 108.424 189.227 L 108.424 189.227 L 108.424 189.227 Q 103.338 186.479 103.338 181.823 L 103.338 181.823 L 103.338 181.823 Q 103.338 179.403 104.702 177.506 L 104.702 177.506 L 104.702 177.506 Q 106.065 175.609 108.619 174.543 L 108.619 174.543 L 108.619 174.543 Q 111.172 173.477 114.351 173.477 L 114.351 173.477 L 114.351 173.477 Q 117.55 173.477 120.052 174.635 L 120.052 174.635 L 120.052 174.635 Q 122.554 175.794 123.938 177.906 L 123.938 177.906 L 123.938 177.906 Q 125.322 180.019 125.322 182.705 L 125.322 182.705 L 119.17 182.705 L 119.17 182.705 Q 119.17 180.654 117.878 179.516 L 117.878 179.516 L 117.878 179.516 Q 116.586 178.378 114.248 178.378 L 114.248 178.378 L 114.248 178.378 Q 111.992 178.378 110.741 179.332 L 110.741 179.332 L 110.741 179.332 Q 109.49 180.285 109.49 181.844 L 109.49 181.844 L 109.49 181.844 Q 109.49 183.3 110.957 184.284 L 110.957 184.284 L 110.957 184.284 Q 112.423 185.269 115.273 186.13 L 115.273 186.13 L 115.273 186.13 Q 120.523 187.709 122.923 190.047 L 122.923 190.047 L 122.923 190.047 Q 125.322 192.385 125.322 195.871 L 125.322 195.871 L 125.322 195.871 Q 125.322 199.747 122.39 201.952 L 122.39 201.952 L 122.39 201.952 Q 119.457 204.156 114.494 204.156 L 114.494 204.156 L 114.494 204.156 Q 111.049 204.156 108.219 202.895 L 108.219 202.895 L 108.219 202.895 Q 105.389 201.634 103.902 199.439 L 103.902 199.439 L 103.902 199.439 Q 102.415 197.245 102.415 194.354 L 102.415 194.354 L 108.588 194.354 L 108.588 194.354 Q 108.588 199.296 114.494 199.296 L 114.494 199.296 L 114.494 199.296 Q 116.688 199.296 117.919 198.404 L 117.919 198.404 L 117.919 198.404 Q 119.149 197.512 119.149 195.912 Z M 153.787 173.887 L 153.787 203.746 L 147.635 203.746 L 147.635 190.949 L 135.638 190.949 L 135.638 203.746 L 129.485 203.746 L 129.485 173.887 L 135.638 173.887 L 135.638 185.986 L 147.635 185.986 L 147.635 173.887 L 153.787 173.887 L 153.787 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_svg.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_svg.svg new file mode 100644 index 000000000..ad897f2d1 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_svg.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_keYyWPD9oUxwuZntTigMo8VQ9JBqfiet"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_keYyWPD9oUxwuZntTigMo8VQ9JBqfiet)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(229,126,37)"/><path d=" M 183 109.143 L 183 90.286 L 164.143 90.286 L 164.143 96.571 L 145.286 96.571 L 145.286 84 L 113.857 84 L 113.857 96.571 L 95 96.571 L 95 90.286 L 76.143 90.286 L 76.143 109.143 L 95 109.143 L 95 102.857 L 106.151 102.857 C 91.801 111.142 82.429 126.705 82.429 143.714 C 82.429 145.449 83.833 146.857 85.571 146.857 C 87.309 146.857 88.714 145.449 88.714 143.714 C 88.714 127.227 98.863 112.289 113.857 106.016 L 113.857 115.429 L 145.286 115.429 L 145.286 106.016 C 160.28 112.292 170.429 127.23 170.429 143.714 C 170.429 145.449 171.833 146.857 173.571 146.857 C 175.309 146.857 176.714 145.449 176.714 143.714 C 176.714 126.705 167.342 111.142 152.992 102.857 L 164.143 102.857 L 164.143 109.143 L 183 109.143 Z M 88.714 102.857 L 82.429 102.857 L 82.429 96.571 L 88.714 96.571 L 88.714 102.857 Z M 139 109.143 L 120.143 109.143 L 120.143 97.345 L 120.143 90.286 L 139 90.286 L 139 97.345 L 139 109.143 Z M 170.429 96.571 L 176.714 96.571 L 176.714 102.857 L 170.429 102.857 L 170.429 96.571 Z " fill="rgb(200,189,184)"/></g></g><path d=" M 104.149 195.912 L 104.149 195.912 L 104.149 195.912 Q 104.149 194.169 102.919 193.236 L 102.919 193.236 L 102.919 193.236 Q 101.688 192.303 98.489 191.267 L 98.489 191.267 L 98.489 191.267 Q 95.29 190.231 93.424 189.227 L 93.424 189.227 L 93.424 189.227 Q 88.338 186.479 88.338 181.823 L 88.338 181.823 L 88.338 181.823 Q 88.338 179.403 89.702 177.506 L 89.702 177.506 L 89.702 177.506 Q 91.065 175.609 93.619 174.543 L 93.619 174.543 L 93.619 174.543 Q 96.172 173.477 99.351 173.477 L 99.351 173.477 L 99.351 173.477 Q 102.55 173.477 105.052 174.635 L 105.052 174.635 L 105.052 174.635 Q 107.554 175.794 108.938 177.906 L 108.938 177.906 L 108.938 177.906 Q 110.322 180.019 110.322 182.705 L 110.322 182.705 L 104.17 182.705 L 104.17 182.705 Q 104.17 180.654 102.878 179.516 L 102.878 179.516 L 102.878 179.516 Q 101.586 178.378 99.248 178.378 L 99.248 178.378 L 99.248 178.378 Q 96.992 178.378 95.741 179.332 L 95.741 179.332 L 95.741 179.332 Q 94.49 180.285 94.49 181.844 L 94.49 181.844 L 94.49 181.844 Q 94.49 183.3 95.957 184.284 L 95.957 184.284 L 95.957 184.284 Q 97.423 185.269 100.273 186.13 L 100.273 186.13 L 100.273 186.13 Q 105.523 187.709 107.923 190.047 L 107.923 190.047 L 107.923 190.047 Q 110.322 192.385 110.322 195.871 L 110.322 195.871 L 110.322 195.871 Q 110.322 199.747 107.39 201.952 L 107.39 201.952 L 107.39 201.952 Q 104.457 204.156 99.494 204.156 L 99.494 204.156 L 99.494 204.156 Q 96.049 204.156 93.219 202.895 L 93.219 202.895 L 93.219 202.895 Q 90.389 201.634 88.902 199.439 L 88.902 199.439 L 88.902 199.439 Q 87.415 197.245 87.415 194.354 L 87.415 194.354 L 93.588 194.354 L 93.588 194.354 Q 93.588 199.296 99.494 199.296 L 99.494 199.296 L 99.494 199.296 Q 101.688 199.296 102.919 198.404 L 102.919 198.404 L 102.919 198.404 Q 104.149 197.512 104.149 195.912 Z M 118.792 173.887 L 125.519 196.343 L 132.286 173.887 L 139.136 173.887 L 128.738 203.746 L 122.319 203.746 L 111.963 173.887 L 118.792 173.887 L 118.792 173.887 Z M 165.57 188.058 L 165.57 199.973 L 165.57 199.973 Q 163.909 201.962 160.874 203.059 L 160.874 203.059 L 160.874 203.059 Q 157.839 204.156 154.147 204.156 L 154.147 204.156 L 154.147 204.156 Q 150.271 204.156 147.349 202.464 L 147.349 202.464 L 147.349 202.464 Q 144.427 200.772 142.837 197.553 L 142.837 197.553 L 142.837 197.553 Q 141.248 194.333 141.207 189.985 L 141.207 189.985 L 141.207 187.955 L 141.207 187.955 Q 141.207 183.484 142.714 180.213 L 142.714 180.213 L 142.714 180.213 Q 144.222 176.942 147.062 175.209 L 147.062 175.209 L 147.062 175.209 Q 149.902 173.477 153.717 173.477 L 153.717 173.477 L 153.717 173.477 Q 159.028 173.477 162.022 176.009 L 162.022 176.009 L 162.022 176.009 Q 165.017 178.542 165.57 183.382 L 165.57 183.382 L 159.582 183.382 L 159.582 183.382 Q 159.172 180.818 157.767 179.629 L 157.767 179.629 L 157.767 179.629 Q 156.362 178.439 153.901 178.439 L 153.901 178.439 L 153.901 178.439 Q 150.764 178.439 149.123 180.798 L 149.123 180.798 L 149.123 180.798 Q 147.482 183.156 147.462 187.812 L 147.462 187.812 L 147.462 189.719 L 147.462 189.719 Q 147.462 194.415 149.246 196.814 L 149.246 196.814 L 149.246 196.814 Q 151.03 199.214 154.476 199.214 L 154.476 199.214 L 154.476 199.214 Q 157.941 199.214 159.418 197.737 L 159.418 197.737 L 159.418 192.59 L 153.819 192.59 L 153.819 188.058 L 165.57 188.058 L 165.57 188.058 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_tar.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_tar.svg new file mode 100644 index 000000000..a09099c4d --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_tar.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_q21FbrYhm4rXvezdMbXGpW3CD1Ri61Wi"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_q21FbrYhm4rXvezdMbXGpW3CD1Ri61Wi)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(85,96,128)"/><g><path d=" M 129.571 115.429 L 129.571 109.143 L 135.857 109.143 L 135.857 102.857 L 129.571 102.857 L 129.571 96.571 L 135.857 96.571 L 135.857 90.286 L 129.571 90.286 L 129.571 84 L 135.857 84 L 135.857 77.714 L 129.571 77.714 L 129.571 71.429 L 135.857 71.429 L 135.857 65.143 L 129.571 65.143 L 129.571 58.857 L 123.286 58.857 L 123.286 65.143 L 117 65.143 L 117 71.429 L 123.286 71.429 L 123.286 77.714 L 117 77.714 L 117 84 L 123.286 84 L 123.286 90.286 L 117 90.286 L 117 96.571 L 123.286 96.571 L 123.286 102.857 L 117 102.857 L 117 109.143 L 123.286 109.143 L 123.286 115.429 L 110.714 115.429 L 110.714 131.143 C 110.714 139.808 117.764 146.857 126.429 146.857 C 135.093 146.857 142.143 139.808 142.143 131.143 L 142.143 115.429 L 129.571 115.429 Z M 135.857 131.143 C 135.857 136.341 131.627 140.571 126.429 140.571 C 121.23 140.571 117 136.341 117 131.143 L 117 121.714 L 135.857 121.714 L 135.857 131.143 Z " fill="rgb(200,189,184)"/><path d=" M 123.286 134.286 L 129.571 134.286 C 131.306 134.286 132.714 132.881 132.714 131.143 C 132.714 129.405 131.306 128 129.571 128 L 123.286 128 C 121.551 128 120.143 129.405 120.143 131.143 C 120.143 132.881 121.551 134.286 123.286 134.286 Z " fill="rgb(200,189,184)"/></g></g></g><path d=" M 111.143 173.887 L 111.143 178.87 L 101.996 178.87 L 101.996 203.746 L 95.844 203.746 L 95.844 178.87 L 86.82 178.87 L 86.82 173.887 L 111.143 173.887 L 111.143 173.887 Z M 133.578 203.746 L 131.507 197.594 L 120.72 197.594 L 118.669 203.746 L 112.127 203.746 L 123.242 173.887 L 128.943 173.887 L 140.12 203.746 L 133.578 203.746 L 133.578 203.746 Z M 126.093 181.434 L 122.381 192.61 L 129.846 192.61 L 126.093 181.434 L 126.093 181.434 Z M 159.562 203.746 L 153.963 192.815 L 149.062 192.815 L 149.062 203.746 L 142.909 203.746 L 142.909 173.887 L 154.004 173.887 L 154.004 173.887 Q 159.295 173.887 162.166 176.245 L 162.166 176.245 L 162.166 176.245 Q 165.037 178.604 165.037 182.91 L 165.037 182.91 L 165.037 182.91 Q 165.037 185.966 163.714 188.006 L 163.714 188.006 L 163.714 188.006 Q 162.392 190.047 159.705 191.257 L 159.705 191.257 L 166.165 203.459 L 166.165 203.746 L 159.562 203.746 L 159.562 203.746 Z M 149.062 178.87 L 149.062 187.832 L 154.024 187.832 L 154.024 187.832 Q 156.342 187.832 157.613 186.653 L 157.613 186.653 L 157.613 186.653 Q 158.885 185.474 158.885 183.402 L 158.885 183.402 L 158.885 183.402 Q 158.885 181.29 157.685 180.08 L 157.685 180.08 L 157.685 180.08 Q 156.485 178.87 154.004 178.87 L 154.004 178.87 L 149.062 178.87 L 149.062 178.87 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_ttf.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_ttf.svg new file mode 100644 index 000000000..908dc240b --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_ttf.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_g8ot4TI3cAvYvsG3hKIZXTg6Y32xAlLo"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_g8ot4TI3cAvYvsG3hKIZXTg6Y32xAlLo)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 38 L 65.027 38 C 62.487 38 60.429 40.059 60.429 44.053 L 60.429 210.857 C 60.429 211.941 62.487 214 65.027 214 L 190.973 214 C 193.513 214 195.571 211.941 195.571 210.857 L 195.571 78.788 C 195.571 76.601 195.279 75.897 194.764 75.378 L 158.193 38.808 C 157.675 38.292 156.971 38 156.239 38 Z " fill="rgb(233,233,224)"/><path d=" M 190.973 214 L 65.027 214 C 62.487 214 60.429 211.941 60.429 209.402 L 60.429 160.571 L 195.571 160.571 L 195.571 209.402 C 195.571 211.941 193.513 214 190.973 214 Z " fill="rgb(62,71,83)"/><path d=" M 157.857 38.475 L 157.857 75.714 L 195.097 75.714 L 157.857 38.475 Z " fill="rgb(217,215,202)"/></g></g><path d=" M 114.643 173.887 L 114.643 178.87 L 105.496 178.87 L 105.496 203.746 L 99.344 203.746 L 99.344 178.87 L 90.32 178.87 L 90.32 173.887 L 114.643 173.887 L 114.643 173.887 Z M 140.626 173.887 L 140.626 178.87 L 131.479 178.87 L 131.479 203.746 L 125.327 203.746 L 125.327 178.87 L 116.304 178.87 L 116.304 173.887 L 140.626 173.887 L 140.626 173.887 Z M 162.098 186.581 L 162.098 191.544 L 150.285 191.544 L 150.285 203.746 L 144.133 203.746 L 144.133 173.887 L 163.574 173.887 L 163.574 178.87 L 150.285 178.87 L 150.285 186.581 L 162.098 186.581 L 162.098 186.581 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/><path d=" M 119.3 138.07 L 115.626 127.158 L 96.495 127.158 L 92.857 138.07 L 81.255 138.07 L 100.968 85.112 L 111.08 85.112 L 130.903 138.07 L 119.3 138.07 L 119.3 138.07 Z M 106.024 98.497 L 99.441 118.32 L 112.68 118.32 L 106.024 98.497 L 106.024 98.497 Z M 168.585 138.07 L 157.964 138.07 L 157.964 138.07 Q 157.236 136.651 156.909 134.542 L 156.909 134.542 L 156.909 134.542 Q 153.09 138.797 146.979 138.797 L 146.979 138.797 L 146.979 138.797 Q 141.196 138.797 137.395 135.451 L 137.395 135.451 L 137.395 135.451 Q 133.594 132.105 133.594 127.013 L 133.594 127.013 L 133.594 127.013 Q 133.594 120.757 138.232 117.411 L 138.232 117.411 L 138.232 117.411 Q 142.869 114.064 151.635 114.028 L 151.635 114.028 L 156.473 114.028 L 156.473 111.773 L 156.473 111.773 Q 156.473 109.045 155.072 107.408 L 155.072 107.408 L 155.072 107.408 Q 153.672 105.771 150.653 105.771 L 150.653 105.771 L 150.653 105.771 Q 147.998 105.771 146.488 107.044 L 146.488 107.044 L 146.488 107.044 Q 144.979 108.317 144.979 110.536 L 144.979 110.536 L 134.467 110.536 L 134.467 110.536 Q 134.467 107.117 136.577 104.207 L 136.577 104.207 L 136.577 104.207 Q 138.687 101.298 142.542 99.643 L 142.542 99.643 L 142.542 99.643 Q 146.397 97.988 151.199 97.988 L 151.199 97.988 L 151.199 97.988 Q 158.473 97.988 162.747 101.643 L 162.747 101.643 L 162.747 101.643 Q 167.021 105.299 167.021 111.918 L 167.021 111.918 L 167.021 128.977 L 167.021 128.977 Q 167.057 134.578 168.585 137.452 L 168.585 137.452 L 168.585 138.07 L 168.585 138.07 Z M 149.271 130.759 L 149.271 130.759 L 149.271 130.759 Q 151.599 130.759 153.563 129.723 L 153.563 129.723 L 153.563 129.723 Q 155.527 128.686 156.473 126.94 L 156.473 126.94 L 156.473 120.175 L 152.544 120.175 L 152.544 120.175 Q 144.652 120.175 144.142 125.631 L 144.142 125.631 L 144.106 126.249 L 144.106 126.249 Q 144.106 128.213 145.488 129.486 L 145.488 129.486 L 145.488 129.486 Q 146.87 130.759 149.271 130.759 Z " fill-rule="evenodd" fill="rgb(200,189,184)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_txt.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_txt.svg new file mode 100644 index 000000000..430fa4069 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_txt.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_L14fLo1HCu5B3xjBZXBWsGxoWmUc9V9L"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_L14fLo1HCu5B3xjBZXBWsGxoWmUc9V9L)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(149,165,165)"/><path d=" M 98.143 80.857 L 79.286 80.857 C 77.548 80.857 76.143 79.449 76.143 77.714 C 76.143 75.979 77.548 74.571 79.286 74.571 L 98.143 74.571 C 99.881 74.571 101.286 75.979 101.286 77.714 C 101.286 79.449 99.881 80.857 98.143 80.857 Z " fill="rgb(200,189,184)"/><path d=" M 107.571 96.571 L 79.286 96.571 C 77.548 96.571 76.143 95.163 76.143 93.429 C 76.143 91.694 77.548 90.286 79.286 90.286 L 107.571 90.286 C 109.309 90.286 110.714 91.694 110.714 93.429 C 110.714 95.163 109.309 96.571 107.571 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 120.143 96.571 C 119.326 96.571 118.505 96.226 117.911 95.66 C 117.343 95.063 117 94.277 117 93.429 C 117 92.58 117.343 91.794 117.943 91.197 C 119.074 90.034 121.211 90.034 122.374 91.197 C 122.94 91.794 123.286 92.611 123.286 93.429 C 123.286 94.246 122.94 95.063 122.374 95.66 C 121.777 96.226 120.96 96.571 120.143 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 157.857 96.571 L 132.714 96.571 C 130.976 96.571 129.571 95.163 129.571 93.429 C 129.571 91.694 130.976 90.286 132.714 90.286 L 157.857 90.286 C 159.595 90.286 161 91.694 161 93.429 C 161 95.163 159.595 96.571 157.857 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 79.286 143.714 C 78.469 143.714 77.648 143.369 77.054 142.803 C 76.485 142.206 76.143 141.389 76.143 140.571 C 76.143 139.754 76.485 138.937 77.054 138.34 C 78.217 137.177 80.354 137.177 81.517 138.371 C 82.083 138.937 82.429 139.754 82.429 140.571 C 82.429 141.389 82.083 142.206 81.517 142.803 C 80.92 143.369 80.103 143.714 79.286 143.714 Z " fill="rgb(200,189,184)"/><path d=" M 117 143.714 L 91.857 143.714 C 90.119 143.714 88.714 142.306 88.714 140.571 C 88.714 138.837 90.119 137.429 91.857 137.429 L 117 137.429 C 118.738 137.429 120.143 138.837 120.143 140.571 C 120.143 142.306 118.738 143.714 117 143.714 Z " fill="rgb(200,189,184)"/><path d=" M 176.714 96.571 L 170.429 96.571 C 168.691 96.571 167.286 95.163 167.286 93.429 C 167.286 91.694 168.691 90.286 170.429 90.286 L 176.714 90.286 C 178.452 90.286 179.857 91.694 179.857 93.429 C 179.857 95.163 178.452 96.571 176.714 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 148.429 112.286 L 79.286 112.286 C 77.548 112.286 76.143 110.878 76.143 109.143 C 76.143 107.408 77.548 106 79.286 106 L 148.429 106 C 150.167 106 151.571 107.408 151.571 109.143 C 151.571 110.878 150.167 112.286 148.429 112.286 Z " fill="rgb(200,189,184)"/><path d=" M 176.714 112.286 L 157.857 112.286 C 156.119 112.286 154.714 110.878 154.714 109.143 C 154.714 107.408 156.119 106 157.857 106 L 176.714 106 C 178.452 106 179.857 107.408 179.857 109.143 C 179.857 110.878 178.452 112.286 176.714 112.286 Z " fill="rgb(200,189,184)"/><path d=" M 91.857 128 L 79.286 128 C 77.548 128 76.143 126.592 76.143 124.857 C 76.143 123.122 77.548 121.714 79.286 121.714 L 91.857 121.714 C 93.595 121.714 95 123.122 95 124.857 C 95 126.592 93.595 128 91.857 128 Z " fill="rgb(200,189,184)"/><path d=" M 135.857 128 L 104.429 128 C 102.691 128 101.286 126.592 101.286 124.857 C 101.286 123.122 102.691 121.714 104.429 121.714 L 135.857 121.714 C 137.595 121.714 139 123.122 139 124.857 C 139 126.592 137.595 128 135.857 128 Z " fill="rgb(200,189,184)"/><path d=" M 176.714 128 L 148.429 128 C 146.691 128 145.286 126.592 145.286 124.857 C 145.286 123.122 146.691 121.714 148.429 121.714 L 176.714 121.714 C 178.452 121.714 179.857 123.122 179.857 124.857 C 179.857 126.592 178.452 128 176.714 128 Z " fill="rgb(200,189,184)"/></g></g><path d=" M 112.643 173.887 L 112.643 178.87 L 103.496 178.87 L 103.496 203.746 L 97.344 203.746 L 97.344 178.87 L 88.32 178.87 L 88.32 173.887 L 112.643 173.887 L 112.643 173.887 Z M 121.235 173.887 L 126.834 184.182 L 132.433 173.887 L 139.508 173.887 L 130.813 188.693 L 139.733 203.746 L 132.576 203.746 L 126.834 193.287 L 121.092 203.746 L 113.935 203.746 L 122.855 188.693 L 114.16 173.887 L 121.235 173.887 L 121.235 173.887 Z M 165.307 173.887 L 165.307 178.87 L 156.16 178.87 L 156.16 203.746 L 150.008 203.746 L 150.008 178.87 L 140.984 178.87 L 140.984 173.887 L 165.307 173.887 L 165.307 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_unkown.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_unkown.svg new file mode 100644 index 000000000..a615b128b --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_unkown.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_b8sthotZ8JIx2AXMqSnYr6m7vO1iCCBF"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_b8sthotZ8JIx2AXMqSnYr6m7vO1iCCBF)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(200,189,184)"/><circle vector-effect="non-scaling-stroke" cx="98.14285714285711" cy="187.71428571428572" r="9.42857142857143" fill="rgb(255,255,255)"/><circle vector-effect="non-scaling-stroke" cx="129.57142857142856" cy="187.71428571428572" r="9.428571428571438" fill="rgb(255,255,255)"/><circle vector-effect="non-scaling-stroke" cx="161" cy="187.71428571428572" r="9.428571428571445" fill="rgb(255,255,255)"/></g></g><g><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(200,189,184)"/><path d=" M 98.143 80.857 L 79.286 80.857 C 77.551 80.857 76.143 79.449 76.143 77.714 C 76.143 75.979 77.551 74.571 79.286 74.571 L 98.143 74.571 C 99.878 74.571 101.286 75.979 101.286 77.714 C 101.286 79.449 99.878 80.857 98.143 80.857 Z " fill="rgb(200,189,184)"/><path d=" M 107.571 96.571 L 79.286 96.571 C 77.551 96.571 76.143 95.163 76.143 93.429 C 76.143 91.694 77.551 90.286 79.286 90.286 L 107.571 90.286 C 109.306 90.286 110.714 91.694 110.714 93.429 C 110.714 95.163 109.306 96.571 107.571 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 120.143 96.571 C 119.326 96.571 118.509 96.226 117.911 95.66 C 117.346 95.063 117 94.246 117 93.429 C 117 92.611 117.346 91.794 117.911 91.197 C 119.074 90.034 121.211 90.034 122.374 91.197 C 122.94 91.794 123.286 92.611 123.286 93.429 C 123.286 94.246 122.94 95.063 122.374 95.66 C 121.777 96.226 120.96 96.571 120.143 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 157.857 96.571 L 132.714 96.571 C 130.979 96.571 129.571 95.163 129.571 93.429 C 129.571 91.694 130.979 90.286 132.714 90.286 L 157.857 90.286 C 159.592 90.286 161 91.694 161 93.429 C 161 95.163 159.592 96.571 157.857 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 79.286 143.714 C 78.469 143.714 77.651 143.369 77.054 142.803 C 76.489 142.206 76.143 141.389 76.143 140.571 C 76.143 139.754 76.489 138.937 77.054 138.34 C 78.217 137.177 80.354 137.177 81.517 138.34 C 82.083 138.937 82.429 139.723 82.429 140.571 C 82.429 141.389 82.083 142.206 81.517 142.803 C 80.92 143.369 80.103 143.714 79.286 143.714 Z " fill="rgb(200,189,184)"/><path d=" M 117 143.714 L 91.857 143.714 C 90.122 143.714 88.714 142.306 88.714 140.571 C 88.714 138.837 90.122 137.429 91.857 137.429 L 117 137.429 C 118.735 137.429 120.143 138.837 120.143 140.571 C 120.143 142.306 118.735 143.714 117 143.714 Z " fill="rgb(200,189,184)"/><path d=" M 176.714 96.571 L 170.429 96.571 C 168.694 96.571 167.286 95.163 167.286 93.429 C 167.286 91.694 168.694 90.286 170.429 90.286 L 176.714 90.286 C 178.449 90.286 179.857 91.694 179.857 93.429 C 179.857 95.163 178.449 96.571 176.714 96.571 Z " fill="rgb(200,189,184)"/><path d=" M 148.429 112.286 L 79.286 112.286 C 77.551 112.286 76.143 110.878 76.143 109.143 C 76.143 107.408 77.551 106 79.286 106 L 148.429 106 C 150.163 106 151.571 107.408 151.571 109.143 C 151.571 110.878 150.163 112.286 148.429 112.286 Z " fill="rgb(200,189,184)"/><path d=" M 176.714 112.286 L 157.857 112.286 C 156.122 112.286 154.714 110.878 154.714 109.143 C 154.714 107.408 156.122 106 157.857 106 L 176.714 106 C 178.449 106 179.857 107.408 179.857 109.143 C 179.857 110.878 178.449 112.286 176.714 112.286 Z " fill="rgb(200,189,184)"/><path d=" M 91.857 128 L 79.286 128 C 77.551 128 76.143 126.592 76.143 124.857 C 76.143 123.122 77.551 121.714 79.286 121.714 L 91.857 121.714 C 93.592 121.714 95 123.122 95 124.857 C 95 126.592 93.592 128 91.857 128 Z " fill="rgb(200,189,184)"/><path d=" M 135.857 128 L 104.429 128 C 102.694 128 101.286 126.592 101.286 124.857 C 101.286 123.122 102.694 121.714 104.429 121.714 L 135.857 121.714 C 137.592 121.714 139 123.122 139 124.857 C 139 126.592 137.592 128 135.857 128 Z " fill="rgb(200,189,184)"/><path d=" M 176.714 128 L 148.429 128 C 146.694 128 145.286 126.592 145.286 124.857 C 145.286 123.122 146.694 121.714 148.429 121.714 L 176.714 121.714 C 178.449 121.714 179.857 123.122 179.857 124.857 C 179.857 126.592 178.449 128 176.714 128 Z " fill="rgb(200,189,184)"/></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_wav.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_wav.svg new file mode 100644 index 000000000..236b7a840 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_wav.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_du1xcV6ZdOlXsL4g70pQmHhN6rSf9K41"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_du1xcV6ZdOlXsL4g70pQmHhN6rSf9K41)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(125,101,153)"/><path d=" M 152.106 87.099 C 150.324 84.597 148.02 82.249 144.852 79.71 C 132.551 69.87 129.901 59.982 129.571 58.533 L 129.571 55.714 C 129.571 53.976 128.167 52.571 126.429 52.571 C 124.691 52.571 123.286 53.976 123.286 55.714 L 123.286 58.857 L 123.286 85.128 L 123.286 113.581 L 111.638 113.581 C 99.438 113.581 91.857 119.744 91.857 129.663 C 91.857 140.556 98.897 147.596 109.79 147.596 C 120.699 147.596 129.571 138.723 129.571 127.815 L 129.571 91.757 L 130.508 92.52 C 131.577 93.576 133.214 94.783 135.288 96.307 C 142.573 101.679 154.774 110.661 151.707 120.8 C 151.615 121.108 151.571 121.413 151.571 121.714 C 151.571 123.066 152.445 124.31 153.803 124.722 C 154.108 124.813 154.413 124.857 154.714 124.857 C 156.066 124.857 157.31 123.983 157.722 122.626 C 162.835 105.733 156.396 93.114 152.106 87.099 Z M 123.286 127.815 C 123.286 135.257 117.233 141.31 109.79 141.31 C 102.389 141.31 98.143 137.064 98.143 129.663 C 98.143 121.567 105.481 119.866 111.638 119.866 L 123.286 119.866 L 123.286 127.815 Z M 139.016 91.254 C 137.221 89.927 135.669 88.787 134.707 87.856 L 129.571 83.645 L 129.571 72.73 C 132.171 76.419 135.816 80.533 140.923 84.619 C 143.62 86.781 145.55 88.73 146.986 90.748 C 149.236 93.9 151.483 98.099 152.605 103.25 C 148.435 98.19 142.913 94.123 139.016 91.254 Z " fill="rgb(200,189,184)"/></g></g><path d=" M 101.521 175.887 L 106.422 197.133 L 110.441 175.887 L 116.573 175.887 L 109.949 205.746 L 103.756 205.746 L 98.896 185.771 L 94.035 205.746 L 87.842 205.746 L 81.218 175.887 L 87.35 175.887 L 91.39 197.092 L 96.312 175.887 L 101.521 175.887 L 101.521 175.887 Z M 138.824 205.746 L 136.753 199.594 L 125.966 199.594 L 123.915 205.746 L 117.373 205.746 L 128.488 175.887 L 134.189 175.887 L 145.366 205.746 L 138.824 205.746 L 138.824 205.746 Z M 131.339 183.434 L 127.627 194.61 L 135.092 194.61 L 131.339 183.434 L 131.339 183.434 Z M 152.462 175.887 L 159.188 198.343 L 165.956 175.887 L 172.806 175.887 L 162.408 205.746 L 155.989 205.746 L 145.633 175.887 L 152.462 175.887 L 152.462 175.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_xls.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_xls.svg new file mode 100644 index 000000000..d9e9ef110 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_xls.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_uyWSUfWwo0VARl51EA8V6uIOxRAroJ7F"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_uyWSUfWwo0VARl51EA8V6uIOxRAroJ7F)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(145,205,160)"/><path d=" M 113.857 90.286 L 113.857 77.714 L 76.143 77.714 L 76.143 90.286 L 76.143 96.571 L 76.143 102.857 L 76.143 109.143 L 76.143 115.429 L 76.143 121.714 L 76.143 128 L 76.143 134.286 L 76.143 146.857 L 107.571 146.857 L 113.857 146.857 L 179.857 146.857 L 179.857 134.286 L 179.857 128 L 179.857 121.714 L 179.857 115.429 L 179.857 109.143 L 179.857 102.857 L 179.857 90.286 L 113.857 90.286 Z M 82.429 84 L 107.571 84 L 107.571 90.286 L 82.429 90.286 L 82.429 84 Z M 82.429 96.571 L 107.571 96.571 L 107.571 102.857 L 82.429 102.857 L 82.429 96.571 Z M 82.429 109.143 L 107.571 109.143 L 107.571 115.429 L 82.429 115.429 L 82.429 109.143 Z M 82.429 121.714 L 107.571 121.714 L 107.571 128 L 82.429 128 L 82.429 121.714 Z M 107.571 140.571 L 82.429 140.571 L 82.429 134.286 L 107.571 134.286 L 107.571 140.571 Z M 173.571 140.571 L 113.857 140.571 L 113.857 134.286 L 173.571 134.286 L 173.571 140.571 Z M 173.571 128 L 113.857 128 L 113.857 121.714 L 173.571 121.714 L 173.571 128 Z M 173.571 115.429 L 113.857 115.429 L 113.857 109.143 L 173.571 109.143 L 173.571 115.429 Z M 113.857 102.857 L 113.857 96.571 L 173.571 96.571 L 173.571 102.857 L 113.857 102.857 Z " fill="rgb(200,189,184)"/></g></g><path d=" M 96.752 173.887 L 102.351 184.182 L 107.949 173.887 L 115.024 173.887 L 106.329 188.693 L 115.25 203.746 L 108.093 203.746 L 102.351 193.287 L 96.608 203.746 L 89.451 203.746 L 98.372 188.693 L 89.677 173.887 L 96.752 173.887 L 96.752 173.887 Z M 124.499 173.887 L 124.499 198.804 L 137.563 198.804 L 137.563 203.746 L 118.347 203.746 L 118.347 173.887 L 124.499 173.887 L 124.499 173.887 Z M 156.573 195.912 L 156.573 195.912 L 156.573 195.912 Q 156.573 194.169 155.343 193.236 L 155.343 193.236 L 155.343 193.236 Q 154.112 192.303 150.913 191.267 L 150.913 191.267 L 150.913 191.267 Q 147.714 190.231 145.848 189.227 L 145.848 189.227 L 145.848 189.227 Q 140.762 186.479 140.762 181.823 L 140.762 181.823 L 140.762 181.823 Q 140.762 179.403 142.125 177.506 L 142.125 177.506 L 142.125 177.506 Q 143.489 175.609 146.042 174.543 L 146.042 174.543 L 146.042 174.543 Q 148.596 173.477 151.774 173.477 L 151.774 173.477 L 151.774 173.477 Q 154.974 173.477 157.476 174.635 L 157.476 174.635 L 157.476 174.635 Q 159.978 175.794 161.362 177.906 L 161.362 177.906 L 161.362 177.906 Q 162.746 180.019 162.746 182.705 L 162.746 182.705 L 156.594 182.705 L 156.594 182.705 Q 156.594 180.654 155.302 179.516 L 155.302 179.516 L 155.302 179.516 Q 154.01 178.378 151.672 178.378 L 151.672 178.378 L 151.672 178.378 Q 149.416 178.378 148.165 179.332 L 148.165 179.332 L 148.165 179.332 Q 146.914 180.285 146.914 181.844 L 146.914 181.844 L 146.914 181.844 Q 146.914 183.3 148.38 184.284 L 148.38 184.284 L 148.38 184.284 Q 149.847 185.269 152.697 186.13 L 152.697 186.13 L 152.697 186.13 Q 157.947 187.709 160.347 190.047 L 160.347 190.047 L 160.347 190.047 Q 162.746 192.385 162.746 195.871 L 162.746 195.871 L 162.746 195.871 Q 162.746 199.747 159.813 201.952 L 159.813 201.952 L 159.813 201.952 Q 156.881 204.156 151.918 204.156 L 151.918 204.156 L 151.918 204.156 Q 148.473 204.156 145.643 202.895 L 145.643 202.895 L 145.643 202.895 Q 142.813 201.634 141.326 199.439 L 141.326 199.439 L 141.326 199.439 Q 139.839 197.245 139.839 194.354 L 139.839 194.354 L 146.012 194.354 L 146.012 194.354 Q 146.012 199.296 151.918 199.296 L 151.918 199.296 L 151.918 199.296 Q 154.112 199.296 155.343 198.404 L 155.343 198.404 L 155.343 198.404 Q 156.573 197.512 156.573 195.912 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_xlsx.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_xlsx.svg new file mode 100644 index 000000000..3322694fc --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_xlsx.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_vwHEqKI3FqYqYkvRHBJcExhN57Dukdq9"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_vwHEqKI3FqYqYkvRHBJcExhN57Dukdq9)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(145,205,160)"/><path d=" M 113.857 90.286 L 113.857 77.714 L 76.143 77.714 L 76.143 90.286 L 76.143 96.571 L 76.143 102.857 L 76.143 109.143 L 76.143 115.429 L 76.143 121.714 L 76.143 128 L 76.143 134.286 L 76.143 146.857 L 107.571 146.857 L 113.857 146.857 L 179.857 146.857 L 179.857 134.286 L 179.857 128 L 179.857 121.714 L 179.857 115.429 L 179.857 109.143 L 179.857 102.857 L 179.857 90.286 L 113.857 90.286 Z M 82.429 84 L 107.571 84 L 107.571 90.286 L 82.429 90.286 L 82.429 84 Z M 82.429 96.571 L 107.571 96.571 L 107.571 102.857 L 82.429 102.857 L 82.429 96.571 Z M 82.429 109.143 L 107.571 109.143 L 107.571 115.429 L 82.429 115.429 L 82.429 109.143 Z M 82.429 121.714 L 107.571 121.714 L 107.571 128 L 82.429 128 L 82.429 121.714 Z M 107.571 140.571 L 82.429 140.571 L 82.429 134.286 L 107.571 134.286 L 107.571 140.571 Z M 173.571 140.571 L 113.857 140.571 L 113.857 134.286 L 173.571 134.286 L 173.571 140.571 Z M 173.571 128 L 113.857 128 L 113.857 121.714 L 173.571 121.714 L 173.571 128 Z M 173.571 115.429 L 113.857 115.429 L 113.857 109.143 L 173.571 109.143 L 173.571 115.429 Z M 113.857 102.857 L 113.857 96.571 L 173.571 96.571 L 173.571 102.857 L 113.857 102.857 Z " fill="rgb(200,189,184)"/></g></g><path d=" M 83.752 174.105 L 89.351 184.4 L 94.949 174.105 L 102.024 174.105 L 93.329 188.912 L 102.25 203.965 L 95.093 203.965 L 89.351 193.506 L 83.608 203.965 L 76.451 203.965 L 85.372 188.912 L 76.677 174.105 L 83.752 174.105 L 83.752 174.105 Z M 111.499 174.105 L 111.499 199.022 L 124.562 199.022 L 124.562 203.965 L 105.347 203.965 L 105.347 174.105 L 111.499 174.105 L 111.499 174.105 Z M 143.573 196.131 L 143.573 196.131 L 143.573 196.131 Q 143.573 194.388 142.343 193.455 L 142.343 193.455 L 142.343 193.455 Q 141.112 192.521 137.913 191.486 L 137.913 191.486 L 137.913 191.486 Q 134.714 190.45 132.848 189.445 L 132.848 189.445 L 132.848 189.445 Q 127.762 186.697 127.762 182.042 L 127.762 182.042 L 127.762 182.042 Q 127.762 179.622 129.125 177.725 L 129.125 177.725 L 129.125 177.725 Q 130.489 175.828 133.042 174.762 L 133.042 174.762 L 133.042 174.762 Q 135.596 173.695 138.774 173.695 L 138.774 173.695 L 138.774 173.695 Q 141.974 173.695 144.476 174.854 L 144.476 174.854 L 144.476 174.854 Q 146.978 176.013 148.362 178.125 L 148.362 178.125 L 148.362 178.125 Q 149.746 180.237 149.746 182.924 L 149.746 182.924 L 143.594 182.924 L 143.594 182.924 Q 143.594 180.873 142.302 179.735 L 142.302 179.735 L 142.302 179.735 Q 141.01 178.597 138.672 178.597 L 138.672 178.597 L 138.672 178.597 Q 136.416 178.597 135.165 179.55 L 135.165 179.55 L 135.165 179.55 Q 133.914 180.504 133.914 182.063 L 133.914 182.063 L 133.914 182.063 Q 133.914 183.519 135.38 184.503 L 135.38 184.503 L 135.38 184.503 Q 136.847 185.487 139.697 186.349 L 139.697 186.349 L 139.697 186.349 Q 144.947 187.928 147.347 190.266 L 147.347 190.266 L 147.347 190.266 Q 149.746 192.604 149.746 196.09 L 149.746 196.09 L 149.746 196.09 Q 149.746 199.966 146.813 202.17 L 146.813 202.17 L 146.813 202.17 Q 143.881 204.375 138.918 204.375 L 138.918 204.375 L 138.918 204.375 Q 135.473 204.375 132.643 203.114 L 132.643 203.114 L 132.643 203.114 Q 129.812 201.853 128.326 199.658 L 128.326 199.658 L 128.326 199.658 Q 126.839 197.464 126.839 194.572 L 126.839 194.572 L 133.012 194.572 L 133.012 194.572 Q 133.012 199.515 138.918 199.515 L 138.918 199.515 L 138.918 199.515 Q 141.112 199.515 142.343 198.623 L 142.343 198.623 L 142.343 198.623 Q 143.573 197.73 143.573 196.131 Z M 158.995 174.105 L 164.594 184.4 L 170.192 174.105 L 177.268 174.105 L 168.572 188.912 L 177.493 203.965 L 170.336 203.965 L 164.594 193.506 L 158.852 203.965 L 151.694 203.965 L 160.615 188.912 L 151.92 174.105 L 158.995 174.105 L 158.995 174.105 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_xml.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_xml.svg new file mode 100644 index 000000000..116dc43cd --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_xml.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_EoUQMOFyg3AuOaNPUjcykHXumrSwFkTq"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_EoUQMOFyg3AuOaNPUjcykHXumrSwFkTq)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(242,156,31)"/><path d=" M 88.714 115.429 C 87.91 115.429 87.105 115.121 86.492 114.508 C 85.263 113.279 85.263 111.293 86.492 110.064 L 105.349 91.207 C 106.578 89.978 108.565 89.978 109.793 91.207 C 111.022 92.435 111.022 94.422 109.793 95.651 L 90.936 114.508 C 90.323 115.121 89.519 115.429 88.714 115.429 Z " fill="rgb(242,156,31)"/><path d=" M 107.571 134.286 C 106.767 134.286 105.962 133.978 105.349 133.365 L 86.492 114.508 C 85.263 113.279 85.263 111.293 86.492 110.064 C 87.721 108.835 89.707 108.835 90.936 110.064 L 109.793 128.921 C 111.022 130.15 111.022 132.136 109.793 133.365 C 109.181 133.978 108.376 134.286 107.571 134.286 Z " fill="rgb(242,156,31)"/><path d=" M 145.286 134.286 C 144.481 134.286 143.677 133.978 143.064 133.365 C 141.835 132.136 141.835 130.15 143.064 128.921 L 161.921 110.064 C 163.15 108.835 165.136 108.835 166.365 110.064 C 167.594 111.293 167.594 113.279 166.365 114.508 L 147.508 133.365 C 146.895 133.978 146.09 134.286 145.286 134.286 Z " fill="rgb(242,156,31)"/><path d=" M 164.143 115.429 C 163.338 115.429 162.534 115.121 161.921 114.508 L 143.064 95.651 C 141.835 94.422 141.835 92.435 143.064 91.207 C 144.293 89.978 146.279 89.978 147.508 91.207 L 166.365 110.064 C 167.594 111.293 167.594 113.279 166.365 114.508 C 165.752 115.121 164.947 115.429 164.143 115.429 Z " fill="rgb(242,156,31)"/><path d=" M 117 140.571 C 116.654 140.571 116.299 140.512 115.953 140.389 C 114.316 139.811 113.458 138.016 114.036 136.379 L 132.893 82.95 C 133.475 81.313 135.26 80.452 136.904 81.033 C 138.541 81.611 139.399 83.406 138.821 85.043 L 119.964 138.472 C 119.508 139.767 118.295 140.571 117 140.571 Z " fill="rgb(242,156,31)"/></g></g><path d=" M 91.252 173.887 L 96.851 184.182 L 102.449 173.887 L 109.524 173.887 L 100.829 188.693 L 109.75 203.746 L 102.593 203.746 L 96.851 193.287 L 91.108 203.746 L 83.951 203.746 L 92.872 188.693 L 84.177 173.887 L 91.252 173.887 L 91.252 173.887 Z M 112.847 173.887 L 120.886 173.887 L 128.556 195.543 L 136.185 173.887 L 144.265 173.887 L 144.265 203.746 L 138.092 203.746 L 138.092 195.584 L 138.707 181.495 L 130.647 203.746 L 126.423 203.746 L 118.384 181.516 L 118.999 195.584 L 118.999 203.746 L 112.847 203.746 L 112.847 173.887 L 112.847 173.887 Z M 155.79 173.887 L 155.79 198.804 L 168.854 198.804 L 168.854 203.746 L 149.638 203.746 L 149.638 173.887 L 155.79 173.887 L 155.79 173.887 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/file_zip.svg b/odex-event/muk_dms/static/src/img/thumbnails/file_zip.svg new file mode 100644 index 000000000..c99b0f98c --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/file_zip.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_gbMfy3cEtTHqV2jPZnkys9sHeVaJVEL6"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_gbMfy3cEtTHqV2jPZnkys9sHeVaJVEL6)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><g><path d=" M 156.239 40 L 65.027 40 C 62.487 40 60.429 42.059 60.429 46.053 L 60.429 212.857 C 60.429 213.941 62.487 216 65.027 216 L 190.973 216 C 193.513 216 195.571 213.941 195.571 212.857 L 195.571 80.788 C 195.571 78.601 195.279 77.897 194.764 77.378 L 158.193 40.808 C 157.675 40.292 156.971 40 156.239 40 Z " fill="rgb(233,233,224)"/><path d=" M 157.857 40.475 L 157.857 77.714 L 195.097 77.714 L 157.857 40.475 Z " fill="rgb(217,215,202)"/><path d=" M 190.973 216 L 65.027 216 C 62.487 216 60.429 213.941 60.429 211.402 L 60.429 162.571 L 195.571 162.571 L 195.571 211.402 C 195.571 213.941 193.513 216 190.973 216 Z " fill="rgb(85,96,128)"/><g><path d=" M 129.571 115.429 L 129.571 109.143 L 135.857 109.143 L 135.857 102.857 L 129.571 102.857 L 129.571 96.571 L 135.857 96.571 L 135.857 90.286 L 129.571 90.286 L 129.571 84 L 135.857 84 L 135.857 77.714 L 129.571 77.714 L 129.571 71.429 L 135.857 71.429 L 135.857 65.143 L 129.571 65.143 L 129.571 58.857 L 123.286 58.857 L 123.286 65.143 L 117 65.143 L 117 71.429 L 123.286 71.429 L 123.286 77.714 L 117 77.714 L 117 84 L 123.286 84 L 123.286 90.286 L 117 90.286 L 117 96.571 L 123.286 96.571 L 123.286 102.857 L 117 102.857 L 117 109.143 L 123.286 109.143 L 123.286 115.429 L 110.714 115.429 L 110.714 131.143 C 110.714 139.808 117.764 146.857 126.429 146.857 C 135.093 146.857 142.143 139.808 142.143 131.143 L 142.143 115.429 L 129.571 115.429 Z M 135.857 131.143 C 135.857 136.341 131.627 140.571 126.429 140.571 C 121.23 140.571 117 136.341 117 131.143 L 117 121.714 L 135.857 121.714 L 135.857 131.143 Z " fill="rgb(200,189,184)"/><path d=" M 123.286 134.286 L 129.571 134.286 C 131.306 134.286 132.714 132.881 132.714 131.143 C 132.714 129.405 131.306 128 129.571 128 L 123.286 128 C 121.551 128 120.143 129.405 120.143 131.143 C 120.143 132.881 121.551 134.286 123.286 134.286 Z " fill="rgb(200,189,184)"/></g></g></g><path d=" M 118.412 177.414 L 103.688 198.804 L 118.74 198.804 L 118.74 203.746 L 95.997 203.746 L 95.997 200.137 L 110.763 178.87 L 96.018 178.87 L 96.018 173.887 L 118.412 173.887 L 118.412 177.414 L 118.412 177.414 Z M 129.158 173.887 L 129.158 203.746 L 123.006 203.746 L 123.006 173.887 L 129.158 173.887 L 129.158 173.887 Z M 146.405 193.226 L 141.012 193.226 L 141.012 203.746 L 134.859 203.746 L 134.859 173.887 L 146.508 173.887 L 146.508 173.887 Q 149.871 173.887 152.424 175.117 L 152.424 175.117 L 152.424 175.117 Q 154.978 176.348 156.352 178.614 L 156.352 178.614 L 156.352 178.614 Q 157.726 180.88 157.726 183.771 L 157.726 183.771 L 157.726 183.771 Q 157.726 188.16 154.721 190.693 L 154.721 190.693 L 154.721 190.693 Q 151.717 193.226 146.405 193.226 L 146.405 193.226 L 146.405 193.226 Z M 141.012 178.87 L 141.012 188.242 L 146.508 188.242 L 146.508 188.242 Q 148.948 188.242 150.23 187.094 L 150.23 187.094 L 150.23 187.094 Q 151.512 185.945 151.512 183.813 L 151.512 183.813 L 151.512 183.813 Q 151.512 181.618 150.22 180.265 L 150.22 180.265 L 150.22 180.265 Q 148.928 178.911 146.651 178.87 L 146.651 178.87 L 141.012 178.87 L 141.012 178.87 Z " fill-rule="evenodd" fill="rgb(255,255,255)"/></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/img/thumbnails/folder.svg b/odex-event/muk_dms/static/src/img/thumbnails/folder.svg new file mode 100644 index 000000000..dfc3cf522 --- /dev/null +++ b/odex-event/muk_dms/static/src/img/thumbnails/folder.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 256 256" width="256" height="256"><defs><clipPath id="_clipPath_ut9G7pZ3aUUdXAsqWnhyy4A56QEzApnR"><rect width="256" height="256"/></clipPath></defs><g clip-path="url(#_clipPath_ut9G7pZ3aUUdXAsqWnhyy4A56QEzApnR)"><rect width="256" height="256" style="fill:rgb(0,0,0)" fill-opacity="0"/><g><path d=" M 111.348 64.839 L 105.606 50.484 L 39 50.484 L 39 65.126 L 39 95.271 L 39 171.065 L 217 171.065 L 217 64.839 L 111.348 64.839 Z " fill="rgb(165,84,4)"/><path d=" M 217 171.065 L 217 64.839 L 111.348 64.839 L 105.606 50.484 L 39 50.484 L 39 64.839" fill="rgb(132,64,2)"/><rect x="50.484" y="76.323" width="155.032" height="103.355" transform="matrix(1,0,0,1,0,0)" fill="rgb(255,255,255)"/><path d=" M 50.484 76.323 L 205.516 76.323 L 205.516 179.677" fill="rgb(218,230,234)"/><rect x="39" y="102.161" width="178" height="103.355" transform="matrix(1,0,0,1,0,0)" fill="rgb(249,141,43)"/><path d=" M 39 102.161 L 217 102.161 L 217 205.516" fill="rgb(226,130,26)"/><circle vector-effect="non-scaling-stroke" cx="184.55806451612906" cy="165.89677419354842" r="19.809677419354813" fill="rgb(13,110,140)"/><path d=" M 198.626 152.116 C 206.377 159.868 206.377 172.213 198.626 179.965 C 190.874 187.716 178.529 187.716 170.777 179.965" fill="rgb(7,126,158)"/></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/js/views/directory/form/directory_form_controller.js b/odex-event/muk_dms/static/src/js/views/directory/form/directory_form_controller.js new file mode 100644 index 000000000..a838734ad --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/directory/form/directory_form_controller.js @@ -0,0 +1,60 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.DirectoryFormController', function (require) { +"use strict"; + +var core = require('web.core'); +var ajax = require('web.ajax'); +var session = require('web.session'); + +var FormController = require('web.FormController'); + +var _t = core._t; +var QWeb = core.qweb; + +var DirectoryFormController = FormController.extend({ + createRecord: function (parentID) { + var record = this.model.get(this.handle, {raw: true}); + var context = _.extend({}, record.getContext(), { + default_parent_directory: record.data.id, + }); + return this.model.load({ + context: context, + fields: record.fields, + fieldsInfo: record.fieldsInfo, + modelName: this.modelName, + parentID: parentID, + res_ids: record.res_ids, + type: 'record', + viewType: 'form', + }).then(function (handle) { + this.handle = handle; + this._updateEnv(); + return this._setMode('edit'); + }.bind(this)); + }, +}); + +return DirectoryFormController; + +}); diff --git a/odex-event/muk_dms/static/src/js/views/directory/form/directory_form_view.js b/odex-event/muk_dms/static/src/js/views/directory/form/directory_form_view.js new file mode 100644 index 000000000..ef5af1785 --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/directory/form/directory_form_view.js @@ -0,0 +1,46 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.DirectoryFormView', function (require) { +"use strict"; + +var core = require('web.core'); +var registry = require('web.view_registry'); + +var FormView = require('web.FormView'); + +var DirectoryFormController = require('muk_dms.DirectoryFormController'); + +var _t = core._t; +var QWeb = core.qweb; + +var DirectoryFormView = FormView.extend({ + config: _.extend({}, FormView.prototype.config, { + Controller: DirectoryFormController, + }), +}); + +registry.add('directory_form', DirectoryFormView); + +return DirectoryFormView; + +}); diff --git a/odex-event/muk_dms/static/src/js/views/file/form/file_form_controller.js b/odex-event/muk_dms/static/src/js/views/file/form/file_form_controller.js new file mode 100644 index 000000000..842eb393d --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/file/form/file_form_controller.js @@ -0,0 +1,60 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.FileFormController', function (require) { +"use strict"; + +var core = require('web.core'); +var ajax = require('web.ajax'); +var session = require('web.session'); + +var FormController = require('web.FormController'); + +var _t = core._t; +var QWeb = core.qweb; + +var FileFormController = FormController.extend({ + createRecord: function (parentID) { + var record = this.model.get(this.handle, {raw: true}); + var context = _.extend({}, record.getContext(), { + default_directory: record.data.directory, + }); + return this.model.load({ + context: context, + fields: record.fields, + fieldsInfo: record.fieldsInfo, + modelName: this.modelName, + parentID: parentID, + res_ids: record.res_ids, + type: 'record', + viewType: 'form', + }).then(function (handle) { + this.handle = handle; + this._updateEnv(); + return this._setMode('edit'); + }.bind(this)); + }, +}); + +return FileFormController; + +}); diff --git a/odex-event/muk_dms/static/src/js/views/file/form/file_form_view.js b/odex-event/muk_dms/static/src/js/views/file/form/file_form_view.js new file mode 100644 index 000000000..49b26e281 --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/file/form/file_form_view.js @@ -0,0 +1,46 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.FileFormView', function (require) { +"use strict"; + +var core = require('web.core'); +var registry = require('web.view_registry'); + +var FormView = require('web.FormView'); + +var FileFormController = require('muk_dms.FileFormController'); + +var _t = core._t; +var QWeb = core.qweb; + +var FileFormView = FormView.extend({ + config: _.extend({}, FormView.prototype.config, { + Controller: FileFormController, + }), +}); + +registry.add('file_form', FileFormView); + +return FileFormView; + +}); diff --git a/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js new file mode 100644 index 000000000..8423d348a --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js @@ -0,0 +1,68 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.FileKanbanController', function (require) { +"use strict"; + +var core = require('web.core'); +var session = require('web.session'); + +var utils = require('muk_web_utils.files'); +var async = require('muk_web_utils.async'); + +var Domain = require('web.Domain'); +var KanbanController = require('web.KanbanController'); + +var FileUpload = require('muk_dms_mixins.FileUpload'); + +var _t = core._t; +var QWeb = core.qweb; + +var FileKanbanController = KanbanController.extend(FileUpload, { + custom_events: _.extend({}, KanbanController.prototype.custom_events, { + upload_files: '_onUploadFiles', + }), + _getSelectedDirectory: function () { + var record = this.model.get(this.handle, {raw: true}); + var directoryID = this._searchPanel.getSelectedDirectory(); + var context = record.getContext(); + if (directoryID) { + return directoryID; + } else if (context.active_model === "muk_dms.directory") { + return context.active_id; + } + }, + _onUploadFiles: function(event) { + var directoryID = this._getSelectedDirectory(); + if (directoryID) { + utils.getFileTree(event.data.items, true).then( + this._uploadFiles.bind(this, directoryID) + ); + } else { + this.do_warn(_t("Upload Error"), _t("No Directory has been selected!")); + } + }, +}); + +return FileKanbanController; + +}); diff --git a/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_model.js b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_model.js new file mode 100644 index 000000000..ce4fcfe35 --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_model.js @@ -0,0 +1,41 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.FileKanbanModel', function (require) { +"use strict"; + +var core = require('web.core'); +var session = require('web.session'); + +var Domain = require('web.Domain'); +var KanbanModel = require('web.KanbanModel'); + +var _t = core._t; +var QWeb = core.qweb; + +var FileKanbanModel = KanbanModel.extend({ + +}); + +return FileKanbanModel; + +}); diff --git a/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_record.js b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_record.js new file mode 100644 index 000000000..db5edcad6 --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_record.js @@ -0,0 +1,41 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.FileKanbanRecord', function (require) { +"use strict"; + +var core = require('web.core'); +var ajax = require('web.ajax'); +var session = require('web.session'); + +var KanbanRecord = require('web.KanbanRecord'); + +var _t = core._t; +var QWeb = core.qweb; + +var FileKanbanRecord = KanbanRecord.extend({ + +}); + +return FileKanbanRecord; + +}); diff --git a/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_renderer.js b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_renderer.js new file mode 100644 index 000000000..00a07f42c --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_renderer.js @@ -0,0 +1,64 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.FileKanbanRenderer', function (require) { +"use strict"; + +var core = require('web.core'); +var config = require('web.config'); +var session = require('web.session'); + +var dropzone = require('muk_web_utils.dropzone'); + +var KanbanRenderer = require('web.KanbanRenderer'); +var FileKanbanRecord = require('muk_dms.FileKanbanRecord'); + +var _t = core._t; +var QWeb = core.qweb; + +var FileKanbanRenderer = KanbanRenderer.extend(dropzone.FileDropzoneMixin, { + config: _.extend({}, KanbanRenderer.prototype.config, { + KanbanRecord: FileKanbanRecord, + }), + start: function () { + var res = this._super.apply(this, arguments); + this._startDropzone(this.$el); + return res; + }, + destroy: function () { + var res = this._super.apply(this, arguments); + this._destroyDropzone(this.$el); + return res; + }, + _handleDrop: function(event) { + var dataTransfer = event.originalEvent.dataTransfer; + if (dataTransfer.items && dataTransfer.items.length > 0) { + this.trigger_up('upload_files', { + items: dataTransfer.items + }); + } + }, +}); + +return FileKanbanRenderer; + +}); diff --git a/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_searchpanel.js b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_searchpanel.js new file mode 100644 index 000000000..e9dcab191 --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_searchpanel.js @@ -0,0 +1,46 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.FileSearchPanel', function (require) { +"use strict"; + +var core = require('web.core'); +var ajax = require('web.ajax'); +var session = require('web.session'); + +var SearchPanel = require('web.SearchPanel'); + +var _t = core._t; +var QWeb = core.qweb; + +var FileSearchPanel = SearchPanel.extend({ + getSelectedDirectory: function () { + var category = _.findWhere(this.categories, { + fieldName: 'directory' + }); + return category.activeValueId; + }, +}); + +return FileSearchPanel; + +}); \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_view.js b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_view.js new file mode 100644 index 000000000..8c316c50a --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/file/kanban/file_kanban_view.js @@ -0,0 +1,52 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.FileKanbanView', function (require) { +"use strict"; + +var core = require('web.core'); +var registry = require('web.view_registry'); + +var KanbanView = require('web.KanbanView'); + +var FileKanbanModel = require('muk_dms.FileKanbanModel'); +var FileKanbanRenderer = require('muk_dms.FileKanbanRenderer'); +var FileKanbanController = require('muk_dms.FileKanbanController'); +var FileSearchPanel = require('muk_dms.FileSearchPanel'); + +var _t = core._t; +var QWeb = core.qweb; + +var FileKanbanView = KanbanView.extend({ + config: _.extend({}, KanbanView.prototype.config, { + Renderer: FileKanbanRenderer, + Controller: FileKanbanController, + Model: FileKanbanModel, + SearchPanel: FileSearchPanel, + }), +}); + +registry.add('file_kanban', FileKanbanView); + +return FileKanbanView; + +}); diff --git a/odex-event/muk_dms/static/src/js/views/file/list/file_list_controller.js b/odex-event/muk_dms/static/src/js/views/file/list/file_list_controller.js new file mode 100644 index 000000000..3371b4976 --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/file/list/file_list_controller.js @@ -0,0 +1,39 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.FileListController', function (require) { +"use strict"; + +var core = require('web.core'); +var ajax = require('web.ajax'); +var session = require('web.session'); + +var ListController = require('web.ListController'); + +var _t = core._t; +var QWeb = core.qweb; + +var FileListController = ListController.extend({}); + +return FileListController; + +}); diff --git a/odex-event/muk_dms/static/src/js/views/file/list/file_list_view.js b/odex-event/muk_dms/static/src/js/views/file/list/file_list_view.js new file mode 100644 index 000000000..d2ede3387 --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/file/list/file_list_view.js @@ -0,0 +1,46 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms.FileListView', function (require) { +"use strict"; + +var core = require('web.core'); +var registry = require('web.view_registry'); + +var ListView = require('web.ListView'); + +var FileListController = require('muk_dms.FileListController'); + +var _t = core._t; +var QWeb = core.qweb; + +var FileListView = ListView.extend({ + config: _.extend({}, ListView.prototype.config, { + Controller: FileListController, + }), +}); + +registry.add('file_list', FileListView); + +return FileListView; + +}); diff --git a/odex-event/muk_dms/static/src/js/views/mixins/file_upload.js b/odex-event/muk_dms/static/src/js/views/mixins/file_upload.js new file mode 100644 index 000000000..05382a8cf --- /dev/null +++ b/odex-event/muk_dms/static/src/js/views/mixins/file_upload.js @@ -0,0 +1,122 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_dms_mixins.FileUpload', function (require) { + +var core = require('web.core'); +var session = require('web.session'); + +var utils = require('muk_web_utils.files'); +var async = require('muk_web_utils.async'); + +var _t = core._t; +var QWeb = core.qweb; + +var FileUploadMixin = { + _uploadFile: function(file, directory) { + var def = $.Deferred(); + utils.readFile(file, function (upload) { + this._rpc({ + model: 'muk_dms.file', + method: 'create', + args: [{ + 'name': file.name, + 'directory': directory, + 'content': upload.target.result.split(',')[1], + }], + context: session.user_context + }).then(function (result) { + def.resolve(result); + }); + }.bind(this)); + return def; + }, + _createUploadDirectory: function(name, parent_id) { + return this._rpc({ + model: 'muk_dms.directory', + method: 'create', + args: [{ + 'name': name, + 'parent_directory': parent_id, + }], + context: session.user_context, + }); + }, + _createUploadNotification: function() { + return this.call('notification', 'notify', { + title: _t('Upload Files'), + message: _t('Uploading...'), + icon: 'fa-upload', + sticky: true, + progress: { + text: "0%", + state: 0.0, + }, + }); + }, + _updateUploadNotification: function(notification, progress) { + this.call('notification', 'progress', notification, { + text: (progress * 100).toFixed(2) + "%", + state: (progress * 100).toFixed(2), + }); + }, + _closeUploadNotification: function(notification) { + this.call('notification', 'close', notification); + }, + _uploadFiles: function(directory, tree) { + var progress = 0; + var notification = this._createUploadNotification(); + var upload = function(parent_id, item) { + var def = $.Deferred(); + if(item.isFile || item.isFileItem) { + this._uploadFile(item, parent_id).then(function(res) { + this._updateUploadNotification(notification, ++progress / tree.count); + def.resolve(res); + }.bind(this)); + } else if(item.isDirectory) { + this._createUploadDirectory(item.name, parent_id).then(function(id) { + async.syncLoop( + item.files, + upload.bind(this, id), + function(res) { + def.resolve(id); + } + ); + }.bind(this)); + } + return def; + }; + var finish = function() { + this._closeUploadNotification(notification); + this.reload(); + }; + async.syncLoop( + tree.files, + upload.bind(this, directory), + finish.bind(this), + ); + }, +}; + +return FileUploadMixin; + +}); diff --git a/odex-event/muk_dms/static/src/scss/directory_kanban.scss b/odex-event/muk_dms/static/src/scss/directory_kanban.scss new file mode 100644 index 000000000..9d16d1d76 --- /dev/null +++ b/odex-event/muk_dms/static/src/scss/directory_kanban.scss @@ -0,0 +1,103 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.mk_directory_kanban_view { + height: 100%; + .o_kanban_record { + padding: 0; + max-height: $o-kanban-image-width + 1; + .mk_directory_kanban_actions { + float: left; + border-right: solid 1px $gray-400; + .mk_directory_kanban_actions_wrapper { + min-height: $o-kanban-image-width; + .btn-outline-primary { + display: flex; + border-radius: 0; + align-items: center; + justify-content: center; + border-color: transparent; + min-width: $o-kanban-image-width / 2; + min-height: $o-kanban-image-width / 2; + &.mk_directory_kanban_directories { + border-bottom: solid 1px $gray-400; + } + } + } + } + .o_kanban_image { + width: $o-kanban-image-width + 1; + border-right: solid 1px $gray-400; + + div { + padding-left: $o-kanban-image-width + $o-kanban-inside-hgutter + $o-kanban-image-width / 2; + @include media-breakpoint-down(sm) { + padding-left: $o-kanban-image-width + $o-kanban-inside-hgutter-mobile + $o-kanban-image-width / 2; + } + } + } + .o_kanban_details .o_kanban_details_wrapper { + padding: 4px 4px 4px 0; + .o_kanban_record_title { + font-weight: bold; + padding-right: 16px; + } + .o_kanban_record_body { + max-height: 12px; + .o_kanban_tags { + @include o-text-overflow; + } + } + .oe_kanban_avatar { + margin-left: 0px; + } + .favorite_sign_button { + margin-top: 1px; + font-size: 1.5rem; + line-height: 20px; + margin-right: 6px; + } + } + .o_dropdown_kanban { + .dropdown-menu { + min-width: 22rem; + .mk_directory_kanban_views { + padding-right: 8px; + } + .mk_directory_kanban_actions { + padding-left: 8px; + border-right: none; + } + .fa { + min-width: 12px; + padding-right: 2px; + text-align: center; + } + .oe_kanban_colorpicker { + max-width: none; + margin: 5px 5px; + padding: 10px 0 0 25px; + border-top: 1px solid gray('300'); + } + } + } + } +} \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/scss/file_kanban.scss b/odex-event/muk_dms/static/src/scss/file_kanban.scss new file mode 100644 index 000000000..9f3b2879c --- /dev/null +++ b/odex-event/muk_dms/static/src/scss/file_kanban.scss @@ -0,0 +1,77 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.mk_file_kanban_view { + height: 100%; + .o_kanban_record { + padding: 0; + max-height: $o-kanban-image-width + 1; + .o_kanban_image { + width: $o-kanban-image-width + 1; + border-right: solid 1px $gray-400; + } + .o_kanban_details .o_kanban_details_wrapper { + padding: 4px 4px 4px 0; + .o_kanban_record_title { + font-weight: bold; + padding-right: 16px; + } + .o_kanban_record_body { + max-height: 12px; + .o_kanban_tags { + @include o-text-overflow; + } + } + .oe_kanban_avatar { + margin-left: 0px; + } + .mk_file_kanban_lock { + margin-top: 2px; + font-size: 1.2rem; + line-height: 20px; + margin-right: 6px; + } + } + .o_dropdown_kanban { + .dropdown-menu { + min-width: 22rem; + .mk_file_kanban_operations { + padding-right: 8px; + } + .mk_file_kanban_actions { + padding-left: 8px; + } + .fa { + min-width: 12px; + padding-right: 2px; + text-align: center; + } + .oe_kanban_colorpicker { + max-width: none; + margin: 5px 5px; + padding: 10px 0 0 25px; + border-top: 1px solid gray('300'); + } + } + } + } +} \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/scss/variables.scss b/odex-event/muk_dms/static/src/scss/variables.scss new file mode 100644 index 000000000..1f9ce7294 --- /dev/null +++ b/odex-event/muk_dms/static/src/scss/variables.scss @@ -0,0 +1,24 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Documents +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +$mk-file-kanban-sidebar-width: 200px; +$mk-file-kanban-sidebar-padding: 8px; \ No newline at end of file diff --git a/odex-event/muk_dms/static/src/xml/views.xml b/odex-event/muk_dms/static/src/xml/views.xml new file mode 100644 index 000000000..c518369a3 --- /dev/null +++ b/odex-event/muk_dms/static/src/xml/views.xml @@ -0,0 +1,121 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<templates xml:space="preserve"> + + <t t-name="muk_dms.FileSiebar"> + <div id="mk_file_kanban_sidebar" class="border-right"> + <div id="mk_file_kanban_sidebar_starred" class="mk_file_kanban_sidebar_section show"> + <div class="mk_file_kanban_sidebar_header text-uppercase"> + <a href="#mk_file_kanban_sidebar_starred"> + <i class="text-primary fa fa-star mr-1" /> + <b>Starred</b> + </a> + </div> + <div class="mb-1 mk_file_kanban_sidebar_list" /> + </div> + <div id="mk_file_kanban_sidebar_directories" class="d-none mk_file_kanban_sidebar_section"> + <div class="mk_file_kanban_sidebar_header text-uppercase"> + <a href="#mk_file_kanban_sidebar_directories"> + <i class="text-info fa fa-folder mr-1" /> + <b>Directories</b> + </a> + </div> + <div class="mb-1 mk_file_kanban_sidebar_list" /> + </div> + <div id="mk_file_kanban_sidebar_categories" class="mk_file_kanban_sidebar_section"> + <div class="mk_file_kanban_sidebar_header text-uppercase"> + <a href="#mk_file_kanban_sidebar_categories"> + <i class="text-success fa fa-th-list mr-1" /> + <b>Categories</b> + </a> + </div> + <div class="mb-1 mk_file_kanban_sidebar_list" /> + </div> + <div id="mk_file_kanban_sidebar_tags" class="mk_file_kanban_sidebar_section"> + <div class="mk_file_kanban_sidebar_header text-uppercase"> + <a href="#mk_file_kanban_sidebar_tags"> + <i class="text-warning fa fa-tag mr-1" /> + <b>Tags</b> + </a> + </div> + <div class="mb-1 mk_file_kanban_sidebar_list" /> + </div> + </div> + </t> + + <t t-name="muk_dms.FileSiebarStarred"> + <ul class="list-group d-block w-100"> + <t t-foreach="starred" t-as="directory"> + <li class="border-0 list-group-item list-group-item-action" t-att-data-id="directory.id"> + <t t-esc="directory.name"/> + </li> + </t> + </ul> + </t> + + <t t-name="muk_dms.FileSiebarDirectories"> + <ul class="list-group d-block w-100"> + <t t-foreach="directories" t-as="directory"> + <li class="border-0 list-group-item list-group-item-action" t-att-data-id="directory.id"> + <i t-if="directory.count_directories > 0" class="pull-right fa fa-fw fa-caret-down"/> + <t t-esc="directory.name"/> + </li> + </t> + </ul> + </t> + + <t t-name="muk_dms.FileSiebarCategories"> + <ol class="list-group d-block"> + <t t-foreach="categories" t-as="category"> + <li class="border-0 list-group-item" t-att-data-id="category.id"> + <div class="custom-control custom-checkbox"> + <t t-set="checkboxID" t-value="_.uniqueId('category_')"/> + <input type="checkbox" t-att-name="checkboxID" t-att-id="checkboxID" class="custom-control-input"/> + <label t-att-for="checkboxID" class="custom-control-label d-block"> + <t t-esc="category.name"/> + </label> + </div> + </li> + </t> + </ol> + </t> + + <t t-name="muk_dms.FileSiebarTags"> + <ol class="list-group d-block"> + <t t-foreach="tags" t-as="tag"> + <li class="border-0 list-group-item" t-att-data-id="tag.id"> + <div class="custom-control custom-checkbox"> + <t t-set="checkboxID" t-value="_.uniqueId('tag_')"/> + <input type="checkbox" t-att-name="checkboxID" t-att-id="checkboxID" class="custom-control-input"/> + <label t-att-for="checkboxID" class="custom-control-label d-block"> + <t t-esc="tag.name"/> + </label> + </div> + </li> + </t> + </ol> + </t> + +</templates> \ No newline at end of file diff --git a/odex-event/muk_dms/template/assets.xml b/odex-event/muk_dms/template/assets.xml new file mode 100644 index 000000000..5fa959b4b --- /dev/null +++ b/odex-event/muk_dms/template/assets.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<template id="assets_backend" name="muk_dms_assets" inherit_id="web.assets_backend"> + <xpath expr="//link[last()]" position="after"> + <link rel="stylesheet" href="/muk_dms/static/src/scss/variables.scss" /> + <link rel="stylesheet" href="/muk_dms/static/src/scss/directory_kanban.scss" /> + <link rel="stylesheet" href="/muk_dms/static/src/scss/file_kanban.scss" /> + </xpath> + <xpath expr="//script[last()]" position="after"> + <script type="text/javascript" src="/muk_dms/static/src/js/views/mixins/file_upload.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/directory/form/directory_form_controller.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/directory/form/directory_form_view.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/file/form/file_form_controller.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/file/form/file_form_view.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/file/list/file_list_controller.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/file/list/file_list_view.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/file/kanban/file_kanban_model.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/file/kanban/file_kanban_record.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/file/kanban/file_kanban_searchpanel.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/file/kanban/file_kanban_controller.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/file/kanban/file_kanban_renderer.js" /> + <script type="text/javascript" src="/muk_dms/static/src/js/views/file/kanban/file_kanban_view.js" /> + + </xpath> +</template> + +</odoo> diff --git a/odex-event/muk_dms/template/onboarding.xml b/odex-event/muk_dms/template/onboarding.xml new file mode 100644 index 000000000..6846f3403 --- /dev/null +++ b/odex-event/muk_dms/template/onboarding.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<template id="onboarding_storage_step"> + <t t-call="base.onboarding_step"> + <t t-set="title">Storage</t> + <t t-set="description"> + Create a new Document Storage. + </t> + <t t-set="btn_text">Create Storage</t> + <t t-set="model" t-value="'res.company'" /> + <t t-set="method" t-value="'action_open_documents_onboarding_storage'" /> + <t t-set="state" t-value="state.get('documents_onboarding_storage_state')" /> + </t> +</template> + +<template id="onboarding_directory_step"> + <t t-call="base.onboarding_step"> + <t t-set="title">Directory</t> + <t t-set="description"> + Create a new Root Directory. + </t> + <t t-set="btn_text">Create Directory</t> + <t t-set="model" t-value="'res.company'" /> + <t t-set="method" t-value="'action_open_documents_onboarding_directory'" /> + <t t-set="state" t-value="state.get('documents_onboarding_directory_state')" /> + </t> +</template> + +<template id="onboarding_file_step"> + <t t-call="base.onboarding_step"> + <t t-set="title">File</t> + <t t-set="description"> + Upload your first File. + </t> + <t t-set="btn_text">Upload File</t> + <t t-set="model" t-value="'res.company'" /> + <t t-set="method" t-value="'action_open_documents_onboarding_file'" /> + <t t-set="state" t-value="state.get('documents_onboarding_file_state')" /> + </t> +</template> + +<template id="document_onboarding_directory_panel" name="document_onboarding_panel"> + <t t-call="base.onboarding_container"> + <t t-set="classes">o_onboarding_orange</t> + <t t-set="bg_image">/muk_dms/static/src/img/banner/documents_onboarding_directory.png</t> + <t t-set="close_method">action_close_documents_onboarding</t> + <t t-set="close_model">res.company</t> + <t t-set="text_completed">The configuration is done!</t> + <t t-call="muk_dms.onboarding_storage_step" name="documents_onboarding_storage_state" /> + <t t-call="muk_dms.onboarding_directory_step" name="documents_onboarding_directory_state" /> + <t t-call="muk_dms.onboarding_file_step" name="documents_onboarding_file_state" /> + </t> +</template> + +<template id="document_onboarding_file_panel" name="document_onboarding_panel"> + <t t-call="base.onboarding_container"> + <t t-set="classes">o_onboarding_blue</t> + <t t-set="bg_image">/muk_dms/static/src/img/banner/documents_onboarding_file.png</t> + <t t-set="close_method">action_close_documents_onboarding</t> + <t t-set="close_model">res.company</t> + <t t-set="text_completed">The configuration is done!</t> + <t t-call="muk_dms.onboarding_storage_step" name="documents_onboarding_storage_state" /> + <t t-call="muk_dms.onboarding_directory_step" name="documents_onboarding_directory_state" /> + <t t-call="muk_dms.onboarding_file_step" name="documents_onboarding_file_state" /> + </t> +</template> + +</odoo> + diff --git a/odex-event/muk_dms/tests/__init__.py b/odex-event/muk_dms/tests/__init__.py new file mode 100644 index 000000000..99a562f6d --- /dev/null +++ b/odex-event/muk_dms/tests/__init__.py @@ -0,0 +1,27 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import common +from . import test_storage +from . import test_directory +from . import test_file +from . import test_benchmark diff --git a/odex-event/muk_dms/tests/common.py b/odex-event/muk_dms/tests/common.py new file mode 100644 index 000000000..de17e7397 --- /dev/null +++ b/odex-event/muk_dms/tests/common.py @@ -0,0 +1,116 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import uuid +import base64 +import logging +import functools + +from odoo import SUPERUSER_ID +from odoo.tests import common +from odoo.tools import config, convert_file +from odoo.modules.module import get_resource_path +from odoo.modules.module import get_module_resource + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +#---------------------------------------------------------- +# Decorators +#---------------------------------------------------------- + +def setup_data_function(setup_func='_setup_test_data'): + def decorator(func): + @functools.wraps(func) + def wrapper(self, *args, **kwargs): + getattr(self, setup_func)() + return func(self, *args, **kwargs) + return wrapper + return decorator + +#---------------------------------------------------------- +# Test Cases +#---------------------------------------------------------- + +class DocumentsBaseCase(common.TransactionCase): + + def setUp(self): + super(DocumentsBaseCase, self).setUp() + self.super_uid = SUPERUSER_ID + self.admin_uid = self.browse_ref("base.user_admin").id + self.demo_uid = self.browse_ref("base.user_demo").id + self.storage = self.env['muk_dms.storage'] + self.directory = self.env['muk_dms.directory'] + self.file = self.env['muk_dms.file'] + self.category = self.env['muk_dms.category'] + self.tag = self.env['muk_dms.tag'] + + def _setup_test_data(self): + self.storage = self.storage.sudo(self.env.uid) + self.directory = self.directory.sudo(self.env.uid) + self.file = self.file.sudo(self.env.uid) + self.category = self.category.sudo(self.env.uid) + self.tag = self.tag.sudo(self.env.uid) + + def _load(self, module, *args): + convert_file(self.cr, 'muk_dms', get_module_resource(module, *args), + {}, 'init', False, 'test', self.registry._assertion_report) + + def multi_users(self, super=True, admin=True, demo=True): + return [[self.super_uid, super], [self.admin_uid, admin], [self.demo_uid, demo]] + + def content_base64(self): + return base64.b64encode(b"\xff data") + + def create_storage(self, save_type="database", sudo=False): + model = self.storage.sudo() if sudo else self.storage + return model.create({ + 'name': "Test Storage", + 'save_type': save_type, + }) + + def create_directory(self, storage=False, directory=False, sudo=False): + model = self.directory.sudo() if sudo else self.directory + if not storage and not directory: + storage = self.create_storage(sudo=sudo) + if directory: + return model.create({ + 'name': uuid.uuid4().hex, + 'is_root_directory': False, + 'parent_directory': directory.id, + }) + return model.create({ + 'name': uuid.uuid4().hex, + 'is_root_directory': True, + 'root_storage': storage.id, + }) + + def create_file(self, directory=False, content=False, storage=False, sudo=False): + model = self.file.sudo() if sudo else self.file + if not directory: + directory = self.create_directory(storage=storage, sudo=sudo) + return model.create({ + 'name': uuid.uuid4().hex, + 'directory': directory.id, + 'content': content or self.content_base64(), + }) \ No newline at end of file diff --git a/odex-event/muk_dms/tests/data/muk_dms.category.csv b/odex-event/muk_dms/tests/data/muk_dms.category.csv new file mode 100644 index 000000000..73bdf5d43 --- /dev/null +++ b/odex-event/muk_dms/tests/data/muk_dms.category.csv @@ -0,0 +1,51 @@ +id,name,parent_category/id +muk_dms.category_001_benchmark,C_001, +muk_dms.category_002_benchmark,C_002,muk_dms.category_001_benchmark +muk_dms.category_003_benchmark,C_003,muk_dms.category_002_benchmark +muk_dms.category_004_benchmark,C_004,muk_dms.category_001_benchmark +muk_dms.category_005_benchmark,C_005,muk_dms.category_002_benchmark +muk_dms.category_006_benchmark,C_006,muk_dms.category_003_benchmark +muk_dms.category_007_benchmark,C_007,muk_dms.category_005_benchmark +muk_dms.category_008_benchmark,C_008,muk_dms.category_002_benchmark +muk_dms.category_009_benchmark,C_009,muk_dms.category_006_benchmark +muk_dms.category_010_benchmark,C_010, +muk_dms.category_011_benchmark,C_011,muk_dms.category_001_benchmark +muk_dms.category_012_benchmark,C_012,muk_dms.category_007_benchmark +muk_dms.category_013_benchmark,C_013,muk_dms.category_009_benchmark +muk_dms.category_014_benchmark,C_014,muk_dms.category_013_benchmark +muk_dms.category_015_benchmark,C_015,muk_dms.category_005_benchmark +muk_dms.category_016_benchmark,C_016, +muk_dms.category_017_benchmark,C_017, +muk_dms.category_018_benchmark,C_018, +muk_dms.category_019_benchmark,C_019,muk_dms.category_002_benchmark +muk_dms.category_020_benchmark,C_020,muk_dms.category_013_benchmark +muk_dms.category_021_benchmark,C_021,muk_dms.category_008_benchmark +muk_dms.category_022_benchmark,C_022, +muk_dms.category_023_benchmark,C_023,muk_dms.category_021_benchmark +muk_dms.category_024_benchmark,C_024, +muk_dms.category_025_benchmark,C_025, +muk_dms.category_026_benchmark,C_026,muk_dms.category_016_benchmark +muk_dms.category_027_benchmark,C_027,muk_dms.category_015_benchmark +muk_dms.category_028_benchmark,C_028, +muk_dms.category_029_benchmark,C_029,muk_dms.category_010_benchmark +muk_dms.category_030_benchmark,C_030,muk_dms.category_021_benchmark +muk_dms.category_031_benchmark,C_031,muk_dms.category_003_benchmark +muk_dms.category_032_benchmark,C_032,muk_dms.category_017_benchmark +muk_dms.category_033_benchmark,C_033,muk_dms.category_030_benchmark +muk_dms.category_034_benchmark,C_034, +muk_dms.category_035_benchmark,C_035, +muk_dms.category_036_benchmark,C_036, +muk_dms.category_037_benchmark,C_037,muk_dms.category_011_benchmark +muk_dms.category_038_benchmark,C_038,muk_dms.category_010_benchmark +muk_dms.category_039_benchmark,C_039,muk_dms.category_013_benchmark +muk_dms.category_040_benchmark,C_040, +muk_dms.category_041_benchmark,C_041,muk_dms.category_034_benchmark +muk_dms.category_042_benchmark,C_042,muk_dms.category_023_benchmark +muk_dms.category_043_benchmark,C_043,muk_dms.category_015_benchmark +muk_dms.category_044_benchmark,C_044,muk_dms.category_041_benchmark +muk_dms.category_045_benchmark,C_045,muk_dms.category_039_benchmark +muk_dms.category_046_benchmark,C_046,muk_dms.category_021_benchmark +muk_dms.category_047_benchmark,C_047, +muk_dms.category_048_benchmark,C_048, +muk_dms.category_049_benchmark,C_049,muk_dms.category_042_benchmark +muk_dms.category_050_benchmark,C_050,muk_dms.category_034_benchmark diff --git a/odex-event/muk_dms/tests/data/muk_dms.directory.csv b/odex-event/muk_dms/tests/data/muk_dms.directory.csv new file mode 100644 index 000000000..0ace7a603 --- /dev/null +++ b/odex-event/muk_dms/tests/data/muk_dms.directory.csv @@ -0,0 +1,501 @@ +id,name,parent_directory/id,root_storage/id,is_root_directory,category/id,tags/id +muk_dms.directory_001_benchmark,D_0001,,muk_dms.storage_001_benchmark,TRUE,muk_dms.category_041_benchmark,muk_dms.tag_042_benchmark +muk_dms.directory_002_benchmark,D_0002,,muk_dms.storage_002_benchmark,TRUE,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark +muk_dms.directory_003_benchmark,D_0003,,muk_dms.storage_001_benchmark,TRUE,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark +muk_dms.directory_004_benchmark,D_0004,,muk_dms.storage_002_benchmark,TRUE,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark +muk_dms.directory_005_benchmark,D_0005,,muk_dms.storage_001_benchmark,TRUE,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark +muk_dms.directory_006_benchmark,D_0006,,muk_dms.storage_002_benchmark,TRUE,,muk_dms.tag_127_benchmark +muk_dms.directory_007_benchmark,D_0007,,muk_dms.storage_001_benchmark,TRUE,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark +muk_dms.directory_008_benchmark,D_0008,,muk_dms.storage_002_benchmark,TRUE,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark +muk_dms.directory_009_benchmark,D_0009,muk_dms.directory_008_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark +muk_dms.directory_010_benchmark,D_0010,muk_dms.directory_003_benchmark,,,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark +muk_dms.directory_011_benchmark,D_0011,muk_dms.directory_007_benchmark,,,,muk_dms.tag_130_benchmark +muk_dms.directory_012_benchmark,D_0012,muk_dms.directory_009_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark +muk_dms.directory_013_benchmark,D_0013,muk_dms.directory_010_benchmark,,,muk_dms.category_021_benchmark,muk_dms.tag_136_benchmark +muk_dms.directory_014_benchmark,D_0014,muk_dms.directory_013_benchmark,,,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark +muk_dms.directory_015_benchmark,D_0015,muk_dms.directory_008_benchmark,,,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark +muk_dms.directory_016_benchmark,D_0016,muk_dms.directory_010_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark +muk_dms.directory_017_benchmark,D_0017,muk_dms.directory_010_benchmark,,,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark +muk_dms.directory_018_benchmark,D_0018,muk_dms.directory_010_benchmark,,,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark +muk_dms.directory_019_benchmark,D_0019,muk_dms.directory_011_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark +muk_dms.directory_020_benchmark,D_0020,muk_dms.directory_010_benchmark,,,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark +muk_dms.directory_021_benchmark,D_0021,muk_dms.directory_003_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark +muk_dms.directory_022_benchmark,D_0022,muk_dms.directory_009_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark +muk_dms.directory_023_benchmark,D_0023,muk_dms.directory_016_benchmark,,,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark +muk_dms.directory_024_benchmark,D_0024,muk_dms.directory_016_benchmark,,,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark +muk_dms.directory_025_benchmark,D_0025,muk_dms.directory_014_benchmark,,,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark +muk_dms.directory_026_benchmark,D_0026,muk_dms.directory_014_benchmark,,,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark +muk_dms.directory_027_benchmark,D_0027,muk_dms.directory_008_benchmark,,,,muk_dms.tag_127_benchmark +muk_dms.directory_028_benchmark,D_0028,muk_dms.directory_018_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark +muk_dms.directory_029_benchmark,D_0029,muk_dms.directory_019_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark +muk_dms.directory_030_benchmark,D_0030,muk_dms.directory_001_benchmark,,,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark +muk_dms.directory_031_benchmark,D_0031,muk_dms.directory_008_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_072_benchmark +muk_dms.directory_032_benchmark,D_0032,muk_dms.directory_023_benchmark,,,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark +muk_dms.directory_033_benchmark,D_0033,muk_dms.directory_004_benchmark,,,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark +muk_dms.directory_034_benchmark,D_0034,muk_dms.directory_031_benchmark,,,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark +muk_dms.directory_035_benchmark,D_0035,muk_dms.directory_014_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark +muk_dms.directory_036_benchmark,D_0036,muk_dms.directory_016_benchmark,,,,muk_dms.tag_070_benchmark +muk_dms.directory_037_benchmark,D_0037,muk_dms.directory_029_benchmark,,,muk_dms.category_018_benchmark,muk_dms.tag_133_benchmark +muk_dms.directory_038_benchmark,D_0038,muk_dms.directory_036_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark +muk_dms.directory_039_benchmark,D_0039,muk_dms.directory_030_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_035_benchmark +muk_dms.directory_040_benchmark,D_0040,muk_dms.directory_008_benchmark,,,,muk_dms.tag_123_benchmark +muk_dms.directory_041_benchmark,D_0041,muk_dms.directory_004_benchmark,,,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark +muk_dms.directory_042_benchmark,D_0042,muk_dms.directory_012_benchmark,,,, +muk_dms.directory_043_benchmark,D_0043,muk_dms.directory_001_benchmark,,,,muk_dms.tag_108_benchmark +muk_dms.directory_044_benchmark,D_0044,muk_dms.directory_012_benchmark,,,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark +muk_dms.directory_045_benchmark,D_0045,muk_dms.directory_013_benchmark,,,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark +muk_dms.directory_046_benchmark,D_0046,muk_dms.directory_043_benchmark,,,,muk_dms.tag_013_benchmark +muk_dms.directory_047_benchmark,D_0047,muk_dms.directory_003_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark +muk_dms.directory_048_benchmark,D_0048,muk_dms.directory_018_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark +muk_dms.directory_049_benchmark,D_0049,muk_dms.directory_023_benchmark,,,, +muk_dms.directory_050_benchmark,D_0050,muk_dms.directory_033_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark +muk_dms.directory_051_benchmark,D_0051,muk_dms.directory_004_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark +muk_dms.directory_052_benchmark,D_0052,muk_dms.directory_034_benchmark,,,,muk_dms.tag_046_benchmark +muk_dms.directory_053_benchmark,D_0053,muk_dms.directory_037_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark +muk_dms.directory_054_benchmark,D_0054,muk_dms.directory_049_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark +muk_dms.directory_055_benchmark,D_0055,muk_dms.directory_028_benchmark,,,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark +muk_dms.directory_056_benchmark,D_0056,muk_dms.directory_032_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark +muk_dms.directory_057_benchmark,D_0057,muk_dms.directory_025_benchmark,,,,muk_dms.tag_127_benchmark +muk_dms.directory_058_benchmark,D_0058,muk_dms.directory_054_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark +muk_dms.directory_059_benchmark,D_0059,muk_dms.directory_019_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark +muk_dms.directory_060_benchmark,D_0060,muk_dms.directory_059_benchmark,,,,muk_dms.tag_037_benchmark +muk_dms.directory_061_benchmark,D_0061,muk_dms.directory_025_benchmark,,,,muk_dms.tag_046_benchmark +muk_dms.directory_062_benchmark,D_0062,muk_dms.directory_052_benchmark,,,muk_dms.category_046_benchmark,muk_dms.tag_022_benchmark +muk_dms.directory_063_benchmark,D_0063,muk_dms.directory_017_benchmark,,,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark +muk_dms.directory_064_benchmark,D_0064,muk_dms.directory_057_benchmark,,,,muk_dms.tag_123_benchmark +muk_dms.directory_065_benchmark,D_0065,muk_dms.directory_002_benchmark,,,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark +muk_dms.directory_066_benchmark,D_0066,muk_dms.directory_008_benchmark,,,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark +muk_dms.directory_067_benchmark,D_0067,muk_dms.directory_026_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark +muk_dms.directory_068_benchmark,D_0068,muk_dms.directory_016_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark +muk_dms.directory_069_benchmark,D_0069,muk_dms.directory_061_benchmark,,,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark +muk_dms.directory_070_benchmark,D_0070,muk_dms.directory_018_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark +muk_dms.directory_071_benchmark,D_0071,muk_dms.directory_036_benchmark,,,,muk_dms.tag_091_benchmark +muk_dms.directory_072_benchmark,D_0072,muk_dms.directory_046_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark +muk_dms.directory_073_benchmark,D_0073,muk_dms.directory_013_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark +muk_dms.directory_074_benchmark,D_0074,muk_dms.directory_038_benchmark,,,,muk_dms.tag_044_benchmark +muk_dms.directory_075_benchmark,D_0075,muk_dms.directory_023_benchmark,,,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark +muk_dms.directory_076_benchmark,D_0076,muk_dms.directory_037_benchmark,,,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark +muk_dms.directory_077_benchmark,D_0077,muk_dms.directory_058_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark +muk_dms.directory_078_benchmark,D_0078,muk_dms.directory_034_benchmark,,,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark +muk_dms.directory_079_benchmark,D_0079,muk_dms.directory_034_benchmark,,,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark +muk_dms.directory_080_benchmark,D_0080,muk_dms.directory_037_benchmark,,,muk_dms.category_006_benchmark,muk_dms.tag_041_benchmark +muk_dms.directory_081_benchmark,D_0081,muk_dms.directory_050_benchmark,,,,muk_dms.tag_091_benchmark +muk_dms.directory_082_benchmark,D_0082,muk_dms.directory_042_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark +muk_dms.directory_083_benchmark,D_0083,muk_dms.directory_038_benchmark,,,,muk_dms.tag_134_benchmark +muk_dms.directory_084_benchmark,D_0084,muk_dms.directory_067_benchmark,,,,muk_dms.tag_119_benchmark +muk_dms.directory_085_benchmark,D_0085,muk_dms.directory_041_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_050_benchmark +muk_dms.directory_086_benchmark,D_0086,muk_dms.directory_001_benchmark,,,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark +muk_dms.directory_087_benchmark,D_0087,muk_dms.directory_083_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark +muk_dms.directory_088_benchmark,D_0088,muk_dms.directory_036_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark +muk_dms.directory_089_benchmark,D_0089,muk_dms.directory_044_benchmark,,,,muk_dms.tag_010_benchmark +muk_dms.directory_090_benchmark,D_0090,muk_dms.directory_040_benchmark,,,,muk_dms.tag_119_benchmark +muk_dms.directory_091_benchmark,D_0091,muk_dms.directory_011_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_145_benchmark +muk_dms.directory_092_benchmark,D_0092,muk_dms.directory_045_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark +muk_dms.directory_093_benchmark,D_0093,muk_dms.directory_007_benchmark,,,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark +muk_dms.directory_094_benchmark,D_0094,muk_dms.directory_003_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_042_benchmark +muk_dms.directory_095_benchmark,D_0095,muk_dms.directory_085_benchmark,,,,muk_dms.tag_004_benchmark +muk_dms.directory_096_benchmark,D_0096,muk_dms.directory_023_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark +muk_dms.directory_097_benchmark,D_0097,muk_dms.directory_007_benchmark,,,, +muk_dms.directory_098_benchmark,D_0098,muk_dms.directory_070_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark +muk_dms.directory_099_benchmark,D_0099,muk_dms.directory_053_benchmark,,,,muk_dms.tag_127_benchmark +muk_dms.directory_100_benchmark,D_0100,muk_dms.directory_092_benchmark,,,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark +muk_dms.directory_101_benchmark,D_0101,muk_dms.directory_037_benchmark,,,muk_dms.category_011_benchmark,muk_dms.tag_021_benchmark +muk_dms.directory_102_benchmark,D_0102,muk_dms.directory_063_benchmark,,,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark +muk_dms.directory_103_benchmark,D_0103,muk_dms.directory_067_benchmark,,,muk_dms.category_044_benchmark,muk_dms.tag_095_benchmark +muk_dms.directory_104_benchmark,D_0104,muk_dms.directory_018_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark +muk_dms.directory_105_benchmark,D_0105,muk_dms.directory_056_benchmark,,,,muk_dms.tag_034_benchmark +muk_dms.directory_106_benchmark,D_0106,muk_dms.directory_085_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark +muk_dms.directory_107_benchmark,D_0107,muk_dms.directory_053_benchmark,,,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark +muk_dms.directory_108_benchmark,D_0108,muk_dms.directory_027_benchmark,,,,muk_dms.tag_013_benchmark +muk_dms.directory_109_benchmark,D_0109,muk_dms.directory_045_benchmark,,,muk_dms.category_009_benchmark,muk_dms.tag_025_benchmark +muk_dms.directory_110_benchmark,D_0110,muk_dms.directory_076_benchmark,,,,muk_dms.tag_124_benchmark +muk_dms.directory_111_benchmark,D_0111,muk_dms.directory_091_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark +muk_dms.directory_112_benchmark,D_0112,muk_dms.directory_066_benchmark,,,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark +muk_dms.directory_113_benchmark,D_0113,muk_dms.directory_056_benchmark,,,,muk_dms.tag_104_benchmark +muk_dms.directory_114_benchmark,D_0114,muk_dms.directory_031_benchmark,,,, +muk_dms.directory_115_benchmark,D_0115,muk_dms.directory_078_benchmark,,,,muk_dms.tag_075_benchmark +muk_dms.directory_116_benchmark,D_0116,muk_dms.directory_099_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark +muk_dms.directory_117_benchmark,D_0117,muk_dms.directory_043_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark +muk_dms.directory_118_benchmark,D_0118,muk_dms.directory_042_benchmark,,,,muk_dms.tag_108_benchmark +muk_dms.directory_119_benchmark,D_0119,muk_dms.directory_055_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark +muk_dms.directory_120_benchmark,D_0120,muk_dms.directory_006_benchmark,,,,muk_dms.tag_137_benchmark +muk_dms.directory_121_benchmark,D_0121,muk_dms.directory_020_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark +muk_dms.directory_122_benchmark,D_0122,muk_dms.directory_096_benchmark,,,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark +muk_dms.directory_123_benchmark,D_0123,muk_dms.directory_079_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark +muk_dms.directory_124_benchmark,D_0124,muk_dms.directory_050_benchmark,,,,muk_dms.tag_010_benchmark +muk_dms.directory_125_benchmark,D_0125,muk_dms.directory_073_benchmark,,,muk_dms.category_031_benchmark,muk_dms.tag_114_benchmark +muk_dms.directory_126_benchmark,D_0126,muk_dms.directory_112_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark +muk_dms.directory_127_benchmark,D_0127,muk_dms.directory_069_benchmark,,,muk_dms.category_015_benchmark,muk_dms.tag_056_benchmark +muk_dms.directory_128_benchmark,D_0128,muk_dms.directory_091_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark +muk_dms.directory_129_benchmark,D_0129,muk_dms.directory_037_benchmark,,,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark +muk_dms.directory_130_benchmark,D_0130,muk_dms.directory_028_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark +muk_dms.directory_131_benchmark,D_0131,muk_dms.directory_018_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_102_benchmark +muk_dms.directory_132_benchmark,D_0132,muk_dms.directory_128_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark +muk_dms.directory_133_benchmark,D_0133,muk_dms.directory_054_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark +muk_dms.directory_134_benchmark,D_0134,muk_dms.directory_114_benchmark,,,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark +muk_dms.directory_135_benchmark,D_0135,muk_dms.directory_062_benchmark,,,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark +muk_dms.directory_136_benchmark,D_0136,muk_dms.directory_069_benchmark,,,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark +muk_dms.directory_137_benchmark,D_0137,muk_dms.directory_090_benchmark,,,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark +muk_dms.directory_138_benchmark,D_0138,muk_dms.directory_065_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark +muk_dms.directory_139_benchmark,D_0139,muk_dms.directory_125_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark +muk_dms.directory_140_benchmark,D_0140,muk_dms.directory_067_benchmark,,,,muk_dms.tag_108_benchmark +muk_dms.directory_141_benchmark,D_0141,muk_dms.directory_040_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark +muk_dms.directory_142_benchmark,D_0142,muk_dms.directory_080_benchmark,,,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark +muk_dms.directory_143_benchmark,D_0143,muk_dms.directory_083_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark +muk_dms.directory_144_benchmark,D_0144,muk_dms.directory_095_benchmark,,,,muk_dms.tag_086_benchmark +muk_dms.directory_145_benchmark,D_0145,muk_dms.directory_003_benchmark,,,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark +muk_dms.directory_146_benchmark,D_0146,muk_dms.directory_126_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark +muk_dms.directory_147_benchmark,D_0147,muk_dms.directory_099_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark +muk_dms.directory_148_benchmark,D_0148,muk_dms.directory_086_benchmark,,,, +muk_dms.directory_149_benchmark,D_0149,muk_dms.directory_053_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark +muk_dms.directory_150_benchmark,D_0150,muk_dms.directory_031_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark +muk_dms.directory_151_benchmark,D_0151,muk_dms.directory_134_benchmark,,,muk_dms.category_008_benchmark,muk_dms.tag_077_benchmark +muk_dms.directory_152_benchmark,D_0152,muk_dms.directory_053_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_109_benchmark +muk_dms.directory_153_benchmark,D_0153,muk_dms.directory_026_benchmark,,,muk_dms.category_023_benchmark,muk_dms.tag_038_benchmark +muk_dms.directory_154_benchmark,D_0154,muk_dms.directory_118_benchmark,,,,muk_dms.tag_034_benchmark +muk_dms.directory_155_benchmark,D_0155,muk_dms.directory_058_benchmark,,,muk_dms.category_027_benchmark,muk_dms.tag_048_benchmark +muk_dms.directory_156_benchmark,D_0156,muk_dms.directory_077_benchmark,,,muk_dms.category_009_benchmark,muk_dms.tag_025_benchmark +muk_dms.directory_157_benchmark,D_0157,muk_dms.directory_089_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark +muk_dms.directory_158_benchmark,D_0158,muk_dms.directory_033_benchmark,,,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark +muk_dms.directory_159_benchmark,D_0159,muk_dms.directory_010_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark +muk_dms.directory_160_benchmark,D_0160,muk_dms.directory_006_benchmark,,,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark +muk_dms.directory_161_benchmark,D_0161,muk_dms.directory_018_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark +muk_dms.directory_162_benchmark,D_0162,muk_dms.directory_026_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark +muk_dms.directory_163_benchmark,D_0163,muk_dms.directory_118_benchmark,,,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark +muk_dms.directory_164_benchmark,D_0164,muk_dms.directory_130_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark +muk_dms.directory_165_benchmark,D_0165,muk_dms.directory_104_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark +muk_dms.directory_166_benchmark,D_0166,muk_dms.directory_083_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark +muk_dms.directory_167_benchmark,D_0167,muk_dms.directory_095_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark +muk_dms.directory_168_benchmark,D_0168,muk_dms.directory_021_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark +muk_dms.directory_169_benchmark,D_0169,muk_dms.directory_087_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark +muk_dms.directory_170_benchmark,D_0170,muk_dms.directory_147_benchmark,,,,muk_dms.tag_006_benchmark +muk_dms.directory_171_benchmark,D_0171,muk_dms.directory_023_benchmark,,,muk_dms.category_020_benchmark,muk_dms.tag_141_benchmark +muk_dms.directory_172_benchmark,D_0172,muk_dms.directory_002_benchmark,,,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark +muk_dms.directory_173_benchmark,D_0173,muk_dms.directory_041_benchmark,,,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark +muk_dms.directory_174_benchmark,D_0174,muk_dms.directory_069_benchmark,,,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark +muk_dms.directory_175_benchmark,D_0175,muk_dms.directory_091_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark +muk_dms.directory_176_benchmark,D_0176,muk_dms.directory_056_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark +muk_dms.directory_177_benchmark,D_0177,muk_dms.directory_035_benchmark,,,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark +muk_dms.directory_178_benchmark,D_0178,muk_dms.directory_108_benchmark,,,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark +muk_dms.directory_179_benchmark,D_0179,muk_dms.directory_121_benchmark,,,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark +muk_dms.directory_180_benchmark,D_0180,muk_dms.directory_178_benchmark,,,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark +muk_dms.directory_181_benchmark,D_0181,muk_dms.directory_085_benchmark,,,,muk_dms.tag_132_benchmark +muk_dms.directory_182_benchmark,D_0182,muk_dms.directory_103_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark +muk_dms.directory_183_benchmark,D_0183,muk_dms.directory_086_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark +muk_dms.directory_184_benchmark,D_0184,muk_dms.directory_029_benchmark,,,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark +muk_dms.directory_185_benchmark,D_0185,muk_dms.directory_170_benchmark,,,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark +muk_dms.directory_186_benchmark,D_0186,muk_dms.directory_100_benchmark,,,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark +muk_dms.directory_187_benchmark,D_0187,muk_dms.directory_034_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark +muk_dms.directory_188_benchmark,D_0188,muk_dms.directory_072_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark +muk_dms.directory_189_benchmark,D_0189,muk_dms.directory_022_benchmark,,,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark +muk_dms.directory_190_benchmark,D_0190,muk_dms.directory_076_benchmark,,,,muk_dms.tag_013_benchmark +muk_dms.directory_191_benchmark,D_0191,muk_dms.directory_146_benchmark,,,,muk_dms.tag_012_benchmark +muk_dms.directory_192_benchmark,D_0192,muk_dms.directory_023_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark +muk_dms.directory_193_benchmark,D_0193,muk_dms.directory_183_benchmark,,,,muk_dms.tag_032_benchmark +muk_dms.directory_194_benchmark,D_0194,muk_dms.directory_047_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark +muk_dms.directory_195_benchmark,D_0195,muk_dms.directory_094_benchmark,,,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark +muk_dms.directory_196_benchmark,D_0196,muk_dms.directory_159_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark +muk_dms.directory_197_benchmark,D_0197,muk_dms.directory_140_benchmark,,,muk_dms.category_019_benchmark,muk_dms.tag_105_benchmark +muk_dms.directory_198_benchmark,D_0198,muk_dms.directory_169_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark +muk_dms.directory_199_benchmark,D_0199,muk_dms.directory_099_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark +muk_dms.directory_200_benchmark,D_0200,muk_dms.directory_123_benchmark,,,muk_dms.category_031_benchmark,muk_dms.tag_116_benchmark +muk_dms.directory_201_benchmark,D_0201,muk_dms.directory_090_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark +muk_dms.directory_202_benchmark,D_0202,muk_dms.directory_095_benchmark,,,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark +muk_dms.directory_203_benchmark,D_0203,muk_dms.directory_107_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark +muk_dms.directory_204_benchmark,D_0204,muk_dms.directory_105_benchmark,,,,muk_dms.tag_046_benchmark +muk_dms.directory_205_benchmark,D_0205,muk_dms.directory_092_benchmark,,,, +muk_dms.directory_206_benchmark,D_0206,muk_dms.directory_162_benchmark,,,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark +muk_dms.directory_207_benchmark,D_0207,muk_dms.directory_027_benchmark,,,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark +muk_dms.directory_208_benchmark,D_0208,muk_dms.directory_011_benchmark,,,,muk_dms.tag_119_benchmark +muk_dms.directory_209_benchmark,D_0209,muk_dms.directory_135_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark +muk_dms.directory_210_benchmark,D_0210,muk_dms.directory_160_benchmark,,,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark +muk_dms.directory_211_benchmark,D_0211,muk_dms.directory_015_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark +muk_dms.directory_212_benchmark,D_0212,muk_dms.directory_087_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_040_benchmark +muk_dms.directory_213_benchmark,D_0213,muk_dms.directory_015_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark +muk_dms.directory_214_benchmark,D_0214,muk_dms.directory_100_benchmark,,,,muk_dms.tag_065_benchmark +muk_dms.directory_215_benchmark,D_0215,muk_dms.directory_075_benchmark,,,,muk_dms.tag_065_benchmark +muk_dms.directory_216_benchmark,D_0216,muk_dms.directory_040_benchmark,,,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark +muk_dms.directory_217_benchmark,D_0217,muk_dms.directory_056_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark +muk_dms.directory_218_benchmark,D_0218,muk_dms.directory_157_benchmark,,,,muk_dms.tag_013_benchmark +muk_dms.directory_219_benchmark,D_0219,muk_dms.directory_154_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark +muk_dms.directory_220_benchmark,D_0220,muk_dms.directory_207_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark +muk_dms.directory_221_benchmark,D_0221,muk_dms.directory_041_benchmark,,,, +muk_dms.directory_222_benchmark,D_0222,muk_dms.directory_002_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark +muk_dms.directory_223_benchmark,D_0223,muk_dms.directory_176_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark +muk_dms.directory_224_benchmark,D_0224,muk_dms.directory_223_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark +muk_dms.directory_225_benchmark,D_0225,muk_dms.directory_202_benchmark,,,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark +muk_dms.directory_226_benchmark,D_0226,muk_dms.directory_128_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark +muk_dms.directory_227_benchmark,D_0227,muk_dms.directory_044_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark +muk_dms.directory_228_benchmark,D_0228,muk_dms.directory_105_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_098_benchmark +muk_dms.directory_229_benchmark,D_0229,muk_dms.directory_202_benchmark,,,muk_dms.category_006_benchmark,muk_dms.tag_041_benchmark +muk_dms.directory_230_benchmark,D_0230,muk_dms.directory_104_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark +muk_dms.directory_231_benchmark,D_0231,muk_dms.directory_137_benchmark,,,,muk_dms.tag_065_benchmark +muk_dms.directory_232_benchmark,D_0232,muk_dms.directory_179_benchmark,,,,muk_dms.tag_119_benchmark +muk_dms.directory_233_benchmark,D_0233,muk_dms.directory_059_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark +muk_dms.directory_234_benchmark,D_0234,muk_dms.directory_147_benchmark,,,,muk_dms.tag_123_benchmark +muk_dms.directory_235_benchmark,D_0235,muk_dms.directory_114_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark +muk_dms.directory_236_benchmark,D_0236,muk_dms.directory_033_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark +muk_dms.directory_237_benchmark,D_0237,muk_dms.directory_037_benchmark,,,,muk_dms.tag_006_benchmark +muk_dms.directory_238_benchmark,D_0238,muk_dms.directory_083_benchmark,,,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark +muk_dms.directory_239_benchmark,D_0239,muk_dms.directory_151_benchmark,,,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark +muk_dms.directory_240_benchmark,D_0240,muk_dms.directory_156_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark +muk_dms.directory_241_benchmark,D_0241,muk_dms.directory_034_benchmark,,,, +muk_dms.directory_242_benchmark,D_0242,muk_dms.directory_177_benchmark,,,,muk_dms.tag_032_benchmark +muk_dms.directory_243_benchmark,D_0243,muk_dms.directory_192_benchmark,,,,muk_dms.tag_127_benchmark +muk_dms.directory_244_benchmark,D_0244,muk_dms.directory_022_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark +muk_dms.directory_245_benchmark,D_0245,muk_dms.directory_031_benchmark,,,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark +muk_dms.directory_246_benchmark,D_0246,muk_dms.directory_051_benchmark,,,, +muk_dms.directory_247_benchmark,D_0247,muk_dms.directory_007_benchmark,,,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark +muk_dms.directory_248_benchmark,D_0248,muk_dms.directory_135_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark +muk_dms.directory_249_benchmark,D_0249,muk_dms.directory_111_benchmark,,,,muk_dms.tag_015_benchmark +muk_dms.directory_250_benchmark,D_0250,muk_dms.directory_016_benchmark,,,,muk_dms.tag_123_benchmark +muk_dms.directory_251_benchmark,D_0251,muk_dms.directory_243_benchmark,,,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark +muk_dms.directory_252_benchmark,D_0252,muk_dms.directory_102_benchmark,,,,muk_dms.tag_009_benchmark +muk_dms.directory_253_benchmark,D_0253,muk_dms.directory_063_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark +muk_dms.directory_254_benchmark,D_0254,muk_dms.directory_185_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_028_benchmark +muk_dms.directory_255_benchmark,D_0255,muk_dms.directory_024_benchmark,,,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark +muk_dms.directory_256_benchmark,D_0256,muk_dms.directory_054_benchmark,,,,muk_dms.tag_016_benchmark +muk_dms.directory_257_benchmark,D_0257,muk_dms.directory_122_benchmark,,,,muk_dms.tag_016_benchmark +muk_dms.directory_258_benchmark,D_0258,muk_dms.directory_115_benchmark,,,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark +muk_dms.directory_259_benchmark,D_0259,muk_dms.directory_136_benchmark,,,,muk_dms.tag_063_benchmark +muk_dms.directory_260_benchmark,D_0260,muk_dms.directory_106_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark +muk_dms.directory_261_benchmark,D_0261,muk_dms.directory_247_benchmark,,,, +muk_dms.directory_262_benchmark,D_0262,muk_dms.directory_077_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark +muk_dms.directory_263_benchmark,D_0263,muk_dms.directory_017_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark +muk_dms.directory_264_benchmark,D_0264,muk_dms.directory_061_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark +muk_dms.directory_265_benchmark,D_0265,muk_dms.directory_138_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark +muk_dms.directory_266_benchmark,D_0266,muk_dms.directory_252_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark +muk_dms.directory_267_benchmark,D_0267,muk_dms.directory_159_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark +muk_dms.directory_268_benchmark,D_0268,muk_dms.directory_184_benchmark,,,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark +muk_dms.directory_269_benchmark,D_0269,muk_dms.directory_253_benchmark,,,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark +muk_dms.directory_270_benchmark,D_0270,muk_dms.directory_095_benchmark,,,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark +muk_dms.directory_271_benchmark,D_0271,muk_dms.directory_078_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_014_benchmark +muk_dms.directory_272_benchmark,D_0272,muk_dms.directory_022_benchmark,,,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark +muk_dms.directory_273_benchmark,D_0273,muk_dms.directory_076_benchmark,,,,muk_dms.tag_013_benchmark +muk_dms.directory_274_benchmark,D_0274,muk_dms.directory_194_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark +muk_dms.directory_275_benchmark,D_0275,muk_dms.directory_251_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark +muk_dms.directory_276_benchmark,D_0276,muk_dms.directory_246_benchmark,,,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark +muk_dms.directory_277_benchmark,D_0277,muk_dms.directory_073_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark +muk_dms.directory_278_benchmark,D_0278,muk_dms.directory_151_benchmark,,,,muk_dms.tag_009_benchmark +muk_dms.directory_279_benchmark,D_0279,muk_dms.directory_143_benchmark,,,,muk_dms.tag_010_benchmark +muk_dms.directory_280_benchmark,D_0280,muk_dms.directory_270_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark +muk_dms.directory_281_benchmark,D_0281,muk_dms.directory_146_benchmark,,,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark +muk_dms.directory_282_benchmark,D_0282,muk_dms.directory_258_benchmark,,,,muk_dms.tag_046_benchmark +muk_dms.directory_283_benchmark,D_0283,muk_dms.directory_098_benchmark,,,,muk_dms.tag_013_benchmark +muk_dms.directory_284_benchmark,D_0284,muk_dms.directory_041_benchmark,,,,muk_dms.tag_006_benchmark +muk_dms.directory_285_benchmark,D_0285,muk_dms.directory_239_benchmark,,,,muk_dms.tag_037_benchmark +muk_dms.directory_286_benchmark,D_0286,muk_dms.directory_229_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark +muk_dms.directory_287_benchmark,D_0287,muk_dms.directory_186_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark +muk_dms.directory_288_benchmark,D_0288,muk_dms.directory_149_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark +muk_dms.directory_289_benchmark,D_0289,muk_dms.directory_187_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark +muk_dms.directory_290_benchmark,D_0290,muk_dms.directory_138_benchmark,,,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark +muk_dms.directory_291_benchmark,D_0291,muk_dms.directory_104_benchmark,,,,muk_dms.tag_013_benchmark +muk_dms.directory_292_benchmark,D_0292,muk_dms.directory_188_benchmark,,,,muk_dms.tag_094_benchmark +muk_dms.directory_293_benchmark,D_0293,muk_dms.directory_030_benchmark,,,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark +muk_dms.directory_294_benchmark,D_0294,muk_dms.directory_002_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark +muk_dms.directory_295_benchmark,D_0295,muk_dms.directory_042_benchmark,,,,muk_dms.tag_037_benchmark +muk_dms.directory_296_benchmark,D_0296,muk_dms.directory_281_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark +muk_dms.directory_297_benchmark,D_0297,muk_dms.directory_152_benchmark,,,,muk_dms.tag_012_benchmark +muk_dms.directory_298_benchmark,D_0298,muk_dms.directory_219_benchmark,,,,muk_dms.tag_096_benchmark +muk_dms.directory_299_benchmark,D_0299,muk_dms.directory_133_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark +muk_dms.directory_300_benchmark,D_0300,muk_dms.directory_024_benchmark,,,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark +muk_dms.directory_301_benchmark,D_0301,muk_dms.directory_006_benchmark,,,muk_dms.category_020_benchmark,muk_dms.tag_129_benchmark +muk_dms.directory_302_benchmark,D_0302,muk_dms.directory_211_benchmark,,,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark +muk_dms.directory_303_benchmark,D_0303,muk_dms.directory_210_benchmark,,,,muk_dms.tag_044_benchmark +muk_dms.directory_304_benchmark,D_0304,muk_dms.directory_047_benchmark,,,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark +muk_dms.directory_305_benchmark,D_0305,muk_dms.directory_041_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark +muk_dms.directory_306_benchmark,D_0306,muk_dms.directory_290_benchmark,,,,muk_dms.tag_108_benchmark +muk_dms.directory_307_benchmark,D_0307,muk_dms.directory_278_benchmark,,,, +muk_dms.directory_308_benchmark,D_0308,muk_dms.directory_303_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark +muk_dms.directory_309_benchmark,D_0309,muk_dms.directory_133_benchmark,,,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark +muk_dms.directory_310_benchmark,D_0310,muk_dms.directory_231_benchmark,,,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark +muk_dms.directory_311_benchmark,D_0311,muk_dms.directory_223_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark +muk_dms.directory_312_benchmark,D_0312,muk_dms.directory_034_benchmark,,,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark +muk_dms.directory_313_benchmark,D_0313,muk_dms.directory_180_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark +muk_dms.directory_314_benchmark,D_0314,muk_dms.directory_284_benchmark,,,,muk_dms.tag_104_benchmark +muk_dms.directory_315_benchmark,D_0315,muk_dms.directory_024_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark +muk_dms.directory_316_benchmark,D_0316,muk_dms.directory_297_benchmark,,,,muk_dms.tag_044_benchmark +muk_dms.directory_317_benchmark,D_0317,muk_dms.directory_290_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_029_benchmark +muk_dms.directory_318_benchmark,D_0318,muk_dms.directory_081_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_097_benchmark +muk_dms.directory_319_benchmark,D_0319,muk_dms.directory_261_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark +muk_dms.directory_320_benchmark,D_0320,muk_dms.directory_183_benchmark,,,,muk_dms.tag_086_benchmark +muk_dms.directory_321_benchmark,D_0321,muk_dms.directory_311_benchmark,,,,muk_dms.tag_015_benchmark +muk_dms.directory_322_benchmark,D_0322,muk_dms.directory_009_benchmark,,,,muk_dms.tag_015_benchmark +muk_dms.directory_323_benchmark,D_0323,muk_dms.directory_226_benchmark,,,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark +muk_dms.directory_324_benchmark,D_0324,muk_dms.directory_013_benchmark,,,,muk_dms.tag_037_benchmark +muk_dms.directory_325_benchmark,D_0325,muk_dms.directory_123_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_050_benchmark +muk_dms.directory_326_benchmark,D_0326,muk_dms.directory_201_benchmark,,,,muk_dms.tag_016_benchmark +muk_dms.directory_327_benchmark,D_0327,muk_dms.directory_029_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark +muk_dms.directory_328_benchmark,D_0328,muk_dms.directory_231_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark +muk_dms.directory_329_benchmark,D_0329,muk_dms.directory_207_benchmark,,,,muk_dms.tag_016_benchmark +muk_dms.directory_330_benchmark,D_0330,muk_dms.directory_078_benchmark,,,muk_dms.category_020_benchmark,muk_dms.tag_141_benchmark +muk_dms.directory_331_benchmark,D_0331,muk_dms.directory_179_benchmark,,,,muk_dms.tag_096_benchmark +muk_dms.directory_332_benchmark,D_0332,muk_dms.directory_019_benchmark,,,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark +muk_dms.directory_333_benchmark,D_0333,muk_dms.directory_246_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark +muk_dms.directory_334_benchmark,D_0334,muk_dms.directory_194_benchmark,,,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark +muk_dms.directory_335_benchmark,D_0335,muk_dms.directory_190_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark +muk_dms.directory_336_benchmark,D_0336,muk_dms.directory_244_benchmark,,,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark +muk_dms.directory_337_benchmark,D_0337,muk_dms.directory_148_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark +muk_dms.directory_338_benchmark,D_0338,muk_dms.directory_197_benchmark,,,,muk_dms.tag_090_benchmark +muk_dms.directory_339_benchmark,D_0339,muk_dms.directory_235_benchmark,,,,muk_dms.tag_006_benchmark +muk_dms.directory_340_benchmark,D_0340,muk_dms.directory_219_benchmark,,,,muk_dms.tag_060_benchmark +muk_dms.directory_341_benchmark,D_0341,muk_dms.directory_071_benchmark,,,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark +muk_dms.directory_342_benchmark,D_0342,muk_dms.directory_211_benchmark,,,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark +muk_dms.directory_343_benchmark,D_0343,muk_dms.directory_029_benchmark,,,,muk_dms.tag_037_benchmark +muk_dms.directory_344_benchmark,D_0344,muk_dms.directory_271_benchmark,,,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark +muk_dms.directory_345_benchmark,D_0345,muk_dms.directory_098_benchmark,,,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark +muk_dms.directory_346_benchmark,D_0346,muk_dms.directory_065_benchmark,,,muk_dms.category_007_benchmark,muk_dms.tag_067_benchmark +muk_dms.directory_347_benchmark,D_0347,muk_dms.directory_263_benchmark,,,,muk_dms.tag_044_benchmark +muk_dms.directory_348_benchmark,D_0348,muk_dms.directory_294_benchmark,,,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark +muk_dms.directory_349_benchmark,D_0349,muk_dms.directory_233_benchmark,,,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark +muk_dms.directory_350_benchmark,D_0350,muk_dms.directory_095_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_040_benchmark +muk_dms.directory_351_benchmark,D_0351,muk_dms.directory_342_benchmark,,,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark +muk_dms.directory_352_benchmark,D_0352,muk_dms.directory_331_benchmark,,,,muk_dms.tag_094_benchmark +muk_dms.directory_353_benchmark,D_0353,muk_dms.directory_067_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark +muk_dms.directory_354_benchmark,D_0354,muk_dms.directory_269_benchmark,,,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark +muk_dms.directory_355_benchmark,D_0355,muk_dms.directory_045_benchmark,,,,muk_dms.tag_104_benchmark +muk_dms.directory_356_benchmark,D_0356,muk_dms.directory_013_benchmark,,,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark +muk_dms.directory_357_benchmark,D_0357,muk_dms.directory_347_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark +muk_dms.directory_358_benchmark,D_0358,muk_dms.directory_099_benchmark,,,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark +muk_dms.directory_359_benchmark,D_0359,muk_dms.directory_214_benchmark,,,,muk_dms.tag_132_benchmark +muk_dms.directory_360_benchmark,D_0360,muk_dms.directory_043_benchmark,,,, +muk_dms.directory_361_benchmark,D_0361,muk_dms.directory_054_benchmark,,,,muk_dms.tag_044_benchmark +muk_dms.directory_362_benchmark,D_0362,muk_dms.directory_320_benchmark,,,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark +muk_dms.directory_363_benchmark,D_0363,muk_dms.directory_020_benchmark,,,,muk_dms.tag_134_benchmark +muk_dms.directory_364_benchmark,D_0364,muk_dms.directory_328_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark +muk_dms.directory_365_benchmark,D_0365,muk_dms.directory_075_benchmark,,,,muk_dms.tag_015_benchmark +muk_dms.directory_366_benchmark,D_0366,muk_dms.directory_147_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark +muk_dms.directory_367_benchmark,D_0367,muk_dms.directory_318_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark +muk_dms.directory_368_benchmark,D_0368,muk_dms.directory_143_benchmark,,,,muk_dms.tag_108_benchmark +muk_dms.directory_369_benchmark,D_0369,muk_dms.directory_220_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark +muk_dms.directory_370_benchmark,D_0370,muk_dms.directory_194_benchmark,,,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark +muk_dms.directory_371_benchmark,D_0371,muk_dms.directory_024_benchmark,,,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark +muk_dms.directory_372_benchmark,D_0372,muk_dms.directory_023_benchmark,,,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark +muk_dms.directory_373_benchmark,D_0373,muk_dms.directory_149_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark +muk_dms.directory_374_benchmark,D_0374,muk_dms.directory_097_benchmark,,,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark +muk_dms.directory_375_benchmark,D_0375,muk_dms.directory_356_benchmark,,,,muk_dms.tag_016_benchmark +muk_dms.directory_376_benchmark,D_0376,muk_dms.directory_106_benchmark,,,, +muk_dms.directory_377_benchmark,D_0377,muk_dms.directory_145_benchmark,,,muk_dms.category_044_benchmark,muk_dms.tag_095_benchmark +muk_dms.directory_378_benchmark,D_0378,muk_dms.directory_135_benchmark,,,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark +muk_dms.directory_379_benchmark,D_0379,muk_dms.directory_148_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_109_benchmark +muk_dms.directory_380_benchmark,D_0380,muk_dms.directory_108_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark +muk_dms.directory_381_benchmark,D_0381,muk_dms.directory_064_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark +muk_dms.directory_382_benchmark,D_0382,muk_dms.directory_282_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark +muk_dms.directory_383_benchmark,D_0383,muk_dms.directory_172_benchmark,,,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark +muk_dms.directory_384_benchmark,D_0384,muk_dms.directory_190_benchmark,,,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark +muk_dms.directory_385_benchmark,D_0385,muk_dms.directory_216_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_029_benchmark +muk_dms.directory_386_benchmark,D_0386,muk_dms.directory_181_benchmark,,,muk_dms.category_003_benchmark,muk_dms.tag_145_benchmark +muk_dms.directory_387_benchmark,D_0387,muk_dms.directory_193_benchmark,,,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark +muk_dms.directory_388_benchmark,D_0388,muk_dms.directory_027_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark +muk_dms.directory_389_benchmark,D_0389,muk_dms.directory_164_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark +muk_dms.directory_390_benchmark,D_0390,muk_dms.directory_385_benchmark,,,muk_dms.category_013_benchmark,muk_dms.tag_031_benchmark +muk_dms.directory_391_benchmark,D_0391,muk_dms.directory_283_benchmark,,,,muk_dms.tag_086_benchmark +muk_dms.directory_392_benchmark,D_0392,muk_dms.directory_213_benchmark,,,muk_dms.category_029_benchmark,muk_dms.tag_005_benchmark +muk_dms.directory_393_benchmark,D_0393,muk_dms.directory_013_benchmark,,,muk_dms.category_046_benchmark,muk_dms.tag_022_benchmark +muk_dms.directory_394_benchmark,D_0394,muk_dms.directory_214_benchmark,,,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark +muk_dms.directory_395_benchmark,D_0395,muk_dms.directory_352_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark +muk_dms.directory_396_benchmark,D_0396,muk_dms.directory_030_benchmark,,,,muk_dms.tag_132_benchmark +muk_dms.directory_397_benchmark,D_0397,muk_dms.directory_335_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark +muk_dms.directory_398_benchmark,D_0398,muk_dms.directory_135_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark +muk_dms.directory_399_benchmark,D_0399,muk_dms.directory_382_benchmark,,,muk_dms.category_015_benchmark,muk_dms.tag_120_benchmark +muk_dms.directory_400_benchmark,D_0400,muk_dms.directory_108_benchmark,,,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark +muk_dms.directory_401_benchmark,D_0401,muk_dms.directory_329_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_014_benchmark +muk_dms.directory_402_benchmark,D_0402,muk_dms.directory_253_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_072_benchmark +muk_dms.directory_403_benchmark,D_0403,muk_dms.directory_001_benchmark,,,muk_dms.category_020_benchmark,muk_dms.tag_129_benchmark +muk_dms.directory_404_benchmark,D_0404,muk_dms.directory_343_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark +muk_dms.directory_405_benchmark,D_0405,muk_dms.directory_143_benchmark,,,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark +muk_dms.directory_406_benchmark,D_0406,muk_dms.directory_308_benchmark,,,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark +muk_dms.directory_407_benchmark,D_0407,muk_dms.directory_350_benchmark,,,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark +muk_dms.directory_408_benchmark,D_0408,muk_dms.directory_383_benchmark,,,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark +muk_dms.directory_409_benchmark,D_0409,muk_dms.directory_069_benchmark,,,,muk_dms.tag_090_benchmark +muk_dms.directory_410_benchmark,D_0410,muk_dms.directory_239_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_097_benchmark +muk_dms.directory_411_benchmark,D_0411,muk_dms.directory_208_benchmark,,,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark +muk_dms.directory_412_benchmark,D_0412,muk_dms.directory_053_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark +muk_dms.directory_413_benchmark,D_0413,muk_dms.directory_191_benchmark,,,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark +muk_dms.directory_414_benchmark,D_0414,muk_dms.directory_151_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark +muk_dms.directory_415_benchmark,D_0415,muk_dms.directory_151_benchmark,,,,muk_dms.tag_090_benchmark +muk_dms.directory_416_benchmark,D_0416,muk_dms.directory_169_benchmark,,,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark +muk_dms.directory_417_benchmark,D_0417,muk_dms.directory_282_benchmark,,,muk_dms.category_023_benchmark,muk_dms.tag_038_benchmark +muk_dms.directory_418_benchmark,D_0418,muk_dms.directory_300_benchmark,,,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark +muk_dms.directory_419_benchmark,D_0419,muk_dms.directory_239_benchmark,,,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark +muk_dms.directory_420_benchmark,D_0420,muk_dms.directory_395_benchmark,,,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark +muk_dms.directory_421_benchmark,D_0421,muk_dms.directory_303_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark +muk_dms.directory_422_benchmark,D_0422,muk_dms.directory_415_benchmark,,,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark +muk_dms.directory_423_benchmark,D_0423,muk_dms.directory_183_benchmark,,,,muk_dms.tag_006_benchmark +muk_dms.directory_424_benchmark,D_0424,muk_dms.directory_253_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark +muk_dms.directory_425_benchmark,D_0425,muk_dms.directory_383_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark +muk_dms.directory_426_benchmark,D_0426,muk_dms.directory_421_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark +muk_dms.directory_427_benchmark,D_0427,muk_dms.directory_036_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark +muk_dms.directory_428_benchmark,D_0428,muk_dms.directory_151_benchmark,,,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark +muk_dms.directory_429_benchmark,D_0429,muk_dms.directory_008_benchmark,,,muk_dms.category_011_benchmark,muk_dms.tag_021_benchmark +muk_dms.directory_430_benchmark,D_0430,muk_dms.directory_201_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark +muk_dms.directory_431_benchmark,D_0431,muk_dms.directory_125_benchmark,,,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark +muk_dms.directory_432_benchmark,D_0432,muk_dms.directory_275_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark +muk_dms.directory_433_benchmark,D_0433,muk_dms.directory_290_benchmark,,,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark +muk_dms.directory_434_benchmark,D_0434,muk_dms.directory_351_benchmark,,,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark +muk_dms.directory_435_benchmark,D_0435,muk_dms.directory_089_benchmark,,,, +muk_dms.directory_436_benchmark,D_0436,muk_dms.directory_165_benchmark,,,, +muk_dms.directory_437_benchmark,D_0437,muk_dms.directory_346_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark +muk_dms.directory_438_benchmark,D_0438,muk_dms.directory_312_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark +muk_dms.directory_439_benchmark,D_0439,muk_dms.directory_330_benchmark,,,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark +muk_dms.directory_440_benchmark,D_0440,muk_dms.directory_288_benchmark,,,,muk_dms.tag_134_benchmark +muk_dms.directory_441_benchmark,D_0441,muk_dms.directory_342_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark +muk_dms.directory_442_benchmark,D_0442,muk_dms.directory_406_benchmark,,,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark +muk_dms.directory_443_benchmark,D_0443,muk_dms.directory_181_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark +muk_dms.directory_444_benchmark,D_0444,muk_dms.directory_096_benchmark,,,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark +muk_dms.directory_445_benchmark,D_0445,muk_dms.directory_432_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark +muk_dms.directory_446_benchmark,D_0446,muk_dms.directory_309_benchmark,,,,muk_dms.tag_009_benchmark +muk_dms.directory_447_benchmark,D_0447,muk_dms.directory_230_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark +muk_dms.directory_448_benchmark,D_0448,muk_dms.directory_035_benchmark,,,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark +muk_dms.directory_449_benchmark,D_0449,muk_dms.directory_262_benchmark,,,,muk_dms.tag_015_benchmark +muk_dms.directory_450_benchmark,D_0450,muk_dms.directory_286_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_028_benchmark +muk_dms.directory_451_benchmark,D_0451,muk_dms.directory_153_benchmark,,,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark +muk_dms.directory_452_benchmark,D_0452,muk_dms.directory_419_benchmark,,,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark +muk_dms.directory_453_benchmark,D_0453,muk_dms.directory_320_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark +muk_dms.directory_454_benchmark,D_0454,muk_dms.directory_333_benchmark,,,,muk_dms.tag_090_benchmark +muk_dms.directory_455_benchmark,D_0455,muk_dms.directory_362_benchmark,,,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark +muk_dms.directory_456_benchmark,D_0456,muk_dms.directory_334_benchmark,,,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark +muk_dms.directory_457_benchmark,D_0457,muk_dms.directory_340_benchmark,,,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark +muk_dms.directory_458_benchmark,D_0458,muk_dms.directory_365_benchmark,,,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark +muk_dms.directory_459_benchmark,D_0459,muk_dms.directory_291_benchmark,,,,muk_dms.tag_046_benchmark +muk_dms.directory_460_benchmark,D_0460,muk_dms.directory_420_benchmark,,,,muk_dms.tag_016_benchmark +muk_dms.directory_461_benchmark,D_0461,muk_dms.directory_390_benchmark,,,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark +muk_dms.directory_462_benchmark,D_0462,muk_dms.directory_021_benchmark,,,muk_dms.category_027_benchmark,muk_dms.tag_048_benchmark +muk_dms.directory_463_benchmark,D_0463,muk_dms.directory_402_benchmark,,,muk_dms.category_021_benchmark,muk_dms.tag_136_benchmark +muk_dms.directory_464_benchmark,D_0464,muk_dms.directory_041_benchmark,,,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark +muk_dms.directory_465_benchmark,D_0465,muk_dms.directory_053_benchmark,,,muk_dms.category_008_benchmark,muk_dms.tag_077_benchmark +muk_dms.directory_466_benchmark,D_0466,muk_dms.directory_446_benchmark,,,,muk_dms.tag_123_benchmark +muk_dms.directory_467_benchmark,D_0467,muk_dms.directory_359_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark +muk_dms.directory_468_benchmark,D_0468,muk_dms.directory_321_benchmark,,,muk_dms.category_015_benchmark,muk_dms.tag_056_benchmark +muk_dms.directory_469_benchmark,D_0469,muk_dms.directory_023_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_103_benchmark +muk_dms.directory_470_benchmark,D_0470,muk_dms.directory_103_benchmark,,,muk_dms.category_019_benchmark,muk_dms.tag_125_benchmark +muk_dms.directory_471_benchmark,D_0471,muk_dms.directory_468_benchmark,,,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark +muk_dms.directory_472_benchmark,D_0472,muk_dms.directory_047_benchmark,,,muk_dms.category_049_benchmark,muk_dms.tag_035_benchmark +muk_dms.directory_473_benchmark,D_0473,muk_dms.directory_254_benchmark,,,muk_dms.category_019_benchmark,muk_dms.tag_125_benchmark +muk_dms.directory_474_benchmark,D_0474,muk_dms.directory_200_benchmark,,,muk_dms.category_018_benchmark,muk_dms.tag_133_benchmark +muk_dms.directory_475_benchmark,D_0475,muk_dms.directory_247_benchmark,,,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark +muk_dms.directory_476_benchmark,D_0476,muk_dms.directory_099_benchmark,,,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark +muk_dms.directory_477_benchmark,D_0477,muk_dms.directory_258_benchmark,,,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark +muk_dms.directory_478_benchmark,D_0478,muk_dms.directory_235_benchmark,,,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark +muk_dms.directory_479_benchmark,D_0479,muk_dms.directory_361_benchmark,,,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark +muk_dms.directory_480_benchmark,D_0480,muk_dms.directory_027_benchmark,,,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark +muk_dms.directory_481_benchmark,D_0481,muk_dms.directory_207_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark +muk_dms.directory_482_benchmark,D_0482,muk_dms.directory_331_benchmark,,,,muk_dms.tag_123_benchmark +muk_dms.directory_483_benchmark,D_0483,muk_dms.directory_381_benchmark,,,,muk_dms.tag_063_benchmark +muk_dms.directory_484_benchmark,D_0484,muk_dms.directory_180_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark +muk_dms.directory_485_benchmark,D_0485,muk_dms.directory_470_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark +muk_dms.directory_486_benchmark,D_0486,muk_dms.directory_160_benchmark,,,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark +muk_dms.directory_487_benchmark,D_0487,muk_dms.directory_307_benchmark,,,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark +muk_dms.directory_488_benchmark,D_0488,muk_dms.directory_376_benchmark,,,,muk_dms.tag_090_benchmark +muk_dms.directory_489_benchmark,D_0489,muk_dms.directory_371_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark +muk_dms.directory_490_benchmark,D_0490,muk_dms.directory_329_benchmark,,,,muk_dms.tag_086_benchmark +muk_dms.directory_491_benchmark,D_0491,muk_dms.directory_065_benchmark,,,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark +muk_dms.directory_492_benchmark,D_0492,muk_dms.directory_159_benchmark,,,, +muk_dms.directory_493_benchmark,D_0493,muk_dms.directory_261_benchmark,,,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark +muk_dms.directory_494_benchmark,D_0494,muk_dms.directory_398_benchmark,,,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark +muk_dms.directory_495_benchmark,D_0495,muk_dms.directory_028_benchmark,,,muk_dms.category_031_benchmark,muk_dms.tag_114_benchmark +muk_dms.directory_496_benchmark,D_0496,muk_dms.directory_284_benchmark,,,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark +muk_dms.directory_497_benchmark,D_0497,muk_dms.directory_160_benchmark,,,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark +muk_dms.directory_498_benchmark,D_0498,muk_dms.directory_321_benchmark,,,, +muk_dms.directory_499_benchmark,D_0499,muk_dms.directory_075_benchmark,,,,muk_dms.tag_086_benchmark +muk_dms.directory_500_benchmark,D_0500,muk_dms.directory_385_benchmark,,,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark diff --git a/odex-event/muk_dms/tests/data/muk_dms.file.csv b/odex-event/muk_dms/tests/data/muk_dms.file.csv new file mode 100644 index 000000000..165463f04 --- /dev/null +++ b/odex-event/muk_dms/tests/data/muk_dms.file.csv @@ -0,0 +1,1501 @@ +id,name,directory/id,category/id,tags/id,content +muk_dms.file_0001_benchmark,F_0001.txt,muk_dms.directory_152_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0002_benchmark,F_0002.txt,muk_dms.directory_456_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0003_benchmark,F_0003.txt,muk_dms.directory_183_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0004_benchmark,F_0004.txt,muk_dms.directory_024_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0005_benchmark,F_0005.txt,muk_dms.directory_305_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0006_benchmark,F_0006.txt,muk_dms.directory_449_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0007_benchmark,F_0007.txt,muk_dms.directory_178_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0008_benchmark,F_0008.txt,muk_dms.directory_406_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0009_benchmark,F_0009.txt,muk_dms.directory_405_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0010_benchmark,F_0010.txt,muk_dms.directory_050_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0011_benchmark,F_0011.txt,muk_dms.directory_120_benchmark,,muk_dms.tag_130_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0012_benchmark,F_0012.txt,muk_dms.directory_010_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0013_benchmark,F_0013.txt,muk_dms.directory_214_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0014_benchmark,F_0014.txt,muk_dms.directory_490_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0015_benchmark,F_0015.txt,muk_dms.directory_435_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0016_benchmark,F_0016.txt,muk_dms.directory_337_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0017_benchmark,F_0017.txt,muk_dms.directory_146_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0018_benchmark,F_0018.txt,muk_dms.directory_260_benchmark,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0019_benchmark,F_0019.txt,muk_dms.directory_483_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0020_benchmark,F_0020.txt,muk_dms.directory_200_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0021_benchmark,F_0021.txt,muk_dms.directory_426_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0022_benchmark,F_0022.txt,muk_dms.directory_284_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0023_benchmark,F_0023.txt,muk_dms.directory_463_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0024_benchmark,F_0024.txt,muk_dms.directory_010_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0025_benchmark,F_0025.txt,muk_dms.directory_077_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0026_benchmark,F_0026.txt,muk_dms.directory_131_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0027_benchmark,F_0027.txt,muk_dms.directory_072_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0028_benchmark,F_0028.txt,muk_dms.directory_439_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0029_benchmark,F_0029.txt,muk_dms.directory_314_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0030_benchmark,F_0030.txt,muk_dms.directory_049_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0031_benchmark,F_0031.txt,muk_dms.directory_272_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0032_benchmark,F_0032.txt,muk_dms.directory_193_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0033_benchmark,F_0033.txt,muk_dms.directory_151_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0034_benchmark,F_0034.txt,muk_dms.directory_482_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0035_benchmark,F_0035.txt,muk_dms.directory_317_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0036_benchmark,F_0036.txt,muk_dms.directory_203_benchmark,,muk_dms.tag_070_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0037_benchmark,F_0037.txt,muk_dms.directory_291_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0038_benchmark,F_0038.txt,muk_dms.directory_191_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0039_benchmark,F_0039.txt,muk_dms.directory_463_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0040_benchmark,F_0040.txt,muk_dms.directory_036_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0041_benchmark,F_0041.txt,muk_dms.directory_280_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0042_benchmark,F_0042.txt,muk_dms.directory_366_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0043_benchmark,F_0043.txt,muk_dms.directory_322_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0044_benchmark,F_0044.txt,muk_dms.directory_271_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0045_benchmark,F_0045.txt,muk_dms.directory_339_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0046_benchmark,F_0046.txt,muk_dms.directory_011_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0047_benchmark,F_0047.txt,muk_dms.directory_281_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0048_benchmark,F_0048.txt,muk_dms.directory_314_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0049_benchmark,F_0049.txt,muk_dms.directory_022_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0050_benchmark,F_0050.txt,muk_dms.directory_308_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0051_benchmark,F_0051.txt,muk_dms.directory_138_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0052_benchmark,F_0052.txt,muk_dms.directory_332_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0053_benchmark,F_0053.txt,muk_dms.directory_173_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0054_benchmark,F_0054.txt,muk_dms.directory_499_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0055_benchmark,F_0055.txt,muk_dms.directory_184_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0056_benchmark,F_0056.txt,muk_dms.directory_067_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0057_benchmark,F_0057.txt,muk_dms.directory_196_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0058_benchmark,F_0058.txt,muk_dms.directory_222_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0059_benchmark,F_0059.txt,muk_dms.directory_360_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0060_benchmark,F_0060.txt,muk_dms.directory_260_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0061_benchmark,F_0061.txt,muk_dms.directory_333_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0062_benchmark,F_0062.txt,muk_dms.directory_491_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0063_benchmark,F_0063.txt,muk_dms.directory_408_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0064_benchmark,F_0064.txt,muk_dms.directory_210_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0065_benchmark,F_0065.txt,muk_dms.directory_112_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0066_benchmark,F_0066.txt,muk_dms.directory_090_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0067_benchmark,F_0067.txt,muk_dms.directory_207_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0068_benchmark,F_0068.txt,muk_dms.directory_078_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0069_benchmark,F_0069.txt,muk_dms.directory_445_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0070_benchmark,F_0070.txt,muk_dms.directory_408_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0071_benchmark,F_0071.txt,muk_dms.directory_014_benchmark,,muk_dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0072_benchmark,F_0072.txt,muk_dms.directory_065_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0073_benchmark,F_0073.txt,muk_dms.directory_212_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0074_benchmark,F_0074.txt,muk_dms.directory_297_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0075_benchmark,F_0075.txt,muk_dms.directory_485_benchmark,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0076_benchmark,F_0076.txt,muk_dms.directory_341_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0077_benchmark,F_0077.txt,muk_dms.directory_175_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0078_benchmark,F_0078.txt,muk_dms.directory_202_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0079_benchmark,F_0079.txt,muk_dms.directory_392_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0080_benchmark,F_0080.txt,muk_dms.directory_336_benchmark,muk_dms.category_006_benchmark,muk_dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0081_benchmark,F_0081.txt,muk_dms.directory_427_benchmark,,muk_dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0082_benchmark,F_0082.txt,muk_dms.directory_404_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0083_benchmark,F_0083.txt,muk_dms.directory_114_benchmark,,muk_dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0084_benchmark,F_0084.txt,muk_dms.directory_281_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0085_benchmark,F_0085.txt,muk_dms.directory_269_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0086_benchmark,F_0086.txt,muk_dms.directory_145_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0087_benchmark,F_0087.txt,muk_dms.directory_105_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0088_benchmark,F_0088.txt,muk_dms.directory_452_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0089_benchmark,F_0089.txt,muk_dms.directory_101_benchmark,,muk_dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0090_benchmark,F_0090.txt,muk_dms.directory_387_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0091_benchmark,F_0091.txt,muk_dms.directory_145_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0092_benchmark,F_0092.txt,muk_dms.directory_320_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0093_benchmark,F_0093.txt,muk_dms.directory_169_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0094_benchmark,F_0094.txt,muk_dms.directory_171_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0095_benchmark,F_0095.txt,muk_dms.directory_088_benchmark,,muk_dms.tag_004_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0096_benchmark,F_0096.txt,muk_dms.directory_471_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0097_benchmark,F_0097.txt,muk_dms.directory_442_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0098_benchmark,F_0098.txt,muk_dms.directory_104_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0099_benchmark,F_0099.txt,muk_dms.directory_398_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0100_benchmark,F_0100.txt,muk_dms.directory_197_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0101_benchmark,F_0101.txt,muk_dms.directory_194_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0102_benchmark,F_0102.txt,muk_dms.directory_298_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0103_benchmark,F_0103.txt,muk_dms.directory_150_benchmark,muk_dms.category_044_benchmark,muk_dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0104_benchmark,F_0104.txt,muk_dms.directory_287_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0105_benchmark,F_0105.txt,muk_dms.directory_419_benchmark,,muk_dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0106_benchmark,F_0106.txt,muk_dms.directory_355_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0107_benchmark,F_0107.txt,muk_dms.directory_462_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0108_benchmark,F_0108.txt,muk_dms.directory_386_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0109_benchmark,F_0109.txt,muk_dms.directory_245_benchmark,muk_dms.category_009_benchmark,muk_dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0110_benchmark,F_0110.txt,muk_dms.directory_309_benchmark,,muk_dms.tag_124_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0111_benchmark,F_0111.txt,muk_dms.directory_208_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0112_benchmark,F_0112.txt,muk_dms.directory_416_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0113_benchmark,F_0113.txt,muk_dms.directory_026_benchmark,,muk_dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0114_benchmark,F_0114.txt,muk_dms.directory_253_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0115_benchmark,F_0115.txt,muk_dms.directory_190_benchmark,,muk_dms.tag_075_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0116_benchmark,F_0116.txt,muk_dms.directory_017_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0117_benchmark,F_0117.txt,muk_dms.directory_159_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0118_benchmark,F_0118.txt,muk_dms.directory_094_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0119_benchmark,F_0119.txt,muk_dms.directory_132_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0120_benchmark,F_0120.txt,muk_dms.directory_278_benchmark,,muk_dms.tag_137_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0121_benchmark,F_0121.txt,muk_dms.directory_064_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0122_benchmark,F_0122.txt,muk_dms.directory_141_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0123_benchmark,F_0123.txt,muk_dms.directory_372_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0124_benchmark,F_0124.txt,muk_dms.directory_074_benchmark,,muk_dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0125_benchmark,F_0125.txt,muk_dms.directory_262_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0126_benchmark,F_0126.txt,muk_dms.directory_466_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0127_benchmark,F_0127.txt,muk_dms.directory_316_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0128_benchmark,F_0128.txt,muk_dms.directory_411_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0129_benchmark,F_0129.txt,muk_dms.directory_288_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0130_benchmark,F_0130.txt,muk_dms.directory_401_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0131_benchmark,F_0131.txt,muk_dms.directory_490_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_102_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0132_benchmark,F_0132.txt,muk_dms.directory_317_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0133_benchmark,F_0133.txt,muk_dms.directory_413_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0134_benchmark,F_0134.txt,muk_dms.directory_063_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0135_benchmark,F_0135.txt,muk_dms.directory_450_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0136_benchmark,F_0136.txt,muk_dms.directory_268_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0137_benchmark,F_0137.txt,muk_dms.directory_493_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0138_benchmark,F_0138.txt,muk_dms.directory_252_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0139_benchmark,F_0139.txt,muk_dms.directory_456_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0140_benchmark,F_0140.txt,muk_dms.directory_134_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0141_benchmark,F_0141.txt,muk_dms.directory_306_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0142_benchmark,F_0142.txt,muk_dms.directory_074_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0143_benchmark,F_0143.txt,muk_dms.directory_064_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0144_benchmark,F_0144.txt,muk_dms.directory_330_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0145_benchmark,F_0145.txt,muk_dms.directory_390_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0146_benchmark,F_0146.txt,muk_dms.directory_409_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0147_benchmark,F_0147.txt,muk_dms.directory_354_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0148_benchmark,F_0148.txt,muk_dms.directory_335_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0149_benchmark,F_0149.txt,muk_dms.directory_032_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0150_benchmark,F_0150.txt,muk_dms.directory_164_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0151_benchmark,F_0151.txt,muk_dms.directory_202_benchmark,muk_dms.category_008_benchmark,muk_dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0152_benchmark,F_0152.txt,muk_dms.directory_456_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0153_benchmark,F_0153.txt,muk_dms.directory_250_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0154_benchmark,F_0154.txt,muk_dms.directory_252_benchmark,,muk_dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0155_benchmark,F_0155.txt,muk_dms.directory_451_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0156_benchmark,F_0156.txt,muk_dms.directory_151_benchmark,muk_dms.category_009_benchmark,muk_dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0157_benchmark,F_0157.txt,muk_dms.directory_369_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0158_benchmark,F_0158.txt,muk_dms.directory_409_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0159_benchmark,F_0159.txt,muk_dms.directory_061_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0160_benchmark,F_0160.txt,muk_dms.directory_403_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0161_benchmark,F_0161.txt,muk_dms.directory_135_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0162_benchmark,F_0162.txt,muk_dms.directory_273_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0163_benchmark,F_0163.txt,muk_dms.directory_028_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0164_benchmark,F_0164.txt,muk_dms.directory_146_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0165_benchmark,F_0165.txt,muk_dms.directory_470_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0166_benchmark,F_0166.txt,muk_dms.directory_132_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0167_benchmark,F_0167.txt,muk_dms.directory_237_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0168_benchmark,F_0168.txt,muk_dms.directory_330_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0169_benchmark,F_0169.txt,muk_dms.directory_163_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0170_benchmark,F_0170.txt,muk_dms.directory_355_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0171_benchmark,F_0171.txt,muk_dms.directory_154_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0172_benchmark,F_0172.txt,muk_dms.directory_155_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0173_benchmark,F_0173.txt,muk_dms.directory_125_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0174_benchmark,F_0174.txt,muk_dms.directory_214_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0175_benchmark,F_0175.txt,muk_dms.directory_081_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0176_benchmark,F_0176.txt,muk_dms.directory_238_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0177_benchmark,F_0177.txt,muk_dms.directory_079_benchmark,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0178_benchmark,F_0178.txt,muk_dms.directory_384_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0179_benchmark,F_0179.txt,muk_dms.directory_174_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0180_benchmark,F_0180.txt,muk_dms.directory_444_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0181_benchmark,F_0181.txt,muk_dms.directory_184_benchmark,,muk_dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0182_benchmark,F_0182.txt,muk_dms.directory_115_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0183_benchmark,F_0183.txt,muk_dms.directory_414_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0184_benchmark,F_0184.txt,muk_dms.directory_267_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0185_benchmark,F_0185.txt,muk_dms.directory_231_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0186_benchmark,F_0186.txt,muk_dms.directory_207_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0187_benchmark,F_0187.txt,muk_dms.directory_461_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0188_benchmark,F_0188.txt,muk_dms.directory_146_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0189_benchmark,F_0189.txt,muk_dms.directory_395_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0190_benchmark,F_0190.txt,muk_dms.directory_218_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0191_benchmark,F_0191.txt,muk_dms.directory_459_benchmark,,muk_dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0192_benchmark,F_0192.txt,muk_dms.directory_129_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0193_benchmark,F_0193.txt,muk_dms.directory_327_benchmark,,muk_dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0194_benchmark,F_0194.txt,muk_dms.directory_438_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0195_benchmark,F_0195.txt,muk_dms.directory_444_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0196_benchmark,F_0196.txt,muk_dms.directory_025_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0197_benchmark,F_0197.txt,muk_dms.directory_444_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_105_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0198_benchmark,F_0198.txt,muk_dms.directory_494_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0199_benchmark,F_0199.txt,muk_dms.directory_432_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0200_benchmark,F_0200.txt,muk_dms.directory_209_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_116_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0201_benchmark,F_0201.txt,muk_dms.directory_182_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0202_benchmark,F_0202.txt,muk_dms.directory_214_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0203_benchmark,F_0203.txt,muk_dms.directory_490_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0204_benchmark,F_0204.txt,muk_dms.directory_272_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0205_benchmark,F_0205.txt,muk_dms.directory_163_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0206_benchmark,F_0206.txt,muk_dms.directory_435_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0207_benchmark,F_0207.txt,muk_dms.directory_068_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0208_benchmark,F_0208.txt,muk_dms.directory_459_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0209_benchmark,F_0209.txt,muk_dms.directory_413_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0210_benchmark,F_0210.txt,muk_dms.directory_128_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0211_benchmark,F_0211.txt,muk_dms.directory_417_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0212_benchmark,F_0212.txt,muk_dms.directory_278_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0213_benchmark,F_0213.txt,muk_dms.directory_212_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0214_benchmark,F_0214.txt,muk_dms.directory_277_benchmark,,muk_dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0215_benchmark,F_0215.txt,muk_dms.directory_291_benchmark,,muk_dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0216_benchmark,F_0216.txt,muk_dms.directory_074_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0217_benchmark,F_0217.txt,muk_dms.directory_154_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0218_benchmark,F_0218.txt,muk_dms.directory_466_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0219_benchmark,F_0219.txt,muk_dms.directory_103_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0220_benchmark,F_0220.txt,muk_dms.directory_396_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0221_benchmark,F_0221.txt,muk_dms.directory_467_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0222_benchmark,F_0222.txt,muk_dms.directory_300_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0223_benchmark,F_0223.txt,muk_dms.directory_168_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0224_benchmark,F_0224.txt,muk_dms.directory_313_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0225_benchmark,F_0225.txt,muk_dms.directory_103_benchmark,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0226_benchmark,F_0226.txt,muk_dms.directory_175_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0227_benchmark,F_0227.txt,muk_dms.directory_283_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0228_benchmark,F_0228.txt,muk_dms.directory_494_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_098_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0229_benchmark,F_0229.txt,muk_dms.directory_452_benchmark,muk_dms.category_006_benchmark,muk_dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0230_benchmark,F_0230.txt,muk_dms.directory_393_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0231_benchmark,F_0231.txt,muk_dms.directory_122_benchmark,,muk_dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0232_benchmark,F_0232.txt,muk_dms.directory_186_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0233_benchmark,F_0233.txt,muk_dms.directory_314_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0234_benchmark,F_0234.txt,muk_dms.directory_075_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0235_benchmark,F_0235.txt,muk_dms.directory_092_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0236_benchmark,F_0236.txt,muk_dms.directory_379_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0237_benchmark,F_0237.txt,muk_dms.directory_412_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0238_benchmark,F_0238.txt,muk_dms.directory_308_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0239_benchmark,F_0239.txt,muk_dms.directory_389_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0240_benchmark,F_0240.txt,muk_dms.directory_145_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0241_benchmark,F_0241.txt,muk_dms.directory_126_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0242_benchmark,F_0242.txt,muk_dms.directory_025_benchmark,,muk_dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0243_benchmark,F_0243.txt,muk_dms.directory_428_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0244_benchmark,F_0244.txt,muk_dms.directory_295_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0245_benchmark,F_0245.txt,muk_dms.directory_083_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0246_benchmark,F_0246.txt,muk_dms.directory_436_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0247_benchmark,F_0247.txt,muk_dms.directory_449_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0248_benchmark,F_0248.txt,muk_dms.directory_256_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0249_benchmark,F_0249.txt,muk_dms.directory_343_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0250_benchmark,F_0250.txt,muk_dms.directory_067_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0251_benchmark,F_0251.txt,muk_dms.directory_363_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0252_benchmark,F_0252.txt,muk_dms.directory_275_benchmark,,muk_dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0253_benchmark,F_0253.txt,muk_dms.directory_360_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0254_benchmark,F_0254.txt,muk_dms.directory_395_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0255_benchmark,F_0255.txt,muk_dms.directory_426_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0256_benchmark,F_0256.txt,muk_dms.directory_074_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0257_benchmark,F_0257.txt,muk_dms.directory_098_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0258_benchmark,F_0258.txt,muk_dms.directory_358_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0259_benchmark,F_0259.txt,muk_dms.directory_322_benchmark,,muk_dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0260_benchmark,F_0260.txt,muk_dms.directory_150_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0261_benchmark,F_0261.txt,muk_dms.directory_117_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0262_benchmark,F_0262.txt,muk_dms.directory_122_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0263_benchmark,F_0263.txt,muk_dms.directory_268_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0264_benchmark,F_0264.txt,muk_dms.directory_298_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0265_benchmark,F_0265.txt,muk_dms.directory_254_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0266_benchmark,F_0266.txt,muk_dms.directory_171_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0267_benchmark,F_0267.txt,muk_dms.directory_298_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0268_benchmark,F_0268.txt,muk_dms.directory_057_benchmark,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0269_benchmark,F_0269.txt,muk_dms.directory_011_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0270_benchmark,F_0270.txt,muk_dms.directory_154_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0271_benchmark,F_0271.txt,muk_dms.directory_162_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0272_benchmark,F_0272.txt,muk_dms.directory_406_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0273_benchmark,F_0273.txt,muk_dms.directory_118_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0274_benchmark,F_0274.txt,muk_dms.directory_256_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0275_benchmark,F_0275.txt,muk_dms.directory_453_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0276_benchmark,F_0276.txt,muk_dms.directory_024_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0277_benchmark,F_0277.txt,muk_dms.directory_237_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0278_benchmark,F_0278.txt,muk_dms.directory_039_benchmark,,muk_dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0279_benchmark,F_0279.txt,muk_dms.directory_134_benchmark,,muk_dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0280_benchmark,F_0280.txt,muk_dms.directory_085_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0281_benchmark,F_0281.txt,muk_dms.directory_113_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0282_benchmark,F_0282.txt,muk_dms.directory_091_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0283_benchmark,F_0283.txt,muk_dms.directory_040_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0284_benchmark,F_0284.txt,muk_dms.directory_141_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0285_benchmark,F_0285.txt,muk_dms.directory_068_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0286_benchmark,F_0286.txt,muk_dms.directory_105_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0287_benchmark,F_0287.txt,muk_dms.directory_072_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0288_benchmark,F_0288.txt,muk_dms.directory_479_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0289_benchmark,F_0289.txt,muk_dms.directory_037_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0290_benchmark,F_0290.txt,muk_dms.directory_337_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0291_benchmark,F_0291.txt,muk_dms.directory_088_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0292_benchmark,F_0292.txt,muk_dms.directory_329_benchmark,,muk_dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0293_benchmark,F_0293.txt,muk_dms.directory_215_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0294_benchmark,F_0294.txt,muk_dms.directory_269_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0295_benchmark,F_0295.txt,muk_dms.directory_124_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0296_benchmark,F_0296.txt,muk_dms.directory_188_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0297_benchmark,F_0297.txt,muk_dms.directory_474_benchmark,,muk_dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0298_benchmark,F_0298.txt,muk_dms.directory_220_benchmark,,muk_dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0299_benchmark,F_0299.txt,muk_dms.directory_342_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0300_benchmark,F_0300.txt,muk_dms.directory_194_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0301_benchmark,F_0301.txt,muk_dms.directory_359_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0302_benchmark,F_0302.txt,muk_dms.directory_198_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0303_benchmark,F_0303.txt,muk_dms.directory_077_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0304_benchmark,F_0304.txt,muk_dms.directory_203_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0305_benchmark,F_0305.txt,muk_dms.directory_112_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0306_benchmark,F_0306.txt,muk_dms.directory_314_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0307_benchmark,F_0307.txt,muk_dms.directory_090_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0308_benchmark,F_0308.txt,muk_dms.directory_488_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0309_benchmark,F_0309.txt,muk_dms.directory_444_benchmark,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0310_benchmark,F_0310.txt,muk_dms.directory_277_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0311_benchmark,F_0311.txt,muk_dms.directory_388_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0312_benchmark,F_0312.txt,muk_dms.directory_461_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0313_benchmark,F_0313.txt,muk_dms.directory_173_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0314_benchmark,F_0314.txt,muk_dms.directory_012_benchmark,,muk_dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0315_benchmark,F_0315.txt,muk_dms.directory_092_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0316_benchmark,F_0316.txt,muk_dms.directory_299_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0317_benchmark,F_0317.txt,muk_dms.directory_477_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0318_benchmark,F_0318.txt,muk_dms.directory_442_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0319_benchmark,F_0319.txt,muk_dms.directory_440_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0320_benchmark,F_0320.txt,muk_dms.directory_211_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0321_benchmark,F_0321.txt,muk_dms.directory_284_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0322_benchmark,F_0322.txt,muk_dms.directory_347_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0323_benchmark,F_0323.txt,muk_dms.directory_489_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0324_benchmark,F_0324.txt,muk_dms.directory_393_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0325_benchmark,F_0325.txt,muk_dms.directory_047_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0326_benchmark,F_0326.txt,muk_dms.directory_362_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0327_benchmark,F_0327.txt,muk_dms.directory_455_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0328_benchmark,F_0328.txt,muk_dms.directory_021_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0329_benchmark,F_0329.txt,muk_dms.directory_010_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0330_benchmark,F_0330.txt,muk_dms.directory_327_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0331_benchmark,F_0331.txt,muk_dms.directory_220_benchmark,,muk_dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0332_benchmark,F_0332.txt,muk_dms.directory_190_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0333_benchmark,F_0333.txt,muk_dms.directory_040_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0334_benchmark,F_0334.txt,muk_dms.directory_013_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0335_benchmark,F_0335.txt,muk_dms.directory_184_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0336_benchmark,F_0336.txt,muk_dms.directory_212_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0337_benchmark,F_0337.txt,muk_dms.directory_458_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0338_benchmark,F_0338.txt,muk_dms.directory_015_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0339_benchmark,F_0339.txt,muk_dms.directory_131_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0340_benchmark,F_0340.txt,muk_dms.directory_261_benchmark,,muk_dms.tag_060_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0341_benchmark,F_0341.txt,muk_dms.directory_308_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0342_benchmark,F_0342.txt,muk_dms.directory_343_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0343_benchmark,F_0343.txt,muk_dms.directory_077_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0344_benchmark,F_0344.txt,muk_dms.directory_327_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0345_benchmark,F_0345.txt,muk_dms.directory_052_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0346_benchmark,F_0346.txt,muk_dms.directory_125_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_067_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0347_benchmark,F_0347.txt,muk_dms.directory_310_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0348_benchmark,F_0348.txt,muk_dms.directory_181_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0349_benchmark,F_0349.txt,muk_dms.directory_066_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0350_benchmark,F_0350.txt,muk_dms.directory_438_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0351_benchmark,F_0351.txt,muk_dms.directory_416_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0352_benchmark,F_0352.txt,muk_dms.directory_190_benchmark,,muk_dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0353_benchmark,F_0353.txt,muk_dms.directory_033_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0354_benchmark,F_0354.txt,muk_dms.directory_256_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0355_benchmark,F_0355.txt,muk_dms.directory_082_benchmark,,muk_dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0356_benchmark,F_0356.txt,muk_dms.directory_018_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0357_benchmark,F_0357.txt,muk_dms.directory_074_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0358_benchmark,F_0358.txt,muk_dms.directory_260_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0359_benchmark,F_0359.txt,muk_dms.directory_398_benchmark,,muk_dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0360_benchmark,F_0360.txt,muk_dms.directory_104_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0361_benchmark,F_0361.txt,muk_dms.directory_137_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0362_benchmark,F_0362.txt,muk_dms.directory_225_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0363_benchmark,F_0363.txt,muk_dms.directory_230_benchmark,,muk_dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0364_benchmark,F_0364.txt,muk_dms.directory_103_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0365_benchmark,F_0365.txt,muk_dms.directory_276_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0366_benchmark,F_0366.txt,muk_dms.directory_181_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0367_benchmark,F_0367.txt,muk_dms.directory_331_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0368_benchmark,F_0368.txt,muk_dms.directory_222_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0369_benchmark,F_0369.txt,muk_dms.directory_498_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0370_benchmark,F_0370.txt,muk_dms.directory_041_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0371_benchmark,F_0371.txt,muk_dms.directory_007_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0372_benchmark,F_0372.txt,muk_dms.directory_293_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0373_benchmark,F_0373.txt,muk_dms.directory_028_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0374_benchmark,F_0374.txt,muk_dms.directory_354_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0375_benchmark,F_0375.txt,muk_dms.directory_031_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0376_benchmark,F_0376.txt,muk_dms.directory_338_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0377_benchmark,F_0377.txt,muk_dms.directory_336_benchmark,muk_dms.category_044_benchmark,muk_dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0378_benchmark,F_0378.txt,muk_dms.directory_169_benchmark,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0379_benchmark,F_0379.txt,muk_dms.directory_044_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0380_benchmark,F_0380.txt,muk_dms.directory_442_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0381_benchmark,F_0381.txt,muk_dms.directory_147_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0382_benchmark,F_0382.txt,muk_dms.directory_413_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0383_benchmark,F_0383.txt,muk_dms.directory_059_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0384_benchmark,F_0384.txt,muk_dms.directory_235_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0385_benchmark,F_0385.txt,muk_dms.directory_051_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0386_benchmark,F_0386.txt,muk_dms.directory_235_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0387_benchmark,F_0387.txt,muk_dms.directory_278_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0388_benchmark,F_0388.txt,muk_dms.directory_474_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0389_benchmark,F_0389.txt,muk_dms.directory_290_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0390_benchmark,F_0390.txt,muk_dms.directory_164_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_031_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0391_benchmark,F_0391.txt,muk_dms.directory_275_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0392_benchmark,F_0392.txt,muk_dms.directory_041_benchmark,muk_dms.category_029_benchmark,muk_dms.tag_005_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0393_benchmark,F_0393.txt,muk_dms.directory_168_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0394_benchmark,F_0394.txt,muk_dms.directory_457_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0395_benchmark,F_0395.txt,muk_dms.directory_274_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0396_benchmark,F_0396.txt,muk_dms.directory_261_benchmark,,muk_dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0397_benchmark,F_0397.txt,muk_dms.directory_481_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0398_benchmark,F_0398.txt,muk_dms.directory_161_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0399_benchmark,F_0399.txt,muk_dms.directory_173_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_120_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0400_benchmark,F_0400.txt,muk_dms.directory_238_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0401_benchmark,F_0401.txt,muk_dms.directory_382_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0402_benchmark,F_0402.txt,muk_dms.directory_019_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0403_benchmark,F_0403.txt,muk_dms.directory_201_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0404_benchmark,F_0404.txt,muk_dms.directory_211_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0405_benchmark,F_0405.txt,muk_dms.directory_155_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0406_benchmark,F_0406.txt,muk_dms.directory_159_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0407_benchmark,F_0407.txt,muk_dms.directory_188_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0408_benchmark,F_0408.txt,muk_dms.directory_252_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0409_benchmark,F_0409.txt,muk_dms.directory_410_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0410_benchmark,F_0410.txt,muk_dms.directory_470_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0411_benchmark,F_0411.txt,muk_dms.directory_028_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0412_benchmark,F_0412.txt,muk_dms.directory_064_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0413_benchmark,F_0413.txt,muk_dms.directory_440_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0414_benchmark,F_0414.txt,muk_dms.directory_184_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0415_benchmark,F_0415.txt,muk_dms.directory_396_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0416_benchmark,F_0416.txt,muk_dms.directory_336_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0417_benchmark,F_0417.txt,muk_dms.directory_204_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0418_benchmark,F_0418.txt,muk_dms.directory_124_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0419_benchmark,F_0419.txt,muk_dms.directory_032_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0420_benchmark,F_0420.txt,muk_dms.directory_343_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0421_benchmark,F_0421.txt,muk_dms.directory_114_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0422_benchmark,F_0422.txt,muk_dms.directory_050_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0423_benchmark,F_0423.txt,muk_dms.directory_020_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0424_benchmark,F_0424.txt,muk_dms.directory_152_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0425_benchmark,F_0425.txt,muk_dms.directory_140_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0426_benchmark,F_0426.txt,muk_dms.directory_175_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0427_benchmark,F_0427.txt,muk_dms.directory_231_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0428_benchmark,F_0428.txt,muk_dms.directory_069_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0429_benchmark,F_0429.txt,muk_dms.directory_094_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0430_benchmark,F_0430.txt,muk_dms.directory_379_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0431_benchmark,F_0431.txt,muk_dms.directory_161_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0432_benchmark,F_0432.txt,muk_dms.directory_483_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0433_benchmark,F_0433.txt,muk_dms.directory_043_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0434_benchmark,F_0434.txt,muk_dms.directory_313_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0435_benchmark,F_0435.txt,muk_dms.directory_339_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0436_benchmark,F_0436.txt,muk_dms.directory_118_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0437_benchmark,F_0437.txt,muk_dms.directory_373_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0438_benchmark,F_0438.txt,muk_dms.directory_496_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0439_benchmark,F_0439.txt,muk_dms.directory_343_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0440_benchmark,F_0440.txt,muk_dms.directory_422_benchmark,,muk_dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0441_benchmark,F_0441.txt,muk_dms.directory_288_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0442_benchmark,F_0442.txt,muk_dms.directory_389_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0443_benchmark,F_0443.txt,muk_dms.directory_128_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0444_benchmark,F_0444.txt,muk_dms.directory_266_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0445_benchmark,F_0445.txt,muk_dms.directory_438_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0446_benchmark,F_0446.txt,muk_dms.directory_028_benchmark,,muk_dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0447_benchmark,F_0447.txt,muk_dms.directory_087_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0448_benchmark,F_0448.txt,muk_dms.directory_214_benchmark,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0449_benchmark,F_0449.txt,muk_dms.directory_048_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0450_benchmark,F_0450.txt,muk_dms.directory_375_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0451_benchmark,F_0451.txt,muk_dms.directory_271_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0452_benchmark,F_0452.txt,muk_dms.directory_286_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0453_benchmark,F_0453.txt,muk_dms.directory_271_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0454_benchmark,F_0454.txt,muk_dms.directory_145_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0455_benchmark,F_0455.txt,muk_dms.directory_096_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0456_benchmark,F_0456.txt,muk_dms.directory_146_benchmark,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0457_benchmark,F_0457.txt,muk_dms.directory_136_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0458_benchmark,F_0458.txt,muk_dms.directory_190_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0459_benchmark,F_0459.txt,muk_dms.directory_449_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0460_benchmark,F_0460.txt,muk_dms.directory_172_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0461_benchmark,F_0461.txt,muk_dms.directory_127_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0462_benchmark,F_0462.txt,muk_dms.directory_219_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0463_benchmark,F_0463.txt,muk_dms.directory_095_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0464_benchmark,F_0464.txt,muk_dms.directory_296_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0465_benchmark,F_0465.txt,muk_dms.directory_321_benchmark,muk_dms.category_008_benchmark,muk_dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0466_benchmark,F_0466.txt,muk_dms.directory_252_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0467_benchmark,F_0467.txt,muk_dms.directory_297_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0468_benchmark,F_0468.txt,muk_dms.directory_338_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0469_benchmark,F_0469.txt,muk_dms.directory_277_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_103_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0470_benchmark,F_0470.txt,muk_dms.directory_457_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0471_benchmark,F_0471.txt,muk_dms.directory_011_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0472_benchmark,F_0472.txt,muk_dms.directory_273_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0473_benchmark,F_0473.txt,muk_dms.directory_011_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0474_benchmark,F_0474.txt,muk_dms.directory_246_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0475_benchmark,F_0475.txt,muk_dms.directory_129_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0476_benchmark,F_0476.txt,muk_dms.directory_248_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0477_benchmark,F_0477.txt,muk_dms.directory_024_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0478_benchmark,F_0478.txt,muk_dms.directory_121_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0479_benchmark,F_0479.txt,muk_dms.directory_097_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0480_benchmark,F_0480.txt,muk_dms.directory_184_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0481_benchmark,F_0481.txt,muk_dms.directory_347_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0482_benchmark,F_0482.txt,muk_dms.directory_448_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0483_benchmark,F_0483.txt,muk_dms.directory_283_benchmark,,muk_dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0484_benchmark,F_0484.txt,muk_dms.directory_409_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0485_benchmark,F_0485.txt,muk_dms.directory_090_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0486_benchmark,F_0486.txt,muk_dms.directory_172_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0487_benchmark,F_0487.txt,muk_dms.directory_096_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0488_benchmark,F_0488.txt,muk_dms.directory_334_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0489_benchmark,F_0489.txt,muk_dms.directory_145_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0490_benchmark,F_0490.txt,muk_dms.directory_383_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0491_benchmark,F_0491.txt,muk_dms.directory_222_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0492_benchmark,F_0492.txt,muk_dms.directory_007_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0493_benchmark,F_0493.txt,muk_dms.directory_483_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0494_benchmark,F_0494.txt,muk_dms.directory_276_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0495_benchmark,F_0495.txt,muk_dms.directory_476_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0496_benchmark,F_0496.txt,muk_dms.directory_142_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0497_benchmark,F_0497.txt,muk_dms.directory_500_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0498_benchmark,F_0498.txt,muk_dms.directory_327_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0499_benchmark,F_0499.txt,muk_dms.directory_260_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0500_benchmark,F_0500.txt,muk_dms.directory_205_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0501_benchmark,F_0501.txt,muk_dms.directory_354_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0502_benchmark,F_0502.txt,muk_dms.directory_302_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0503_benchmark,F_0503.txt,muk_dms.directory_486_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0504_benchmark,F_0504.txt,muk_dms.directory_056_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0505_benchmark,F_0505.txt,muk_dms.directory_037_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0506_benchmark,F_0506.txt,muk_dms.directory_205_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0507_benchmark,F_0507.txt,muk_dms.directory_291_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0508_benchmark,F_0508.txt,muk_dms.directory_445_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0509_benchmark,F_0509.txt,muk_dms.directory_344_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0510_benchmark,F_0510.txt,muk_dms.directory_133_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0511_benchmark,F_0511.txt,muk_dms.directory_453_benchmark,,muk_dms.tag_130_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0512_benchmark,F_0512.txt,muk_dms.directory_046_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0513_benchmark,F_0513.txt,muk_dms.directory_287_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0514_benchmark,F_0514.txt,muk_dms.directory_150_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0515_benchmark,F_0515.txt,muk_dms.directory_325_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0516_benchmark,F_0516.txt,muk_dms.directory_136_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0517_benchmark,F_0517.txt,muk_dms.directory_424_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0518_benchmark,F_0518.txt,muk_dms.directory_163_benchmark,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0519_benchmark,F_0519.txt,muk_dms.directory_452_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0520_benchmark,F_0520.txt,muk_dms.directory_365_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0521_benchmark,F_0521.txt,muk_dms.directory_244_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0522_benchmark,F_0522.txt,muk_dms.directory_373_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0523_benchmark,F_0523.txt,muk_dms.directory_327_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0524_benchmark,F_0524.txt,muk_dms.directory_127_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0525_benchmark,F_0525.txt,muk_dms.directory_407_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0526_benchmark,F_0526.txt,muk_dms.directory_367_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0527_benchmark,F_0527.txt,muk_dms.directory_334_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0528_benchmark,F_0528.txt,muk_dms.directory_183_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0529_benchmark,F_0529.txt,muk_dms.directory_303_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0530_benchmark,F_0530.txt,muk_dms.directory_310_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0531_benchmark,F_0531.txt,muk_dms.directory_256_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0532_benchmark,F_0532.txt,muk_dms.directory_036_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0533_benchmark,F_0533.txt,muk_dms.directory_104_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0534_benchmark,F_0534.txt,muk_dms.directory_481_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0535_benchmark,F_0535.txt,muk_dms.directory_047_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0536_benchmark,F_0536.txt,muk_dms.directory_477_benchmark,,muk_dms.tag_070_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0537_benchmark,F_0537.txt,muk_dms.directory_477_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0538_benchmark,F_0538.txt,muk_dms.directory_381_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0539_benchmark,F_0539.txt,muk_dms.directory_343_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0540_benchmark,F_0540.txt,muk_dms.directory_302_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0541_benchmark,F_0541.txt,muk_dms.directory_108_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0542_benchmark,F_0542.txt,muk_dms.directory_146_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0543_benchmark,F_0543.txt,muk_dms.directory_450_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0544_benchmark,F_0544.txt,muk_dms.directory_489_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0545_benchmark,F_0545.txt,muk_dms.directory_255_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0546_benchmark,F_0546.txt,muk_dms.directory_083_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0547_benchmark,F_0547.txt,muk_dms.directory_128_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0548_benchmark,F_0548.txt,muk_dms.directory_479_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0549_benchmark,F_0549.txt,muk_dms.directory_374_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0550_benchmark,F_0550.txt,muk_dms.directory_009_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0551_benchmark,F_0551.txt,muk_dms.directory_491_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0552_benchmark,F_0552.txt,muk_dms.directory_230_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0553_benchmark,F_0553.txt,muk_dms.directory_324_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0554_benchmark,F_0554.txt,muk_dms.directory_244_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0555_benchmark,F_0555.txt,muk_dms.directory_264_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0556_benchmark,F_0556.txt,muk_dms.directory_073_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0557_benchmark,F_0557.txt,muk_dms.directory_379_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0558_benchmark,F_0558.txt,muk_dms.directory_019_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0559_benchmark,F_0559.txt,muk_dms.directory_106_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0560_benchmark,F_0560.txt,muk_dms.directory_143_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0561_benchmark,F_0561.txt,muk_dms.directory_278_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0562_benchmark,F_0562.txt,muk_dms.directory_216_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0563_benchmark,F_0563.txt,muk_dms.directory_418_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0564_benchmark,F_0564.txt,muk_dms.directory_132_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0565_benchmark,F_0565.txt,muk_dms.directory_258_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0566_benchmark,F_0566.txt,muk_dms.directory_436_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0567_benchmark,F_0567.txt,muk_dms.directory_018_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0568_benchmark,F_0568.txt,muk_dms.directory_344_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0569_benchmark,F_0569.txt,muk_dms.directory_038_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0570_benchmark,F_0570.txt,muk_dms.directory_328_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0571_benchmark,F_0571.txt,muk_dms.directory_159_benchmark,,muk_dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0572_benchmark,F_0572.txt,muk_dms.directory_005_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0573_benchmark,F_0573.txt,muk_dms.directory_470_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0574_benchmark,F_0574.txt,muk_dms.directory_498_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0575_benchmark,F_0575.txt,muk_dms.directory_161_benchmark,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0576_benchmark,F_0576.txt,muk_dms.directory_338_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0577_benchmark,F_0577.txt,muk_dms.directory_346_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0578_benchmark,F_0578.txt,muk_dms.directory_024_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0579_benchmark,F_0579.txt,muk_dms.directory_318_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0580_benchmark,F_0580.txt,muk_dms.directory_410_benchmark,muk_dms.category_006_benchmark,muk_dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0581_benchmark,F_0581.txt,muk_dms.directory_324_benchmark,,muk_dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0582_benchmark,F_0582.txt,muk_dms.directory_207_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0583_benchmark,F_0583.txt,muk_dms.directory_459_benchmark,,muk_dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0584_benchmark,F_0584.txt,muk_dms.directory_138_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0585_benchmark,F_0585.txt,muk_dms.directory_104_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0586_benchmark,F_0586.txt,muk_dms.directory_169_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0587_benchmark,F_0587.txt,muk_dms.directory_123_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0588_benchmark,F_0588.txt,muk_dms.directory_202_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0589_benchmark,F_0589.txt,muk_dms.directory_208_benchmark,,muk_dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0590_benchmark,F_0590.txt,muk_dms.directory_029_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0591_benchmark,F_0591.txt,muk_dms.directory_412_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0592_benchmark,F_0592.txt,muk_dms.directory_259_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0593_benchmark,F_0593.txt,muk_dms.directory_339_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0594_benchmark,F_0594.txt,muk_dms.directory_129_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0595_benchmark,F_0595.txt,muk_dms.directory_495_benchmark,,muk_dms.tag_004_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0596_benchmark,F_0596.txt,muk_dms.directory_138_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0597_benchmark,F_0597.txt,muk_dms.directory_292_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0598_benchmark,F_0598.txt,muk_dms.directory_148_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0599_benchmark,F_0599.txt,muk_dms.directory_286_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0600_benchmark,F_0600.txt,muk_dms.directory_111_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0601_benchmark,F_0601.txt,muk_dms.directory_349_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0602_benchmark,F_0602.txt,muk_dms.directory_331_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0603_benchmark,F_0603.txt,muk_dms.directory_054_benchmark,muk_dms.category_044_benchmark,muk_dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0604_benchmark,F_0604.txt,muk_dms.directory_183_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0605_benchmark,F_0605.txt,muk_dms.directory_170_benchmark,,muk_dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0606_benchmark,F_0606.txt,muk_dms.directory_455_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0607_benchmark,F_0607.txt,muk_dms.directory_348_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0608_benchmark,F_0608.txt,muk_dms.directory_464_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0609_benchmark,F_0609.txt,muk_dms.directory_414_benchmark,muk_dms.category_009_benchmark,muk_dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0610_benchmark,F_0610.txt,muk_dms.directory_151_benchmark,,muk_dms.tag_124_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0611_benchmark,F_0611.txt,muk_dms.directory_311_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0612_benchmark,F_0612.txt,muk_dms.directory_493_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0613_benchmark,F_0613.txt,muk_dms.directory_262_benchmark,,muk_dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0614_benchmark,F_0614.txt,muk_dms.directory_339_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0615_benchmark,F_0615.txt,muk_dms.directory_262_benchmark,,muk_dms.tag_075_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0616_benchmark,F_0616.txt,muk_dms.directory_292_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0617_benchmark,F_0617.txt,muk_dms.directory_370_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0618_benchmark,F_0618.txt,muk_dms.directory_218_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0619_benchmark,F_0619.txt,muk_dms.directory_438_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0620_benchmark,F_0620.txt,muk_dms.directory_469_benchmark,,muk_dms.tag_137_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0621_benchmark,F_0621.txt,muk_dms.directory_174_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0622_benchmark,F_0622.txt,muk_dms.directory_132_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0623_benchmark,F_0623.txt,muk_dms.directory_427_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0624_benchmark,F_0624.txt,muk_dms.directory_081_benchmark,,muk_dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0625_benchmark,F_0625.txt,muk_dms.directory_015_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0626_benchmark,F_0626.txt,muk_dms.directory_385_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0627_benchmark,F_0627.txt,muk_dms.directory_158_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0628_benchmark,F_0628.txt,muk_dms.directory_022_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0629_benchmark,F_0629.txt,muk_dms.directory_378_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0630_benchmark,F_0630.txt,muk_dms.directory_240_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0631_benchmark,F_0631.txt,muk_dms.directory_299_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_102_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0632_benchmark,F_0632.txt,muk_dms.directory_239_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0633_benchmark,F_0633.txt,muk_dms.directory_428_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0634_benchmark,F_0634.txt,muk_dms.directory_401_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0635_benchmark,F_0635.txt,muk_dms.directory_048_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0636_benchmark,F_0636.txt,muk_dms.directory_176_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0637_benchmark,F_0637.txt,muk_dms.directory_037_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0638_benchmark,F_0638.txt,muk_dms.directory_360_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0639_benchmark,F_0639.txt,muk_dms.directory_452_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0640_benchmark,F_0640.txt,muk_dms.directory_257_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0641_benchmark,F_0641.txt,muk_dms.directory_453_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0642_benchmark,F_0642.txt,muk_dms.directory_429_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0643_benchmark,F_0643.txt,muk_dms.directory_468_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0644_benchmark,F_0644.txt,muk_dms.directory_277_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0645_benchmark,F_0645.txt,muk_dms.directory_240_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0646_benchmark,F_0646.txt,muk_dms.directory_346_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0647_benchmark,F_0647.txt,muk_dms.directory_067_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0648_benchmark,F_0648.txt,muk_dms.directory_419_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0649_benchmark,F_0649.txt,muk_dms.directory_275_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0650_benchmark,F_0650.txt,muk_dms.directory_004_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0651_benchmark,F_0651.txt,muk_dms.directory_359_benchmark,muk_dms.category_008_benchmark,muk_dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0652_benchmark,F_0652.txt,muk_dms.directory_398_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0653_benchmark,F_0653.txt,muk_dms.directory_045_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0654_benchmark,F_0654.txt,muk_dms.directory_241_benchmark,,muk_dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0655_benchmark,F_0655.txt,muk_dms.directory_299_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0656_benchmark,F_0656.txt,muk_dms.directory_272_benchmark,muk_dms.category_009_benchmark,muk_dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0657_benchmark,F_0657.txt,muk_dms.directory_139_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0658_benchmark,F_0658.txt,muk_dms.directory_415_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0659_benchmark,F_0659.txt,muk_dms.directory_111_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0660_benchmark,F_0660.txt,muk_dms.directory_265_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0661_benchmark,F_0661.txt,muk_dms.directory_439_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0662_benchmark,F_0662.txt,muk_dms.directory_234_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0663_benchmark,F_0663.txt,muk_dms.directory_310_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0664_benchmark,F_0664.txt,muk_dms.directory_367_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0665_benchmark,F_0665.txt,muk_dms.directory_163_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0666_benchmark,F_0666.txt,muk_dms.directory_032_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0667_benchmark,F_0667.txt,muk_dms.directory_319_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0668_benchmark,F_0668.txt,muk_dms.directory_436_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0669_benchmark,F_0669.txt,muk_dms.directory_162_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0670_benchmark,F_0670.txt,muk_dms.directory_352_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0671_benchmark,F_0671.txt,muk_dms.directory_462_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0672_benchmark,F_0672.txt,muk_dms.directory_334_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0673_benchmark,F_0673.txt,muk_dms.directory_456_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0674_benchmark,F_0674.txt,muk_dms.directory_473_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0675_benchmark,F_0675.txt,muk_dms.directory_085_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0676_benchmark,F_0676.txt,muk_dms.directory_467_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0677_benchmark,F_0677.txt,muk_dms.directory_268_benchmark,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0678_benchmark,F_0678.txt,muk_dms.directory_066_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0679_benchmark,F_0679.txt,muk_dms.directory_006_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0680_benchmark,F_0680.txt,muk_dms.directory_426_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0681_benchmark,F_0681.txt,muk_dms.directory_011_benchmark,,muk_dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0682_benchmark,F_0682.txt,muk_dms.directory_460_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0683_benchmark,F_0683.txt,muk_dms.directory_053_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0684_benchmark,F_0684.txt,muk_dms.directory_233_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0685_benchmark,F_0685.txt,muk_dms.directory_330_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0686_benchmark,F_0686.txt,muk_dms.directory_070_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0687_benchmark,F_0687.txt,muk_dms.directory_418_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0688_benchmark,F_0688.txt,muk_dms.directory_220_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0689_benchmark,F_0689.txt,muk_dms.directory_488_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0690_benchmark,F_0690.txt,muk_dms.directory_204_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0691_benchmark,F_0691.txt,muk_dms.directory_426_benchmark,,muk_dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0692_benchmark,F_0692.txt,muk_dms.directory_343_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0693_benchmark,F_0693.txt,muk_dms.directory_423_benchmark,,muk_dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0694_benchmark,F_0694.txt,muk_dms.directory_409_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0695_benchmark,F_0695.txt,muk_dms.directory_427_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0696_benchmark,F_0696.txt,muk_dms.directory_117_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0697_benchmark,F_0697.txt,muk_dms.directory_222_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_105_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0698_benchmark,F_0698.txt,muk_dms.directory_232_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0699_benchmark,F_0699.txt,muk_dms.directory_277_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0700_benchmark,F_0700.txt,muk_dms.directory_480_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_116_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0701_benchmark,F_0701.txt,muk_dms.directory_002_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0702_benchmark,F_0702.txt,muk_dms.directory_137_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0703_benchmark,F_0703.txt,muk_dms.directory_409_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0704_benchmark,F_0704.txt,muk_dms.directory_340_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0705_benchmark,F_0705.txt,muk_dms.directory_499_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0706_benchmark,F_0706.txt,muk_dms.directory_387_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0707_benchmark,F_0707.txt,muk_dms.directory_487_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0708_benchmark,F_0708.txt,muk_dms.directory_005_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0709_benchmark,F_0709.txt,muk_dms.directory_322_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0710_benchmark,F_0710.txt,muk_dms.directory_186_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0711_benchmark,F_0711.txt,muk_dms.directory_085_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0712_benchmark,F_0712.txt,muk_dms.directory_223_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0713_benchmark,F_0713.txt,muk_dms.directory_092_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0714_benchmark,F_0714.txt,muk_dms.directory_339_benchmark,,muk_dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0715_benchmark,F_0715.txt,muk_dms.directory_453_benchmark,,muk_dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0716_benchmark,F_0716.txt,muk_dms.directory_281_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0717_benchmark,F_0717.txt,muk_dms.directory_167_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0718_benchmark,F_0718.txt,muk_dms.directory_175_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0719_benchmark,F_0719.txt,muk_dms.directory_403_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0720_benchmark,F_0720.txt,muk_dms.directory_431_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0721_benchmark,F_0721.txt,muk_dms.directory_426_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0722_benchmark,F_0722.txt,muk_dms.directory_208_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0723_benchmark,F_0723.txt,muk_dms.directory_469_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0724_benchmark,F_0724.txt,muk_dms.directory_059_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0725_benchmark,F_0725.txt,muk_dms.directory_331_benchmark,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0726_benchmark,F_0726.txt,muk_dms.directory_385_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0727_benchmark,F_0727.txt,muk_dms.directory_140_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0728_benchmark,F_0728.txt,muk_dms.directory_339_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_098_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0729_benchmark,F_0729.txt,muk_dms.directory_024_benchmark,muk_dms.category_006_benchmark,muk_dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0730_benchmark,F_0730.txt,muk_dms.directory_153_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0731_benchmark,F_0731.txt,muk_dms.directory_143_benchmark,,muk_dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0732_benchmark,F_0732.txt,muk_dms.directory_441_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0733_benchmark,F_0733.txt,muk_dms.directory_316_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0734_benchmark,F_0734.txt,muk_dms.directory_006_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0735_benchmark,F_0735.txt,muk_dms.directory_461_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0736_benchmark,F_0736.txt,muk_dms.directory_083_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0737_benchmark,F_0737.txt,muk_dms.directory_098_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0738_benchmark,F_0738.txt,muk_dms.directory_427_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0739_benchmark,F_0739.txt,muk_dms.directory_126_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0740_benchmark,F_0740.txt,muk_dms.directory_429_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0741_benchmark,F_0741.txt,muk_dms.directory_211_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0742_benchmark,F_0742.txt,muk_dms.directory_147_benchmark,,muk_dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0743_benchmark,F_0743.txt,muk_dms.directory_384_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0744_benchmark,F_0744.txt,muk_dms.directory_388_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0745_benchmark,F_0745.txt,muk_dms.directory_122_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0746_benchmark,F_0746.txt,muk_dms.directory_221_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0747_benchmark,F_0747.txt,muk_dms.directory_073_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0748_benchmark,F_0748.txt,muk_dms.directory_500_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0749_benchmark,F_0749.txt,muk_dms.directory_244_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0750_benchmark,F_0750.txt,muk_dms.directory_261_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0751_benchmark,F_0751.txt,muk_dms.directory_233_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0752_benchmark,F_0752.txt,muk_dms.directory_297_benchmark,,muk_dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0753_benchmark,F_0753.txt,muk_dms.directory_024_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0754_benchmark,F_0754.txt,muk_dms.directory_158_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0755_benchmark,F_0755.txt,muk_dms.directory_128_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0756_benchmark,F_0756.txt,muk_dms.directory_028_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0757_benchmark,F_0757.txt,muk_dms.directory_196_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0758_benchmark,F_0758.txt,muk_dms.directory_495_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0759_benchmark,F_0759.txt,muk_dms.directory_420_benchmark,,muk_dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0760_benchmark,F_0760.txt,muk_dms.directory_101_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0761_benchmark,F_0761.txt,muk_dms.directory_474_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0762_benchmark,F_0762.txt,muk_dms.directory_156_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0763_benchmark,F_0763.txt,muk_dms.directory_028_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0764_benchmark,F_0764.txt,muk_dms.directory_347_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0765_benchmark,F_0765.txt,muk_dms.directory_267_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0766_benchmark,F_0766.txt,muk_dms.directory_491_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0767_benchmark,F_0767.txt,muk_dms.directory_379_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0768_benchmark,F_0768.txt,muk_dms.directory_008_benchmark,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0769_benchmark,F_0769.txt,muk_dms.directory_161_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0770_benchmark,F_0770.txt,muk_dms.directory_286_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0771_benchmark,F_0771.txt,muk_dms.directory_164_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0772_benchmark,F_0772.txt,muk_dms.directory_488_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0773_benchmark,F_0773.txt,muk_dms.directory_398_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0774_benchmark,F_0774.txt,muk_dms.directory_461_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0775_benchmark,F_0775.txt,muk_dms.directory_385_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0776_benchmark,F_0776.txt,muk_dms.directory_300_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0777_benchmark,F_0777.txt,muk_dms.directory_225_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0778_benchmark,F_0778.txt,muk_dms.directory_277_benchmark,,muk_dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0779_benchmark,F_0779.txt,muk_dms.directory_122_benchmark,,muk_dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0780_benchmark,F_0780.txt,muk_dms.directory_006_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0781_benchmark,F_0781.txt,muk_dms.directory_044_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0782_benchmark,F_0782.txt,muk_dms.directory_173_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0783_benchmark,F_0783.txt,muk_dms.directory_499_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0784_benchmark,F_0784.txt,muk_dms.directory_379_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0785_benchmark,F_0785.txt,muk_dms.directory_467_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0786_benchmark,F_0786.txt,muk_dms.directory_476_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0787_benchmark,F_0787.txt,muk_dms.directory_170_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0788_benchmark,F_0788.txt,muk_dms.directory_107_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0789_benchmark,F_0789.txt,muk_dms.directory_267_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0790_benchmark,F_0790.txt,muk_dms.directory_143_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0791_benchmark,F_0791.txt,muk_dms.directory_146_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0792_benchmark,F_0792.txt,muk_dms.directory_366_benchmark,,muk_dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0793_benchmark,F_0793.txt,muk_dms.directory_492_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0794_benchmark,F_0794.txt,muk_dms.directory_371_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0795_benchmark,F_0795.txt,muk_dms.directory_084_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0796_benchmark,F_0796.txt,muk_dms.directory_302_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0797_benchmark,F_0797.txt,muk_dms.directory_487_benchmark,,muk_dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0798_benchmark,F_0798.txt,muk_dms.directory_207_benchmark,,muk_dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0799_benchmark,F_0799.txt,muk_dms.directory_338_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0800_benchmark,F_0800.txt,muk_dms.directory_235_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0801_benchmark,F_0801.txt,muk_dms.directory_243_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0802_benchmark,F_0802.txt,muk_dms.directory_148_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0803_benchmark,F_0803.txt,muk_dms.directory_412_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0804_benchmark,F_0804.txt,muk_dms.directory_478_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0805_benchmark,F_0805.txt,muk_dms.directory_345_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0806_benchmark,F_0806.txt,muk_dms.directory_090_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0807_benchmark,F_0807.txt,muk_dms.directory_453_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0808_benchmark,F_0808.txt,muk_dms.directory_433_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0809_benchmark,F_0809.txt,muk_dms.directory_229_benchmark,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0810_benchmark,F_0810.txt,muk_dms.directory_437_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0811_benchmark,F_0811.txt,muk_dms.directory_284_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0812_benchmark,F_0812.txt,muk_dms.directory_253_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0813_benchmark,F_0813.txt,muk_dms.directory_237_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0814_benchmark,F_0814.txt,muk_dms.directory_392_benchmark,,muk_dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0815_benchmark,F_0815.txt,muk_dms.directory_481_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0816_benchmark,F_0816.txt,muk_dms.directory_215_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0817_benchmark,F_0817.txt,muk_dms.directory_356_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0818_benchmark,F_0818.txt,muk_dms.directory_372_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0819_benchmark,F_0819.txt,muk_dms.directory_491_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0820_benchmark,F_0820.txt,muk_dms.directory_008_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0821_benchmark,F_0821.txt,muk_dms.directory_267_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0822_benchmark,F_0822.txt,muk_dms.directory_494_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0823_benchmark,F_0823.txt,muk_dms.directory_336_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0824_benchmark,F_0824.txt,muk_dms.directory_290_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0825_benchmark,F_0825.txt,muk_dms.directory_282_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0826_benchmark,F_0826.txt,muk_dms.directory_049_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0827_benchmark,F_0827.txt,muk_dms.directory_245_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0828_benchmark,F_0828.txt,muk_dms.directory_007_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0829_benchmark,F_0829.txt,muk_dms.directory_295_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0830_benchmark,F_0830.txt,muk_dms.directory_386_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0831_benchmark,F_0831.txt,muk_dms.directory_400_benchmark,,muk_dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0832_benchmark,F_0832.txt,muk_dms.directory_125_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0833_benchmark,F_0833.txt,muk_dms.directory_231_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0834_benchmark,F_0834.txt,muk_dms.directory_047_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0835_benchmark,F_0835.txt,muk_dms.directory_143_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0836_benchmark,F_0836.txt,muk_dms.directory_365_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0837_benchmark,F_0837.txt,muk_dms.directory_393_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0838_benchmark,F_0838.txt,muk_dms.directory_436_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0839_benchmark,F_0839.txt,muk_dms.directory_432_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0840_benchmark,F_0840.txt,muk_dms.directory_266_benchmark,,muk_dms.tag_060_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0841_benchmark,F_0841.txt,muk_dms.directory_360_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0842_benchmark,F_0842.txt,muk_dms.directory_144_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0843_benchmark,F_0843.txt,muk_dms.directory_413_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0844_benchmark,F_0844.txt,muk_dms.directory_341_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0845_benchmark,F_0845.txt,muk_dms.directory_198_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0846_benchmark,F_0846.txt,muk_dms.directory_008_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_067_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0847_benchmark,F_0847.txt,muk_dms.directory_427_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0848_benchmark,F_0848.txt,muk_dms.directory_264_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0849_benchmark,F_0849.txt,muk_dms.directory_373_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0850_benchmark,F_0850.txt,muk_dms.directory_383_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0851_benchmark,F_0851.txt,muk_dms.directory_091_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0852_benchmark,F_0852.txt,muk_dms.directory_250_benchmark,,muk_dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0853_benchmark,F_0853.txt,muk_dms.directory_220_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0854_benchmark,F_0854.txt,muk_dms.directory_356_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0855_benchmark,F_0855.txt,muk_dms.directory_279_benchmark,,muk_dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0856_benchmark,F_0856.txt,muk_dms.directory_172_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0857_benchmark,F_0857.txt,muk_dms.directory_009_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0858_benchmark,F_0858.txt,muk_dms.directory_352_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0859_benchmark,F_0859.txt,muk_dms.directory_245_benchmark,,muk_dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0860_benchmark,F_0860.txt,muk_dms.directory_028_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0861_benchmark,F_0861.txt,muk_dms.directory_079_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0862_benchmark,F_0862.txt,muk_dms.directory_255_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0863_benchmark,F_0863.txt,muk_dms.directory_364_benchmark,,muk_dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0864_benchmark,F_0864.txt,muk_dms.directory_269_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0865_benchmark,F_0865.txt,muk_dms.directory_134_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0866_benchmark,F_0866.txt,muk_dms.directory_471_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0867_benchmark,F_0867.txt,muk_dms.directory_295_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0868_benchmark,F_0868.txt,muk_dms.directory_181_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0869_benchmark,F_0869.txt,muk_dms.directory_087_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0870_benchmark,F_0870.txt,muk_dms.directory_361_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0871_benchmark,F_0871.txt,muk_dms.directory_403_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0872_benchmark,F_0872.txt,muk_dms.directory_472_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0873_benchmark,F_0873.txt,muk_dms.directory_380_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0874_benchmark,F_0874.txt,muk_dms.directory_272_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0875_benchmark,F_0875.txt,muk_dms.directory_464_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0876_benchmark,F_0876.txt,muk_dms.directory_422_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0877_benchmark,F_0877.txt,muk_dms.directory_197_benchmark,muk_dms.category_044_benchmark,muk_dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0878_benchmark,F_0878.txt,muk_dms.directory_158_benchmark,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0879_benchmark,F_0879.txt,muk_dms.directory_041_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0880_benchmark,F_0880.txt,muk_dms.directory_046_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0881_benchmark,F_0881.txt,muk_dms.directory_458_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0882_benchmark,F_0882.txt,muk_dms.directory_298_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0883_benchmark,F_0883.txt,muk_dms.directory_288_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0884_benchmark,F_0884.txt,muk_dms.directory_476_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0885_benchmark,F_0885.txt,muk_dms.directory_177_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0886_benchmark,F_0886.txt,muk_dms.directory_102_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0887_benchmark,F_0887.txt,muk_dms.directory_058_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0888_benchmark,F_0888.txt,muk_dms.directory_216_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0889_benchmark,F_0889.txt,muk_dms.directory_403_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0890_benchmark,F_0890.txt,muk_dms.directory_332_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_031_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0891_benchmark,F_0891.txt,muk_dms.directory_346_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0892_benchmark,F_0892.txt,muk_dms.directory_327_benchmark,muk_dms.category_029_benchmark,muk_dms.tag_005_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0893_benchmark,F_0893.txt,muk_dms.directory_104_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0894_benchmark,F_0894.txt,muk_dms.directory_211_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0895_benchmark,F_0895.txt,muk_dms.directory_087_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0896_benchmark,F_0896.txt,muk_dms.directory_437_benchmark,,muk_dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0897_benchmark,F_0897.txt,muk_dms.directory_347_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0898_benchmark,F_0898.txt,muk_dms.directory_460_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0899_benchmark,F_0899.txt,muk_dms.directory_191_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_120_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0900_benchmark,F_0900.txt,muk_dms.directory_277_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0901_benchmark,F_0901.txt,muk_dms.directory_035_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0902_benchmark,F_0902.txt,muk_dms.directory_056_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0903_benchmark,F_0903.txt,muk_dms.directory_433_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0904_benchmark,F_0904.txt,muk_dms.directory_345_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0905_benchmark,F_0905.txt,muk_dms.directory_486_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0906_benchmark,F_0906.txt,muk_dms.directory_373_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0907_benchmark,F_0907.txt,muk_dms.directory_288_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0908_benchmark,F_0908.txt,muk_dms.directory_096_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0909_benchmark,F_0909.txt,muk_dms.directory_077_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0910_benchmark,F_0910.txt,muk_dms.directory_075_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0911_benchmark,F_0911.txt,muk_dms.directory_473_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0912_benchmark,F_0912.txt,muk_dms.directory_422_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0913_benchmark,F_0913.txt,muk_dms.directory_208_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0914_benchmark,F_0914.txt,muk_dms.directory_130_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0915_benchmark,F_0915.txt,muk_dms.directory_455_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0916_benchmark,F_0916.txt,muk_dms.directory_115_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0917_benchmark,F_0917.txt,muk_dms.directory_358_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0918_benchmark,F_0918.txt,muk_dms.directory_292_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0919_benchmark,F_0919.txt,muk_dms.directory_292_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0920_benchmark,F_0920.txt,muk_dms.directory_193_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0921_benchmark,F_0921.txt,muk_dms.directory_179_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0922_benchmark,F_0922.txt,muk_dms.directory_241_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0923_benchmark,F_0923.txt,muk_dms.directory_400_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0924_benchmark,F_0924.txt,muk_dms.directory_167_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0925_benchmark,F_0925.txt,muk_dms.directory_300_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0926_benchmark,F_0926.txt,muk_dms.directory_450_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0927_benchmark,F_0927.txt,muk_dms.directory_395_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0928_benchmark,F_0928.txt,muk_dms.directory_173_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0929_benchmark,F_0929.txt,muk_dms.directory_148_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0930_benchmark,F_0930.txt,muk_dms.directory_229_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0931_benchmark,F_0931.txt,muk_dms.directory_453_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0932_benchmark,F_0932.txt,muk_dms.directory_384_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0933_benchmark,F_0933.txt,muk_dms.directory_378_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0934_benchmark,F_0934.txt,muk_dms.directory_077_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0935_benchmark,F_0935.txt,muk_dms.directory_309_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0936_benchmark,F_0936.txt,muk_dms.directory_091_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0937_benchmark,F_0937.txt,muk_dms.directory_332_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0938_benchmark,F_0938.txt,muk_dms.directory_235_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0939_benchmark,F_0939.txt,muk_dms.directory_428_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0940_benchmark,F_0940.txt,muk_dms.directory_423_benchmark,,muk_dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0941_benchmark,F_0941.txt,muk_dms.directory_417_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0942_benchmark,F_0942.txt,muk_dms.directory_001_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0943_benchmark,F_0943.txt,muk_dms.directory_445_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0944_benchmark,F_0944.txt,muk_dms.directory_102_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0945_benchmark,F_0945.txt,muk_dms.directory_049_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0946_benchmark,F_0946.txt,muk_dms.directory_148_benchmark,,muk_dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0947_benchmark,F_0947.txt,muk_dms.directory_039_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0948_benchmark,F_0948.txt,muk_dms.directory_270_benchmark,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0949_benchmark,F_0949.txt,muk_dms.directory_138_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0950_benchmark,F_0950.txt,muk_dms.directory_391_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0951_benchmark,F_0951.txt,muk_dms.directory_428_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0952_benchmark,F_0952.txt,muk_dms.directory_249_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0953_benchmark,F_0953.txt,muk_dms.directory_225_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0954_benchmark,F_0954.txt,muk_dms.directory_259_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0955_benchmark,F_0955.txt,muk_dms.directory_304_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0956_benchmark,F_0956.txt,muk_dms.directory_185_benchmark,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0957_benchmark,F_0957.txt,muk_dms.directory_272_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0958_benchmark,F_0958.txt,muk_dms.directory_498_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0959_benchmark,F_0959.txt,muk_dms.directory_062_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0960_benchmark,F_0960.txt,muk_dms.directory_044_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0961_benchmark,F_0961.txt,muk_dms.directory_454_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0962_benchmark,F_0962.txt,muk_dms.directory_164_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0963_benchmark,F_0963.txt,muk_dms.directory_268_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0964_benchmark,F_0964.txt,muk_dms.directory_089_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0965_benchmark,F_0965.txt,muk_dms.directory_214_benchmark,muk_dms.category_008_benchmark,muk_dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0966_benchmark,F_0966.txt,muk_dms.directory_473_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0967_benchmark,F_0967.txt,muk_dms.directory_195_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0968_benchmark,F_0968.txt,muk_dms.directory_483_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0969_benchmark,F_0969.txt,muk_dms.directory_007_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_103_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0970_benchmark,F_0970.txt,muk_dms.directory_286_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0971_benchmark,F_0971.txt,muk_dms.directory_078_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0972_benchmark,F_0972.txt,muk_dms.directory_012_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0973_benchmark,F_0973.txt,muk_dms.directory_229_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0974_benchmark,F_0974.txt,muk_dms.directory_471_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0975_benchmark,F_0975.txt,muk_dms.directory_460_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0976_benchmark,F_0976.txt,muk_dms.directory_105_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0977_benchmark,F_0977.txt,muk_dms.directory_483_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0978_benchmark,F_0978.txt,muk_dms.directory_292_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0979_benchmark,F_0979.txt,muk_dms.directory_344_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0980_benchmark,F_0980.txt,muk_dms.directory_058_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0981_benchmark,F_0981.txt,muk_dms.directory_463_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0982_benchmark,F_0982.txt,muk_dms.directory_098_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0983_benchmark,F_0983.txt,muk_dms.directory_291_benchmark,,muk_dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0984_benchmark,F_0984.txt,muk_dms.directory_027_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0985_benchmark,F_0985.txt,muk_dms.directory_460_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0986_benchmark,F_0986.txt,muk_dms.directory_499_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0987_benchmark,F_0987.txt,muk_dms.directory_395_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0988_benchmark,F_0988.txt,muk_dms.directory_213_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0989_benchmark,F_0989.txt,muk_dms.directory_006_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0990_benchmark,F_0990.txt,muk_dms.directory_276_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0991_benchmark,F_0991.txt,muk_dms.directory_287_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0992_benchmark,F_0992.txt,muk_dms.directory_250_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0993_benchmark,F_0993.txt,muk_dms.directory_059_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0994_benchmark,F_0994.txt,muk_dms.directory_476_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0995_benchmark,F_0995.txt,muk_dms.directory_156_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0996_benchmark,F_0996.txt,muk_dms.directory_367_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0997_benchmark,F_0997.txt,muk_dms.directory_125_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0998_benchmark,F_0998.txt,muk_dms.directory_477_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_0999_benchmark,F_0999.txt,muk_dms.directory_324_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1000_benchmark,F_1000.txt,muk_dms.directory_447_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1001_benchmark,F_1001.txt,muk_dms.directory_220_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1002_benchmark,F_1002.txt,muk_dms.directory_286_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1003_benchmark,F_1003.txt,muk_dms.directory_331_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1004_benchmark,F_1004.txt,muk_dms.directory_010_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1005_benchmark,F_1005.txt,muk_dms.directory_048_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1006_benchmark,F_1006.txt,muk_dms.directory_495_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1007_benchmark,F_1007.txt,muk_dms.directory_037_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1008_benchmark,F_1008.txt,muk_dms.directory_495_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1009_benchmark,F_1009.txt,muk_dms.directory_039_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1010_benchmark,F_1010.txt,muk_dms.directory_082_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1011_benchmark,F_1011.txt,muk_dms.directory_267_benchmark,,muk_dms.tag_130_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1012_benchmark,F_1012.txt,muk_dms.directory_356_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1013_benchmark,F_1013.txt,muk_dms.directory_418_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1014_benchmark,F_1014.txt,muk_dms.directory_271_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1015_benchmark,F_1015.txt,muk_dms.directory_173_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1016_benchmark,F_1016.txt,muk_dms.directory_347_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1017_benchmark,F_1017.txt,muk_dms.directory_068_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1018_benchmark,F_1018.txt,muk_dms.directory_476_benchmark,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1019_benchmark,F_1019.txt,muk_dms.directory_003_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1020_benchmark,F_1020.txt,muk_dms.directory_272_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1021_benchmark,F_1021.txt,muk_dms.directory_437_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1022_benchmark,F_1022.txt,muk_dms.directory_271_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1023_benchmark,F_1023.txt,muk_dms.directory_371_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1024_benchmark,F_1024.txt,muk_dms.directory_374_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1025_benchmark,F_1025.txt,muk_dms.directory_271_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1026_benchmark,F_1026.txt,muk_dms.directory_415_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1027_benchmark,F_1027.txt,muk_dms.directory_279_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1028_benchmark,F_1028.txt,muk_dms.directory_440_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1029_benchmark,F_1029.txt,muk_dms.directory_341_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1030_benchmark,F_1030.txt,muk_dms.directory_263_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1031_benchmark,F_1031.txt,muk_dms.directory_418_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1032_benchmark,F_1032.txt,muk_dms.directory_444_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1033_benchmark,F_1033.txt,muk_dms.directory_166_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1034_benchmark,F_1034.txt,muk_dms.directory_442_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1035_benchmark,F_1035.txt,muk_dms.directory_122_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1036_benchmark,F_1036.txt,muk_dms.directory_092_benchmark,,muk_dms.tag_070_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1037_benchmark,F_1037.txt,muk_dms.directory_424_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1038_benchmark,F_1038.txt,muk_dms.directory_482_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1039_benchmark,F_1039.txt,muk_dms.directory_221_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1040_benchmark,F_1040.txt,muk_dms.directory_388_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1041_benchmark,F_1041.txt,muk_dms.directory_273_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1042_benchmark,F_1042.txt,muk_dms.directory_015_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1043_benchmark,F_1043.txt,muk_dms.directory_376_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1044_benchmark,F_1044.txt,muk_dms.directory_087_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1045_benchmark,F_1045.txt,muk_dms.directory_032_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1046_benchmark,F_1046.txt,muk_dms.directory_405_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1047_benchmark,F_1047.txt,muk_dms.directory_133_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1048_benchmark,F_1048.txt,muk_dms.directory_485_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1049_benchmark,F_1049.txt,muk_dms.directory_354_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1050_benchmark,F_1050.txt,muk_dms.directory_145_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1051_benchmark,F_1051.txt,muk_dms.directory_326_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1052_benchmark,F_1052.txt,muk_dms.directory_042_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1053_benchmark,F_1053.txt,muk_dms.directory_118_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1054_benchmark,F_1054.txt,muk_dms.directory_330_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1055_benchmark,F_1055.txt,muk_dms.directory_045_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1056_benchmark,F_1056.txt,muk_dms.directory_394_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1057_benchmark,F_1057.txt,muk_dms.directory_336_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1058_benchmark,F_1058.txt,muk_dms.directory_043_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1059_benchmark,F_1059.txt,muk_dms.directory_154_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1060_benchmark,F_1060.txt,muk_dms.directory_294_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1061_benchmark,F_1061.txt,muk_dms.directory_309_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1062_benchmark,F_1062.txt,muk_dms.directory_350_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1063_benchmark,F_1063.txt,muk_dms.directory_491_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1064_benchmark,F_1064.txt,muk_dms.directory_349_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1065_benchmark,F_1065.txt,muk_dms.directory_162_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1066_benchmark,F_1066.txt,muk_dms.directory_486_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1067_benchmark,F_1067.txt,muk_dms.directory_411_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1068_benchmark,F_1068.txt,muk_dms.directory_489_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1069_benchmark,F_1069.txt,muk_dms.directory_375_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1070_benchmark,F_1070.txt,muk_dms.directory_392_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1071_benchmark,F_1071.txt,muk_dms.directory_340_benchmark,,muk_dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1072_benchmark,F_1072.txt,muk_dms.directory_026_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1073_benchmark,F_1073.txt,muk_dms.directory_418_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1074_benchmark,F_1074.txt,muk_dms.directory_035_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1075_benchmark,F_1075.txt,muk_dms.directory_268_benchmark,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1076_benchmark,F_1076.txt,muk_dms.directory_308_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1077_benchmark,F_1077.txt,muk_dms.directory_491_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1078_benchmark,F_1078.txt,muk_dms.directory_188_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1079_benchmark,F_1079.txt,muk_dms.directory_324_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1080_benchmark,F_1080.txt,muk_dms.directory_170_benchmark,muk_dms.category_006_benchmark,muk_dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1081_benchmark,F_1081.txt,muk_dms.directory_163_benchmark,,muk_dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1082_benchmark,F_1082.txt,muk_dms.directory_327_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1083_benchmark,F_1083.txt,muk_dms.directory_079_benchmark,,muk_dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1084_benchmark,F_1084.txt,muk_dms.directory_052_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1085_benchmark,F_1085.txt,muk_dms.directory_153_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1086_benchmark,F_1086.txt,muk_dms.directory_299_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1087_benchmark,F_1087.txt,muk_dms.directory_080_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1088_benchmark,F_1088.txt,muk_dms.directory_158_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1089_benchmark,F_1089.txt,muk_dms.directory_195_benchmark,,muk_dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1090_benchmark,F_1090.txt,muk_dms.directory_164_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1091_benchmark,F_1091.txt,muk_dms.directory_290_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1092_benchmark,F_1092.txt,muk_dms.directory_072_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1093_benchmark,F_1093.txt,muk_dms.directory_430_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1094_benchmark,F_1094.txt,muk_dms.directory_180_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1095_benchmark,F_1095.txt,muk_dms.directory_297_benchmark,,muk_dms.tag_004_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1096_benchmark,F_1096.txt,muk_dms.directory_038_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1097_benchmark,F_1097.txt,muk_dms.directory_245_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1098_benchmark,F_1098.txt,muk_dms.directory_416_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1099_benchmark,F_1099.txt,muk_dms.directory_242_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1100_benchmark,F_1100.txt,muk_dms.directory_263_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1101_benchmark,F_1101.txt,muk_dms.directory_196_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1102_benchmark,F_1102.txt,muk_dms.directory_492_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1103_benchmark,F_1103.txt,muk_dms.directory_301_benchmark,muk_dms.category_044_benchmark,muk_dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1104_benchmark,F_1104.txt,muk_dms.directory_220_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1105_benchmark,F_1105.txt,muk_dms.directory_304_benchmark,,muk_dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1106_benchmark,F_1106.txt,muk_dms.directory_266_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1107_benchmark,F_1107.txt,muk_dms.directory_179_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1108_benchmark,F_1108.txt,muk_dms.directory_049_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1109_benchmark,F_1109.txt,muk_dms.directory_365_benchmark,muk_dms.category_009_benchmark,muk_dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1110_benchmark,F_1110.txt,muk_dms.directory_286_benchmark,,muk_dms.tag_124_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1111_benchmark,F_1111.txt,muk_dms.directory_141_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1112_benchmark,F_1112.txt,muk_dms.directory_479_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1113_benchmark,F_1113.txt,muk_dms.directory_484_benchmark,,muk_dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1114_benchmark,F_1114.txt,muk_dms.directory_166_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1115_benchmark,F_1115.txt,muk_dms.directory_336_benchmark,,muk_dms.tag_075_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1116_benchmark,F_1116.txt,muk_dms.directory_169_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1117_benchmark,F_1117.txt,muk_dms.directory_174_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1118_benchmark,F_1118.txt,muk_dms.directory_105_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1119_benchmark,F_1119.txt,muk_dms.directory_131_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1120_benchmark,F_1120.txt,muk_dms.directory_234_benchmark,,muk_dms.tag_137_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1121_benchmark,F_1121.txt,muk_dms.directory_125_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1122_benchmark,F_1122.txt,muk_dms.directory_258_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1123_benchmark,F_1123.txt,muk_dms.directory_018_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1124_benchmark,F_1124.txt,muk_dms.directory_007_benchmark,,muk_dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1125_benchmark,F_1125.txt,muk_dms.directory_102_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1126_benchmark,F_1126.txt,muk_dms.directory_239_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1127_benchmark,F_1127.txt,muk_dms.directory_369_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1128_benchmark,F_1128.txt,muk_dms.directory_115_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1129_benchmark,F_1129.txt,muk_dms.directory_006_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1130_benchmark,F_1130.txt,muk_dms.directory_483_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1131_benchmark,F_1131.txt,muk_dms.directory_215_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_102_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1132_benchmark,F_1132.txt,muk_dms.directory_300_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1133_benchmark,F_1133.txt,muk_dms.directory_410_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1134_benchmark,F_1134.txt,muk_dms.directory_416_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1135_benchmark,F_1135.txt,muk_dms.directory_476_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1136_benchmark,F_1136.txt,muk_dms.directory_260_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1137_benchmark,F_1137.txt,muk_dms.directory_411_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1138_benchmark,F_1138.txt,muk_dms.directory_377_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1139_benchmark,F_1139.txt,muk_dms.directory_147_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1140_benchmark,F_1140.txt,muk_dms.directory_312_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1141_benchmark,F_1141.txt,muk_dms.directory_133_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1142_benchmark,F_1142.txt,muk_dms.directory_045_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1143_benchmark,F_1143.txt,muk_dms.directory_356_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1144_benchmark,F_1144.txt,muk_dms.directory_009_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1145_benchmark,F_1145.txt,muk_dms.directory_362_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1146_benchmark,F_1146.txt,muk_dms.directory_323_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1147_benchmark,F_1147.txt,muk_dms.directory_117_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1148_benchmark,F_1148.txt,muk_dms.directory_353_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1149_benchmark,F_1149.txt,muk_dms.directory_066_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1150_benchmark,F_1150.txt,muk_dms.directory_068_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1151_benchmark,F_1151.txt,muk_dms.directory_316_benchmark,muk_dms.category_008_benchmark,muk_dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1152_benchmark,F_1152.txt,muk_dms.directory_368_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1153_benchmark,F_1153.txt,muk_dms.directory_294_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1154_benchmark,F_1154.txt,muk_dms.directory_065_benchmark,,muk_dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1155_benchmark,F_1155.txt,muk_dms.directory_171_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1156_benchmark,F_1156.txt,muk_dms.directory_149_benchmark,muk_dms.category_009_benchmark,muk_dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1157_benchmark,F_1157.txt,muk_dms.directory_396_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1158_benchmark,F_1158.txt,muk_dms.directory_107_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1159_benchmark,F_1159.txt,muk_dms.directory_380_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1160_benchmark,F_1160.txt,muk_dms.directory_259_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1161_benchmark,F_1161.txt,muk_dms.directory_391_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1162_benchmark,F_1162.txt,muk_dms.directory_476_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1163_benchmark,F_1163.txt,muk_dms.directory_053_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1164_benchmark,F_1164.txt,muk_dms.directory_408_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1165_benchmark,F_1165.txt,muk_dms.directory_450_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1166_benchmark,F_1166.txt,muk_dms.directory_160_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1167_benchmark,F_1167.txt,muk_dms.directory_415_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1168_benchmark,F_1168.txt,muk_dms.directory_185_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1169_benchmark,F_1169.txt,muk_dms.directory_281_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1170_benchmark,F_1170.txt,muk_dms.directory_345_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1171_benchmark,F_1171.txt,muk_dms.directory_357_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1172_benchmark,F_1172.txt,muk_dms.directory_071_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1173_benchmark,F_1173.txt,muk_dms.directory_016_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1174_benchmark,F_1174.txt,muk_dms.directory_246_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1175_benchmark,F_1175.txt,muk_dms.directory_368_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1176_benchmark,F_1176.txt,muk_dms.directory_154_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1177_benchmark,F_1177.txt,muk_dms.directory_461_benchmark,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1178_benchmark,F_1178.txt,muk_dms.directory_170_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1179_benchmark,F_1179.txt,muk_dms.directory_039_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1180_benchmark,F_1180.txt,muk_dms.directory_458_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1181_benchmark,F_1181.txt,muk_dms.directory_286_benchmark,,muk_dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1182_benchmark,F_1182.txt,muk_dms.directory_126_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1183_benchmark,F_1183.txt,muk_dms.directory_160_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1184_benchmark,F_1184.txt,muk_dms.directory_032_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1185_benchmark,F_1185.txt,muk_dms.directory_202_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1186_benchmark,F_1186.txt,muk_dms.directory_279_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1187_benchmark,F_1187.txt,muk_dms.directory_040_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1188_benchmark,F_1188.txt,muk_dms.directory_201_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1189_benchmark,F_1189.txt,muk_dms.directory_127_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1190_benchmark,F_1190.txt,muk_dms.directory_222_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1191_benchmark,F_1191.txt,muk_dms.directory_233_benchmark,,muk_dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1192_benchmark,F_1192.txt,muk_dms.directory_134_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1193_benchmark,F_1193.txt,muk_dms.directory_245_benchmark,,muk_dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1194_benchmark,F_1194.txt,muk_dms.directory_221_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1195_benchmark,F_1195.txt,muk_dms.directory_398_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1196_benchmark,F_1196.txt,muk_dms.directory_172_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1197_benchmark,F_1197.txt,muk_dms.directory_323_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_105_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1198_benchmark,F_1198.txt,muk_dms.directory_275_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1199_benchmark,F_1199.txt,muk_dms.directory_365_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1200_benchmark,F_1200.txt,muk_dms.directory_040_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_116_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1201_benchmark,F_1201.txt,muk_dms.directory_232_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1202_benchmark,F_1202.txt,muk_dms.directory_315_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1203_benchmark,F_1203.txt,muk_dms.directory_033_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1204_benchmark,F_1204.txt,muk_dms.directory_271_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1205_benchmark,F_1205.txt,muk_dms.directory_262_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1206_benchmark,F_1206.txt,muk_dms.directory_061_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1207_benchmark,F_1207.txt,muk_dms.directory_185_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1208_benchmark,F_1208.txt,muk_dms.directory_148_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1209_benchmark,F_1209.txt,muk_dms.directory_395_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1210_benchmark,F_1210.txt,muk_dms.directory_208_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1211_benchmark,F_1211.txt,muk_dms.directory_173_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1212_benchmark,F_1212.txt,muk_dms.directory_453_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1213_benchmark,F_1213.txt,muk_dms.directory_063_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1214_benchmark,F_1214.txt,muk_dms.directory_308_benchmark,,muk_dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1215_benchmark,F_1215.txt,muk_dms.directory_015_benchmark,,muk_dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1216_benchmark,F_1216.txt,muk_dms.directory_313_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1217_benchmark,F_1217.txt,muk_dms.directory_268_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1218_benchmark,F_1218.txt,muk_dms.directory_253_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1219_benchmark,F_1219.txt,muk_dms.directory_378_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1220_benchmark,F_1220.txt,muk_dms.directory_278_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1221_benchmark,F_1221.txt,muk_dms.directory_361_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1222_benchmark,F_1222.txt,muk_dms.directory_234_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1223_benchmark,F_1223.txt,muk_dms.directory_283_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1224_benchmark,F_1224.txt,muk_dms.directory_126_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1225_benchmark,F_1225.txt,muk_dms.directory_271_benchmark,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1226_benchmark,F_1226.txt,muk_dms.directory_354_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1227_benchmark,F_1227.txt,muk_dms.directory_118_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1228_benchmark,F_1228.txt,muk_dms.directory_325_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_098_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1229_benchmark,F_1229.txt,muk_dms.directory_250_benchmark,muk_dms.category_006_benchmark,muk_dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1230_benchmark,F_1230.txt,muk_dms.directory_159_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1231_benchmark,F_1231.txt,muk_dms.directory_216_benchmark,,muk_dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1232_benchmark,F_1232.txt,muk_dms.directory_168_benchmark,,muk_dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1233_benchmark,F_1233.txt,muk_dms.directory_026_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1234_benchmark,F_1234.txt,muk_dms.directory_436_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1235_benchmark,F_1235.txt,muk_dms.directory_296_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1236_benchmark,F_1236.txt,muk_dms.directory_113_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1237_benchmark,F_1237.txt,muk_dms.directory_278_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1238_benchmark,F_1238.txt,muk_dms.directory_070_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1239_benchmark,F_1239.txt,muk_dms.directory_058_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1240_benchmark,F_1240.txt,muk_dms.directory_190_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1241_benchmark,F_1241.txt,muk_dms.directory_204_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1242_benchmark,F_1242.txt,muk_dms.directory_278_benchmark,,muk_dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1243_benchmark,F_1243.txt,muk_dms.directory_478_benchmark,,muk_dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1244_benchmark,F_1244.txt,muk_dms.directory_458_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1245_benchmark,F_1245.txt,muk_dms.directory_140_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1246_benchmark,F_1246.txt,muk_dms.directory_037_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1247_benchmark,F_1247.txt,muk_dms.directory_411_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1248_benchmark,F_1248.txt,muk_dms.directory_293_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1249_benchmark,F_1249.txt,muk_dms.directory_077_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1250_benchmark,F_1250.txt,muk_dms.directory_342_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1251_benchmark,F_1251.txt,muk_dms.directory_310_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1252_benchmark,F_1252.txt,muk_dms.directory_093_benchmark,,muk_dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1253_benchmark,F_1253.txt,muk_dms.directory_337_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1254_benchmark,F_1254.txt,muk_dms.directory_415_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1255_benchmark,F_1255.txt,muk_dms.directory_223_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1256_benchmark,F_1256.txt,muk_dms.directory_473_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1257_benchmark,F_1257.txt,muk_dms.directory_382_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1258_benchmark,F_1258.txt,muk_dms.directory_057_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1259_benchmark,F_1259.txt,muk_dms.directory_450_benchmark,,muk_dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1260_benchmark,F_1260.txt,muk_dms.directory_178_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1261_benchmark,F_1261.txt,muk_dms.directory_476_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1262_benchmark,F_1262.txt,muk_dms.directory_219_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1263_benchmark,F_1263.txt,muk_dms.directory_345_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1264_benchmark,F_1264.txt,muk_dms.directory_278_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1265_benchmark,F_1265.txt,muk_dms.directory_001_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1266_benchmark,F_1266.txt,muk_dms.directory_222_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1267_benchmark,F_1267.txt,muk_dms.directory_120_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1268_benchmark,F_1268.txt,muk_dms.directory_411_benchmark,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1269_benchmark,F_1269.txt,muk_dms.directory_386_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1270_benchmark,F_1270.txt,muk_dms.directory_299_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1271_benchmark,F_1271.txt,muk_dms.directory_335_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1272_benchmark,F_1272.txt,muk_dms.directory_019_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1273_benchmark,F_1273.txt,muk_dms.directory_055_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1274_benchmark,F_1274.txt,muk_dms.directory_483_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1275_benchmark,F_1275.txt,muk_dms.directory_033_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1276_benchmark,F_1276.txt,muk_dms.directory_439_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1277_benchmark,F_1277.txt,muk_dms.directory_473_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1278_benchmark,F_1278.txt,muk_dms.directory_397_benchmark,,muk_dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1279_benchmark,F_1279.txt,muk_dms.directory_002_benchmark,,muk_dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1280_benchmark,F_1280.txt,muk_dms.directory_382_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1281_benchmark,F_1281.txt,muk_dms.directory_386_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1282_benchmark,F_1282.txt,muk_dms.directory_387_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1283_benchmark,F_1283.txt,muk_dms.directory_148_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1284_benchmark,F_1284.txt,muk_dms.directory_414_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1285_benchmark,F_1285.txt,muk_dms.directory_337_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1286_benchmark,F_1286.txt,muk_dms.directory_005_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1287_benchmark,F_1287.txt,muk_dms.directory_310_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1288_benchmark,F_1288.txt,muk_dms.directory_204_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1289_benchmark,F_1289.txt,muk_dms.directory_370_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1290_benchmark,F_1290.txt,muk_dms.directory_216_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1291_benchmark,F_1291.txt,muk_dms.directory_379_benchmark,,muk_dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1292_benchmark,F_1292.txt,muk_dms.directory_187_benchmark,,muk_dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1293_benchmark,F_1293.txt,muk_dms.directory_276_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1294_benchmark,F_1294.txt,muk_dms.directory_498_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1295_benchmark,F_1295.txt,muk_dms.directory_287_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1296_benchmark,F_1296.txt,muk_dms.directory_086_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1297_benchmark,F_1297.txt,muk_dms.directory_324_benchmark,,muk_dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1298_benchmark,F_1298.txt,muk_dms.directory_218_benchmark,,muk_dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1299_benchmark,F_1299.txt,muk_dms.directory_097_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1300_benchmark,F_1300.txt,muk_dms.directory_494_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1301_benchmark,F_1301.txt,muk_dms.directory_274_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1302_benchmark,F_1302.txt,muk_dms.directory_206_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1303_benchmark,F_1303.txt,muk_dms.directory_251_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1304_benchmark,F_1304.txt,muk_dms.directory_068_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1305_benchmark,F_1305.txt,muk_dms.directory_313_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1306_benchmark,F_1306.txt,muk_dms.directory_099_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1307_benchmark,F_1307.txt,muk_dms.directory_164_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1308_benchmark,F_1308.txt,muk_dms.directory_194_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1309_benchmark,F_1309.txt,muk_dms.directory_185_benchmark,muk_dms.category_035_benchmark,muk_dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1310_benchmark,F_1310.txt,muk_dms.directory_007_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1311_benchmark,F_1311.txt,muk_dms.directory_337_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1312_benchmark,F_1312.txt,muk_dms.directory_276_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1313_benchmark,F_1313.txt,muk_dms.directory_074_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1314_benchmark,F_1314.txt,muk_dms.directory_305_benchmark,,muk_dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1315_benchmark,F_1315.txt,muk_dms.directory_300_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1316_benchmark,F_1316.txt,muk_dms.directory_358_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1317_benchmark,F_1317.txt,muk_dms.directory_102_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1318_benchmark,F_1318.txt,muk_dms.directory_018_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1319_benchmark,F_1319.txt,muk_dms.directory_370_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1320_benchmark,F_1320.txt,muk_dms.directory_408_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1321_benchmark,F_1321.txt,muk_dms.directory_242_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1322_benchmark,F_1322.txt,muk_dms.directory_243_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1323_benchmark,F_1323.txt,muk_dms.directory_323_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1324_benchmark,F_1324.txt,muk_dms.directory_011_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1325_benchmark,F_1325.txt,muk_dms.directory_316_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1326_benchmark,F_1326.txt,muk_dms.directory_159_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1327_benchmark,F_1327.txt,muk_dms.directory_135_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1328_benchmark,F_1328.txt,muk_dms.directory_310_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1329_benchmark,F_1329.txt,muk_dms.directory_413_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1330_benchmark,F_1330.txt,muk_dms.directory_045_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1331_benchmark,F_1331.txt,muk_dms.directory_468_benchmark,,muk_dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1332_benchmark,F_1332.txt,muk_dms.directory_033_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1333_benchmark,F_1333.txt,muk_dms.directory_354_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1334_benchmark,F_1334.txt,muk_dms.directory_420_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1335_benchmark,F_1335.txt,muk_dms.directory_152_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1336_benchmark,F_1336.txt,muk_dms.directory_319_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1337_benchmark,F_1337.txt,muk_dms.directory_027_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1338_benchmark,F_1338.txt,muk_dms.directory_241_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1339_benchmark,F_1339.txt,muk_dms.directory_465_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1340_benchmark,F_1340.txt,muk_dms.directory_146_benchmark,,muk_dms.tag_060_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1341_benchmark,F_1341.txt,muk_dms.directory_243_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1342_benchmark,F_1342.txt,muk_dms.directory_356_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1343_benchmark,F_1343.txt,muk_dms.directory_148_benchmark,,muk_dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1344_benchmark,F_1344.txt,muk_dms.directory_145_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1345_benchmark,F_1345.txt,muk_dms.directory_116_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1346_benchmark,F_1346.txt,muk_dms.directory_454_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_067_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1347_benchmark,F_1347.txt,muk_dms.directory_298_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1348_benchmark,F_1348.txt,muk_dms.directory_360_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1349_benchmark,F_1349.txt,muk_dms.directory_239_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1350_benchmark,F_1350.txt,muk_dms.directory_210_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1351_benchmark,F_1351.txt,muk_dms.directory_054_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1352_benchmark,F_1352.txt,muk_dms.directory_448_benchmark,,muk_dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1353_benchmark,F_1353.txt,muk_dms.directory_059_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1354_benchmark,F_1354.txt,muk_dms.directory_327_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1355_benchmark,F_1355.txt,muk_dms.directory_182_benchmark,,muk_dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1356_benchmark,F_1356.txt,muk_dms.directory_294_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1357_benchmark,F_1357.txt,muk_dms.directory_460_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1358_benchmark,F_1358.txt,muk_dms.directory_389_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1359_benchmark,F_1359.txt,muk_dms.directory_365_benchmark,,muk_dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1360_benchmark,F_1360.txt,muk_dms.directory_373_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1361_benchmark,F_1361.txt,muk_dms.directory_447_benchmark,,muk_dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1362_benchmark,F_1362.txt,muk_dms.directory_398_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1363_benchmark,F_1363.txt,muk_dms.directory_416_benchmark,,muk_dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1364_benchmark,F_1364.txt,muk_dms.directory_037_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1365_benchmark,F_1365.txt,muk_dms.directory_467_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1366_benchmark,F_1366.txt,muk_dms.directory_467_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1367_benchmark,F_1367.txt,muk_dms.directory_475_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1368_benchmark,F_1368.txt,muk_dms.directory_037_benchmark,,muk_dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1369_benchmark,F_1369.txt,muk_dms.directory_070_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1370_benchmark,F_1370.txt,muk_dms.directory_222_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1371_benchmark,F_1371.txt,muk_dms.directory_105_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1372_benchmark,F_1372.txt,muk_dms.directory_018_benchmark,muk_dms.category_004_benchmark,muk_dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1373_benchmark,F_1373.txt,muk_dms.directory_334_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1374_benchmark,F_1374.txt,muk_dms.directory_445_benchmark,muk_dms.category_007_benchmark,muk_dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1375_benchmark,F_1375.txt,muk_dms.directory_349_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1376_benchmark,F_1376.txt,muk_dms.directory_171_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1377_benchmark,F_1377.txt,muk_dms.directory_268_benchmark,muk_dms.category_044_benchmark,muk_dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1378_benchmark,F_1378.txt,muk_dms.directory_126_benchmark,muk_dms.category_038_benchmark,muk_dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1379_benchmark,F_1379.txt,muk_dms.directory_066_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1380_benchmark,F_1380.txt,muk_dms.directory_258_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1381_benchmark,F_1381.txt,muk_dms.directory_245_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1382_benchmark,F_1382.txt,muk_dms.directory_299_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1383_benchmark,F_1383.txt,muk_dms.directory_281_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1384_benchmark,F_1384.txt,muk_dms.directory_071_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1385_benchmark,F_1385.txt,muk_dms.directory_196_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1386_benchmark,F_1386.txt,muk_dms.directory_447_benchmark,muk_dms.category_003_benchmark,muk_dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1387_benchmark,F_1387.txt,muk_dms.directory_432_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1388_benchmark,F_1388.txt,muk_dms.directory_281_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1389_benchmark,F_1389.txt,muk_dms.directory_456_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1390_benchmark,F_1390.txt,muk_dms.directory_132_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_031_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1391_benchmark,F_1391.txt,muk_dms.directory_120_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1392_benchmark,F_1392.txt,muk_dms.directory_254_benchmark,muk_dms.category_029_benchmark,muk_dms.tag_005_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1393_benchmark,F_1393.txt,muk_dms.directory_312_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1394_benchmark,F_1394.txt,muk_dms.directory_278_benchmark,muk_dms.category_034_benchmark,muk_dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1395_benchmark,F_1395.txt,muk_dms.directory_477_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1396_benchmark,F_1396.txt,muk_dms.directory_131_benchmark,,muk_dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1397_benchmark,F_1397.txt,muk_dms.directory_272_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1398_benchmark,F_1398.txt,muk_dms.directory_257_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1399_benchmark,F_1399.txt,muk_dms.directory_468_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_120_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1400_benchmark,F_1400.txt,muk_dms.directory_102_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1401_benchmark,F_1401.txt,muk_dms.directory_064_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1402_benchmark,F_1402.txt,muk_dms.directory_036_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1403_benchmark,F_1403.txt,muk_dms.directory_079_benchmark,muk_dms.category_020_benchmark,muk_dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1404_benchmark,F_1404.txt,muk_dms.directory_013_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1405_benchmark,F_1405.txt,muk_dms.directory_241_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1406_benchmark,F_1406.txt,muk_dms.directory_452_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1407_benchmark,F_1407.txt,muk_dms.directory_374_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1408_benchmark,F_1408.txt,muk_dms.directory_296_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1409_benchmark,F_1409.txt,muk_dms.directory_136_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1410_benchmark,F_1410.txt,muk_dms.directory_475_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1411_benchmark,F_1411.txt,muk_dms.directory_071_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1412_benchmark,F_1412.txt,muk_dms.directory_201_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1413_benchmark,F_1413.txt,muk_dms.directory_386_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1414_benchmark,F_1414.txt,muk_dms.directory_407_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1415_benchmark,F_1415.txt,muk_dms.directory_335_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1416_benchmark,F_1416.txt,muk_dms.directory_310_benchmark,muk_dms.category_039_benchmark,muk_dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1417_benchmark,F_1417.txt,muk_dms.directory_313_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1418_benchmark,F_1418.txt,muk_dms.directory_180_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1419_benchmark,F_1419.txt,muk_dms.directory_322_benchmark,muk_dms.category_026_benchmark,muk_dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1420_benchmark,F_1420.txt,muk_dms.directory_178_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1421_benchmark,F_1421.txt,muk_dms.directory_467_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1422_benchmark,F_1422.txt,muk_dms.directory_321_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1423_benchmark,F_1423.txt,muk_dms.directory_489_benchmark,,muk_dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1424_benchmark,F_1424.txt,muk_dms.directory_270_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1425_benchmark,F_1425.txt,muk_dms.directory_228_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1426_benchmark,F_1426.txt,muk_dms.directory_400_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1427_benchmark,F_1427.txt,muk_dms.directory_237_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1428_benchmark,F_1428.txt,muk_dms.directory_020_benchmark,muk_dms.category_016_benchmark,muk_dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1429_benchmark,F_1429.txt,muk_dms.directory_395_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1430_benchmark,F_1430.txt,muk_dms.directory_160_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1431_benchmark,F_1431.txt,muk_dms.directory_372_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1432_benchmark,F_1432.txt,muk_dms.directory_200_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1433_benchmark,F_1433.txt,muk_dms.directory_122_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1434_benchmark,F_1434.txt,muk_dms.directory_374_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1435_benchmark,F_1435.txt,muk_dms.directory_173_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1436_benchmark,F_1436.txt,muk_dms.directory_412_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1437_benchmark,F_1437.txt,muk_dms.directory_204_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1438_benchmark,F_1438.txt,muk_dms.directory_347_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1439_benchmark,F_1439.txt,muk_dms.directory_030_benchmark,muk_dms.category_017_benchmark,muk_dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1440_benchmark,F_1440.txt,muk_dms.directory_347_benchmark,,muk_dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1441_benchmark,F_1441.txt,muk_dms.directory_103_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1442_benchmark,F_1442.txt,muk_dms.directory_295_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1443_benchmark,F_1443.txt,muk_dms.directory_381_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1444_benchmark,F_1444.txt,muk_dms.directory_151_benchmark,muk_dms.category_012_benchmark,muk_dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1445_benchmark,F_1445.txt,muk_dms.directory_136_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1446_benchmark,F_1446.txt,muk_dms.directory_059_benchmark,,muk_dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1447_benchmark,F_1447.txt,muk_dms.directory_216_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1448_benchmark,F_1448.txt,muk_dms.directory_182_benchmark,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1449_benchmark,F_1449.txt,muk_dms.directory_442_benchmark,,muk_dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1450_benchmark,F_1450.txt,muk_dms.directory_258_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1451_benchmark,F_1451.txt,muk_dms.directory_272_benchmark,muk_dms.category_032_benchmark,muk_dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1452_benchmark,F_1452.txt,muk_dms.directory_326_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1453_benchmark,F_1453.txt,muk_dms.directory_147_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1454_benchmark,F_1454.txt,muk_dms.directory_377_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1455_benchmark,F_1455.txt,muk_dms.directory_464_benchmark,muk_dms.category_046_benchmark,muk_dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1456_benchmark,F_1456.txt,muk_dms.directory_425_benchmark,muk_dms.category_028_benchmark,muk_dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1457_benchmark,F_1457.txt,muk_dms.directory_361_benchmark,muk_dms.category_043_benchmark,muk_dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1458_benchmark,F_1458.txt,muk_dms.directory_394_benchmark,muk_dms.category_033_benchmark,muk_dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1459_benchmark,F_1459.txt,muk_dms.directory_133_benchmark,,muk_dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1460_benchmark,F_1460.txt,muk_dms.directory_334_benchmark,,muk_dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1461_benchmark,F_1461.txt,muk_dms.directory_341_benchmark,muk_dms.category_050_benchmark,muk_dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1462_benchmark,F_1462.txt,muk_dms.directory_179_benchmark,muk_dms.category_027_benchmark,muk_dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1463_benchmark,F_1463.txt,muk_dms.directory_352_benchmark,muk_dms.category_021_benchmark,muk_dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1464_benchmark,F_1464.txt,muk_dms.directory_231_benchmark,muk_dms.category_040_benchmark,muk_dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1465_benchmark,F_1465.txt,muk_dms.directory_226_benchmark,muk_dms.category_008_benchmark,muk_dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1466_benchmark,F_1466.txt,muk_dms.directory_216_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1467_benchmark,F_1467.txt,muk_dms.directory_061_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1468_benchmark,F_1468.txt,muk_dms.directory_298_benchmark,muk_dms.category_015_benchmark,muk_dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1469_benchmark,F_1469.txt,muk_dms.directory_144_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_103_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1470_benchmark,F_1470.txt,muk_dms.directory_233_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1471_benchmark,F_1471.txt,muk_dms.directory_325_benchmark,muk_dms.category_023_benchmark,muk_dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1472_benchmark,F_1472.txt,muk_dms.directory_394_benchmark,muk_dms.category_049_benchmark,muk_dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1473_benchmark,F_1473.txt,muk_dms.directory_362_benchmark,muk_dms.category_019_benchmark,muk_dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1474_benchmark,F_1474.txt,muk_dms.directory_363_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1475_benchmark,F_1475.txt,muk_dms.directory_131_benchmark,muk_dms.category_011_benchmark,muk_dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1476_benchmark,F_1476.txt,muk_dms.directory_478_benchmark,muk_dms.category_018_benchmark,muk_dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1477_benchmark,F_1477.txt,muk_dms.directory_184_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1478_benchmark,F_1478.txt,muk_dms.directory_120_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1479_benchmark,F_1479.txt,muk_dms.directory_139_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1480_benchmark,F_1480.txt,muk_dms.directory_042_benchmark,muk_dms.category_013_benchmark,muk_dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1481_benchmark,F_1481.txt,muk_dms.directory_296_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1482_benchmark,F_1482.txt,muk_dms.directory_043_benchmark,,muk_dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1483_benchmark,F_1483.txt,muk_dms.directory_013_benchmark,,muk_dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1484_benchmark,F_1484.txt,muk_dms.directory_025_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1485_benchmark,F_1485.txt,muk_dms.directory_444_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1486_benchmark,F_1486.txt,muk_dms.directory_085_benchmark,muk_dms.category_024_benchmark,muk_dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1487_benchmark,F_1487.txt,muk_dms.directory_427_benchmark,muk_dms.category_014_benchmark,muk_dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1488_benchmark,F_1488.txt,muk_dms.directory_136_benchmark,,muk_dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1489_benchmark,F_1489.txt,muk_dms.directory_397_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1490_benchmark,F_1490.txt,muk_dms.directory_033_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1491_benchmark,F_1491.txt,muk_dms.directory_130_benchmark,muk_dms.category_022_benchmark,muk_dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1492_benchmark,F_1492.txt,muk_dms.directory_247_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1493_benchmark,F_1493.txt,muk_dms.directory_105_benchmark,muk_dms.category_037_benchmark,muk_dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1494_benchmark,F_1494.txt,muk_dms.directory_149_benchmark,muk_dms.category_041_benchmark,muk_dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1495_benchmark,F_1495.txt,muk_dms.directory_246_benchmark,muk_dms.category_031_benchmark,muk_dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1496_benchmark,F_1496.txt,muk_dms.directory_285_benchmark,muk_dms.category_025_benchmark,muk_dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1497_benchmark,F_1497.txt,muk_dms.directory_237_benchmark,muk_dms.category_005_benchmark,muk_dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1498_benchmark,F_1498.txt,muk_dms.directory_020_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1499_benchmark,F_1499.txt,muk_dms.directory_277_benchmark,,muk_dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +muk_dms.file_1500_benchmark,F_1500.txt,muk_dms.directory_434_benchmark,muk_dms.category_001_benchmark,muk_dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== \ No newline at end of file diff --git a/odex-event/muk_dms/tests/data/muk_dms.storage.csv b/odex-event/muk_dms/tests/data/muk_dms.storage.csv new file mode 100644 index 000000000..97c98ea81 --- /dev/null +++ b/odex-event/muk_dms/tests/data/muk_dms.storage.csv @@ -0,0 +1,3 @@ +id,name,save_type +muk_dms.storage_001_benchmark,S_001,database +muk_dms.storage_002_benchmark,S_002,database \ No newline at end of file diff --git a/odex-event/muk_dms/tests/data/muk_dms.tag.csv b/odex-event/muk_dms/tests/data/muk_dms.tag.csv new file mode 100644 index 000000000..dff3dfe39 --- /dev/null +++ b/odex-event/muk_dms/tests/data/muk_dms.tag.csv @@ -0,0 +1,151 @@ +id,name,category/id +muk_dms.tag_001_benchmark,T_001,muk_dms.category_027_benchmark +muk_dms.tag_002_benchmark,T_002,muk_dms.category_015_benchmark +muk_dms.tag_003_benchmark,T_003,muk_dms.category_039_benchmark +muk_dms.tag_004_benchmark,T_004, +muk_dms.tag_005_benchmark,T_005,muk_dms.category_029_benchmark +muk_dms.tag_006_benchmark,T_006, +muk_dms.tag_007_benchmark,T_007,muk_dms.category_049_benchmark +muk_dms.tag_008_benchmark,T_008,muk_dms.category_015_benchmark +muk_dms.tag_009_benchmark,T_009, +muk_dms.tag_010_benchmark,T_010, +muk_dms.tag_011_benchmark,T_011,muk_dms.category_017_benchmark +muk_dms.tag_012_benchmark,T_012, +muk_dms.tag_013_benchmark,T_013, +muk_dms.tag_014_benchmark,T_014,muk_dms.category_005_benchmark +muk_dms.tag_015_benchmark,T_015, +muk_dms.tag_016_benchmark,T_016, +muk_dms.tag_017_benchmark,T_017,muk_dms.category_017_benchmark +muk_dms.tag_018_benchmark,T_018,muk_dms.category_018_benchmark +muk_dms.tag_019_benchmark,T_019,muk_dms.category_040_benchmark +muk_dms.tag_020_benchmark,T_020,muk_dms.category_022_benchmark +muk_dms.tag_021_benchmark,T_021,muk_dms.category_011_benchmark +muk_dms.tag_022_benchmark,T_022,muk_dms.category_046_benchmark +muk_dms.tag_023_benchmark,T_023,muk_dms.category_012_benchmark +muk_dms.tag_024_benchmark,T_024,muk_dms.category_040_benchmark +muk_dms.tag_025_benchmark,T_025,muk_dms.category_009_benchmark +muk_dms.tag_026_benchmark,T_026,muk_dms.category_021_benchmark +muk_dms.tag_027_benchmark,T_027,muk_dms.category_026_benchmark +muk_dms.tag_028_benchmark,T_028,muk_dms.category_025_benchmark +muk_dms.tag_029_benchmark,T_029,muk_dms.category_050_benchmark +muk_dms.tag_030_benchmark,T_030,muk_dms.category_037_benchmark +muk_dms.tag_031_benchmark,T_031,muk_dms.category_013_benchmark +muk_dms.tag_032_benchmark,T_032, +muk_dms.tag_033_benchmark,T_033,muk_dms.category_034_benchmark +muk_dms.tag_034_benchmark,T_034, +muk_dms.tag_035_benchmark,T_035,muk_dms.category_049_benchmark +muk_dms.tag_036_benchmark,T_036,muk_dms.category_041_benchmark +muk_dms.tag_037_benchmark,T_037, +muk_dms.tag_038_benchmark,T_038,muk_dms.category_023_benchmark +muk_dms.tag_039_benchmark,T_039,muk_dms.category_033_benchmark +muk_dms.tag_040_benchmark,T_040,muk_dms.category_049_benchmark +muk_dms.tag_041_benchmark,T_041,muk_dms.category_006_benchmark +muk_dms.tag_042_benchmark,T_042,muk_dms.category_041_benchmark +muk_dms.tag_043_benchmark,T_043,muk_dms.category_040_benchmark +muk_dms.tag_044_benchmark,T_044, +muk_dms.tag_045_benchmark,T_045,muk_dms.category_026_benchmark +muk_dms.tag_046_benchmark,T_046, +muk_dms.tag_047_benchmark,T_047,muk_dms.category_034_benchmark +muk_dms.tag_048_benchmark,T_048,muk_dms.category_027_benchmark +muk_dms.tag_049_benchmark,T_049,muk_dms.category_024_benchmark +muk_dms.tag_050_benchmark,T_050,muk_dms.category_050_benchmark +muk_dms.tag_051_benchmark,T_051,muk_dms.category_001_benchmark +muk_dms.tag_052_benchmark,T_052,muk_dms.category_028_benchmark +muk_dms.tag_053_benchmark,T_053,muk_dms.category_041_benchmark +muk_dms.tag_054_benchmark,T_054,muk_dms.category_040_benchmark +muk_dms.tag_055_benchmark,T_055,muk_dms.category_019_benchmark +muk_dms.tag_056_benchmark,T_056,muk_dms.category_015_benchmark +muk_dms.tag_057_benchmark,T_057,muk_dms.category_012_benchmark +muk_dms.tag_058_benchmark,T_058,muk_dms.category_005_benchmark +muk_dms.tag_059_benchmark,T_059,muk_dms.category_014_benchmark +muk_dms.tag_060_benchmark,T_060, +muk_dms.tag_061_benchmark,T_061,muk_dms.category_022_benchmark +muk_dms.tag_062_benchmark,T_062,muk_dms.category_046_benchmark +muk_dms.tag_063_benchmark,T_063, +muk_dms.tag_064_benchmark,T_064,muk_dms.category_032_benchmark +muk_dms.tag_065_benchmark,T_065, +muk_dms.tag_066_benchmark,T_066,muk_dms.category_017_benchmark +muk_dms.tag_067_benchmark,T_067,muk_dms.category_007_benchmark +muk_dms.tag_068_benchmark,T_068,muk_dms.category_013_benchmark +muk_dms.tag_069_benchmark,T_069,muk_dms.category_035_benchmark +muk_dms.tag_070_benchmark,T_070, +muk_dms.tag_071_benchmark,T_071,muk_dms.category_049_benchmark +muk_dms.tag_072_benchmark,T_072,muk_dms.category_040_benchmark +muk_dms.tag_073_benchmark,T_073,muk_dms.category_022_benchmark +muk_dms.tag_074_benchmark,T_074,muk_dms.category_025_benchmark +muk_dms.tag_075_benchmark,T_075, +muk_dms.tag_076_benchmark,T_076,muk_dms.category_003_benchmark +muk_dms.tag_077_benchmark,T_077,muk_dms.category_008_benchmark +muk_dms.tag_078_benchmark,T_078,muk_dms.category_014_benchmark +muk_dms.tag_079_benchmark,T_079,muk_dms.category_043_benchmark +muk_dms.tag_080_benchmark,T_080,muk_dms.category_011_benchmark +muk_dms.tag_081_benchmark,T_081,muk_dms.category_019_benchmark +muk_dms.tag_082_benchmark,T_082,muk_dms.category_025_benchmark +muk_dms.tag_083_benchmark,T_083,muk_dms.category_018_benchmark +muk_dms.tag_084_benchmark,T_084,muk_dms.category_024_benchmark +muk_dms.tag_085_benchmark,T_085,muk_dms.category_023_benchmark +muk_dms.tag_086_benchmark,T_086, +muk_dms.tag_087_benchmark,T_087,muk_dms.category_041_benchmark +muk_dms.tag_088_benchmark,T_088,muk_dms.category_037_benchmark +muk_dms.tag_089_benchmark,T_089,muk_dms.category_015_benchmark +muk_dms.tag_090_benchmark,T_090, +muk_dms.tag_091_benchmark,T_091, +muk_dms.tag_092_benchmark,T_092,muk_dms.category_038_benchmark +muk_dms.tag_093_benchmark,T_093,muk_dms.category_049_benchmark +muk_dms.tag_094_benchmark,T_094, +muk_dms.tag_095_benchmark,T_095,muk_dms.category_044_benchmark +muk_dms.tag_096_benchmark,T_096, +muk_dms.tag_097_benchmark,T_097,muk_dms.category_025_benchmark +muk_dms.tag_098_benchmark,T_098,muk_dms.category_012_benchmark +muk_dms.tag_099_benchmark,T_099,muk_dms.category_001_benchmark +muk_dms.tag_100_benchmark,T_100,muk_dms.category_016_benchmark +muk_dms.tag_101_benchmark,T_101,muk_dms.category_035_benchmark +muk_dms.tag_102_benchmark,T_102,muk_dms.category_001_benchmark +muk_dms.tag_103_benchmark,T_103,muk_dms.category_014_benchmark +muk_dms.tag_104_benchmark,T_104, +muk_dms.tag_105_benchmark,T_105,muk_dms.category_019_benchmark +muk_dms.tag_106_benchmark,T_106,muk_dms.category_003_benchmark +muk_dms.tag_107_benchmark,T_107,muk_dms.category_014_benchmark +muk_dms.tag_108_benchmark,T_108, +muk_dms.tag_109_benchmark,T_109,muk_dms.category_034_benchmark +muk_dms.tag_110_benchmark,T_110,muk_dms.category_050_benchmark +muk_dms.tag_111_benchmark,T_111,muk_dms.category_031_benchmark +muk_dms.tag_112_benchmark,T_112,muk_dms.category_025_benchmark +muk_dms.tag_113_benchmark,T_113,muk_dms.category_033_benchmark +muk_dms.tag_114_benchmark,T_114,muk_dms.category_031_benchmark +muk_dms.tag_115_benchmark,T_115,muk_dms.category_041_benchmark +muk_dms.tag_116_benchmark,T_116,muk_dms.category_031_benchmark +muk_dms.tag_117_benchmark,T_117,muk_dms.category_050_benchmark +muk_dms.tag_118_benchmark,T_118,muk_dms.category_007_benchmark +muk_dms.tag_119_benchmark,T_119, +muk_dms.tag_120_benchmark,T_120,muk_dms.category_015_benchmark +muk_dms.tag_121_benchmark,T_121,muk_dms.category_005_benchmark +muk_dms.tag_122_benchmark,T_122,muk_dms.category_001_benchmark +muk_dms.tag_123_benchmark,T_123, +muk_dms.tag_124_benchmark,T_124, +muk_dms.tag_125_benchmark,T_125,muk_dms.category_019_benchmark +muk_dms.tag_126_benchmark,T_126,muk_dms.category_040_benchmark +muk_dms.tag_127_benchmark,T_127, +muk_dms.tag_128_benchmark,T_128,muk_dms.category_039_benchmark +muk_dms.tag_129_benchmark,T_129,muk_dms.category_020_benchmark +muk_dms.tag_130_benchmark,T_130, +muk_dms.tag_131_benchmark,T_131, +muk_dms.tag_132_benchmark,T_132, +muk_dms.tag_133_benchmark,T_133,muk_dms.category_018_benchmark +muk_dms.tag_134_benchmark,T_134, +muk_dms.tag_135_benchmark,T_135,muk_dms.category_004_benchmark +muk_dms.tag_136_benchmark,T_136,muk_dms.category_021_benchmark +muk_dms.tag_137_benchmark,T_137, +muk_dms.tag_138_benchmark,T_138,muk_dms.category_043_benchmark +muk_dms.tag_139_benchmark,T_139,muk_dms.category_043_benchmark +muk_dms.tag_140_benchmark,T_140,muk_dms.category_021_benchmark +muk_dms.tag_141_benchmark,T_141,muk_dms.category_020_benchmark +muk_dms.tag_142_benchmark,T_142,muk_dms.category_034_benchmark +muk_dms.tag_143_benchmark,T_143,muk_dms.category_001_benchmark +muk_dms.tag_144_benchmark,T_144,muk_dms.category_011_benchmark +muk_dms.tag_145_benchmark,T_145,muk_dms.category_003_benchmark +muk_dms.tag_146_benchmark,T_146,muk_dms.category_039_benchmark +muk_dms.tag_147_benchmark,T_147,muk_dms.category_016_benchmark +muk_dms.tag_148_benchmark,T_148,muk_dms.category_040_benchmark +muk_dms.tag_149_benchmark,T_149,muk_dms.category_014_benchmark +muk_dms.tag_150_benchmark,T_150,muk_dms.category_013_benchmark diff --git a/odex-event/muk_dms/tests/test_benchmark.py b/odex-event/muk_dms/tests/test_benchmark.py new file mode 100644 index 000000000..8ae6edf8c --- /dev/null +++ b/odex-event/muk_dms/tests/test_benchmark.py @@ -0,0 +1,278 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import time +import logging +import unittest +import threading +import functools + +from odoo import SUPERUSER_ID +from odoo.tests import common +from odoo.tests import tagged +from odoo.tools.profiler import profile +from odoo.tools import config, convert_file +from odoo.modules.module import get_resource_path +from odoo.modules.module import get_module_resource + +from odoo.addons.muk_utils.tests.common import multi_users +from odoo.addons.muk_utils.tests.common import track_function + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +@tagged('-standard', 'benchmark') +class BenchmarkTestCase(common.SavepointCase): + + @classmethod + def setUpClass(cls): + super(BenchmarkTestCase, cls).setUpClass() + cls._clean_existing_records() + cls._setup_benchmark_data() + + @classmethod + def _clean_existing_records(cls): + cls.env['muk_dms.category'].search([]).unlink() + cls.env['muk_dms.directory'].search([]).unlink() + cls.env['muk_dms.storage'].search([]).unlink() + cls.env['muk_dms.tag'].search([]).unlink() + + @classmethod + def _load(cls, module, *args): + convert_file(cls.cr, 'muk_dms', get_module_resource(module, *args), + {}, 'init', False, 'test', cls.registry._assertion_report) + + @classmethod + def _setup_benchmark_data(cls): + cls._load('muk_dms', 'tests', 'data', 'muk_dms.category.csv') + cls._load('muk_dms', 'tests', 'data', 'muk_dms.storage.csv') + cls._load('muk_dms', 'tests', 'data', 'muk_dms.tag.csv') + cls._load('muk_dms', 'tests', 'data', 'muk_dms.directory.csv') + cls._load('muk_dms', 'tests', 'data', 'muk_dms.file.csv') + + def _benchmark_table(self, data): + columns = len(data[0]) - 1 + format = "{:7}" + "| {:28}" * columns + + result = (format.format(*data[0]) + "\n") + result += (("-" * 7) + (("+" + ("-") * 29) * columns) + "\n") + for row in data[1:]: + result += (format.format(*row) + "\n") + return result + + def _benchmark_function(self, func, args_list): + tfunc = track_function(return_tracking=True)(func) + benchmark = [] + for item in args_list: + self.registry.clear_caches() + args = item[0] if len(item) > 0 else [] + kwargs = item[1] if len(item) > 1 else {} + tracking = tuple(tfunc(*args, **kwargs)[1][1:]) + benchmark.append("%sq %.3fs %.3fs %.3fs" % tracking) + return benchmark + + #---------------------------------------------------------- + # File + #---------------------------------------------------------- + + def _file_kanban_fields(self): + return [ + 'id', 'tags', 'name', 'color', 'active', 'mimetype', 'create_uid', 'write_date', 'locked_by', + 'is_locked', 'is_lock_editor', 'permission_write', 'permission_unlink', '__last_update' + ] + + def test_file_search_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env['muk_dms.file'].with_context(bin_size=True) + args = [[[[]], {'limit': 1}], [[[]], {'limit': 80}], [[[]], {'limit': 500}], [[[]]]] + + benchmark_data_super = ['Super'] + self._benchmark_function(model.sudo().search, args) + benchmark_data_admin = ['Admin'] + self._benchmark_function(model.sudo(admin_uid).search, args) + benchmark_data_demo = ['Demo'] + self._benchmark_function(model.sudo(demo_uid).search, args) + + info_message = "\n\nSearching files with bin_size = True | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table([ + ["User", "Search Limit 1", "Search Limit 80", "Search Limit 500", "Search No Limit"], + benchmark_data_super, benchmark_data_admin, benchmark_data_demo + ]) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time\n" + _logger.info(info_message) + + def test_file_search_read_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env['muk_dms.file'].with_context(bin_size=True) + args = [[[], {'limit': 1}], [[], {'limit': 80}], [[], {'limit': 500}], [[]]] + + benchmark_data_super = ['Super'] + self._benchmark_function(model.sudo().search_read, args) + benchmark_data_admin = ['Admin'] + self._benchmark_function(model.sudo(admin_uid).search_read, args) + benchmark_data_demo = ['Demo'] + self._benchmark_function(model.sudo(demo_uid).search_read, args) + + info_message = "\n\nSearching and reading all fields with bin_size = True | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table([ + ["User", "Search Limit 1", "Search Limit 80", "Search Limit 500", "Search No Limit"], + benchmark_data_super, benchmark_data_admin, benchmark_data_demo + ]) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time\n" + _logger.info(info_message) + + def test_file_search_name_get_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env['muk_dms.file'].with_context(bin_size=True) + + def test_function(model, limit): + return model.search([], limit=limit).name_get() + + model_super = model.sudo() + model_admin = model.sudo(admin_uid) + model_demo = model.sudo(demo_uid) + args_super = [[[model_super, 1]], [[model_super, 800]], [[model_super, 500]], [[model_super, None]]] + args_admin = [[[model_admin, 1]], [[model_admin, 800]], [[model_admin, 500]], [[model_admin, None]]] + args_demo = [[[model_demo, 1]], [[model_demo, 800]], [[model_demo, 500]], [[model_demo, None]]] + + benchmark_data_super = ['Super'] + self._benchmark_function(test_function, args_super) + benchmark_data_admin = ['Admin'] + self._benchmark_function(test_function, args_admin) + benchmark_data_demo = ['Demo'] + self._benchmark_function(test_function, args_demo) + + info_message = "\n\nSearching and 'name_get' function with bin_size = True | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table([ + ["User", "Search Limit 1", "Search Limit 80", "Search Limit 500", "Search No Limit"], + benchmark_data_super, benchmark_data_admin, benchmark_data_demo + ]) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time\n" + _logger.info(info_message) + + def test_file_kanban_backend_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env['muk_dms.file'].with_context(bin_size=True) + kanban_fields = self._file_kanban_fields() + + def test_function(model, kanban_fields, limit=80): + model.search_panel_select_range('directory') + model.search_panel_select_multi_range('directory') + model.search_panel_select_multi_range('tags') + model.search_read(fields=kanban_fields, limit=limit) + + def function_args(args, kwargs): + return [[args, {'limit': arg}] for arg in kwargs] + + args_super = function_args([model.sudo(), kanban_fields], [1, 80, 500, None]) + args_admin = function_args([model.sudo(admin_uid), kanban_fields], [1, 80, 500, None]) + args_demo = function_args([model.sudo(demo_uid), kanban_fields], [1, 80, 500, None]) + + benchmark_data_super = ['Super'] + self._benchmark_function(test_function, args_super) + benchmark_data_admin = ['Admin'] + self._benchmark_function(test_function, args_admin) + benchmark_data_demo = ['Demo'] + self._benchmark_function(test_function, args_demo) + + info_message = "\n\nSimulate kanban view loading on the backend | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table([ + ["User", "Search Limit 1", "Search Limit 80", "Search Limit 500", "Search No Limit"], + benchmark_data_super, benchmark_data_admin, benchmark_data_demo + ]) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time || " + info_message += "500 Directories | 150 Tags | 50 Categories\n" + _logger.info(info_message) + + #---------------------------------------------------------- + # Directory + #---------------------------------------------------------- + + def test_directory_search_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env['muk_dms.directory'].with_context(bin_size=True) + args = [[[[]], {'limit': 1}], [[[]], {'limit': 80}], [[[]], {'limit': 500}], [[[]]]] + + benchmark_data_super = ['Super'] + self._benchmark_function(model.sudo().search, args) + benchmark_data_admin = ['Admin'] + self._benchmark_function(model.sudo(admin_uid).search, args) + benchmark_data_demo = ['Demo'] + self._benchmark_function(model.sudo(demo_uid).search, args) + + info_message = "\n\nSearching directories with bin_size = True | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table([ + ["User", "Search Limit 1", "Search Limit 80", "Search Limit 500", "Search No Limit"], + benchmark_data_super, benchmark_data_admin, benchmark_data_demo + ]) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time\n" + _logger.info(info_message) + + def test_directory_search_parents_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env['muk_dms.directory'].with_context(bin_size=True) + args = [[[[]], {'limit': 1}], [[[]], {'limit': 80}], [[[]], {'limit': 500}], [[[]]]] + + benchmark_data_super = ['Super'] + self._benchmark_function(model.sudo().search_parents, args) + benchmark_data_admin = ['Admin'] + self._benchmark_function(model.sudo(admin_uid).search_parents, args) + benchmark_data_demo = ['Demo'] + self._benchmark_function(model.sudo(demo_uid).search_parents, args) + + info_message = "\n\nSearching directory parents with bin_size = True | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table([ + ["User", "Search Limit 1", "Search Limit 80", "Search Limit 500", "Search No Limit"], + benchmark_data_super, benchmark_data_admin, benchmark_data_demo + ]) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time\n" + _logger.info(info_message) + + def test_directory_search_read_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env['muk_dms.directory'].with_context(bin_size=True) + args = [[[], {'limit': 1}], [[], {'limit': 80}], [[], {'limit': 500}], [[]]] + + benchmark_data_super = ['Super'] + self._benchmark_function(model.sudo().search_read, args) + benchmark_data_admin = ['Admin'] + self._benchmark_function(model.sudo(admin_uid).search_read, args) + benchmark_data_demo = ['Demo'] + self._benchmark_function(model.sudo(demo_uid).search_read, args) + + info_message = "\n\nSearching and reading all fields with bin_size = True | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table([ + ["User", "Search Limit 1", "Search Limit 80", "Search Limit 500", "Search No Limit"], + benchmark_data_super, benchmark_data_admin, benchmark_data_demo + ]) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time\n" + _logger.info(info_message) + + #---------------------------------------------------------- + # Profiler + #---------------------------------------------------------- + + @unittest.skip("Takes to long to be tested every time.") + def test_file_search_read_profile_admin(self): + @track_function() + @profile(minimum_queries=35) + def profile_function(model): + model.search_read([]) + admin_uid = self.browse_ref("base.user_admin").id + model = self.env['muk_dms.file'].sudo(admin_uid) + profile_function(model.with_context(bin_size=True)) + + \ No newline at end of file diff --git a/odex-event/muk_dms/tests/test_directory.py b/odex-event/muk_dms/tests/test_directory.py new file mode 100644 index 000000000..d0aeca38a --- /dev/null +++ b/odex-event/muk_dms/tests/test_directory.py @@ -0,0 +1,167 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import logging + +from odoo.addons.muk_utils.tests.common import multi_users +from odoo.addons.muk_dms.tests.common import setup_data_function +from odoo.addons.muk_dms.tests.common import DocumentsBaseCase + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +class DirectoryTestCase(DocumentsBaseCase): + + def _setup_test_data(self): + super(DirectoryTestCase, self)._setup_test_data() + self.directory_root_demo_01 = self.browse_ref("muk_dms.directory_01_demo") + self.directory_root_demo_02 = self.browse_ref("muk_dms.directory_02_demo") + self.directory_root_demo_03 = self.browse_ref("muk_dms.directory_11_demo") + self.directory_sub_demo_01 = self.browse_ref("muk_dms.directory_03_demo") + self.directory_sub_demo_02 = self.browse_ref("muk_dms.directory_12_demo") + self.new_storage = self.create_storage(sudo=True) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_create_directory(self): + root_directory = self.create_directory(storage=self.new_storage) + sub_directory = self.create_directory(directory=root_directory) + self.assertTrue(sub_directory.storage.id == self.new_storage.id) + self.assertTrue(root_directory.count_directories == 1) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_copy_root_directory(self): + copy_root_directory = self.directory_root_demo_03.copy() + self.assertTrue(self.directory_root_demo_03.storage.id == copy_root_directory.storage.id) + self.assertTrue(self.directory_root_demo_03.count_directories == copy_root_directory.count_directories) + self.assertTrue(self.directory_root_demo_03.count_files == copy_root_directory.count_files) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_copy_sub_directory(self): + copy_sub_directory = self.directory_sub_demo_01.copy() + self.assertTrue(self.directory_sub_demo_01.storage.id == copy_sub_directory.storage.id) + self.assertTrue(self.directory_sub_demo_01.count_directories == copy_sub_directory.count_directories) + self.assertTrue(self.directory_sub_demo_01.count_files == copy_sub_directory.count_files) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_rename_directory(self): + path_names = self.directory_sub_demo_01.parent_path_names + self.directory_root_demo_01.write({'name': "New Test Name"}) + self.assertFalse(path_names == self.directory_sub_demo_01.parent_path_names) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_move_directory(self): + path_names = self.directory_sub_demo_01.parent_path_names + self.directory_root_demo_01.write({ + 'root_storage': False, + 'is_root_directory': False, + 'parent_directory': self.directory_root_demo_02.id, + }) + self.assertFalse(path_names == self.directory_sub_demo_01.parent_path_names) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_unlink_directory(self): + root_directory = self.create_directory(storage=self.new_storage) + sub_directory = self.create_directory(directory=root_directory) + sub_files = self.create_file(directory=sub_directory) + root_directory.unlink() + self.assertFalse(sub_directory.exists()) + self.assertFalse(sub_files.exists()) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_storage(self): + new_storage = self.create_storage(sudo=True) + root_directory = self.create_directory(storage=self.new_storage) + sub_directory = self.create_directory(directory=root_directory) + self.assertTrue(sub_directory.storage.id == self.new_storage.id) + root_directory.write({'root_storage': new_storage.id}) + self.assertTrue(sub_directory.storage.id == new_storage.id) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_starred(self): + self.directory_root_demo_01.toggle_starred() + self.directory_root_demo_02.write({'starred': True}) + starred = self.directory.search([('starred', '=', True)]) + self.assertTrue(self.directory_root_demo_01.id in starred.ids) + self.assertTrue(self.directory_root_demo_02.id in starred.ids) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_count_directories(self): + self.assertTrue(self.directory_root_demo_01.count_directories) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_count_files(self): + self.assertTrue(self.directory_sub_demo_01.count_files) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_count_elements(self): + self.assertTrue(self.directory_root_demo_01.count_elements) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_count_total_directories(self): + self.assertTrue(self.directory_root_demo_01.count_total_directories) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_count_count_total_files(self): + self.assertTrue(self.directory_root_demo_01.count_total_files) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_count_total_elements(self): + self.assertTrue(self.directory_root_demo_01.count_total_elements) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_size(self): + self.assertTrue(self.directory_root_demo_01.size) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_name_get(self): + directory = self.directory_sub_demo_01.with_context(dms_directory_show_path=True) + self.assertTrue("/" in directory.with_context(dms_directory_show_path=True).name_get()[0][1]) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_name_search(self): + directories = self.directory.name_search("/") + self.assertTrue(len(directories)) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_search_panel(self): + self.assertTrue(self.directory.search_panel_select_multi_range('parent_directory')) + self.assertTrue(self.directory.search_panel_select_multi_range('category')) + self.assertTrue(self.directory.search_panel_select_multi_range('tags')) \ No newline at end of file diff --git a/odex-event/muk_dms/tests/test_file.py b/odex-event/muk_dms/tests/test_file.py new file mode 100644 index 000000000..1e2ea485d --- /dev/null +++ b/odex-event/muk_dms/tests/test_file.py @@ -0,0 +1,176 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import logging + +from odoo.addons.muk_utils.tests.common import multi_users +from odoo.addons.muk_dms.tests.common import setup_data_function +from odoo.addons.muk_dms.tests.common import DocumentsBaseCase + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +class FileTestCase(DocumentsBaseCase): + + def _setup_test_data(self): + super(FileTestCase, self)._setup_test_data() + self.directory_root_demo_01 = self.browse_ref("muk_dms.directory_01_demo") + self.directory_root_demo_02 = self.browse_ref("muk_dms.directory_02_demo") + self.directory_root_demo_03 = self.browse_ref("muk_dms.directory_03_demo") + self.directory_sub_demo_01 = self.browse_ref("muk_dms.directory_11_demo") + self.directory_sub_demo_02 = self.browse_ref("muk_dms.directory_12_demo") + self.file_demo_01 = self.browse_ref("muk_dms.file_01_demo") + self.file_demo_02 = self.browse_ref("muk_dms.file_02_demo") + self.file_demo_03 = self.browse_ref("muk_dms.file_03_demo") + self.file_demo_04 = self.browse_ref("muk_dms.file_04_demo") + self.file_demo_05 = self.browse_ref("muk_dms.file_05_demo") + self.new_storage = self.create_storage(sudo=True) + self.new_root_directory = self.create_directory(storage=self.new_storage) + self.new_sub_directory = self.create_directory(directory=self.new_root_directory) + self.new_file_root_directory = self.create_file(directory=self.new_root_directory) + self.new_file_sub_directory = self.create_file(directory=self.new_sub_directory) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_create_file(self): + root_directory = self.create_directory(storage=self.new_storage) + sub_directory = self.create_directory(directory=root_directory) + file_root_directory = self.create_file(directory=root_directory) + file_sub_directory = self.create_file(directory=sub_directory) + self.assertTrue(root_directory.count_total_files == 2) + self.assertTrue(sub_directory.count_files == 1) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_lock_file(self): + file = self.create_file(sudo=True) + file.sudo(self.env.uid).lock() + self.assertTrue(file.is_locked) + file.sudo(self.env.uid).unlock() + self.assertFalse(file.is_locked) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_copy_file(self): + copy_file = self.file_demo_01.copy() + self.assertTrue(self.file_demo_01.storage.id == copy_file.storage.id) + self.assertTrue(self.file_demo_01.content == copy_file.content) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_rename_file(self): + file = self.create_file(sudo=True) + extension = file.extension + file.sudo(self.env.uid).write({'name': "Test.jpg"}) + self.assertFalse(file.extension == extension) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_move_file(self): + path_names = self.file_demo_01.path_names + self.file_demo_01.write({ + 'directory': self.directory_root_demo_01.id, + }) + self.assertFalse(path_names == self.file_demo_01.path_names) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_move_directory(self): + path_names = self.directory_root_demo_03.files[0].path_names + self.directory_root_demo_01.write({ + 'root_storage': False, + 'is_root_directory': False, + 'parent_directory': self.directory_root_demo_02.id, + }) + self.assertFalse(path_names == self.directory_root_demo_03.files[0].path_names) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_unlink_file(self): + file = self.create_file(sudo=True) + file.sudo(self.env.uid).unlink() + self.assertFalse(file.exists()) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_compute_thumbnail(self): + self.assertTrue(self.file_demo_01.thumbnail) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_compute_path_names(self): + self.assertTrue(self.file_demo_01.path_names) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_compute_path_json(self): + self.assertTrue(self.file_demo_01.path_json) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_compute_mimetype(self): + self.assertTrue(self.file_demo_01.mimetype) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_compute_extension(self): + self.assertTrue(self.file_demo_01.extension) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_size_calculation(self): + self.assertTrue(self.file_demo_01.size) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_checksum_calculation(self): + self.assertTrue(self.file_demo_01.checksum) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_compute_content_bin_size(self): + file = self.file_demo_01.with_context(bin_size=True) + self.assertTrue(file.content) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_compute_content_base64(self): + file = self.file_demo_01.with_context(bin_size=False) + self.assertTrue(file.content) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_compute_save_type(self): + self.assertTrue(self.file_demo_01.save_type) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_compute_migration(self): + self.assertTrue(self.file_demo_01.migration) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_search_panel(self): + self.assertTrue(self.file.search_panel_select_range('directory')) + self.assertTrue(self.file.search_panel_select_multi_range('directory')) + self.assertTrue(self.file.search_panel_select_multi_range('tags')) \ No newline at end of file diff --git a/odex-event/muk_dms/tests/test_storage.py b/odex-event/muk_dms/tests/test_storage.py new file mode 100644 index 000000000..6b9c02f05 --- /dev/null +++ b/odex-event/muk_dms/tests/test_storage.py @@ -0,0 +1,54 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Documents +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import logging + +from odoo.addons.muk_utils.tests.common import multi_users +from odoo.addons.muk_dms.tests.common import setup_data_function +from odoo.addons.muk_dms.tests.common import DocumentsBaseCase + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +class StorageTestCase(DocumentsBaseCase): + + def _setup_test_data(self): + super(StorageTestCase, self)._setup_test_data() + self.storage_demo = self.browse_ref("muk_dms.storage_demo") + + @multi_users(lambda self: self.multi_users(demo=False)) + @setup_data_function(setup_func='_setup_test_data') + def test_action_storage_migrate(self): + self.storage_demo.action_storage_migrate() + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_count_storage_directories(self): + self.assertTrue(self.storage_demo.count_storage_directories) + + @multi_users(lambda self: self.multi_users()) + @setup_data_function(setup_func='_setup_test_data') + def test_count_storage_files(self): + self.assertTrue(self.storage_demo.count_storage_files) + + \ No newline at end of file diff --git a/odex-event/muk_dms/views/category.xml b/odex-event/muk_dms/views/category.xml new file mode 100644 index 000000000..19df4d169 --- /dev/null +++ b/odex-event/muk_dms/views/category.xml @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="view_dms_category_search" model="ir.ui.view"> + <field name="name">muk_dms_category.search</field> + <field name="model">muk_dms.category</field> + <field name="arch" type="xml"> + <search string="Categories"> + <field name="name" filter_domain="[('name', 'ilike', self)]" /> + <filter string="All" name="all" domain="['|', ('active', '=', False), ('active', '=', True)]" /> + </search> + </field> +</record> + +<record id="view_dms_category_tree" model="ir.ui.view"> + <field name="name">muk_dms_category.tree</field> + <field name="model">muk_dms.category</field> + <field name="arch" type="xml"> + <tree string="Categories" decoration-muted="(not active)"> + <field name="active" /> + <field name="name" /> + <field name="parent_category" /> + <field name="tags" /> + </tree> + </field> +</record> + +<record id="view_dms_category_form" model="ir.ui.view"> + <field name="name">muk_dms_category.form</field> + <field name="model">muk_dms.category</field> + <field name="arch" type="xml"> + <form string="Category"> + <sheet> + <div class="oe_button_box" name="button_box"> + <button name="toggle_active" type="object" class="oe_stat_button" icon="fa-bell"> + <field name="active" widget="boolean_button"/> + </button> + </div> + <div class="oe_title"> + <label for="name" class="oe_edit_only"/> + <h1> + <field name="name" placeholder="Invoices"/> + </h1> + </div> + <group> + <group> + <field name="parent_category" /> + </group> + <group> + <field name="count_categories" string="Subcategories" /> + </group> + </group> + <group> + <group> + <field name="count_tags" string="Tags" /> + </group> + <group> + <field name="count_files" string="Files" /> + <field name="count_directories" string="Directories" /> + </group> + </group> + <notebook> + <page string="Tags"> + <field name="tags" widget="one2many" mode="kanban" context="{'default_category': active_id}" /> + </page> + <page string="Subcategories"> + <field name="child_categories" widget="one2many" mode="tree" context="{'default_parent_category': active_id}" /> + </page> + </notebook> + </sheet> + </form> + </field> +</record> + +<record id="action_dms_category" model="ir.actions.act_window"> + <field name="name">Categories</field> + <field name="res_model">muk_dms.category</field> + <field name="view_mode">tree,form</field> + <field name="context">{'search_default_all': 1}</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a new Category. + </p> + <p> + Categories are used to categorize Documents. + </p> + </field> +</record> + +<menuitem id="menu_dms_category" name="Categories" + parent="cat_menu_muk_dms_config_organizing" + action="action_dms_category" /> + +</odoo> diff --git a/odex-event/muk_dms/views/directory.xml b/odex-event/muk_dms/views/directory.xml new file mode 100644 index 000000000..f6f4b4ce3 --- /dev/null +++ b/odex-event/muk_dms/views/directory.xml @@ -0,0 +1,478 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="action_dms_directories_directory" model="ir.actions.act_window"> + <field name="name">Subdirectories</field> + <field name="view_type">form</field> + <field name="res_model">muk_dms.directory</field> + <field name="view_mode">kanban,tree,form</field> + <field name="domain"> + [ + ("parent_directory", "=", active_id), + ("is_hidden", "=", False), + ] + </field> + <field name="context"> + { + 'default_parent_directory': active_id, + } + </field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Click to add a new directory. + </p> + <p> + Directories can be used to structure and organize + files directly in Odoo. + </p> + </field> +</record> + +<record id="action_dms_files_directory" model="ir.actions.act_window"> + <field name="name">Files</field> + <field name="view_type">form</field> + <field name="res_model">muk_dms.file</field> + <field name="view_mode">kanban,tree,graph,pivot,form</field> + <field name="domain"> + [ + ("directory", "=", active_id), + ("is_hidden", "=", False), + ] + </field> + <field name="context"> + { + 'default_directory': active_id, + } + </field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Click to add a new file. + </p> + <p> + Files are used to save content directly in Odoo. + </p> + </field> +</record> + +<record id="action_dms_directories_all_directory" model="ir.actions.act_window"> + <field name="name">Subdirectories</field> + <field name="view_type">form</field> + <field name="res_model">muk_dms.directory</field> + <field name="view_mode">kanban,tree,form</field> + <field name="domain"> + [ + ("parent_directory", "child_of", active_id), + ("is_hidden", "=", False), + ("id", "!=", active_id), + ] + </field> + <field name="context"> + { + 'default_parent_directory': active_id, + } + </field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Click to add a new directory. + </p> + <p> + Directories can be used to structure and organize + files directly in Odoo. + </p> + </field> +</record> + +<record id="action_dms_files_all_directory" model="ir.actions.act_window"> + <field name="name">Files</field> + <field name="view_type">form</field> + <field name="res_model">muk_dms.file</field> + <field name="view_mode">kanban,tree,graph,pivot,form</field> + <field name="domain"> + [ + ("directory", "child_of", active_id), + ("is_hidden", "=", False), + ] + </field> + <field name="context"> + { + 'default_directory': active_id, + } + </field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Click to add a new file. + </p> + <p> + Files are used to save content directly in Odoo. + </p> + </field> +</record> + +<record id="search_dms_directory" model="ir.ui.view"> + <field name="name">muk_dms_directory.search</field> + <field name="model">muk_dms.directory</field> + <field name="arch" type="xml"> + <search> + <field name="name" filter_domain="['|', ('name','ilike',self), ('parent_path_names','ilike',self)]"/> + <filter string="My Directories" name="filter_user" domain="[('create_uid', '=', uid)]"/> + <filter string="Starred Directories" name="filter_starred" domain="[('starred', '=', True)]" /> + <separator/> + <filter string="Root Directories" name="filter_root" domain="[('is_root_directory', '=', True)]" /> + <separator/> + <filter string="Creation Date" name="filter_create" date="create_date"/> + <filter string="Modification Date" name="filter_write" date="write_date"/> + <group expand="0" string="Group By"> + <filter name="group_color" string="Color" domain="[]" context="{'group_by':'color'}" /> + <filter name="group_category" string="Category" domain="[]" context="{'group_by':'category'}" /> + <separator/> + <filter name="group_storage" string="Storage" domain="[]" context="{'group_by':'storage'}" /> + </group> + </search> + </field> +</record> + +<record id="view_dms_directory_kanban" model="ir.ui.view"> + <field name="name">muk_dms_directory.kanban</field> + <field name="model">muk_dms.directory</field> + <field name="arch" type="xml"> + <kanban class="mk_directory_kanban_view o_kanban_small_column align-content-start" + banner_route="/dms/document_onboarding/directory"> + <field name="id"/> + <field name="tags"/> + <field name="name"/> + <field name="color"/> + <field name="starred"/> + <field name="create_uid"/> + <field name="write_date"/> + <field name="permission_write"/> + <field name="permission_unlink"/> + <field name="count_directories"/> + <field name="count_files"/> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click"> + <div class="o_dropdown_kanban dropdown"> + <a class="dropdown-toggle o-no-caret btn" href="#" role="button" data-toggle="dropdown" aria-label="Dropdown menu" title="Dropdown menu"> + <span class="fa fa-ellipsis-v"/> + </a> + <div class="dropdown-menu" role="menu"> + <div class="row"> + <div class="col-6 mk_directory_kanban_views"> + <h6 class="dropdown-header">Views</h6> + <a type="action" name="%(muk_dms.action_dms_directories_all_directory)d" role="menuitem" class="dropdown-item"> + <i class="fa fa-folder-o" /> Directories + </a> + <a type="action" name="%(muk_dms.action_dms_files_all_directory)d" role="menuitem" class="dropdown-item"> + <i class="fa fa-file-o" /> Files + </a> + </div> + <div class="col-6 border-left mk_directory_kanban_actions"> + <h6 class="dropdown-header">Actions</h6> + <a role="menuitem" type="open" class="dropdown-item"> + <i class="fa fa-external-link" /> Open + </a> + <a t-if="record.permission_write.raw_value" role="menuitem" type="edit" class="dropdown-item"> + <i class="fa fa-pencil-square-o" /> Edit + </a> + <a t-if="record.permission_unlink.raw_value" role="menuitem" type="delete" class="dropdown-item"> + <i class="fa fa-trash-o" /> Delete + </a> + </div> + </div> + <div t-if="record.permission_write.raw_value" class="row"> + <div role="menuitem" class="col-12"> + <ul class="oe_kanban_colorpicker" data-field="color"/> + </div> + </div> + </div> + </div> + <div class="oe_kanban_content"> + <div class="mk_directory_kanban_actions"> + <div class="mk_directory_kanban_actions_wrapper"> + <a type="action" name="%(muk_dms.action_dms_directories_directory)d" role="button" + class="btn btn-sm btn-outline-primary mk_directory_kanban_directories" + t-att-title="record.count_directories.raw_value"> + <i class="fa fa-lg fa-folder"></i> + </a> + <a type="action" name="%(muk_dms.action_dms_files_directory)d" role="button" + class="btn btn-sm btn-outline-primary mk_directory_kanban_files" + t-att-title="record.count_files.raw_value"> + <i class="fa fa-lg fa-file"></i> + </a> + </div> + </div> + <div class="o_kanban_image"> + <div class="o_kanban_image_wrapper"> + <img t-att-src="kanban_image('muk_dms.directory', 'thumbnail_medium', record.id.raw_value)" alt="Thumbnail"/> + </div> + </div> + <div class="o_kanban_details"> + <div class="o_kanban_details_wrapper"> + <div class="o_kanban_record_title o_text_overflow"> + <field name="name"/> + </div> + <div class="o_kanban_record_body"> + <field name="tags" widget="many2many_tags" options="{'color_field': 'color'}"/> + </div> + <div class="o_kanban_record_bottom"> + <div class="oe_kanban_bottom_left"> + <field name="write_date" widget="date"/> + </div> + <div class="oe_kanban_bottom_right"> + <a role="button" type="object" name="toggle_starred" + t-attf-class="fa fa-lg fa-star#{record.starred.raw_value ? ' favorite_sign_button_enabled' : '-o'} favorite_sign_button"/> + <img t-att-src="kanban_image('res.users', 'image_small', record.create_uid.raw_value)" + t-att-alt="record.create_uid.value" class="oe_kanban_avatar"/> + </div> + </div> + </div> + </div> + </div> + </div> + </t> + </templates> + <searchpanel> + <field name="parent_directory" string="Starred" domain="[['is_hidden', '=', False], ['starred', '=', True]]" select="multi" icon="fa-star"/> + <field name="category" select="multi" icon="fa-users"/> + <field name="tags" select="multi" icon="fa-tag" groupby="category" /> + </searchpanel> + </kanban> + </field> +</record> + +<record id="view_dms_directory_tree" model="ir.ui.view"> + <field name="name">muk_dms_directory.tree</field> + <field name="model">muk_dms.directory</field> + <field name="arch" type="xml"> + <tree string="Directories"> + <field name="name" /> + <field name="write_date" /> + <field name="count_files" string="Files" /> + <field name="count_directories" string="Directories" /> + <field name="parent_path_names" widget="path_names" string="Path" /> + <field name="storage" groups="muk_dms.group_dms_manager" /> + </tree> + </field> +</record> + +<record id="view_dms_directory_form" model="ir.ui.view"> + <field name="name">muk_dms_directory.form</field> + <field name="model">muk_dms.directory</field> + <field name="arch" type="xml"> + <form string="Directory" js_class="directory_form"> + <header> + </header> + <sheet> + <div class="oe_button_box" name="button_box"> + <button type="action" name="%(muk_dms.action_dms_directories_all_directory)d" + class="oe_stat_button" icon="fa-folder-open-o" > + <field string="Subdirectories" name="count_total_directories" widget="statinfo"/> + </button> + <button type="action" name="%(muk_dms.action_dms_files_all_directory)d" + class="oe_stat_button" icon="fa-file-text-o" > + <field string="Files" name="count_total_files" widget="statinfo"/> + </button> + <button name="toggle_starred" type="object" class="oe_stat_button" icon="fa-star"> + <field name="starred" widget="boolean_button" + options='{"terminology": {"string_true": "Starred", "string_false": "Not Starred", "hover_true": "Unstar", "hover_false": "Star"}}'/> + </button> + </div> + <field name="thumbnail" widget="image" class="oe_avatar oe_read_only" + options="{'preview_image': 'thumbnail_medium', 'size': [90, 90]}" /> + <field name="custom_thumbnail" widget="image" class="oe_avatar oe_edit_only" + options="{'preview_image': 'custom_thumbnail_medium', 'size': [90, 90]}" /> + <div class="oe_title"> + <label for="name" class="oe_edit_only" /> + <h1> + <field name="name" placeholder="My Documents" /> + </h1> + <h4> + <field name="parent_path_json" widget="path_json" + options="{'prefix': True, 'suffix': True}" /> + </h4> + </div> + <group name="settings"> + <group> + <field name="is_root_directory" invisible="1"/> + <field name="storage" options="{'no_open': True}" + attrs="{'invisible':['|', ('is_root_directory','=',True), ('parent_directory','=',False)]}"/> + <field name="root_storage" options="{'no_open': True}" readonly="1" + attrs="{'invisible':[('is_root_directory','=',False)], 'required':[('is_root_directory','=',True)]}"/> + </group> + <group> + <field name="parent_directory" options="{'no_quick_create': True}" + attrs="{'invisible':[('is_root_directory','=',True)], 'required':[('is_root_directory','=',False)]}"/> + </group> + </group> + <group name="data"> + <group> + <field name="size" widget="binary_size"/> + <field name="count_elements" string="Elements"/> + </group> + <group> + <field name="category" placeholder="Internal / Human Resource" + options="{'no_open': True, 'no_create': True}" /> + <field name="tags" widget="many2many_tags" placeholder="Tags..." + options="{'color_field': 'color', 'no_create_edit': True}" /> + </group> + </group> + <notebook> + <page name="page_directories" string="Subdirectories"> + <field name="child_directories" + context="{'default_parent_directory': active_id, 'mail_create_nolog': True}" + attrs="{'readonly':[('permission_create','=',False)]}"> + <tree string="Subdirectories" limit="10"> + <field name="name" /> + <field name="count_directories" string="Directories" /> + <field name="count_files" string="Files" /> + <field name="size" widget="binary_size"/> + </tree> + </field> + </page> + <page name="page_files" string="Files"> + <field name="files" + context="{'default_directory': active_id, 'mail_create_nolog': True}" + attrs="{'readonly':[('permission_create','=',False)]}"> + <tree string="Files" limit="10"> + <field name="name" /> + <field name="mimetype" /> + <field name="size" widget="binary_size"/> + <field name="write_date" readonly="1" /> + </tree> + </field> + </page> + <page name="page_meta" string="Meta Information"> + <group> + <group> + <field name="create_date" readonly="1" /> + <field name="create_uid" readonly="1" /> + </group> + <group> + <field name="write_date" readonly="1" /> + <field name="write_uid" readonly="1" /> + </group> + </group> + </page> + <page name="page_access" string="Access Information"> + <group name="permissions"> + <group> + <field name="permission_read" readonly="1" /> + <field name="permission_create" readonly="1" /> + </group> + <group> + <field name="permission_write" readonly="1" /> + <field name="permission_unlink" readonly="1" /> + </group> + </group> + </page> + </notebook> + </sheet> + </form> + </field> +</record> + +<record id="view_dms_directory_manager_form" model="ir.ui.view"> + <field name="name">muk_dms_directory.form</field> + <field name="model">muk_dms.directory</field> + <field name="inherit_id" ref="view_dms_directory_form" /> + <field name="groups_id" eval="[(6, 0, [ref('muk_dms.group_dms_manager')])]"/> + <field name="arch" type="xml"> + <field name="is_root_directory" position="attributes"> + <attribute name="invisible">0</attribute> + </field> + <field name="root_storage" position="attributes"> + <attribute name="readonly">0</attribute> + <attribute name="options">{'no_quick_create': True}</attribute> + </field> + <field name="storage" position="attributes"> + <attribute name="options">{}</attribute> + </field> + </field> +</record> + +<record id="action_dms_directory" model="ir.actions.act_window"> + <field name="name">Directories</field> + <field name="res_model">muk_dms.directory</field> + <field name="view_type">form</field> + <field name="view_mode">kanban,tree,form</field> + <field name="domain">[("is_hidden", "=", False)]</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Add a new Directory. + </p> + <p> + Directories can be used to structure and organize + files directly in Odoo. + </p> + </field> +</record> + +<menuitem id="menu_dms_directory" name="Directories" sequence="30" + parent="main_menu_muk_dms" action="action_dms_directory" /> + +<record id="view_dms_directory_new_form" model="ir.ui.view"> + <field name="name">muk_dms_directory.form</field> + <field name="model">muk_dms.directory</field> + <field name="inherit_id" ref="view_dms_directory_form" /> + <field name="mode">primary</field> + <field name="arch" type="xml"> + <xpath expr="//header" position="replace" /> + <xpath expr="//sheet//div[hasclass('oe_button_box')]" position="replace" /> + <xpath expr="//sheet//group[@name='settings']" position="replace" /> + <xpath expr="//sheet//group[@name='data']" position="replace" > + <group> + <group> + <field name="is_root_directory" readonly="1" /> + <field name="root_storage" options="{'no_quick_create': True}" /> + </group> + <group> + <field name="category" placeholder="Internal / Human Resource" + options="{'no_open': True, 'no_create': True}" /> + <field name="tags" widget="many2many_tags" placeholder="Tags..." + options="{'color_field': 'color', 'no_create_edit': True}" /> + </group> + </group> + </xpath> + <form position="inside"> + <footer position="replace"> + <button class="btn btn-primary" type="object" string="Create" + name="action_save_onboarding_directory_step" /> + <button special="cancel" string="Cancel" /> + </footer> + </form> + </field> +</record> + +<record id="action_dms_directory_new" model="ir.actions.act_window"> + <field name="name">New Root Directory</field> + <field name="res_model">muk_dms.directory</field> + <field name="view_mode">form</field> + <field name="view_type">form</field> + <field name="target">new</field> + <field name="view_id" ref="view_dms_directory_new_form" /> +</record> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_dms/views/file.xml b/odex-event/muk_dms/views/file.xml new file mode 100644 index 000000000..eaaa80e8a --- /dev/null +++ b/odex-event/muk_dms/views/file.xml @@ -0,0 +1,406 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="search_dms_file" model="ir.ui.view"> + <field name="name">muk_dms_file.search</field> + <field name="model">muk_dms.file</field> + <field name="arch" type="xml"> + <search> + <field name="name" filter_domain="[('name','ilike',self)]"/> + <filter string="All Files" name="all" domain="['|',('active', '=', False), ('active', '!=', False)]"/> + <filter string="My Files" name="filter_user" domain="[('create_uid', '=', uid)]"/> + <separator/> + <filter string="Archived Files" name="filter_active" domain="[('active', '=', False)]"/> + <separator/> + <filter string="Creation Date" name="filter_create" date="create_date"/> + <filter string="Modification Date" name="filter_write" date="write_date"/> + <group expand="0" string="Group By"> + <filter name="group_color" string="Color" domain="[]" context="{'group_by':'color'}" /> + <filter name="group_category" string="Category" domain="[]" context="{'group_by':'category'}" /> + <separator/> + <filter name="group_storage" string="Storage" domain="[]" context="{'group_by':'storage'}" /> + <filter name="group_directory" string="Directories" domain="[]" context="{'group_by':'directory'}" /> + </group> + </search> + </field> +</record> + +<record id="view_dms_file_kanban" model="ir.ui.view"> + <field name="name">muk_dms_file.kanban</field> + <field name="model">muk_dms.file</field> + <field name="arch" type="xml"> + <kanban class="mk_file_kanban_view o_kanban_small_column align-content-start" + banner_route="/dms/document_onboarding/file" js_class="file_kanban"> + <field name="id" /> + <field name="tags"/> + <field name="name" /> + <field name="color"/> + <field name="active"/> + <field name="mimetype"/> + <field name="create_uid"/> + <field name="write_date"/> + <field name="locked_by" /> + <field name="is_locked" /> + <field name="is_lock_editor" /> + <field name="permission_write" /> + <field name="permission_unlink" /> + <field name="__last_update" /> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click"> + <div class="o_dropdown_kanban dropdown"> + <a class="dropdown-toggle o-no-caret btn" href="#" role="button" data-toggle="dropdown" aria-label="Dropdown menu" title="Dropdown menu"> + <span class="fa fa-ellipsis-v"/> + </a> + <div class="dropdown-menu" role="menu"> + <div class="row"> + <div class="col-6 mk_file_kanban_operations"> + <h6 class="dropdown-header">Operations</h6> + <a t-if="record.permission_write.raw_value and !record.is_locked.raw_value" role="menuitem" name="lock" type="object" class="dropdown-item"> + <i class="fa fa-lock" /> Lock + </a> + <a t-if="record.permission_write.raw_value and record.is_locked.raw_value and record.is_lock_editor.raw_value" role="menuitem" name="unlock" type="object" class="dropdown-item"> + <i class="fa fa-unlock-alt" /> Unlock + </a> + <a t-if="record.permission_write.raw_value and record.active.raw_value" role="menuitem" name="toggle_active" type="object" class="dropdown-item"> + <i class="fa fa-archive" /> Archive + </a> + <a t-if="record.permission_write.raw_value and !record.active.raw_value" role="menuitem" name="toggle_active" type="object" class="dropdown-item"> + <i class="fa fa-archive" /> Unarchive + </a> + <a role="menuitem" class="dropdown-item" t-attf-href="/web/content?id=#{record.id.raw_value}&field=content&model=muk_dms.file&filename_field=name&download=true"> + <i class="fa fa-download" /> Download + </a> + </div> + <div class="col-6 border-left mk_file_kanban_actions"> + <h6 class="dropdown-header">Actions</h6> + <a role="menuitem" type="open" class="dropdown-item"> + <i class="fa fa-external-link" /> Open + </a> + <a t-if="record.permission_write.raw_value" role="menuitem" type="edit" class="dropdown-item"> + <i class="fa fa-pencil-square-o" /> Edit + </a> + <a t-if="record.permission_unlink.raw_value" role="menuitem" type="delete" class="dropdown-item"> + <i class="fa fa-trash-o" /> Delete + </a> + </div> + </div> + <div t-if="record.permission_write.raw_value" class="row"> + <div role="menuitem" class="col-12"> + <ul class="oe_kanban_colorpicker" data-field="color"/> + </div> + </div> + </div> + </div> + <div class="oe_kanban_content"> + <div class="o_kanban_image"> + <div class="o_kanban_image_wrapper"> + <img t-att-src="kanban_image('muk_dms.file', 'thumbnail_medium', record.id.raw_value)" alt="Thumbnail"/> + </div> + </div> + <div class="o_kanban_details"> + <div class="o_kanban_details_wrapper"> + <div class="o_kanban_record_title o_text_overflow"> + <field name="name"/> + </div> + <div class="o_kanban_record_body"> + <field name="tags" widget="many2many_tags" options="{'color_field': 'color'}"/> + </div> + <div class="o_kanban_record_bottom"> + <div class="oe_kanban_bottom_left"> + <field name="write_date" widget="date"/> + </div> + <div class="oe_kanban_bottom_right"> + <span t-if="record.is_locked.raw_value" class="mk_file_kanban_lock"> + <i t-attf-class="fa #{(record.is_locked.raw_value and !record.is_lock_editor.raw_value) ? 'fa-lock' : ''} #{((record.is_locked.raw_value and record.is_lock_editor.raw_value)) ? 'fa-unlock-alt' : ''}" + t-att-title="record.locked_by.value"/> + </span> + <img t-att-src="kanban_image('res.users', 'image_small', record.create_uid.raw_value)" + t-att-alt="record.create_uid.value" class="oe_kanban_avatar"/> + </div> + </div> + </div> + </div> + </div> + </div> + </t> + </templates> + <searchpanel> + <field name="directory" domain="[['is_hidden', '=', False]]" icon="fa-folder"/> + <field name="directory" string="Starred" domain="[['is_hidden', '=', False], ['starred', '=', True]]" select="multi" icon="fa-star"/> + <field name="tags" select="multi" icon="fa-tag" groupby="category" /> + </searchpanel> + </kanban> + </field> +</record> + +<record id="view_dms_file_tree" model="ir.ui.view"> + <field name="name">muk_dms_file.tree</field> + <field name="model">muk_dms.file</field> + <field name="arch" type="xml"> + <tree string="Files" js_class="file_list" decoration-warning="not active" + decoration-muted="(is_locked and not is_lock_editor)" > + <field name="active" invisible="1"/> + <field name="is_locked" invisible="1"/> + <field name="is_lock_editor" invisible="1"/> + <field name="name" /> + <field name="write_date" /> + <field name="size" widget="binary_size" /> + <field name="mimetype" /> + <field name="path_names" widget="path_names" string="Path" /> + </tree> + </field> +</record> + +<record id="view_dms_file_graph" model="ir.ui.view"> + <field name="name">muk_dms_file.graph</field> + <field name="model">muk_dms.file</field> + <field name="arch" type="xml"> + <graph type="pie" > + <field name="directory" type="row" /> + <field name="size" type="measure" /> + </graph> + </field> +</record> + +<record id="view_dms_file_pivot" model="ir.ui.view"> + <field name="name">muk_dms_file.pivot</field> + <field name="model">muk_dms.file</field> + <field name="arch" type="xml"> + <pivot display_quantity="true" > + <field name="storage" type="row" /> + <field name="directory" type="row" /> + <field name="size" type="measure" widget="binary_size" /> + </pivot> + </field> +</record> + +<record id="view_dms_file_form" model="ir.ui.view"> + <field name="name">muk_dms_file.form</field> + <field name="model">muk_dms.file</field> + <field name="arch" type="xml"> + <form string="Files" js_class="file_form"> + <header> + <button class="oe_highlight" name="lock" type="object" string="Lock" + attrs="{'invisible':['|',('is_locked', '!=', False),('permission_write', '=', False)]}" /> + <button class="oe_highlight" name="unlock" type="object" string="Unlock" + attrs="{'invisible':['|',('is_locked', '=', False),('is_lock_editor', '=', False)]}" /> + </header> + <div class="alert alert-warning text-center o_form_header" attrs="{'invisible': [('is_locked', '!=', True)]}" role="status"> + <strong>This file is locked!</strong> + </div> + <sheet> + <div class="oe_button_box" name="button_box"> + <button name="toggle_active" type="object" class="oe_stat_button" icon="fa-archive"> + <field name="active" widget="boolean_button" options='{"terminology": "archive"}'/> + </button> + </div> + <field name="thumbnail" widget="image" class="oe_avatar oe_read_only" + options="{'preview_image': 'thumbnail_medium', 'size': [90, 90]}" /> + <field name="custom_thumbnail" widget="image" class="oe_avatar oe_edit_only" + options="{'preview_image': 'custom_thumbnail_medium', 'size': [90, 90]}" /> + <div class="oe_title"> + <label for="name" class="oe_edit_only" /> + <h1> + <field name="name" /> + </h1> + <h4> + <field name="path_json" widget="path_json" options="{'prefix': True, 'suffix': False}" /> + </h4> + </div> + <group name="content"> + <group> + <field name="content" filename="name" /> + <field name="size" widget="binary_size" /> + </group> + <group> + <field name="extension" /> + <field name="mimetype" /> + </group> + </group> + <group name="settings"> + <group> + <field name="directory" options="{'no_quick_create': True}" /> + <field name="storage" options="{'no_open': True}"/> + </group> + <group> + <field name="category" placeholder="Internal / Human Resource" + options="{'no_open': True, 'no_create': True}" /> + <field name="tags" widget="many2many_tags" placeholder="Tags..." + options="{'color_field': 'color', 'no_create_edit': True}" /> + </group> + </group> + <notebook> + <page name="page_meta" string="Meta Information"> + <group> + <group> + <field name="create_date" readonly="1" /> + <field name="create_uid" readonly="1" /> + </group> + <group> + <field name="write_date" readonly="1" /> + <field name="write_uid" readonly="1" /> + </group> + </group> + </page> + <page name="page_access" string="Access Information"> + <group> + <group> + <field name="permission_write" readonly="1" /> + <field name="permission_unlink" readonly="1" /> + </group> + <group> + <field name="is_lock_editor" invisible="1" /> + <field name="is_locked" invisible="1" /> + <field name="locked_by" /> + </group> + </group> + </page> + <page name="page_technical" string="Technical Information" invisible="1" groups="muk_dms.group_dms_manager,base.group_no_one"> + <group name="technical"> + <group name="technical_left"> + </group> + <group name="technical_right"> + </group> + </group> + </page> + </notebook> + </sheet> + </form> + </field> +</record> + +<record id="view_dms_file_manager_form" model="ir.ui.view"> + <field name="name">muk_dms_file.form</field> + <field name="model">muk_dms.file</field> + <field name="inherit_id" ref="view_dms_file_form" /> + <field name="groups_id" eval="[(6, 0, [ref('muk_dms.group_dms_manager')])]"/> + <field name="arch" type="xml"> + <field name="storage" position="attributes"> + <attribute name="options">{}</attribute> + </field> + </field> +</record> + +<record id="action_dms_file" model="ir.actions.act_window"> + <field name="name">Files</field> + <field name="res_model">muk_dms.file</field> + <field name="view_mode">kanban,tree,graph,pivot,form</field> + <field name="domain">[("is_hidden", "=", False)]</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Add a new File. + </p> + <p> + Files are used to save content directly in Odoo. + </p> + </field> +</record> + +<menuitem id="menu_dms_file" name="Files" sequence="20" + parent="main_menu_muk_dms" action="action_dms_file" /> + +<record id="search_dms_file_migration" model="ir.ui.view"> + <field name="name">muk_dms_file.search</field> + <field name="model">muk_dms.file</field> + <field name="arch" type="xml"> + <search> + <field name="name" filter_domain="[('name','ilike',self)]"/> + <group expand="0" string="Group By"> + <filter name="group_storage" string="Storage" domain="[]" context="{'group_by':'storage'}" /> + </group> + </search> + </field> +</record> + +<record id="view_dms_file_migration_tree" model="ir.ui.view"> + <field name="name">muk_dms_file.tree</field> + <field name="model">muk_dms.file</field> + <field name="arch" type="xml"> + <tree string="Files" decoration-muted="(is_locked and not is_lock_editor)"> + <field name="is_locked" invisible="1"/> + <field name="is_lock_editor" invisible="1"/> + <field name="name" /> + <field name="write_date" /> + <field name="size" widget="binary_size" /> + <field name="mimetype" /> + <field name="storage" /> + <field name="migration" /> + </tree> + </field> +</record> + +<record id="action_dms_file_migration" model="ir.actions.act_window"> + <field name="name">Files</field> + <field name="res_model">muk_dms.file</field> + <field name="view_mode">tree</field> + <field name="search_view_id" ref="search_dms_file_migration"/> + <field name="domain">['|',('active', '=', False), ('active', '!=', False)]</field> + <field name="context">{'search_default_group_storage': 1}</field> + <field name="view_ids" eval="[(5, 0, 0), (0, 0, {'view_mode': 'tree', 'view_id': ref('view_dms_file_migration_tree')})]"/> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Add a new File. + </p> + <p> + Files are used to save content directly in Odoo. + </p> + </field> +</record> + +<menuitem id="menu_dms_file_migration" name="Migration" + parent="cat_menu_muk_dms_config_system" + action="action_dms_file_migration" + sequence="8" /> + +<record id="view_dms_file_new_form" model="ir.ui.view"> + <field name="name">muk_dms_file.form</field> + <field name="model">muk_dms.file</field> + <field name="inherit_id" ref="view_dms_file_form" /> + <field name="mode">primary</field> + <field name="arch" type="xml"> + <xpath expr="//header" position="replace" /> + <xpath expr="//sheet//div[hasclass('oe_button_box')]" position="replace" /> + <form position="inside"> + <footer position="replace"> + <button class="btn btn-primary" type="object" string="Create" + name="action_save_onboarding_file_step" /> + <button special="cancel" string="Cancel" /> + </footer> + </form> + </field> +</record> + +<record id="action_dms_file_new" model="ir.actions.act_window"> + <field name="name">New Root Directory</field> + <field name="res_model">muk_dms.file</field> + <field name="view_mode">form</field> + <field name="view_type">form</field> + <field name="target">new</field> + <field name="view_id" ref="view_dms_file_new_form" /> +</record> + +</odoo> diff --git a/odex-event/muk_dms/views/menu.xml b/odex-event/muk_dms/views/menu.xml new file mode 100644 index 000000000..ecf9bb287 --- /dev/null +++ b/odex-event/muk_dms/views/menu.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<menuitem id="main_menu_muk_dms" name="Documents" + web_icon="muk_dms,static/description/icon.png" + groups="group_dms_user" /> + +<menuitem id="cat_menu_muk_dms_config" + name="Configuration" + parent="main_menu_muk_dms" + sequence="50" /> + +<menuitem id="cat_menu_muk_dms_config_organizing" + name="Organizing" + parent="cat_menu_muk_dms_config" + sequence="5" /> + +<menuitem id="cat_menu_muk_dms_config_system" + name="System" + groups="muk_dms.group_dms_manager" + parent="cat_menu_muk_dms_config" + sequence="25" /> + +</odoo> diff --git a/odex-event/muk_dms/views/res_config_settings.xml b/odex-event/muk_dms/views/res_config_settings.xml new file mode 100644 index 000000000..f02158ae6 --- /dev/null +++ b/odex-event/muk_dms/views/res_config_settings.xml @@ -0,0 +1,349 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="res_config_settings_view_form" model="ir.ui.view"> + <field name="name">res.config.settings.view.form.inherit.muk_dms</field> + <field name="model">res.config.settings</field> + <field name="priority" eval="20"/> + <field name="inherit_id" ref="base.res_config_settings_view_form"/> + <field name="arch" type="xml"> + <xpath expr="//div[hasclass('settings')]" position="inside"> + <div class="app_settings_block" data-string="Documents" data-key="muk_dms" groups="base.group_system"> + <div name="muk_dms_settings"> + <h2>Extensions</h2> + <div class="row mt16 o_settings_container" name="extensions"> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_access"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_access"/> + <div class="text-muted"> + Allows the creation of groups to define access rights + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_access','=',False)]}" id="msg_module_muk_dms_access"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_mail"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_mail"/> + <div class="text-muted"> + Adds support for messages and activities on directories and files + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_mail','=',False)]}" id="msg_module_muk_dms_mail"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_version"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_version"/> + <div class="text-muted"> + Enables version control for files + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_version','=',False)]}" id="msg_module_muk_dms_version"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_trash"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_trash"/> + <div class="text-muted"> + Activates a file trash to restore deleted files + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_trash','=',False)]}" id="msg_module_muk_dms_trash"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_thumbnails"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_thumbnails"/> + <div class="text-muted"> + Automatically create file thumbnails based on the content + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_thumbnails','=',False)]}" id="msg_module_muk_dms_thumbnails"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_index"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_index"/> + <div class="text-muted"> + Automatically create a file index based on the content + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_index','=',False)]}" id="msg_module_muk_dms_index"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_widget"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_widget"/> + <div class="text-muted"> + Allows the user to use documents as input for any binary field + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_archive"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_archive"/> + <div class="text-muted"> + Allows to download directories as a archive file + </div> + </div> + </div> + </div> + <h2>Views</h2> + <div class="row mt16 o_settings_container" name="views"> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_preview"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_preview"/> + <div class="text-muted"> + Activates the preview function on files + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_view"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_view"/> + <div class="text-muted"> + Activates the documents tree view + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_finder"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_finder"/> + <div class="text-muted"> + Enables the Document Finder + </div> + </div> + </div> + </div> + <h2>Storage</h2> + <div class="row mt16 o_settings_container" name="storages"> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_lobject"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_lobject"/> + <div class="text-muted"> + Enables a new save option to store files into large objects + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_lobject','=',False)]}" id="msg_module_muk_dms_lobject"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_file"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_file"/> + <div class="text-muted"> + Enables a new save option to store files into a filestore + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_file','=',False)]}" id="msg_module_muk_dms_file"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + </div> + <h2>Attachments</h2> + <div class="row mt16 o_settings_container" name="attachments"> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_attachment"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_attachment"/> + <div class="text-muted"> + Allows attachments to be stored inside of Documents + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_attachment','=',False)]}" id="msg_module_muk_dms_attachment"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_attachment_wizard"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_attachment_wizard"/> + <div class="text-muted"> + Allows documents to be used as attachments + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_attachment_rules"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_attachment_rules"/> + <div class="text-muted"> + Allows to placed attachments in the right directory + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_attachment_rules','=',False)]}" id="msg_module_muk_dms_attachment_rules"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_attachment_automation"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_attachment_automation"/> + <div class="text-muted"> + Allows you to create rule templates to create attachment rules + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_attachment_automation','=',False)]}" id="msg_module_muk_dms_attachment_automation"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + </div> + <h2>Integrations</h2> + <div class="row mt16 o_settings_container" name="integrations"> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_actions"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_actions"/> + <div class="text-muted"> + Create custom file operations + </div> + <div class="content-group" attrs="{'invisible': [('module_muk_dms_actions','=',False)]}" id="msg_module_muk_dms_actions"> + <div class="text-warning mt16"><strong>Save</strong> this page and come back here to set up the feature.</div> + </div> + </div> + </div> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"> + <field name="module_muk_dms_users"/> + </div> + <div class="o_setting_right_pane"> + <label for="module_muk_dms_users"/> + <div class="text-muted"> + Automatic creation of user directories + </div> + </div> + </div> + </div> + <h2>File Upload</h2> + <div class="row mt16 o_settings_container" name="file"> + <div class="col-12 col-md-6 o_setting_box"> + <div class="o_setting_right_pane"> + <span class="o_form_label">File Size</span> + <div class="text-muted"> + Define the maximum upload size of a file in MB + </div> + <div class="content-group"> + <div class="row mt16"> + <label class="col-md-3 o_light_label" for="documents_binary_max_size"/> + <field name="documents_binary_max_size"/> + </div> + </div> + </div> + </div> + <div class="col-12 col-md-6 o_setting_box"> + <div class="o_setting_right_pane"> + <span class="o_form_label">File Extensions</span> + <div class="text-muted"> + Define forbidden file extensions + </div> + <div class="content-group"> + <div class="row mt16"> + <label class="col-md-3 o_light_label" for="documents_forbidden_extensions"/> + <field name="documents_forbidden_extensions" placeholder="exe,msi"/> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </xpath> + </field> +</record> + +<record id="action_dms_settings_general" model="ir.actions.act_window"> + <field name="name">General Settings</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">res.config.settings</field> + <field name="view_mode">form</field> + <field name="target">inline</field> + <field name="context">{'module' : 'muk_dms'}</field> +</record> + +<menuitem id="menu_dms_settings_general" name="General Settings" + parent="main_menu_muk_dms" + sequence="100" + action="action_dms_settings_general" + groups="base.group_system"/> + +</odoo> + diff --git a/odex-event/muk_dms/views/storage.xml b/odex-event/muk_dms/views/storage.xml new file mode 100644 index 000000000..91f1028ac --- /dev/null +++ b/odex-event/muk_dms/views/storage.xml @@ -0,0 +1,230 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="action_dms_directories_storage" model="ir.actions.act_window"> + <field name="name">Directories</field> + <field name="view_type">form</field> + <field name="res_model">muk_dms.directory</field> + <field name="view_mode">kanban,tree,form</field> + <field name="domain"> + [ + ("storage", "=", active_id), + ("is_hidden", "=", False), + ] + </field> + <field name="context"> + { + 'default_root_storage': active_id, + 'default_is_root_directory': True, + } + </field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Click to add a new directory. + </p> + <p> + Directories can be used to structure and organize + files directly in Odoo. + </p> + </field> +</record> + +<record id="action_dms_files_storage" model="ir.actions.act_window"> + <field name="name">Files</field> + <field name="view_type">form</field> + <field name="res_model">muk_dms.file</field> + <field name="view_mode">kanban,tree,graph,pivot,form</field> + <field name="domain"> + [ + ("storage", "=", active_id), + ("is_hidden", "=", False), + ] + </field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Click to add a new file. + </p> + <p> + Files are used to save content directly in Odoo. + </p> + </field> +</record> + +<record id="action_dms_file_storage_migration" model="ir.actions.act_window"> + <field name="name">Files</field> + <field name="res_model">muk_dms.file</field> + <field name="view_mode">tree</field> + <field name="search_view_id" ref="search_dms_file_migration"/> + <field name="domain"> + [ + "&", ("storage", "=", active_id), + "|",("active", "=", False), ("active", "!=", False) + ] + </field> + <field name="view_ids" eval="[(5, 0, 0), (0, 0, {'view_mode': 'tree', 'view_id': ref('view_dms_file_migration_tree')})]"/> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Add a new File. + </p> + <p> + Files are used to save content directly in Odoo. + </p> + </field> +</record> + +<record id="view_dms_storage_search" model="ir.ui.view"> + <field name="name">muk_dms_storage.search</field> + <field name="model">muk_dms.storage</field> + <field name="arch" type="xml"> + <search> + <field name="name" /> + <group expand="0" string="Group By"> + <filter string="Save Type" name="group_save_type" domain="[]" context="{'group_by':'save_type'}" /> + </group> + </search> + </field> +</record> + +<record id="view_dms_storage_tree" model="ir.ui.view"> + <field name="name">muk_dms_storage.tree</field> + <field name="model">muk_dms.storage</field> + <field name="arch" type="xml"> + <tree string="Storages"> + <field name="name" /> + <field name="save_type" /> + <field name="is_hidden" /> + <field name="company" /> + </tree> + </field> +</record> + +<record id="view_dms_storage_form" model="ir.ui.view"> + <field name="name">muk_dms_storage.form</field> + <field name="model">muk_dms.storage</field> + <field name="arch" type="xml"> + <form string="Storage"> + <header> + <button name="action_storage_migrate" type="object" string="Migrate Files" /> + <button type="action" name="%(muk_dms.action_dms_file_storage_migration)d" + class="oe_stat_button" string="Manual File Migration" /> + </header> + <sheet> + <div class="oe_button_box" name="button_box"> + <button type="action" name="%(muk_dms.action_dms_directories_storage)d" + class="oe_stat_button" icon="fa-folder-open-o" > + <field string="Directories" name="count_storage_directories" widget="statinfo"/> + </button> + <button type="action" name="%(muk_dms.action_dms_files_storage)d" + class="oe_stat_button" icon="fa-file-text-o" > + <field string="Files" name="count_storage_files" widget="statinfo"/> + </button> + </div> + <div class="oe_title"> + <label for="name" class="oe_edit_only" /> + <h1> + <field name="name" /> + </h1> + </div> + <group name="save_storage"> + <group name="save_storage_left"> + <field name="save_type" /> + </group> + <group name="save_storage_right"> + </group> + </group> + <group name="data_storage"> + <group> + <field name="is_hidden" /> + </group> + <group> + <field name="company" /> + </group> + </group> + <notebook> + <page name="page_roots" string="Root Directories"> + <field name="root_directories" groups="muk_dms.group_dms_manager" + context="{'default_root_storage': active_id, 'default_is_root_directory': True}" > + <tree string="Root Directories"> + <field name="name" /> + <field name="count_total_directories" /> + <field name="count_total_files" /> + <field name="size" widget="binary_size" /> + </tree> + </field> + </page> + </notebook> + </sheet> + </form> + </field> +</record> + +<record id="action_dms_storage" model="ir.actions.act_window"> + <field name="name">Storages</field> + <field name="res_model">muk_dms.storage</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a new Storage object. + </p> + <p> + Storages are used to configure your Documents. + </p> + </field> +</record> + +<menuitem id="menu_dms_storage" name="Storages" + parent="cat_menu_muk_dms_config_system" + action="action_dms_storage" + sequence="5" /> + +<record id="view_dms_storage_new_form" model="ir.ui.view"> + <field name="name">muk_dms_storage.form</field> + <field name="model">muk_dms.storage</field> + <field name="inherit_id" ref="view_dms_storage_form" /> + <field name="mode">primary</field> + <field name="arch" type="xml"> + <xpath expr="//header" position="replace" /> + <xpath expr="//sheet//div[hasclass('oe_button_box')]" position="replace" /> + <form position="inside"> + <footer position="replace"> + <button class="btn btn-primary" type="object" string="Create" + name="action_save_onboarding_storage_step" /> + <button special="cancel" string="Cancel" /> + </footer> + </form> + </field> +</record> + +<record id="action_dms_storage_new" model="ir.actions.act_window"> + <field name="name">New Storage</field> + <field name="res_model">muk_dms.storage</field> + <field name="view_mode">form</field> + <field name="view_type">form</field> + <field name="target">new</field> + <field name="view_id" ref="view_dms_storage_new_form" /> +</record> + +</odoo> diff --git a/odex-event/muk_dms/views/tag.xml b/odex-event/muk_dms/views/tag.xml new file mode 100644 index 000000000..111a4aa89 --- /dev/null +++ b/odex-event/muk_dms/views/tag.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Documents + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="view_dms_tag_search" model="ir.ui.view"> + <field name="name">muk_dms_tag.search</field> + <field name="model">muk_dms.tag</field> + <field name="arch" type="xml"> + <search string="Categories"> + <field name="name" filter_domain="[('name', 'ilike', self)]" /> + <filter string="All" name="all" domain="['|', ('active', '=', False), ('active', '=', True)]" /> + <group expand="0" name="group_by" string="Group By"> + <filter name="group_by_category" string="Category" domain="[]" context="{'group_by': 'category'}"/> + <filter name="group_by_color" string="Color" domain="[]" context="{'group_by': 'color'}"/> + </group> + </search> + </field> +</record> + +<record id="view_dms_tag_kanban" model="ir.ui.view"> + <field name="name">muk_dms_tag.kanban</field> + <field name="model">muk_dms.tag</field> + <field name="arch" type="xml"> + <kanban class="o_kanban_small_column o_emphasize_colors" on_create="quick_create" > + <field name="color" /> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click"> + <div class="o_dropdown_kanban dropdown"> + <a class="dropdown-toggle o-no-caret btn" href="#" role="button" data-toggle="dropdown" aria-label="Dropdown menu" title="Dropdown menu"> + <span class="fa fa-ellipsis-v"/> + </a> + <div class="dropdown-menu" role="menu"> + <a role="menuitem" type="open" class="dropdown-item"> + <i class="fa fa-external-link" /> Open + </a> + <a role="menuitem" type="edit" class="dropdown-item"> + <i class="fa fa-pencil-square-o" /> Edit + </a> + <a role="menuitem" type="delete" class="dropdown-item"> + <i class="fa fa-trash-o" /> Delete + </a> + <ul class="oe_kanban_colorpicker" data-field="color"/> + </div> + </div> + + <field name="name" /> + </div> + </t> + </templates> + </kanban> + </field> +</record> + +<record id="view_dms_tag_tree" model="ir.ui.view"> + <field name="name">muk_dms_tag.tree</field> + <field name="model">muk_dms.tag</field> + <field name="arch" type="xml"> + <tree string="Tags"> + <field name="active" /> + <field name="name" /> + <field name="category" /> + <field name="color" widget="color_index" /> + </tree> + </field> +</record> + +<record id="view_dms_tag_form" model="ir.ui.view"> + <field name="name">muk_dms_tag.form</field> + <field name="model">muk_dms.tag</field> + <field name="arch" type="xml"> + <form string="Tag"> + <sheet> + <div class="oe_button_box" name="button_box"> + <button name="toggle_active" type="object" class="oe_stat_button" icon="fa-bell"> + <field name="active" widget="boolean_button"/> + </button> + </div> + <div class="oe_title"> + <label for="name" class="oe_edit_only"/> + <h1> + <field name="name" placeholder="Customer"/> + </h1> + </div> + <group> + <group> + <field name="category" /> + <field name="color" widget="color_index" /> + </group> + <group> + <field name="count_files" string="Files" /> + <field name="count_directories" string="Directories" /> + </group> + </group> + <notebook> + <page string="Directories"> + <field name="directories" widget="one2many" mode="tree" /> + </page> + <page string="Files"> + <field name="files" widget="one2many" mode="tree" /> + </page> + </notebook> + </sheet> + </form> + </field> +</record> + +<record id="action_dms_tag" model="ir.actions.act_window"> + <field name="name">Tags</field> + <field name="res_model">muk_dms.tag</field> + <field name="view_mode">kanban,tree,form</field> + <field name="context">{'search_default_group_by_category': 1}</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Click to create a new tag. + </p> + <p> + Tags are used to categorize Documents. + </p> + </field> +</record> + +<menuitem id="menu_dms_tag" name="Tags" + parent="cat_menu_muk_dms_config_organizing" + action="action_dms_tag" /> + +</odoo> diff --git a/odex-event/muk_security/LICENSE b/odex-event/muk_security/LICENSE new file mode 100644 index 000000000..153d416dc --- /dev/null +++ b/odex-event/muk_security/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/odex-event/muk_security/README.rst b/odex-event/muk_security/README.rst new file mode 100644 index 000000000..154849927 --- /dev/null +++ b/odex-event/muk_security/README.rst @@ -0,0 +1,120 @@ +============ +MuK Security +============ + +Technical module to provide some utility and security features that can be used +in other applications. This module has no direct effect on the running system. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI <https://pypi.org/project/pip/>`_). + +To install our modules using the package manager make sure +`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo<version>-addon-<module_name>`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_ +and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +No additional configuration is needed to use this module. + +Usage +============= + +This module has no direct visible effect on the system. It provide security features. + +Credits +======= + +Contributors +------------ + +* Mathias Markl <mathias.markl@mukit.at> + +Images +------------ + +Some pictures are based on or inspired by the icon set of Font Awesome: + +* `Font Awesome <https://fontawesome.com>`_ + +Projects +------------ + +Parts of the module are inspired by: + +* `Suspend Security <https://github.com/OCA/server-backend>`_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_security/__init__.py b/odex-event/muk_security/__init__.py new file mode 100644 index 000000000..e71401df5 --- /dev/null +++ b/odex-event/muk_security/__init__.py @@ -0,0 +1,30 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import models + +#---------------------------------------------------------- +# Patch System on Load +#---------------------------------------------------------- + +def _patch_system(): + from . import patch \ No newline at end of file diff --git a/odex-event/muk_security/__manifest__.py b/odex-event/muk_security/__manifest__.py new file mode 100644 index 000000000..8c572b8eb --- /dev/null +++ b/odex-event/muk_security/__manifest__.py @@ -0,0 +1,57 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +{ + "name": "MuK Security", + "summary": """Security Features""", + "version": "12.0.2.0.1", + "category": "Extra Tools", + "license": "LGPL-3", + "website": "http://www.mukit.at", + 'live_test_url': 'https://mukit.at/r/SgN', + "author": "MuK IT", + "contributors": [ + "Mathias Markl <mathias.markl@mukit.at>", + ], + "depends": [ + "muk_utils", + ], + "data": [ + "security/security.xml", + "security/ir.model.access.csv", + "views/access_groups.xml", + ], + "qweb": [ + "static/src/xml/*.xml", + ], + "images": [ + 'static/description/banner.png' + ], + "external_dependencies": { + "python": [], + "bin": [], + }, + "auto_install": False, + "application": False, + "installable": True, + "post_load": "_patch_system", +} \ No newline at end of file diff --git a/odex-event/muk_security/doc/changelog.rst b/odex-event/muk_security/doc/changelog.rst new file mode 100644 index 000000000..a312a9f02 --- /dev/null +++ b/odex-event/muk_security/doc/changelog.rst @@ -0,0 +1,29 @@ +`1.5.0` +------- + +- Added Group Access Mixin + +`1.4.0` +------- + +- Added Access Mixin + +`1.3.0` +------- + +- Added Locking Mixin + +`1.2.0` +------- + +- Restructuring + +`1.1.0` +------- + +- Updated dependencies + +`1.0.0` +------- + +- Init version diff --git a/odex-event/muk_security/doc/index.rst b/odex-event/muk_security/doc/index.rst new file mode 100644 index 000000000..154849927 --- /dev/null +++ b/odex-event/muk_security/doc/index.rst @@ -0,0 +1,120 @@ +============ +MuK Security +============ + +Technical module to provide some utility and security features that can be used +in other applications. This module has no direct effect on the running system. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI <https://pypi.org/project/pip/>`_). + +To install our modules using the package manager make sure +`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo<version>-addon-<module_name>`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_ +and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +No additional configuration is needed to use this module. + +Usage +============= + +This module has no direct visible effect on the system. It provide security features. + +Credits +======= + +Contributors +------------ + +* Mathias Markl <mathias.markl@mukit.at> + +Images +------------ + +Some pictures are based on or inspired by the icon set of Font Awesome: + +* `Font Awesome <https://fontawesome.com>`_ + +Projects +------------ + +Parts of the module are inspired by: + +* `Suspend Security <https://github.com/OCA/server-backend>`_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_security/i18n/ar.po b/odex-event/muk_security/i18n/ar.po new file mode 100644 index 000000000..0731f58dd --- /dev/null +++ b/odex-event/muk_security/i18n/ar.po @@ -0,0 +1,215 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_security +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:30+0000\n" +"PO-Revision-Date: 2019-07-12 23:30+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_security +#: model:ir.actions.act_window,name:muk_security.action_security_access_groups +#: model:ir.ui.menu,name:muk_security.menu_security_access_groups +msgid "Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_rights +msgid "Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_base +msgid "Base" +msgstr "الأساس" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__child_groups +msgid "Child Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__complete_groups +msgid "Complete Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_create +msgid "Create Access" +msgstr "صلاحيات الإنشاء" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_uid +msgid "Created by" +msgstr "أنشئ بواسطة" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_date +msgid "Created on" +msgstr "أنشئ في" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_unlink +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_unlink +msgid "Delete Access" +msgstr "صلاحيات الحذف" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__display_name +msgid "Display Name" +msgstr "اسم العرض" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__explicit_users +msgid "Explicit Users" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_groups +msgid "Group Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__name +msgid "Group Name" +msgstr "اسم المجموعة" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__users +msgid "Group Users" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__groups +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__groups +msgid "Groups" +msgstr "المجموعات" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__id +msgid "ID" +msgstr "المعرف" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking____last_update +msgid "Last Modified on" +msgstr "آخر تعديل في" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_uid +msgid "Last Updated by" +msgstr "آخر تحديث بواسطة" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_date +msgid "Last Updated on" +msgstr "آخر تحديث في" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_locked +msgid "Locked" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__locked_by +msgid "Locked by" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_locking +msgid "Locking Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_model_access +msgid "Model Access" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_group +msgid "Parent Group" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_path +msgid "Parent Path" +msgstr "المسار الأصلي" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_read +msgid "Read Access" +msgstr "صلاحيات القراءة" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_access_groups +msgid "Record Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_rule +msgid "Record Rule" +msgstr "تسجيل القاعدة" + +#. module: muk_security +#: model_terms:ir.ui.view,arch_db:muk_security.view_security_access_groups_form +msgid "Settings" +msgstr "الإعدادات" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_locking.py:77 +#, python-format +msgid "The record (%s [%s]) is locked, by an other user." +msgstr "" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_access_groups.py:197 +#, python-format +msgid "The requested operation cannot be completed due to group security restrictions. Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_unlink +msgid "Unlink Access" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_res_users +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__count_users +msgid "Users" +msgstr "المستخدمون" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_write +msgid "Write Access" +msgstr "صلاحيات الكتابة" + diff --git a/odex-event/muk_security/i18n/de.po b/odex-event/muk_security/i18n/de.po new file mode 100644 index 000000000..9ac5faec7 --- /dev/null +++ b/odex-event/muk_security/i18n/de.po @@ -0,0 +1,217 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_security +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:31+0000\n" +"PO-Revision-Date: 2019-07-12 23:31+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_security +#: model:ir.actions.act_window,name:muk_security.action_security_access_groups +#: model:ir.ui.menu,name:muk_security.menu_security_access_groups +msgid "Access Groups" +msgstr "Gruppenzugriff" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_rights +msgid "Access Mixin" +msgstr "Zugriff Mixin" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_base +msgid "Base" +msgstr "Basis" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__child_groups +msgid "Child Groups" +msgstr "Untergruppen" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__complete_groups +msgid "Complete Groups" +msgstr "Komplette Gruppen" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_create +msgid "Create Access" +msgstr "Objekterzeugung erlauben" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_unlink +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_unlink +msgid "Delete Access" +msgstr "Zugang löschen" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__explicit_users +msgid "Explicit Users" +msgstr "Explizite Benutzer" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_groups +msgid "Group Access Mixin" +msgstr "Zugriffsgruppen Mixin" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__name +msgid "Group Name" +msgstr "Gruppenname" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__users +msgid "Group Users" +msgstr "Gruppenbenutzer" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__groups +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__groups +msgid "Groups" +msgstr "Gruppen" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__id +msgid "ID" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking____last_update +msgid "Last Modified on" +msgstr "Zuletzt geändert am" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert durch" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_locked +msgid "Locked" +msgstr "Gesperrt" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__locked_by +msgid "Locked by" +msgstr "Gesperrt von" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_locking +msgid "Locking Mixin" +msgstr "Sperren Mixin" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_model_access +msgid "Model Access" +msgstr "Modelzugriff" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_group +msgid "Parent Group" +msgstr "Übergeordnete Gruppe" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_path +msgid "Parent Path" +msgstr "Übergeordneter Pfad" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_read +msgid "Read Access" +msgstr "Leserecht" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_access_groups +msgid "Record Access Groups" +msgstr "Zugriffsgruppeneintrag" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_rule +msgid "Record Rule" +msgstr "Datensatzregel" + +#. module: muk_security +#: model_terms:ir.ui.view,arch_db:muk_security.view_security_access_groups_form +msgid "Settings" +msgstr "Einstellungen" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_locking.py:77 +#, python-format +msgid "The record (%s [%s]) is locked, by an other user." +msgstr "Der Eintrag (%s [%s]) ist von einem anderen Benutzer gesperrt." + +#. module: muk_security +#: code:addons/muk_security/models/mixins_access_groups.py:197 +#, python-format +msgid "The requested operation cannot be completed due to group security restrictions. Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "Der angeforderte Vorgang kann aufgrund von Sicherheitseinschränkungen der Gruppe nicht abgeschlossen werden. Bitte verständigen Sie Ihren Systemadministrator.\n" +"\n" +"(Document type: %s1, Operation: %s2)" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_unlink +msgid "Unlink Access" +msgstr "Löschen erlauben" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_res_users +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__count_users +msgid "Users" +msgstr "Benutzer" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_write +msgid "Write Access" +msgstr "Schreibrechte" + diff --git a/odex-event/muk_security/i18n/es.po b/odex-event/muk_security/i18n/es.po new file mode 100644 index 000000000..fbd418fcb --- /dev/null +++ b/odex-event/muk_security/i18n/es.po @@ -0,0 +1,215 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_security +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:31+0000\n" +"PO-Revision-Date: 2019-07-12 23:31+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_security +#: model:ir.actions.act_window,name:muk_security.action_security_access_groups +#: model:ir.ui.menu,name:muk_security.menu_security_access_groups +msgid "Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_rights +msgid "Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_base +msgid "Base" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__child_groups +msgid "Child Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__complete_groups +msgid "Complete Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_create +msgid "Create Access" +msgstr "Acceso para crear" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_unlink +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_unlink +msgid "Delete Access" +msgstr "Permiso para eliminar" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__explicit_users +msgid "Explicit Users" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_groups +msgid "Group Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__name +msgid "Group Name" +msgstr "Nombre del grupo" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__users +msgid "Group Users" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__groups +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__groups +msgid "Groups" +msgstr "Grupos" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__id +msgid "ID" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_locked +msgid "Locked" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__locked_by +msgid "Locked by" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_locking +msgid "Locking Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_model_access +msgid "Model Access" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_group +msgid "Parent Group" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_path +msgid "Parent Path" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_read +msgid "Read Access" +msgstr "Permiso para leer" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_access_groups +msgid "Record Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_rule +msgid "Record Rule" +msgstr "Regla de registro" + +#. module: muk_security +#: model_terms:ir.ui.view,arch_db:muk_security.view_security_access_groups_form +msgid "Settings" +msgstr "Ajustes" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_locking.py:77 +#, python-format +msgid "The record (%s [%s]) is locked, by an other user." +msgstr "" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_access_groups.py:197 +#, python-format +msgid "The requested operation cannot be completed due to group security restrictions. Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_unlink +msgid "Unlink Access" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_res_users +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__count_users +msgid "Users" +msgstr "Usuarios" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_write +msgid "Write Access" +msgstr "Permiso de escritura" + diff --git a/odex-event/muk_security/i18n/fr.po b/odex-event/muk_security/i18n/fr.po new file mode 100644 index 000000000..b77b8672d --- /dev/null +++ b/odex-event/muk_security/i18n/fr.po @@ -0,0 +1,215 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_security +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:31+0000\n" +"PO-Revision-Date: 2019-07-12 23:31+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_security +#: model:ir.actions.act_window,name:muk_security.action_security_access_groups +#: model:ir.ui.menu,name:muk_security.menu_security_access_groups +msgid "Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_rights +msgid "Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_base +msgid "Base" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__child_groups +msgid "Child Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__complete_groups +msgid "Complete Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_create +msgid "Create Access" +msgstr "Droit de création" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_unlink +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_unlink +msgid "Delete Access" +msgstr "Droit de suppression" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__explicit_users +msgid "Explicit Users" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_groups +msgid "Group Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__name +msgid "Group Name" +msgstr "Nom du groupe" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__users +msgid "Group Users" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__groups +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__groups +msgid "Groups" +msgstr "Groupes" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__id +msgid "ID" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_locked +msgid "Locked" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__locked_by +msgid "Locked by" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_locking +msgid "Locking Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_model_access +msgid "Model Access" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_group +msgid "Parent Group" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_path +msgid "Parent Path" +msgstr "Chemin parent" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_read +msgid "Read Access" +msgstr "Accès en lecture" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_access_groups +msgid "Record Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_rule +msgid "Record Rule" +msgstr "Règle d'enregistrement" + +#. module: muk_security +#: model_terms:ir.ui.view,arch_db:muk_security.view_security_access_groups_form +msgid "Settings" +msgstr "Configuration" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_locking.py:77 +#, python-format +msgid "The record (%s [%s]) is locked, by an other user." +msgstr "" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_access_groups.py:197 +#, python-format +msgid "The requested operation cannot be completed due to group security restrictions. Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_unlink +msgid "Unlink Access" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_res_users +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__count_users +msgid "Users" +msgstr "Utilisateurs" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_write +msgid "Write Access" +msgstr "Accès en écriture" + diff --git a/odex-event/muk_security/i18n/hi.po b/odex-event/muk_security/i18n/hi.po new file mode 100644 index 000000000..f393ab6ca --- /dev/null +++ b/odex-event/muk_security/i18n/hi.po @@ -0,0 +1,215 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_security +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:31+0000\n" +"PO-Revision-Date: 2019-07-12 23:31+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_security +#: model:ir.actions.act_window,name:muk_security.action_security_access_groups +#: model:ir.ui.menu,name:muk_security.menu_security_access_groups +msgid "Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_rights +msgid "Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_base +msgid "Base" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__child_groups +msgid "Child Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__complete_groups +msgid "Complete Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_create +msgid "Create Access" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_uid +msgid "Created by" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_date +msgid "Created on" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_unlink +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_unlink +msgid "Delete Access" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__display_name +msgid "Display Name" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__explicit_users +msgid "Explicit Users" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_groups +msgid "Group Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__name +msgid "Group Name" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__users +msgid "Group Users" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__groups +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__groups +msgid "Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__id +msgid "ID" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking____last_update +msgid "Last Modified on" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_date +msgid "Last Updated on" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_locked +msgid "Locked" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__locked_by +msgid "Locked by" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_locking +msgid "Locking Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_model_access +msgid "Model Access" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_group +msgid "Parent Group" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_path +msgid "Parent Path" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_read +msgid "Read Access" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_access_groups +msgid "Record Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_rule +msgid "Record Rule" +msgstr "" + +#. module: muk_security +#: model_terms:ir.ui.view,arch_db:muk_security.view_security_access_groups_form +msgid "Settings" +msgstr "" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_locking.py:77 +#, python-format +msgid "The record (%s [%s]) is locked, by an other user." +msgstr "" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_access_groups.py:197 +#, python-format +msgid "The requested operation cannot be completed due to group security restrictions. Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_unlink +msgid "Unlink Access" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_res_users +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__count_users +msgid "Users" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_write +msgid "Write Access" +msgstr "" + diff --git a/odex-event/muk_security/i18n/nl.po b/odex-event/muk_security/i18n/nl.po new file mode 100644 index 000000000..a558ce659 --- /dev/null +++ b/odex-event/muk_security/i18n/nl.po @@ -0,0 +1,215 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_security +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:31+0000\n" +"PO-Revision-Date: 2019-07-12 23:31+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_security +#: model:ir.actions.act_window,name:muk_security.action_security_access_groups +#: model:ir.ui.menu,name:muk_security.menu_security_access_groups +msgid "Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_rights +msgid "Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_base +msgid "Base" +msgstr "Basis" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__child_groups +msgid "Child Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__complete_groups +msgid "Complete Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_create +msgid "Create Access" +msgstr "Aanmaken" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_unlink +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_unlink +msgid "Delete Access" +msgstr "Verwijderen" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__display_name +msgid "Display Name" +msgstr "Weergavenaam" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__explicit_users +msgid "Explicit Users" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_groups +msgid "Group Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__name +msgid "Group Name" +msgstr "Groepsnaam" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__users +msgid "Group Users" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__groups +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__groups +msgid "Groups" +msgstr "Groepen" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__id +msgid "ID" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking____last_update +msgid "Last Modified on" +msgstr "Laatst gewijzigd op" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_locked +msgid "Locked" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__locked_by +msgid "Locked by" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_locking +msgid "Locking Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_model_access +msgid "Model Access" +msgstr "Model toegang" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_group +msgid "Parent Group" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_path +msgid "Parent Path" +msgstr "Bovenliggend pad" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_read +msgid "Read Access" +msgstr "Lezen" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_access_groups +msgid "Record Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_rule +msgid "Record Rule" +msgstr "Recordregel" + +#. module: muk_security +#: model_terms:ir.ui.view,arch_db:muk_security.view_security_access_groups_form +msgid "Settings" +msgstr "Instellingen" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_locking.py:77 +#, python-format +msgid "The record (%s [%s]) is locked, by an other user." +msgstr "" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_access_groups.py:197 +#, python-format +msgid "The requested operation cannot be completed due to group security restrictions. Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_unlink +msgid "Unlink Access" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_res_users +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__count_users +msgid "Users" +msgstr "Gebruikers" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_write +msgid "Write Access" +msgstr "Schrijven" + diff --git a/odex-event/muk_security/i18n/pt.po b/odex-event/muk_security/i18n/pt.po new file mode 100644 index 000000000..85e868cca --- /dev/null +++ b/odex-event/muk_security/i18n/pt.po @@ -0,0 +1,215 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_security +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:32+0000\n" +"PO-Revision-Date: 2019-07-12 23:32+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_security +#: model:ir.actions.act_window,name:muk_security.action_security_access_groups +#: model:ir.ui.menu,name:muk_security.menu_security_access_groups +msgid "Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_rights +msgid "Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_base +msgid "Base" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__child_groups +msgid "Child Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__complete_groups +msgid "Complete Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_create +msgid "Create Access" +msgstr "Criar Acesso" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_date +msgid "Created on" +msgstr "Criada em" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_unlink +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_unlink +msgid "Delete Access" +msgstr "Eliminar acesso" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__display_name +msgid "Display Name" +msgstr "Nome a Exibir" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__explicit_users +msgid "Explicit Users" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_groups +msgid "Group Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__name +msgid "Group Name" +msgstr "Nome do Grupo" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__users +msgid "Group Users" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__groups +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__groups +msgid "Groups" +msgstr "Grupos" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__id +msgid "ID" +msgstr "Id." + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking____last_update +msgid "Last Modified on" +msgstr "Última Modificação em" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_date +msgid "Last Updated on" +msgstr "Última Atualização em" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_locked +msgid "Locked" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__locked_by +msgid "Locked by" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_locking +msgid "Locking Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_model_access +msgid "Model Access" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_group +msgid "Parent Group" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_path +msgid "Parent Path" +msgstr "Caminho ascendente " + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_read +msgid "Read Access" +msgstr "Permissão de Leitura" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_access_groups +msgid "Record Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_rule +msgid "Record Rule" +msgstr "Regra do Registo" + +#. module: muk_security +#: model_terms:ir.ui.view,arch_db:muk_security.view_security_access_groups_form +msgid "Settings" +msgstr "Configurações" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_locking.py:77 +#, python-format +msgid "The record (%s [%s]) is locked, by an other user." +msgstr "" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_access_groups.py:197 +#, python-format +msgid "The requested operation cannot be completed due to group security restrictions. Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_unlink +msgid "Unlink Access" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_res_users +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__count_users +msgid "Users" +msgstr "Utilizadores" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_write +msgid "Write Access" +msgstr "Permissões de Escrita" + diff --git a/odex-event/muk_security/i18n/ru.po b/odex-event/muk_security/i18n/ru.po new file mode 100644 index 000000000..48dc8ed54 --- /dev/null +++ b/odex-event/muk_security/i18n/ru.po @@ -0,0 +1,215 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_security +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-12 23:32+0000\n" +"PO-Revision-Date: 2019-07-12 23:32+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_security +#: model:ir.actions.act_window,name:muk_security.action_security_access_groups +#: model:ir.ui.menu,name:muk_security.menu_security_access_groups +msgid "Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_rights +msgid "Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_base +msgid "Base" +msgstr "Базовый" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__child_groups +msgid "Child Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__complete_groups +msgid "Complete Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_create +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_create +msgid "Create Access" +msgstr "Доступ на создание" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_uid +msgid "Created by" +msgstr "Создано" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__create_date +msgid "Created on" +msgstr "Создан" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_unlink +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_unlink +msgid "Delete Access" +msgstr "Доступ на удаление" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__display_name +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__display_name +msgid "Display Name" +msgstr "Отображаемое Имя" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__explicit_users +msgid "Explicit Users" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_access_groups +msgid "Group Access Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__name +msgid "Group Name" +msgstr "Наименование Группы" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__users +msgid "Group Users" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__groups +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__groups +msgid "Groups" +msgstr "Группы" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__id +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__id +msgid "ID" +msgstr "Номер" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights____last_update +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking____last_update +msgid "Last Modified on" +msgstr "Последнее изменение" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_uid +msgid "Last Updated by" +msgstr "Последний раз обновил" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__write_date +msgid "Last Updated on" +msgstr "Последнее обновление" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__is_locked +msgid "Locked" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_locking__locked_by +msgid "Locked by" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_mixins_locking +msgid "Locking Mixin" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_model_access +msgid "Model Access" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_group +msgid "Parent Group" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__parent_path +msgid "Parent Path" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_read +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_read +msgid "Read Access" +msgstr "Доступ на чтение" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_muk_security_access_groups +msgid "Record Access Groups" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_ir_rule +msgid "Record Rule" +msgstr "Ограничение доступа" + +#. module: muk_security +#: model_terms:ir.ui.view,arch_db:muk_security.view_security_access_groups_form +msgid "Settings" +msgstr "Настройки" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_locking.py:77 +#, python-format +msgid "The record (%s [%s]) is locked, by an other user." +msgstr "" + +#. module: muk_security +#: code:addons/muk_security/models/mixins_access_groups.py:197 +#, python-format +msgid "The requested operation cannot be completed due to group security restrictions. Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_unlink +msgid "Unlink Access" +msgstr "" + +#. module: muk_security +#: model:ir.model,name:muk_security.model_res_users +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__count_users +msgid "Users" +msgstr "Пользователи" + +#. module: muk_security +#: model:ir.model.fields,field_description:muk_security.field_muk_security_access_groups__perm_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_groups__permission_write +#: model:ir.model.fields,field_description:muk_security.field_muk_security_mixins_access_rights__permission_write +msgid "Write Access" +msgstr "Доступ на запись" + diff --git a/odex-event/muk_security/models/__init__.py b/odex-event/muk_security/models/__init__.py new file mode 100644 index 000000000..a24c17fac --- /dev/null +++ b/odex-event/muk_security/models/__init__.py @@ -0,0 +1,30 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import base +from . import mixins_locking +from . import mixins_access_rights +from . import mixins_access_groups +from . import access_groups +from . import ir_model_access +from . import res_users +from . import ir_rule diff --git a/odex-event/muk_security/models/access_groups.py b/odex-event/muk_security/models/access_groups.py new file mode 100644 index 000000000..5ec1c05ec --- /dev/null +++ b/odex-event/muk_security/models/access_groups.py @@ -0,0 +1,46 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from odoo import models, fields, api + +class AccessGroups(models.Model): + + _name = 'muk_security.access_groups' + _description = "Record Access Groups" + _inherit = 'muk_utils.mixins.groups' + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + perm_read = fields.Boolean( + string='Read Access') + + perm_create = fields.Boolean( + string='Create Access') + + perm_write = fields.Boolean( + string='Write Access') + + perm_unlink = fields.Boolean( + string='Unlink Access') + \ No newline at end of file diff --git a/odex-event/muk_security/models/base.py b/odex-event/muk_security/models/base.py new file mode 100644 index 000000000..f89ddef8a --- /dev/null +++ b/odex-event/muk_security/models/base.py @@ -0,0 +1,68 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import api, models, fields + +from odoo.addons.muk_security.tools.security import NoSecurityUid + +_logger = logging.getLogger(__name__) + +class Base(models.AbstractModel): + + _inherit = 'base' + + #---------------------------------------------------------- + # Helper + #---------------------------------------------------------- + + def _filter_access_rules(self, operation): + if isinstance(self.env.uid, NoSecurityUid): + return self + return super(Base, self)._filter_access_rules(operation) + + @api.model + def _apply_ir_rules(self, query, mode='read'): + if isinstance(self.env.uid, NoSecurityUid): + return None + return super(Base, self)._apply_ir_rules(query, mode=mode) + + #---------------------------------------------------------- + # Function + #---------------------------------------------------------- + + @api.model + def suspend_security(self, user=None): + return self.sudo(user=NoSecurityUid(user or self.env.uid)) + + + def check_access_rule(self, operation): + if isinstance(self.env.uid, NoSecurityUid): + return None + return super(Base, self).check_access_rule(operation) + + @api.model + def check_field_access_rights(self, operation, fields): + if isinstance(self.env.uid, NoSecurityUid): + return fields or list(self._fields) + return super(Base, self).check_field_access_rights(operation, fields) \ No newline at end of file diff --git a/odex-event/muk_security/models/ir_model_access.py b/odex-event/muk_security/models/ir_model_access.py new file mode 100644 index 000000000..9d73e71b0 --- /dev/null +++ b/odex-event/muk_security/models/ir_model_access.py @@ -0,0 +1,42 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import api, fields, models +from odoo import tools, _ +from odoo.exceptions import ValidationError + +from odoo.addons.muk_security.tools.security import NoSecurityUid + +_logger = logging.getLogger(__name__) + +class IrModelAccess(models.Model): + + _inherit = 'ir.model.access' + + @api.model + @tools.ormcache_context('self._uid', 'model', 'mode', 'raise_exception', keys=('lang',)) + def check(self, model, mode='read', raise_exception=True): + if isinstance(self.env.uid, NoSecurityUid): + return True + return super(IrModelAccess, self).check(model, mode=mode, raise_exception=raise_exception) \ No newline at end of file diff --git a/odex-event/muk_security/models/ir_rule.py b/odex-event/muk_security/models/ir_rule.py new file mode 100644 index 000000000..93b513610 --- /dev/null +++ b/odex-event/muk_security/models/ir_rule.py @@ -0,0 +1,42 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import api, fields, models +from odoo import tools, _ +from odoo.exceptions import ValidationError + +from odoo.addons.muk_security.tools.security import NoSecurityUid + +_logger = logging.getLogger(__name__) + +class IrRule(models.Model): + + _inherit = 'ir.rule' + + @api.model + @tools.ormcache('self._uid', 'model_name', 'mode') + def _compute_domain(self, model_name, mode="read"): + if isinstance(self.env.uid, NoSecurityUid): + return None + return super(IrRule, self)._compute_domain(model_name, mode=mode) \ No newline at end of file diff --git a/odex-event/muk_security/models/mixins_access_groups.py b/odex-event/muk_security/models/mixins_access_groups.py new file mode 100644 index 000000000..95f0deb01 --- /dev/null +++ b/odex-event/muk_security/models/mixins_access_groups.py @@ -0,0 +1,245 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from collections import defaultdict + +from odoo import _, models, api, fields, SUPERUSER_ID +from odoo.exceptions import AccessError +from odoo.osv import expression + +from odoo.addons.muk_security.tools.security import NoSecurityUid + +_logger = logging.getLogger(__name__) + +class AccessGroupsModel(models.AbstractModel): + + _name = 'muk_security.mixins.access_groups' + _description = "Group Access Mixin" + _inherit = 'muk_security.mixins.access_rights' + + # If set the group fields are restricted by the access group + _access_groups_fields = None + + # If set the group fields are recomputed as super administrator + _access_groups_sudo = False + + # Set it to True to enforced security even if no group has been set + _access_groups_strict = False + + # Set it to True to let the non strict mode check for existing groups per mode + _access_groups_mode = False + + #---------------------------------------------------------- + # Datebase + #---------------------------------------------------------- + + @api.model + def _add_magic_fields(self): + super(AccessGroupsModel, self)._add_magic_fields() + def add(name, field): + if name not in self._fields: + self._add_field(name, field) + add('groups', fields.Many2many( + _module=self._module, + comodel_name='muk_security.access_groups', + relation='%s_groups_rel' % (self._table), + column1='aid', + column2='gid', + string="Groups", + automatic=True, + groups=self._access_groups_fields)) + add('complete_groups', fields.Many2many( + _module=self._module, + comodel_name='muk_security.access_groups', + relation='%s_complete_groups_rel' % (self._table), + column1='aid', + column2='gid', + string="Complete Groups", + compute='_compute_groups', + readonly=True, + store=True, + automatic=True, + compute_sudo=self._access_groups_sudo, + groups=self._access_groups_fields)) + + #---------------------------------------------------------- + # Helper + #---------------------------------------------------------- + + + def _filter_access(self, operation): + records = super(AccessGroupsModel, self)._filter_access(operation) + return records.filter_access_groups(operation) + + @api.model + def _apply_access_groups(self, query, mode='read'): + if self.env.user.id == SUPERUSER_ID or isinstance(self.env.uid, NoSecurityUid): + return None + where_clause = ''' + "{table}".id IN ( + SELECT r.aid + FROM {table}_complete_groups_rel r + JOIN muk_security_access_groups g ON r.gid = g.id + JOIN muk_security_access_groups_users_rel u ON r.gid = u.gid + WHERE u.uid = %s AND g.perm_{mode} = true + ) + '''.format(table=self._table, mode=mode) + if not self._access_groups_strict: + exists_clause = ''' + NOT EXISTS ( + SELECT 1 + FROM {table}_complete_groups_rel r + JOIN muk_security_access_groups g ON r.gid = g.id + WHERE r.aid = "{table}".id {groups_mode} + ) + ''' + groups_mode = self._access_groups_mode and 'AND g.perm_{mode} = true'.format(mode=mode) + exists_clause = exists_clause.format(table=self._table, groups_mode=groups_mode or "") + where_clause = '({groups_clause} OR {exists_clause})'.format( + groups_clause=where_clause, + exists_clause=exists_clause, + ) + query.where_clause += [where_clause] + query.where_clause_params += [self.env.user.id] + + @api.model + def _apply_ir_rules(self, query, mode='read'): + super(AccessGroupsModel, self)._apply_ir_rules(query, mode=mode) + self._apply_access_groups(query, mode=mode) + + + def _get_ids_without_access_groups(self, operation): + sql_query = ''' + SELECT id + FROM {table} a + WHERE NOT EXISTS ( + SELECT 1 + FROM {table}_complete_groups_rel r + JOIN muk_security_access_groups g ON r.gid = g.id + WHERE r.aid = a.id {subset} {groups_mode} + ); + ''' + subset = self.ids and 'AND r.aid = ANY (VALUES {ids})'.format( + ids=', '.join(map(lambda id: '(%s)' % id, self.ids)) + ) + groups_mode = self._access_groups_mode and 'AND g.perm_{operation} = true'.format( + operation=operation + ) + sql_query = sql_query.format( + table=self._table, + subset=subset or "", + groups_mode=groups_mode or "", + ) + self.env.cr.execute(sql_query) + return list(map(lambda val: val[0], self.env.cr.fetchall())) + + #---------------------------------------------------------- + # Function + #---------------------------------------------------------- + + + def check_access(self, operation, raise_exception=False): + res = super(AccessGroupsModel, self).check_access(operation, raise_exception) + try: + return res and self.check_access_groups(operation) == None + except AccessError: + if raise_exception: + raise + return False + + #---------------------------------------------------------- + # Security + #---------------------------------------------------------- + + + def check_access_groups(self, operation): + if self.env.user.id == SUPERUSER_ID or isinstance(self.env.uid, NoSecurityUid): + return None + group_ids = set(self.ids) - set(self._get_ids_without_access_groups(operation)) + if group_ids: + sql_query = ''' + SELECT r.aid, perm_{operation} + FROM {table}_complete_groups_rel r + JOIN muk_security_access_groups g ON r.gid = g.id + JOIN muk_security_access_groups_users_rel u ON r.gid = u.gid + WHERE r.aid = ANY (VALUES {ids}) AND u.uid = %s; + '''.format( + operation=operation, + table=self._table, + ids=', '.join(map(lambda id: '(%s)' % id, group_ids)), + ) + self.env.cr.execute(sql_query, [self.env.user.id]) + result = defaultdict(list) + for key, val in self.env.cr.fetchall(): + result[key].append(val) + if len(result.keys()) < len(group_ids) or not all(list(map(lambda val: any(val), result.values()))): + raise AccessError(_( + 'The requested operation cannot be completed due to group security restrictions. ' + 'Please contact your system administrator.\n\n(Document type: %s, Operation: %s)' + ) % (self._description, operation)) + + + def filter_access_groups(self, operation): + if self.env.user.id == SUPERUSER_ID or isinstance(self.env.uid, NoSecurityUid): + return self + ids_with_access = self._get_ids_without_access_groups(operation) + group_ids = set(self.ids) - set(ids_with_access) + if group_ids: + sql_query = ''' + SELECT r.aid + FROM {table}_complete_groups_rel r + JOIN muk_security_access_groups g ON r.gid = g.id + JOIN muk_security_access_groups_users_rel u ON r.gid = u.gid + WHERE r.aid = ANY (VALUES {ids}) AND u.uid = %s AND g.perm_{operation} = true; + '''.format( + table=self._table, + ids=', '.join(map(lambda id: '(%s)' % id, group_ids)), + operation=operation, + ) + self.env.cr.execute(sql_query, [self.env.user.id]) + ids_with_access += list(map(lambda val: val[0], self.env.cr.fetchall())) + return self & self.browse(ids_with_access) + + #---------------------------------------------------------- + # Create, Update, Delete + #---------------------------------------------------------- + + + def _write(self, vals): + self.check_access_groups('write') + return super(AccessGroupsModel, self)._write(vals) + + + def unlink(self): + self.check_access_groups('unlink') + return super(AccessGroupsModel, self).unlink() + + #---------------------------------------------------------- + # Groups + #---------------------------------------------------------- + + @api.depends('groups') + def _compute_groups(self): + for record in self: + record.complete_groups = record.groups \ No newline at end of file diff --git a/odex-event/muk_security/models/mixins_access_rights.py b/odex-event/muk_security/models/mixins_access_rights.py new file mode 100644 index 000000000..e5f296fa3 --- /dev/null +++ b/odex-event/muk_security/models/mixins_access_rights.py @@ -0,0 +1,122 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import _ +from odoo import models, api, fields +from odoo.exceptions import AccessError + +_logger = logging.getLogger(__name__) + +class AccessModel(models.AbstractModel): + + _name = 'muk_security.mixins.access_rights' + _description = 'Access Mixin' + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + permission_read = fields.Boolean( + compute='_compute_permissions_read', + search='_search_permission_read', + string="Read Access") + + permission_create = fields.Boolean( + compute='_compute_permissions_create', + search='_search_permission_create', + string="Create Access") + + permission_write = fields.Boolean( + compute='_compute_permissions_write', + search='_search_permission_write', + string="Write Access") + + permission_unlink = fields.Boolean( + compute='_compute_permissions_unlink', + search='_search_permission_unlink', + string="Delete Access") + + #---------------------------------------------------------- + # Search + #---------------------------------------------------------- + + @api.model + def _search_permission_read(self, operator, operand): + if operator == '=' and operand: + return [('id', 'in', self.search([])._filter_access_ids('read'))] + return [('id', 'not in', self.search([])._filter_access_ids('read'))] + + @api.model + def _search_permission_create(self, operator, operand): + if operator == '=' and operand: + return [('id', 'in', self.search([])._filter_access_ids('create'))] + return [('id', 'not in', self.search([])._filter_access_ids('create'))] + + @api.model + def _search_permission_write(self, operator, operand): + if operator == '=' and operand: + return [('id', 'in', self.search([])._filter_access_ids('write'))] + return [('id', 'not in', self.search([])._filter_access_ids('write'))] + + @api.model + def _search_permission_unlink(self, operator, operand): + if operator == '=' and operand: + return [('id', 'in', self.search([])._filter_access_ids('unlink'))] + return [('id', 'not in', self.search([])._filter_access_ids('unlink'))] + + #---------------------------------------------------------- + # Read, View + #---------------------------------------------------------- + + + def _compute_permissions_read(self): + records = self._filter_access('read') + for record in records: + record.update({'permission_read': True}) + for record in self - records: + record.update({'permission_read': False}) + + + def _compute_permissions_create(self): + records = self._filter_access('create') + for record in records: + record.update({'permission_create': True}) + for record in self - records: + record.update({'permission_create': False}) + + + def _compute_permissions_write(self): + records = self._filter_access('write') + for record in records: + record.update({'permission_write': True}) + for record in self - records: + record.update({'permission_write': False}) + + + def _compute_permissions_unlink(self): + records = self._filter_access('unlink') + for record in records: + record.update({'permission_unlink': True}) + for record in self - records: + record.update({'permission_unlink': False}) \ No newline at end of file diff --git a/odex-event/muk_security/models/mixins_locking.py b/odex-event/muk_security/models/mixins_locking.py new file mode 100644 index 000000000..1ea8746ba --- /dev/null +++ b/odex-event/muk_security/models/mixins_locking.py @@ -0,0 +1,106 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import hashlib +import logging +import itertools + +from odoo import _, SUPERUSER_ID +from odoo import models, api, fields +from odoo.exceptions import AccessError + +from odoo.addons.muk_security.tools.security import NoSecurityUid + +_logger = logging.getLogger(__name__) + +class LockingModel(models.AbstractModel): + + _name = 'muk_security.mixins.locking' + _description = 'Locking Mixin' + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + locked_by = fields.Many2one( + comodel_name='res.users', + string="Locked by") + + is_locked = fields.Boolean( + compute='_compute_locked', + string="Locked") + + is_lock_editor = fields.Boolean( + compute='_compute_locked', + string="Editor") + + #---------------------------------------------------------- + # Locking + #---------------------------------------------------------- + + + def lock(self): + self.write({'locked_by': self.env.uid}) + + + def unlock(self): + self.write({'locked_by': None}) + + @api.model + def _check_lock_editor(self, lock_uid): + return lock_uid in (self.env.uid, SUPERUSER_ID) or isinstance(self.env.uid, NoSecurityUid) + + + def check_lock(self): + for record in self: + if record.locked_by.exists() and not self._check_lock_editor(record.locked_by.id): + message = _("The record (%s [%s]) is locked, by an other user.") + raise AccessError(message % (record._description, record.id)) + + #---------------------------------------------------------- + # Read, View + #---------------------------------------------------------- + + @api.depends('locked_by') + def _compute_locked(self): + for record in self: + if record.locked_by.exists(): + record.update({'is_locked': True, 'is_lock_editor': record.locked_by.id == record.env.uid}) + else: + record.update({'is_locked': False, 'is_lock_editor': False}) + + #---------------------------------------------------------- + # Create, Update, Delete + #---------------------------------------------------------- + + + def _write(self, vals): + self.check_lock() + return super(LockingModel, self)._write(vals) + + + + def unlink(self): + self.check_lock() + return super(LockingModel, self).unlink() + diff --git a/odex-event/muk_security/models/res_users.py b/odex-event/muk_security/models/res_users.py new file mode 100644 index 000000000..df21a742a --- /dev/null +++ b/odex-event/muk_security/models/res_users.py @@ -0,0 +1,49 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import api, fields, models +from odoo import tools, _ +from odoo.exceptions import ValidationError + +from odoo.addons.muk_security.tools.security import NoSecurityUid +from odoo.addons.muk_security.tools.security import convert_security_uid + + +_logger = logging.getLogger(__name__) + +class AccessUser(models.Model): + + _inherit = 'res.users' + + #---------------------------------------------------------- + # Functions + #---------------------------------------------------------- + + def browse(self, arg=None, *args, **kwargs): + return super(AccessUser, self).browse(convert_security_uid(arg), *args, **kwargs) + + @classmethod + def _browse(cls, ids, *args, **kwargs): + access_ids = [convert_security_uid(id) for id in ids] + return super(AccessUser, cls)._browse(access_ids, *args, **kwargs) \ No newline at end of file diff --git a/odex-event/muk_security/patch/__init__.py b/odex-event/muk_security/patch/__init__.py new file mode 100644 index 000000000..e4c0f8c38 --- /dev/null +++ b/odex-event/muk_security/patch/__init__.py @@ -0,0 +1,23 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import api \ No newline at end of file diff --git a/odex-event/muk_security/patch/api.py b/odex-event/muk_security/patch/api.py new file mode 100644 index 000000000..c19f9d400 --- /dev/null +++ b/odex-event/muk_security/patch/api.py @@ -0,0 +1,39 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import models, api, SUPERUSER_ID + +from odoo.addons.muk_utils.tools import patch +from odoo.addons.muk_security.tools import security + +_logger = logging.getLogger(__name__) + +@api.model +@patch.monkey_patch(api.Environment) +def __call__(self, cr=None, user=None, context=None): + env = __call__.super(self, cr, user, context) + if user and isinstance(user, security.NoSecurityUid): + env.uid = user + return env + return env \ No newline at end of file diff --git a/odex-event/muk_security/security/ir.model.access.csv b/odex-event/muk_security/security/ir.model.access.csv new file mode 100644 index 000000000..67bb483c9 --- /dev/null +++ b/odex-event/muk_security/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink + +access_security_access_groups_user,access_security_access_groups_user,model_muk_security_access_groups,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/odex-event/muk_security/security/security.xml b/odex-event/muk_security/security/security.xml new file mode 100644 index 000000000..f53f9589e --- /dev/null +++ b/odex-event/muk_security/security/security.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Security + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="rule_security_groups_user" model="ir.rule"> + <field name="name">User can only edit and delete their own groups.</field> + <field name="model_id" ref="model_muk_security_access_groups"/> + <field name="groups" eval="[(4, ref('base.group_user'))]"/> + <field name="perm_read" eval="0"/> + <field name="perm_create" eval="0"/> + <field name="perm_write" eval="1"/> + <field name="perm_unlink" eval="1" /> + <field name="domain_force">[('create_uid','=',user.id)]</field> +</record> + +<record id="rule_security_groups_manager" model="ir.rule"> + <field name="name">Admins can edit and delete all groups.</field> + <field name="model_id" ref="model_muk_security_access_groups"/> + <field name="groups" eval="[(4, ref('base.group_erp_manager'))]"/> + <field name="perm_read" eval="0"/> + <field name="perm_create" eval="0"/> + <field name="perm_write" eval="1"/> + <field name="perm_unlink" eval="1" /> + <field name="domain_force">[(1 ,'=', 1)]</field> +</record> + +</odoo> + diff --git a/odex-event/muk_security/static/description/banner.png b/odex-event/muk_security/static/description/banner.png new file mode 100644 index 000000000..a73ca8323 Binary files /dev/null and b/odex-event/muk_security/static/description/banner.png differ diff --git a/odex-event/muk_security/static/description/icon.png b/odex-event/muk_security/static/description/icon.png new file mode 100644 index 000000000..9789ede35 Binary files /dev/null and b/odex-event/muk_security/static/description/icon.png differ diff --git a/odex-event/muk_security/static/description/icon.svg b/odex-event/muk_security/static/description/icon.svg new file mode 100644 index 000000000..c1e91a8c7 --- /dev/null +++ b/odex-event/muk_security/static/description/icon.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 250 250" width="250" height="250"><defs><clipPath id="_clipPath_3i7MpoDR4VDbpDPMXofxOgHGfdyMFk54"><rect width="250" height="250"/></clipPath></defs><g clip-path="url(#_clipPath_3i7MpoDR4VDbpDPMXofxOgHGfdyMFk54)"><rect width="250" height="250" style="fill:rgb(0,0,0)" fill-opacity="0"/><defs><filter id="zXYOgPw6ZkEtc592Q4cHUwwVTqb7NS9Z" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feOffset xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" dx="0" dy="3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_100_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_offsetBlur" result="pf_100_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#FFFFFF" flood-opacity="0.5" result="pf_100_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_color" in2="pf_100_inverse" operator="in" result="pf_100_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_shadow" in2="SourceGraphic" operator="over" result="_out_9QikyfyvmbLqL6TQmTeLGtQUwhfbo5Xj"/><feOffset xmlns="http://www.w3.org/2000/svg" in="_out_9QikyfyvmbLqL6TQmTeLGtQUwhfbo5Xj" dx="0" dy="-3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_101_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="_out_9QikyfyvmbLqL6TQmTeLGtQUwhfbo5Xj" in2="pf_101_offsetBlur" result="pf_101_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.5" result="pf_101_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_color" in2="pf_101_inverse" operator="in" result="pf_101_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_shadow" in2="_out_9QikyfyvmbLqL6TQmTeLGtQUwhfbo5Xj" operator="over" result="_out_ZlenbM59Nxs0pJE1uAKGnYSDAIS1hnDX"/><feMerge><feMergeNode in="_out_ZlenbM59Nxs0pJE1uAKGnYSDAIS1hnDX"/></feMerge></filter></defs><g filter="url(#zXYOgPw6ZkEtc592Q4cHUwwVTqb7NS9Z)"><path d="M 15 0 L 235 0 C 243.279 0 250 6.721 250 15 L 250 235 C 250 243.279 243.279 250 235 250 L 15 250 C 6.721 250 0 243.279 0 235 L 0 15 C 0 6.721 6.721 0 15 0 Z" style="stroke:none;fill:#243742;stroke-miterlimit:10;"/></g><defs><filter id="kPJ4MSpmSusop79ZW6eDUCPXxNQVLyNp" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feGaussianBlur xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" stdDeviation="2.146804531419514"/><feOffset xmlns="http://www.w3.org/2000/svg" dx="-5" dy="5" result="pf_100_offsetBlur"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.65"/><feComposite xmlns="http://www.w3.org/2000/svg" in2="pf_100_offsetBlur" operator="in" result="pf_100_dropShadow"/><feBlend xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_dropShadow" mode="normal"/></filter></defs><g filter="url(#kPJ4MSpmSusop79ZW6eDUCPXxNQVLyNp)"><path d=" M 177.25 115.5 L 170.125 115.5 L 170.125 94.125 C 170.125 69.247 149.878 49 125 49 C 100.122 49 79.875 69.247 79.875 94.125 L 79.875 115.5 L 72.75 115.5 C 64.883 115.5 58.5 121.883 58.5 129.75 L 58.5 186.75 C 58.5 194.617 64.883 201 72.75 201 L 177.25 201 C 185.117 201 191.5 194.617 191.5 186.75 L 191.5 129.75 C 191.5 121.883 185.117 115.5 177.25 115.5 Z M 146.375 115.5 L 103.625 115.5 L 103.625 94.125 C 103.625 82.339 113.214 72.75 125 72.75 C 136.786 72.75 146.375 82.339 146.375 94.125 L 146.375 115.5 Z " id="lock" fill="rgb(255,255,255)"/></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_security/static/description/index.html b/odex-event/muk_security/static/description/index.html new file mode 100644 index 000000000..e38a4cbde --- /dev/null +++ b/odex-event/muk_security/static/description/index.html @@ -0,0 +1,123 @@ +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <h2 class="oe_slogan">MuK Security</h2> + <h3 class="oe_slogan">Utility Features</h3> + <h4 class="oe_slogan" style="font-size: 23px;">MuK IT GmbH - + www.mukit.at</h4> + </div> +</section> + +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <div class="text-justify" style="max-width: 84%; margin: 16px 8%;"> + <h3 class="oe_slogan">Overview</h3> + <p class="oe_mt32">Technical module to provide some utility and + security features. The module is mainly used as a dependency by + other modules and has no direct visible effect on the system.</p> + </div> + </div> +</section> + +<section class="oe_container oe_dark"> + <div class="oe_row oe_spaced"> + <h3 class="oe_slogan">Our Services</h3> + <div + style="display: flex; padding-top: 20px; justify-content: space-between;"> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/MQ5" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_implementation.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Implementation + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/u7c" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_integration.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Integration + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/xDJ" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_customization.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Customization + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href=" https://mukit.at/r/J3A" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_development.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Development + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href=" https://mukit.at/r/R1v" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_support.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Support + </h3> + </a> + </div> + </div> + </div> +</section> + +<section class="oe_container" style="padding: 32px 0;"> + <div class="oe_row oe_spaced" style="margin: auto;"> + <div class="oe_demo oe_picture oe_screenshot"> + <a href="https://mukit.at/r/SgN" target="_blank"> <img src="preview.png"> + </a> + </div> + </div> +</section> + +<section class="oe_container oe_dark"> + <h3 class="oe_slogan">Help and Support</h3> + <h5 class="oe_slogan" style="font-size: 20px;">Feel free to + contact us, if you need any help with your Odoo integration or + addiontal features.</h5> + <div class="oe_slogan"> + <a class="btn btn-primary btn-lg mt8" href="https://mukit.at" target="_blank"> + <i class="fa fa-globe"></i> Website + </a> + <a class="btn btn-primary btn-lg mt8" href="mailto:sale@mukit.at"> + <i class="fa fa-envelope"></i> Contact Us + </a> + <a class="btn btn-primary btn-lg mt8" href="https://github.com/muk-it" target="_blank"> + <i class="fa fa-github"></i> Issues + </a> + </div> + <img src="logo.png" + style="width: 200px; margin-bottom: 20px; display: block;" + class="mx-auto center-block"> +</section> \ No newline at end of file diff --git a/odex-event/muk_security/static/description/logo.png b/odex-event/muk_security/static/description/logo.png new file mode 100644 index 000000000..9427ce33e Binary files /dev/null and b/odex-event/muk_security/static/description/logo.png differ diff --git a/odex-event/muk_security/static/description/preview.png b/odex-event/muk_security/static/description/preview.png new file mode 100644 index 000000000..1deb1ccef Binary files /dev/null and b/odex-event/muk_security/static/description/preview.png differ diff --git a/odex-event/muk_security/static/description/service_customization.png b/odex-event/muk_security/static/description/service_customization.png new file mode 100644 index 000000000..3eac66488 Binary files /dev/null and b/odex-event/muk_security/static/description/service_customization.png differ diff --git a/odex-event/muk_security/static/description/service_development.png b/odex-event/muk_security/static/description/service_development.png new file mode 100644 index 000000000..580d46046 Binary files /dev/null and b/odex-event/muk_security/static/description/service_development.png differ diff --git a/odex-event/muk_security/static/description/service_implementation.png b/odex-event/muk_security/static/description/service_implementation.png new file mode 100644 index 000000000..d64b66bda Binary files /dev/null and b/odex-event/muk_security/static/description/service_implementation.png differ diff --git a/odex-event/muk_security/static/description/service_integration.png b/odex-event/muk_security/static/description/service_integration.png new file mode 100644 index 000000000..76c5e80f4 Binary files /dev/null and b/odex-event/muk_security/static/description/service_integration.png differ diff --git a/odex-event/muk_security/static/description/service_support.png b/odex-event/muk_security/static/description/service_support.png new file mode 100644 index 000000000..4c530fafd Binary files /dev/null and b/odex-event/muk_security/static/description/service_support.png differ diff --git a/odex-event/muk_security/tests/__init__.py b/odex-event/muk_security/tests/__init__.py new file mode 100644 index 000000000..cc576ff31 --- /dev/null +++ b/odex-event/muk_security/tests/__init__.py @@ -0,0 +1,24 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import test_access_groups +from . import test_suspend_security \ No newline at end of file diff --git a/odex-event/muk_security/tests/test_access_groups.py b/odex-event/muk_security/tests/test_access_groups.py new file mode 100644 index 000000000..fbf9c43ae --- /dev/null +++ b/odex-event/muk_security/tests/test_access_groups.py @@ -0,0 +1,86 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import base64 +import logging + +from odoo import exceptions +from odoo.tests import common + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +class AccessGroupsTestCase(common.TransactionCase): + + def setUp(self): + super(AccessGroupsTestCase, self).setUp() + self.user_id = self.ref('base.user_demo') + self.group_id = self.ref('base.group_system') + self.groups = self.env['muk_security.access_groups'] + self.group01 = self.groups.create({ + 'name': 'Group 01', + 'explicit_users': [(6, 0, [self.user_id])]}) + self.group02 = self.groups.create({ + 'name': 'Group 02', + 'groups': [(6, 0, [self.group_id])]}) + self.user = self.env['res.users'].browse(self.user_id) + self.group = self.env['res.groups'].browse(self.group_id) + + def tearDown(self): + super(AccessGroupsTestCase, self).tearDown() + + def test_access_groups_users(self): + count = len(self.group02.users) + self.group02.write({'explicit_users': [(6, 0, [self.user_id])]}) + self.assertTrue(len(self.group02.users) > count) + + def test_access_groups_groups(self): + count = len(self.group01.users) + self.group01.write({'groups': [(6, 0, [self.group_id])]}) + self.assertTrue(len(self.group01.users) > count) + + def test_access_groups_groups_group(self): + count = len(self.group02.users) + self.group.write({'users': [(4, self.user_id)]}) + self.assertTrue(len(self.group02.users) > count) + + def test_access_groups_groups_user(self): + count = len(self.group02.users) + self.user.write({'groups_id':[(4, self.group_id)]}) + self.assertTrue(len(self.group02.users) > count) + + def test_access_groups_parent(self): + count = len(self.group02.users) + self.group02.write({'parent_group': self.group01.id}) + self.assertTrue(len(self.group02.users) > count) + + def test_access_groups_parent_multi(self): + group01 = self.groups.create({'name': 'MGroup 01'}) + group02 = self.groups.create({'name': 'MGroup 02', 'parent_group': group01.id}) + group03 = self.groups.create({'name': 'MGroup 03', 'parent_group': group02.id}) + init_count = len(group03.users) + group02.write({'explicit_users': [(6, 0, [self.user_id])]}) + self.assertTrue(len(group03.users) > init_count) + updated_count = len(group03.users) + group01.write({'groups': [(6, 0, [self.group_id])]}) + self.assertTrue(len(group03.users) > updated_count) \ No newline at end of file diff --git a/odex-event/muk_security/tests/test_suspend_security.py b/odex-event/muk_security/tests/test_suspend_security.py new file mode 100644 index 000000000..1be02c304 --- /dev/null +++ b/odex-event/muk_security/tests/test_suspend_security.py @@ -0,0 +1,72 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import base64 +import logging + +from odoo import exceptions +from odoo.tests import common + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +class SuspendSecurityTestCase(common.TransactionCase): + + def setUp(self): + super(SuspendSecurityTestCase, self).setUp() + + def tearDown(self): + super(SuspendSecurityTestCase, self).tearDown() + + def test_suspend_security(self): + user_id = self.env.ref('base.user_demo').id + tester = self.env.ref('base.user_root').sudo(user_id) + with self.assertRaises(exceptions.AccessError): + tester.write({'login': 'test'}) + tester.suspend_security().write({'login': 'test'}) + self.assertEqual(tester.login, 'test') + self.assertEqual(tester.write_uid.id, user_id) + + def test_normalize(self): + self.env['res.users'].browse(self.env['res.users'].suspend_security().env.uid) + + def test_search_one2many(self): + user = self.env.ref('base.user_demo') + model = self.env['res.partner'].sudo(user.id) + self.assertTrue(model.env.user.id == user.id) + normal_domain = [('user_ids.id', '=', model.env.uid)] + suspend_domain = [('user_ids.id', '=', model.suspend_security().env.uid)] + normal_partner = model.search(normal_domain, limit=1) + suspend_partner = model.search(suspend_domain, limit=1) + self.assertEqual(normal_partner, suspend_partner) + normal_domain = [('user_ids', '=', model.env.uid)] + suspend_domain = [('user_ids', '=', model.suspend_security().env.uid)] + normal_partner = model.search(normal_domain, limit=1) + suspend_partner = model.search(suspend_domain, limit=1) + self.assertEqual(normal_partner, suspend_partner) + normal_domain = [('user_ids.id', 'in', [model.env.uid])] + suspend_domain = [('user_ids.id', 'in', [model.suspend_security().env.uid])] + normal_partner = model.search(normal_domain, limit=1) + suspend_partner = model.search(suspend_domain, limit=1) + self.assertEqual(normal_partner, suspend_partner) + \ No newline at end of file diff --git a/odex-event/muk_security/tools/__init__.py b/odex-event/muk_security/tools/__init__.py new file mode 100644 index 000000000..433767f6a --- /dev/null +++ b/odex-event/muk_security/tools/__init__.py @@ -0,0 +1,23 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import security \ No newline at end of file diff --git a/odex-event/muk_security/tools/security.py b/odex-event/muk_security/tools/security.py new file mode 100644 index 000000000..927a7dfa8 --- /dev/null +++ b/odex-event/muk_security/tools/security.py @@ -0,0 +1,47 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Security +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +#---------------------------------------------------------- +# Helper +#---------------------------------------------------------- + +def convert_security_uid(id): + if isinstance(id, NoSecurityUid): + return super(NoSecurityUid, id).__int__() + return id + +#---------------------------------------------------------- +# Model +#---------------------------------------------------------- + +class NoSecurityUid(int): + + def __int__(self): + return self + + def __eq__(self, other): + if isinstance(other, int): + return False + return super(NoSecurityUid, self).__int__() == other + + def __hash__(self): + return super(NoSecurityUid, self).__hash__() \ No newline at end of file diff --git a/odex-event/muk_security/views/access_groups.xml b/odex-event/muk_security/views/access_groups.xml new file mode 100644 index 000000000..1f9f325f6 --- /dev/null +++ b/odex-event/muk_security/views/access_groups.xml @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Security + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="view_security_access_groups_tree" model="ir.ui.view"> + <field name="name">muk_security_access_groups.tree</field> + <field name="model">muk_security.access_groups</field> + <field name="mode">primary</field> + <field name="inherit_id" ref="muk_utils.view_mixins_groups_tree"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='name']" position="after"> + <field name="perm_read" /> + <field name="perm_create" /> + <field name="perm_write" /> + <field name="perm_unlink" /> + </xpath> + </field> +</record> + +<record id="view_security_access_groups_form" model="ir.ui.view"> + <field name="name">muk_security_access_groups.form</field> + <field name="model">muk_security.access_groups</field> + <field name="mode">primary</field> + <field name="inherit_id" ref="muk_utils.view_mixins_groups_form"/> + <field name="arch" type="xml"> + <xpath expr="//group[@name='group']" position="after"> + <group string="Settings"> + <group> + <field name="perm_create" /> + <field name="perm_read" /> + </group> + <group> + <field name="perm_write" /> + <field name="perm_unlink" /> + </group> + </group> + </xpath> + <xpath expr="//page[@name='childs']//field[@name='name']" position="after"> + <field name="perm_read" /> + <field name="perm_create" /> + <field name="perm_write" /> + <field name="perm_unlink" /> + </xpath> + </field> +</record> + +<record id="action_security_access_groups" model="ir.actions.act_window"> + <field name="name">Access Groups</field> + <field name="res_model">muk_security.access_groups</field> + <field name="view_mode">tree,form</field> +</record> + +<menuitem id="menu_security_access_groups" name="Access Groups" + parent="base.menu_security" action="action_security_access_groups" /> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_utils/LICENSE b/odex-event/muk_utils/LICENSE new file mode 100644 index 000000000..153d416dc --- /dev/null +++ b/odex-event/muk_utils/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/odex-event/muk_utils/README.rst b/odex-event/muk_utils/README.rst new file mode 100644 index 000000000..9cde5dde1 --- /dev/null +++ b/odex-event/muk_utils/README.rst @@ -0,0 +1,113 @@ +========= +MuK Utils +========= + +Technical module to provide some utility features and libraries that can be used +in other applications. This module has no direct effect on the running system. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI <https://pypi.org/project/pip/>`_). + +To install our modules using the package manager make sure +`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo<version>-addon-<module_name>`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_ +and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +No additional configuration is needed to use this module. + +Usage +============= + +This module has no direct visible effect on the system. It provide utility features. + +Credits +======= + +Contributors +------------ + +* Mathias Markl <mathias.markl@mukit.at> + +Images +------------ + +Some pictures are based on or inspired by the icon set of Font Awesome: + +* `Font Awesome <https://fontawesome.com>`_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_utils/__init__.py b/odex-event/muk_utils/__init__.py new file mode 100644 index 000000000..1124bf231 --- /dev/null +++ b/odex-event/muk_utils/__init__.py @@ -0,0 +1,24 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import models +from . import tools \ No newline at end of file diff --git a/odex-event/muk_utils/__manifest__.py b/odex-event/muk_utils/__manifest__.py new file mode 100644 index 000000000..15caa1450 --- /dev/null +++ b/odex-event/muk_utils/__manifest__.py @@ -0,0 +1,57 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### +{ + "name": "MuK Utils", + "summary": """Utility Features""", + "version": '12.0.2.0.7', + "category": 'Extra Tools', + "license": "LGPL-3", + "author": "MuK IT", + "website": "https://www.mukit.at", + 'live_test_url': 'https://mukit.at/r/SgN', + "contributors": [ + "Mathias Markl <mathias.markl@mukit.at>", + ], + "depends": [ + "base_setup", + ], + "data": [ + "actions/ir_attachment.xml", + "views/ir_attachment.xml", + "views/mixins_groups.xml", + "views/res_config_settings.xml", + ], + "qweb": [ + "static/src/xml/*.xml", + ], + "images": [ + 'static/description/banner.png' + ], + "external_dependencies": { + "python": [], + "bin": [], + }, + "sequence": 3, + "application": False, + "installable": True, + "auto_install": False, +} diff --git a/odex-event/muk_utils/actions/ir_attachment.xml b/odex-event/muk_utils/actions/ir_attachment.xml new file mode 100644 index 000000000..a0515050f --- /dev/null +++ b/odex-event/muk_utils/actions/ir_attachment.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="action_attachment_migrate" model="ir.actions.server"> + <field name="name">Migrate</field> + <field name="model_id" ref="base.model_ir_attachment" /> + <field name="binding_model_id" ref="base.model_ir_attachment" /> + <field name="state">code</field> + <field name="code">records.action_migrate()</field> +</record> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_utils/doc/changelog.rst b/odex-event/muk_utils/doc/changelog.rst new file mode 100644 index 000000000..fcc96352f --- /dev/null +++ b/odex-event/muk_utils/doc/changelog.rst @@ -0,0 +1,34 @@ +`1.6.0` +------- + +- Override Attachment to make it more extendable + +`1.5.0` +------- + +- Storage Migration Action + +`1.4.0` +------- + +- Added Hierarchy Mixin + +`1.3.0` +------- + +- Added SCSS Editor + +`1.2.0` +------- + +- Added Group Mixin + +`1.1.0` +------- + +- Added Storage Settings + +`1.0.0` +------- + +- Init Version diff --git a/odex-event/muk_utils/doc/index.rst b/odex-event/muk_utils/doc/index.rst new file mode 100644 index 000000000..9cde5dde1 --- /dev/null +++ b/odex-event/muk_utils/doc/index.rst @@ -0,0 +1,113 @@ +========= +MuK Utils +========= + +Technical module to provide some utility features and libraries that can be used +in other applications. This module has no direct effect on the running system. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI <https://pypi.org/project/pip/>`_). + +To install our modules using the package manager make sure +`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo<version>-addon-<module_name>`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_ +and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +No additional configuration is needed to use this module. + +Usage +============= + +This module has no direct visible effect on the system. It provide utility features. + +Credits +======= + +Contributors +------------ + +* Mathias Markl <mathias.markl@mukit.at> + +Images +------------ + +Some pictures are based on or inspired by the icon set of Font Awesome: + +* `Font Awesome <https://fontawesome.com>`_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_utils/i18n/ar.po b/odex-event/muk_utils/i18n/ar.po new file mode 100644 index 000000000..ba1adcdf7 --- /dev/null +++ b/odex-event/muk_utils/i18n/ar.po @@ -0,0 +1,211 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-13 09:39+0000\n" +"PO-Revision-Date: 2019-07-13 09:39+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "<strong>Save</strong> this page before triggering the migration." +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "All Data" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Field" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Model" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_attachment +msgid "Attachment" +msgstr "مرفق" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Attachment storage location" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,help:muk_utils.field_res_config_settings__attachment_location +msgid "Attachment storage location." +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attachments" +msgstr "المُرفقات" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_base +msgid "Base" +msgstr "الأساس" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__child_groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Child Groups" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_res_config_settings +msgid "Config Settings" +msgstr "ضبط الإعدادات" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__display_name +msgid "Display Name" +msgstr "اسم العرض" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__explicit_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Explicit Users" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Field Data" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Force Storage Migration" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Group" +msgstr "المجموعة" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_groups +msgid "Group Mixin" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__name +msgid "Group Name" +msgstr "اسم المجموعة" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__users +msgid "Group Users" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_tree +msgid "Groups" +msgstr "المجموعات" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_hierarchy +msgid "Hierarchy Mixin" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__id +msgid "ID" +msgstr "المعرف" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor____last_update +msgid "Last Modified on" +msgstr "آخر تعديل في" + +#. module: muk_utils +#: model:ir.actions.server,name:muk_utils.action_attachment_migrate +msgid "Migrate" +msgstr "" + +#. module: muk_utils +#: code:addons/muk_utils/models/ir_attachment.py:87 +#, python-format +msgid "Only administrators can execute this action." +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_group +msgid "Parent Group" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_path +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path +msgid "Parent Path" +msgstr "المسار الأصلي" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_json +msgid "Path Json" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_names +msgid "Path Names" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_scss_editor +msgid "Scss Editor" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_form +msgid "Storage" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location +msgid "Storage Location" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location_changed +msgid "Storage Location Changed" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_config_parameter +msgid "System Parameter" +msgstr "باراميتر النظام" + +#. module: muk_utils +#: sql_constraint:muk_utils.mixins.groups:0 +msgid "The name of the group must be unique!" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__count_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Users" +msgstr "المستخدمون" + diff --git a/odex-event/muk_utils/i18n/de.po b/odex-event/muk_utils/i18n/de.po new file mode 100644 index 000000000..09af85047 --- /dev/null +++ b/odex-event/muk_utils/i18n/de.po @@ -0,0 +1,211 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-13 09:39+0000\n" +"PO-Revision-Date: 2019-07-13 09:39+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "<strong>Save</strong> this page before triggering the migration." +msgstr "<strong>Speichern</strong>Sie diese Seite, bevor Sie die Migration auslösen." + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "All Data" +msgstr "Alle Daten" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Field" +msgstr "Dokumenten Feld" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Model" +msgstr "Dokumenten Model" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_attachment +msgid "Attachment" +msgstr "Dateianhang" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Attachment storage location" +msgstr "Speicherort des Attachments" + +#. module: muk_utils +#: model:ir.model.fields,help:muk_utils.field_res_config_settings__attachment_location +msgid "Attachment storage location." +msgstr "Speicherort des Attachments." + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attachments" +msgstr "Dateianhänge" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_base +msgid "Base" +msgstr "Basis" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__child_groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Child Groups" +msgstr "Untergruppen" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_res_config_settings +msgid "Config Settings" +msgstr "Konfiguration " + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__explicit_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Explicit Users" +msgstr "Explizite Benutzer" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Field Data" +msgstr "Felddaten" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Force Storage Migration" +msgstr "Speichermigration erzwingen" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Group" +msgstr "Gruppe" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_groups +msgid "Group Mixin" +msgstr "Gruppen Mixin" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__name +msgid "Group Name" +msgstr "Gruppenname" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__users +msgid "Group Users" +msgstr "Gruppenbenutzer" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_tree +msgid "Groups" +msgstr "Gruppen" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_hierarchy +msgid "Hierarchy Mixin" +msgstr "Hierarchie Mixin" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__id +msgid "ID" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor____last_update +msgid "Last Modified on" +msgstr "Zuletzt geändert am" + +#. module: muk_utils +#: model:ir.actions.server,name:muk_utils.action_attachment_migrate +msgid "Migrate" +msgstr "Migrieren" + +#. module: muk_utils +#: code:addons/muk_utils/models/ir_attachment.py:87 +#, python-format +msgid "Only administrators can execute this action." +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_group +msgid "Parent Group" +msgstr "Übergeordnete Gruppe" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_path +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path +msgid "Parent Path" +msgstr "Übergeordneter Pfad" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_json +msgid "Path Json" +msgstr "Json Pfad" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_names +msgid "Path Names" +msgstr "Pfadnamen" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_scss_editor +msgid "Scss Editor" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_form +msgid "Storage" +msgstr "Speicher" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location +msgid "Storage Location" +msgstr "Speicherort" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location_changed +msgid "Storage Location Changed" +msgstr "Speicherort geändert" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_config_parameter +msgid "System Parameter" +msgstr "Systemparameter" + +#. module: muk_utils +#: sql_constraint:muk_utils.mixins.groups:0 +msgid "The name of the group must be unique!" +msgstr "Der Name der Gruppe muss einzigartig sein!" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__count_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Users" +msgstr "Benutzer" + diff --git a/odex-event/muk_utils/i18n/es.po b/odex-event/muk_utils/i18n/es.po new file mode 100644 index 000000000..a79540b47 --- /dev/null +++ b/odex-event/muk_utils/i18n/es.po @@ -0,0 +1,211 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-13 09:39+0000\n" +"PO-Revision-Date: 2019-07-13 09:39+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "<strong>Save</strong> this page before triggering the migration." +msgstr "<strong>Save</strong> esta página antes de iniciar la migración." + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "All Data" +msgstr "Todos los datos" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Field" +msgstr "Campo de documento adjunto" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Model" +msgstr "Modelo de documento adjunto" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_attachment +msgid "Attachment" +msgstr "Adjunto" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Attachment storage location" +msgstr "Almacén de anexos" + +#. module: muk_utils +#: model:ir.model.fields,help:muk_utils.field_res_config_settings__attachment_location +msgid "Attachment storage location." +msgstr "Almacén de archivos adjuntos." + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attachments" +msgstr "Adjuntos" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_base +msgid "Base" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__child_groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Child Groups" +msgstr "Grupos de niños" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_res_config_settings +msgid "Config Settings" +msgstr "Opciones de Configuración" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__explicit_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Explicit Users" +msgstr "Usuarios Explícitos" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Field Data" +msgstr "Datos de campo" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Force Storage Migration" +msgstr "Migración de almacenamiento forzado" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Group" +msgstr "Grupo" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_groups +msgid "Group Mixin" +msgstr "Mezcla de Grupo" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__name +msgid "Group Name" +msgstr "Nombre del grupo" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__users +msgid "Group Users" +msgstr "Usuarios del grupo" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_tree +msgid "Groups" +msgstr "Grupos" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_hierarchy +msgid "Hierarchy Mixin" +msgstr "Mezcla de jerarquías" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__id +msgid "ID" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: muk_utils +#: model:ir.actions.server,name:muk_utils.action_attachment_migrate +msgid "Migrate" +msgstr "Migrar" + +#. module: muk_utils +#: code:addons/muk_utils/models/ir_attachment.py:87 +#, python-format +msgid "Only administrators can execute this action." +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_group +msgid "Parent Group" +msgstr "Grupo de padres" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_path +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path +msgid "Parent Path" +msgstr "Trayectoria de los padres" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_json +msgid "Path Json" +msgstr "Camino Json" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_names +msgid "Path Names" +msgstr "Nombres de senderos" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_scss_editor +msgid "Scss Editor" +msgstr "Editor de Scss" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_form +msgid "Storage" +msgstr "Almacenamiento" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location +msgid "Storage Location" +msgstr "Almacén" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location_changed +msgid "Storage Location Changed" +msgstr "Almacén modificado" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_config_parameter +msgid "System Parameter" +msgstr "Parámetros del sistema" + +#. module: muk_utils +#: sql_constraint:muk_utils.mixins.groups:0 +msgid "The name of the group must be unique!" +msgstr "El nombre del grupo debe ser único!" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__count_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Users" +msgstr "Usuarios" + diff --git a/odex-event/muk_utils/i18n/fr.po b/odex-event/muk_utils/i18n/fr.po new file mode 100644 index 000000000..c13768c4a --- /dev/null +++ b/odex-event/muk_utils/i18n/fr.po @@ -0,0 +1,211 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-13 09:40+0000\n" +"PO-Revision-Date: 2019-07-13 09:40+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "<strong>Save</strong> this page before triggering the migration." +msgstr "<strong>Save</strong> cette page avant de déclencher la migration." + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "All Data" +msgstr "Toutes les données" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Field" +msgstr "Champ du document joint" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Model" +msgstr "Modèle de document joint" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_attachment +msgid "Attachment" +msgstr "Pièce jointe" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Attachment storage location" +msgstr "Pièce jointe" + +#. module: muk_utils +#: model:ir.model.fields,help:muk_utils.field_res_config_settings__attachment_location +msgid "Attachment storage location." +msgstr "Emplacement de stockage des pièces jointes" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attachments" +msgstr "Pièces jointes" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_base +msgid "Base" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__child_groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Child Groups" +msgstr "Base" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de config" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__explicit_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Explicit Users" +msgstr "Nom d'affichage" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Field Data" +msgstr "Utilisateurs explicites" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Force Storage Migration" +msgstr "Données de terrain" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Group" +msgstr "Groupe" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_groups +msgid "Group Mixin" +msgstr "Groupe" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__name +msgid "Group Name" +msgstr "Nom du groupe" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__users +msgid "Group Users" +msgstr "Nom du groupe" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_tree +msgid "Groups" +msgstr "Groupes" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_hierarchy +msgid "Hierarchy Mixin" +msgstr "Groupes" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__id +msgid "ID" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: muk_utils +#: model:ir.actions.server,name:muk_utils.action_attachment_migrate +msgid "Migrate" +msgstr "Dernière modification le" + +#. module: muk_utils +#: code:addons/muk_utils/models/ir_attachment.py:87 +#, python-format +msgid "Only administrators can execute this action." +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_group +msgid "Parent Group" +msgstr "Seuls les administrateurs peuvent exécuter cette action." + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_path +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path +msgid "Parent Path" +msgstr "Chemin parent" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_json +msgid "Path Json" +msgstr "Cheminement des parents" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_names +msgid "Path Names" +msgstr "Sentier Json" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_scss_editor +msgid "Scss Editor" +msgstr "Noms des chemins" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_form +msgid "Storage" +msgstr "Editeur Scss" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location +msgid "Storage Location" +msgstr "Stockage" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location_changed +msgid "Storage Location Changed" +msgstr "Emplacement de stockage" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_config_parameter +msgid "System Parameter" +msgstr "Paramètres du système" + +#. module: muk_utils +#: sql_constraint:muk_utils.mixins.groups:0 +msgid "The name of the group must be unique!" +msgstr "Changement de magasin" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__count_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Users" +msgstr "Utilisateurs" + diff --git a/odex-event/muk_utils/i18n/hi.po b/odex-event/muk_utils/i18n/hi.po new file mode 100644 index 000000000..2f56a2073 --- /dev/null +++ b/odex-event/muk_utils/i18n/hi.po @@ -0,0 +1,211 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-13 09:40+0000\n" +"PO-Revision-Date: 2019-07-13 09:40+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "<strong>Save</strong> this page before triggering the migration." +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "All Data" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Field" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Model" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_attachment +msgid "Attachment" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Attachment storage location" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,help:muk_utils.field_res_config_settings__attachment_location +msgid "Attachment storage location." +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attachments" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_base +msgid "Base" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__child_groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Child Groups" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__display_name +msgid "Display Name" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__explicit_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Explicit Users" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Field Data" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Force Storage Migration" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Group" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_groups +msgid "Group Mixin" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__name +msgid "Group Name" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__users +msgid "Group Users" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_tree +msgid "Groups" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_hierarchy +msgid "Hierarchy Mixin" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__id +msgid "ID" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor____last_update +msgid "Last Modified on" +msgstr "" + +#. module: muk_utils +#: model:ir.actions.server,name:muk_utils.action_attachment_migrate +msgid "Migrate" +msgstr "" + +#. module: muk_utils +#: code:addons/muk_utils/models/ir_attachment.py:87 +#, python-format +msgid "Only administrators can execute this action." +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_group +msgid "Parent Group" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_path +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path +msgid "Parent Path" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_json +msgid "Path Json" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_names +msgid "Path Names" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_scss_editor +msgid "Scss Editor" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_form +msgid "Storage" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location +msgid "Storage Location" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location_changed +msgid "Storage Location Changed" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_config_parameter +msgid "System Parameter" +msgstr "" + +#. module: muk_utils +#: sql_constraint:muk_utils.mixins.groups:0 +msgid "The name of the group must be unique!" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__count_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Users" +msgstr "" + diff --git a/odex-event/muk_utils/i18n/nl.po b/odex-event/muk_utils/i18n/nl.po new file mode 100644 index 000000000..f6362cdbb --- /dev/null +++ b/odex-event/muk_utils/i18n/nl.po @@ -0,0 +1,211 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-13 09:40+0000\n" +"PO-Revision-Date: 2019-07-13 09:40+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "<strong>Save</strong> this page before triggering the migration." +msgstr "<strong>Save</strong> deze pagina vooraleer de migratie te starten." + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "All Data" +msgstr "Alle gegevens" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Field" +msgstr "Bijgevoegd documentveld" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Model" +msgstr "Bijgevoegd documentmodel" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_attachment +msgid "Attachment" +msgstr "Bijlage" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Attachment storage location" +msgstr "Opslaglocatie voor hulpstukken" + +#. module: muk_utils +#: model:ir.model.fields,help:muk_utils.field_res_config_settings__attachment_location +msgid "Attachment storage location." +msgstr "Opslagplaats voor bevestigingsmateriaal." + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attachments" +msgstr "Bijlagen" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_base +msgid "Base" +msgstr "Basis" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__child_groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Child Groups" +msgstr "Kind groepen" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_res_config_settings +msgid "Config Settings" +msgstr "Configuratie instellingen" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__display_name +msgid "Display Name" +msgstr "Weergavenaam" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__explicit_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Explicit Users" +msgstr "Expliciete gebruikers" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Field Data" +msgstr "Veldgegevens" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Force Storage Migration" +msgstr "Krachtenopslag migratie" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Group" +msgstr "Groep" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_groups +msgid "Group Mixin" +msgstr "Groepsmixer" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__name +msgid "Group Name" +msgstr "Groepsnaam" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__users +msgid "Group Users" +msgstr "Groep gebruikers" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_tree +msgid "Groups" +msgstr "Groepen" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_hierarchy +msgid "Hierarchy Mixin" +msgstr "Hiërarchie Mixin" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__id +msgid "ID" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor____last_update +msgid "Last Modified on" +msgstr "Laatst gewijzigd op" + +#. module: muk_utils +#: model:ir.actions.server,name:muk_utils.action_attachment_migrate +msgid "Migrate" +msgstr "Migreren" + +#. module: muk_utils +#: code:addons/muk_utils/models/ir_attachment.py:87 +#, python-format +msgid "Only administrators can execute this action." +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_group +msgid "Parent Group" +msgstr "Moedergroep" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_path +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path +msgid "Parent Path" +msgstr "Bovenliggend pad" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_json +msgid "Path Json" +msgstr "Pad Json" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_names +msgid "Path Names" +msgstr "Padnamen" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_scss_editor +msgid "Scss Editor" +msgstr "Scss-editor" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_form +msgid "Storage" +msgstr "Opslag" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location +msgid "Storage Location" +msgstr "Opslaglocatie" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location_changed +msgid "Storage Location Changed" +msgstr "Opslaglocatie veranderd" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_config_parameter +msgid "System Parameter" +msgstr "Systeem parameter" + +#. module: muk_utils +#: sql_constraint:muk_utils.mixins.groups:0 +msgid "The name of the group must be unique!" +msgstr "De naam van de groep moet uniek zijn!" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__count_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Users" +msgstr "Gebruikers" + diff --git a/odex-event/muk_utils/i18n/pt.po b/odex-event/muk_utils/i18n/pt.po new file mode 100644 index 000000000..d863b5e6c --- /dev/null +++ b/odex-event/muk_utils/i18n/pt.po @@ -0,0 +1,211 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-13 09:40+0000\n" +"PO-Revision-Date: 2019-07-13 09:40+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "<strong>Save</strong> this page before triggering the migration." +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "All Data" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Field" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Model" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_attachment +msgid "Attachment" +msgstr "Anexo" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Attachment storage location" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,help:muk_utils.field_res_config_settings__attachment_location +msgid "Attachment storage location." +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attachments" +msgstr "Anexos" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_base +msgid "Base" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__child_groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Child Groups" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_res_config_settings +msgid "Config Settings" +msgstr "config configurações" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__display_name +msgid "Display Name" +msgstr "Nome a Exibir" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__explicit_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Explicit Users" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Field Data" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Force Storage Migration" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Group" +msgstr "Grupo" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_groups +msgid "Group Mixin" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__name +msgid "Group Name" +msgstr "Nome do Grupo" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__users +msgid "Group Users" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_tree +msgid "Groups" +msgstr "Grupos" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_hierarchy +msgid "Hierarchy Mixin" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__id +msgid "ID" +msgstr "Id." + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor____last_update +msgid "Last Modified on" +msgstr "Última Modificação em" + +#. module: muk_utils +#: model:ir.actions.server,name:muk_utils.action_attachment_migrate +msgid "Migrate" +msgstr "" + +#. module: muk_utils +#: code:addons/muk_utils/models/ir_attachment.py:87 +#, python-format +msgid "Only administrators can execute this action." +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_group +msgid "Parent Group" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_path +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path +msgid "Parent Path" +msgstr "Caminho ascendente " + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_json +msgid "Path Json" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_names +msgid "Path Names" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_scss_editor +msgid "Scss Editor" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_form +msgid "Storage" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location +msgid "Storage Location" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location_changed +msgid "Storage Location Changed" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_config_parameter +msgid "System Parameter" +msgstr "" + +#. module: muk_utils +#: sql_constraint:muk_utils.mixins.groups:0 +msgid "The name of the group must be unique!" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__count_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Users" +msgstr "Utilizadores" + diff --git a/odex-event/muk_utils/i18n/ru.po b/odex-event/muk_utils/i18n/ru.po new file mode 100644 index 000000000..24fee8599 --- /dev/null +++ b/odex-event/muk_utils/i18n/ru.po @@ -0,0 +1,211 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190522\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-13 09:40+0000\n" +"PO-Revision-Date: 2019-07-13 09:40+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "<strong>Save</strong> this page before triggering the migration." +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "All Data" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Field" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attached Document Model" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_attachment +msgid "Attachment" +msgstr "Приложение" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Attachment storage location" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,help:muk_utils.field_res_config_settings__attachment_location +msgid "Attachment storage location." +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Attachments" +msgstr "Вложения" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_base +msgid "Base" +msgstr "Базовый" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__child_groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Child Groups" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_res_config_settings +msgid "Config Settings" +msgstr "Настройки конфигурации" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__display_name +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__display_name +msgid "Display Name" +msgstr "Отображаемое Имя" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__explicit_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Explicit Users" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_search +msgid "Field Data" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +msgid "Force Storage Migration" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Group" +msgstr "Группа" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_groups +msgid "Group Mixin" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__name +msgid "Group Name" +msgstr "Наименование Группы" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__users +msgid "Group Users" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__groups +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_tree +msgid "Groups" +msgstr "Группы" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_mixins_hierarchy +msgid "Hierarchy Mixin" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__id +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor__id +msgid "ID" +msgstr "Номер" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy____last_update +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_scss_editor____last_update +msgid "Last Modified on" +msgstr "Последнее изменение" + +#. module: muk_utils +#: model:ir.actions.server,name:muk_utils.action_attachment_migrate +msgid "Migrate" +msgstr "" + +#. module: muk_utils +#: code:addons/muk_utils/models/ir_attachment.py:87 +#, python-format +msgid "Only administrators can execute this action." +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_group +msgid "Parent Group" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__parent_path +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path +msgid "Parent Path" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_json +msgid "Path Json" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_hierarchy__parent_path_names +msgid "Path Names" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_muk_utils_scss_editor +msgid "Scss Editor" +msgstr "" + +#. module: muk_utils +#: model_terms:ir.ui.view,arch_db:muk_utils.res_config_settings_view_form +#: model_terms:ir.ui.view,arch_db:muk_utils.view_attachment_form +msgid "Storage" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location +msgid "Storage Location" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_res_config_settings__attachment_location_changed +msgid "Storage Location Changed" +msgstr "" + +#. module: muk_utils +#: model:ir.model,name:muk_utils.model_ir_config_parameter +msgid "System Parameter" +msgstr "" + +#. module: muk_utils +#: sql_constraint:muk_utils.mixins.groups:0 +msgid "The name of the group must be unique!" +msgstr "" + +#. module: muk_utils +#: model:ir.model.fields,field_description:muk_utils.field_muk_utils_mixins_groups__count_users +#: model_terms:ir.ui.view,arch_db:muk_utils.view_mixins_groups_form +msgid "Users" +msgstr "Пользователи" + diff --git a/odex-event/muk_utils/models/__init__.py b/odex-event/muk_utils/models/__init__.py new file mode 100644 index 000000000..424dbbe03 --- /dev/null +++ b/odex-event/muk_utils/models/__init__.py @@ -0,0 +1,30 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import base +from . import mixins_groups +from . import mixins_hierarchy +from . import scss_editor +from . import ir_attachment +from . import ir_config_parameter +from . import res_config_settings + diff --git a/odex-event/muk_utils/models/base.py b/odex-event/muk_utils/models/base.py new file mode 100644 index 000000000..167979700 --- /dev/null +++ b/odex-event/muk_utils/models/base.py @@ -0,0 +1,189 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import api, models, fields +from odoo.osv import expression + +from odoo.addons.muk_utils.tools import utils + +_logger = logging.getLogger(__name__) + +class Base(models.AbstractModel): + + _inherit = 'base' + + #---------------------------------------------------------- + # Helper Methods + #---------------------------------------------------------- + + @api.model + def _check_parent_field(self): + if self._parent_name not in self._fields: + raise TypeError("The parent (%s) field does not exist." % self._parent_name) + + @api.model + def _build_search_childs_domain(self, parent_id, domain=[]): + self._check_parent_field() + parent_domain = [[self._parent_name, '=', parent_id]] + return expression.AND([parent_domain, domain]) if domain else parent_domain + + @api.model + def _check_context_bin_size(self, field): + return any( + key in self.env.context and self.env.context[key] + for key in ['bin_size', 'bin_size_%s' % (field)] + ) + + #---------------------------------------------------------- + # Security + #---------------------------------------------------------- + + + def _filter_access(self, operation): + if self.check_access_rights(operation, False): + return self._filter_access_rules(operation) + return self.env[self._name] + + + def _filter_access_ids(self, operation): + return self._filter_access(operation).ids + + + def check_access(self, operation, raise_exception=False): + try: + access_right = self.check_access_rights(operation, raise_exception) + access_rule = self.check_access_rule(operation) is None + return access_right and access_rule + except AccessError: + if raise_exception: + raise + return False + + #---------------------------------------------------------- + # Hierarchy Methods + #---------------------------------------------------------- + + @api.model + def search_parents(self, domain=[], offset=0, limit=None, order=None, count=False): + """ This method finds the top level elements of the hierarchy for a given search query. + + :param domain: a search domain <reference/orm/domains> (default: empty list) + :param order: a string to define the sort order of the query (default: none) + :returns: the top level elements for the given search query + """ + res = self._search_parents(domain=domain, offset=offset, limit=limit, order=order, count=count) + return res if count else self.browse(res) + + @api.model + def search_read_parents(self, domain=[], fields=None, offset=0, limit=None, order=None): + """ This method finds the top level elements of the hierarchy for a given search query. + + :param domain: a search domain <reference/orm/domains> (default: empty list) + :param fields: a list of fields to read (default: all fields of the model) + :param order: a string to define the sort order of the query (default: none) + :returns: the top level elements for the given search query + """ + records = self.search_parents(domain=domain, offset=offset, limit=limit, order=order) + if not records: + return [] + if fields and fields == ['id']: + return [{'id': record.id} for record in records] + result = records.read(fields) + if len(result) <= 1: + return result + index = {vals['id']: vals for vals in result} + return [index[record.id] for record in records if record.id in index] + + @api.model + def _search_parents(self, domain=[], offset=0, limit=None, order=None, count=False): + self._check_parent_field() + self.check_access_rights('read') + if expression.is_false(self, domain): + return [] + query = self._where_calc(domain) + self._apply_ir_rules(query, 'read') + from_clause, where_clause, where_clause_arguments = query.get_sql() + parent_where = where_clause and (" WHERE %s" % where_clause) or '' + parent_query = 'SELECT "%s".id FROM ' % self._table + from_clause + parent_where + no_parent_clause ='"{table}"."{field}" IS NULL'.format( + table=self._table, + field=self._parent_name + ) + no_access_clause ='"{table}"."{field}" NOT IN ({query})'.format( + table=self._table, + field=self._parent_name, + query=parent_query + ) + parent_clause = '({0} OR {1})'.format( + no_parent_clause, + no_access_clause + ) + order_by = self._generate_order_by(order, query) + from_clause, where_clause, where_clause_params = query.get_sql() + where_str = ( + where_clause and + (" WHERE %s AND %s" % (where_clause, parent_clause)) or + (" WHERE %s" % parent_clause) + ) + if count: + query_str = 'SELECT count(1) FROM ' + from_clause + where_str + self._cr.execute(query_str, where_clause_params) + return self._cr.fetchone()[0] + limit_str = limit and ' limit %d' % limit or '' + offset_str = offset and ' offset %d' % offset or '' + query_str = 'SELECT "%s".id FROM ' % self._table + from_clause + where_str + order_by + limit_str + offset_str + complete_where_clause_params = where_clause_params + where_clause_arguments + self._cr.execute(query_str, complete_where_clause_params) + return utils.uniquify_list([x[0] for x in self._cr.fetchall()]) + + @api.model + def search_childs(self, parent_id, domain=[], offset=0, limit=None, order=None, count=False): + """ This method finds the direct child elements of the parent record for a given search query. + + :param parent_id: the integer representing the ID of the parent record + :param domain: a search domain <reference/orm/domains> (default: empty list) + :param offset: the number of results to ignore (default: none) + :param limit: maximum number of records to return (default: all) + :param order: a string to define the sort order of the query (default: none) + :param count: counts and returns the number of matching records (default: False) + :returns: the top level elements for the given search query + """ + domain = self._build_search_childs_domain(parent_id, domain=domain) + return self.search(domain, offset=offset, limit=limit, order=order, count=count) + + @api.model + def search_read_childs(self, parent_id, domain=[], fields=None, offset=0, limit=None, order=None): + """ This method finds the direct child elements of the parent record for a given search query. + + :param parent_id: the integer representing the ID of the parent record + :param domain: a search domain <reference/orm/domains> (default: empty list) + :param fields: a list of fields to read (default: all fields of the model) + :param offset: the number of results to ignore (default: none) + :param limit: maximum number of records to return (default: all) + :param order: a string to define the sort order of the query (default: none) + :returns: the top level elements for the given search query + """ + domain = self._build_search_childs_domain(parent_id, domain=domain) + return self.search_read(domain=domain, fields=fields, offset=offset, limit=limit, order=order) + \ No newline at end of file diff --git a/odex-event/muk_utils/models/ir_attachment.py b/odex-event/muk_utils/models/ir_attachment.py new file mode 100644 index 000000000..c9a6ccdd5 --- /dev/null +++ b/odex-event/muk_utils/models/ir_attachment.py @@ -0,0 +1,155 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import math +import base64 +import logging +import mimetypes + +from odoo import registry, api, models, _ +from odoo.tools.mimetypes import guess_mimetype +from odoo.tools.misc import split_every +from odoo.exceptions import AccessError + +_logger = logging.getLogger(__name__) + +class IrAttachment(models.Model): + + _inherit = 'ir.attachment' + + #---------------------------------------------------------- + # Helper + #---------------------------------------------------------- + + @api.model + def _get_datas_inital_vals(self): + return { + 'store_fname': False, + 'db_datas': False, + } + + @api.model + def _update_datas_vals(self, vals, attach, bin_data): + vals.update({ + 'file_size': len(bin_data), + 'checksum': self._compute_checksum(bin_data), + 'index_content': self._index(bin_data, attach.store_fname, attach.mimetype), + }) + return vals + + @api.model + def _get_datas_clean_vals(self, attach): + vals = {} + if attach.store_fname: + vals['store_fname'] = attach.store_fname + return vals + + @api.model + def _clean_datas_after_write(self, vals): + if 'store_fname' in vals: + self._file_delete(vals['store_fname']) + + #---------------------------------------------------------- + # Actions + #---------------------------------------------------------- + + + def action_migrate(self): + self.migrate() + + #---------------------------------------------------------- + # Functions + #---------------------------------------------------------- + + @api.model + def storage_locations(self): + return ['db', 'file'] + + @api.model + def force_storage(self): + if not self._storage() in self.storage_locations(): + return super(IrAttachment, self).force_storage() + if not self.env.user._is_admin(): + raise AccessError(_('Only administrators can execute this action.')) + storage_domain = { + 'db': ('db_datas', '=', False), + 'file': ('store_fname', '=', False), + } + record_domain = [ + '&', ('type', '=', 'binary'), + '&', storage_domain[self._storage()], + '|', ('res_field', '=', False), ('res_field', '!=', False) + ] + self.search(record_domain).migrate(batch_size=100) + return True + + + def migrate(self, batch_size=None): + commit_on_batch = bool(batch_size) + batch_size = batch_size or len(self) or 1 + storage_location = self._storage().upper() + batches = math.ceil(len(self) / batch_size) + for index, attachment in enumerate(self, start=1): + current_batch = math.ceil(index / batch_size) + counter = len(self) - (batches - 1) * batch_size + counter = counter if current_batch == batches else batch_size + _logger.info("Migrate Attachment %s of %s to %s [Batch %s of %s]", + index % batch_size or batch_size, counter, + storage_location, current_batch, batches + ) + attachment.with_context(migration=True).write({ + 'datas': attachment.datas + }) + if commit_on_batch and not index % batch_size: + self.env.cr.commit() + + #---------------------------------------------------------- + # Read + #---------------------------------------------------------- + + + def _compute_mimetype(self, values): + if self.env.context.get('migration') and len(self) == 1: + return self.mimetype or 'application/octet-stream' + else: + return super(IrAttachment, self)._compute_mimetype(values) + + #---------------------------------------------------------- + # Create, Write, Delete + #---------------------------------------------------------- + + + # def _inverse_datas(self): + # location = self._storage() + # for attach in self: + # value = attach.datas + # bin_data = base64.b64decode(value) if value else b'' + # vals = self._get_datas_inital_vals() + # vals = self._update_datas_vals(vals, attach, bin_data) + # if value and location != 'db': + # vals['datas'] = self._file_write(value, vals['checksum']) + # else: + # vals['db_datas'] = value + # clean_vals = self._get_datas_clean_vals(attach) + # models.Model.write(attach.sudo(), vals) + # self._clean_datas_after_write(clean_vals) + \ No newline at end of file diff --git a/odex-event/muk_utils/models/ir_config_parameter.py b/odex-event/muk_utils/models/ir_config_parameter.py new file mode 100644 index 000000000..918feb4d5 --- /dev/null +++ b/odex-event/muk_utils/models/ir_config_parameter.py @@ -0,0 +1,32 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from odoo import models, api + +class IrConfigParameter(models.Model): + + _inherit = 'ir.config_parameter' + + @api.model + def set_params(self, params): + for key, value in params.items(): + self.set_param(key, value) \ No newline at end of file diff --git a/odex-event/muk_utils/models/mixins_groups.py b/odex-event/muk_utils/models/mixins_groups.py new file mode 100644 index 000000000..202db0cd9 --- /dev/null +++ b/odex-event/muk_utils/models/mixins_groups.py @@ -0,0 +1,126 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from odoo import models, fields, api + +class Groups(models.AbstractModel): + + _name = 'muk_utils.mixins.groups' + _description = 'Group Mixin' + + _parent_store = True + _parent_name = "parent_group" + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + name = fields.Char( + string="Group Name", + required=True, + translate=True) + + parent_path = fields.Char( + string="Parent Path", + index=True) + + count_users = fields.Integer( + compute='_compute_users', + string="Users", + store=True) + + @api.model + def _add_magic_fields(self): + super(Groups, self)._add_magic_fields() + def add(name, field): + if name not in self._fields: + self._add_field(name, field) + add('parent_group', fields.Many2one( + _module=self._module, + comodel_name=self._name, + string='Parent Group', + ondelete='cascade', + auto_join=True, + index=True, + automatic=True)) + add('child_groups', fields.One2many( + _module=self._module, + comodel_name=self._name, + inverse_name='parent_group', + string='Child Groups', + automatic=True)) + add('groups', fields.Many2many( + _module=self._module, + comodel_name='res.groups', + relation='%s_groups_rel' % (self._table), + column1='gid', + column2='rid', + string='Groups', + automatic=True)) + add('explicit_users', fields.Many2many( + _module=self._module, + comodel_name='res.users', + relation='%s_explicit_users_rel' % (self._table), + column1='gid', + column2='uid', + string='Explicit Users', + automatic=True)) + add('users', fields.Many2many( + _module=self._module, + comodel_name='res.users', + relation='%s_users_rel' % (self._table), + column1='gid', + column2='uid', + string='Group Users', + compute='_compute_users', + store=True, + automatic=True)) + + _sql_constraints = [ + ('name_uniq', 'unique (name)', 'The name of the group must be unique!') + ] + + #---------------------------------------------------------- + # Functions + #---------------------------------------------------------- + + @api.model + def default_get(self, fields_list): + res = super(Groups, self).default_get(fields_list) + if not self.env.context.get('groups_no_autojoin'): + if 'explicit_users' in res and res['explicit_users']: + res['explicit_users'] = res['explicit_users'] + [self.env.uid] + else: + res['explicit_users'] = [self.env.uid] + return res + + #---------------------------------------------------------- + # Read, View + #---------------------------------------------------------- + + @api.depends('parent_group', 'parent_group.users', 'groups', 'groups.users', 'explicit_users') + def _compute_users(self): + for record in self: + users = record.mapped('groups.users') + users |= record.mapped('explicit_users') + users |= record.mapped('parent_group.users') + record.update({'users': users, 'count_users': len(users)}) \ No newline at end of file diff --git a/odex-event/muk_utils/models/mixins_hierarchy.py b/odex-event/muk_utils/models/mixins_hierarchy.py new file mode 100644 index 000000000..597025cb2 --- /dev/null +++ b/odex-event/muk_utils/models/mixins_hierarchy.py @@ -0,0 +1,176 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import json +import operator +import functools +import collections + +from odoo import models, fields, api +from odoo.osv import expression + +class Hierarchy(models.AbstractModel): + + _name = 'muk_utils.mixins.hierarchy' + _description = 'Hierarchy Mixin' + + _parent_store = True + _parent_path_sudo = False + _parent_path_store = False + + _name_path_context = "show_path" + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + parent_path = fields.Char( + string="Parent Path", + index=True) + + @api.model + def _add_magic_fields(self): + super(Hierarchy, self)._add_magic_fields() + def add(name, field): + if name not in self._fields: + self._add_field(name, field) + path_names_search = None + if not self._parent_path_store: + path_names_search = '_search_parent_path_names' + add('parent_path_names', fields.Char( + _module=self._module, + compute='_compute_parent_paths', + compute_sudo=self._parent_path_sudo, + store=self._parent_path_store, + search=path_names_search, + string="Path Names", + readonly=True, + automatic=True)) + add('parent_path_json', fields.Text( + _module=self._module, + compute='_compute_parent_paths', + compute_sudo=self._parent_path_sudo, + store=self._parent_path_store, + string="Path Json", + readonly=True, + automatic=True)) + + #---------------------------------------------------------- + # Helper + #---------------------------------------------------------- + + def _get_depends_parent_paths(self): + depends = ['parent_path'] + if self._rec_name: + depends += [self._rec_name] + elif 'name' in self._fields: + depends += ['name'] + elif 'x_name' in self._fields: + depends += ['x_name'] + return depends + + #---------------------------------------------------------- + # Search + #---------------------------------------------------------- + + @api.model + def _search_parent_path_names(self, operator, operand): + domain = [] + for value in operand.split('/'): + args = [(self._rec_name_fallback(), operator, value)] + domain = expression.OR([args, domain]) if domain else args + return domain if domain else [(self._rec_name_fallback(), operator, "")] + + #---------------------------------------------------------- + # Read, View + #---------------------------------------------------------- + + @api.depends(lambda self: self._get_depends_parent_paths()) + def _compute_parent_paths(self): + records = self.filtered(lambda record: record.parent_path) + paths = [list(map(int, rec.parent_path.split('/')[:-1])) for rec in records] + ids = paths and set(functools.reduce(operator.concat, paths)) or [] + model_without_path = self.with_context(**{self._name_path_context: False}) + filtered_records = model_without_path.browse(ids)._filter_access('read') + data = dict(filtered_records.name_get()) + for record in records: + path_names = [""] + path_json = [] + for id in reversed(list(map(int, record.parent_path.split('/')[:-1]))): + if id not in data: + break + path_names.append(data[id]) + path_json.append({ + 'model': record._name, + 'name': data[id], + 'id': id, + }) + path_names.reverse() + path_json.reverse() + record.update({ + 'parent_path_names': '/'.join(path_names), + 'parent_path_json': json.dumps(path_json), + }) + + @api.model + def _name_search(self, name='', args=None, operator='ilike', limit=100, name_get_uid=None): + domain = list(args or []) + if not (name == '' and operator == 'ilike') : + if '/' in name: + domain += [('parent_path_names', operator, name)] + else: + domain += [(self._rec_name, operator, name)] + records = self.browse(self._search(domain, limit=limit, access_rights_uid=name_get_uid)) + return models.lazy_name_get(records.sudo(name_get_uid or self.env.uid)) + + + def name_get(self): + if self.env.context.get(self._name_path_context): + res = [] + for record in self: + names = record.parent_path_names + if not names: + res.append(super(Hierarchy, record).name_get()[0]) + elif not len(names) > 50: + res.append((record.id, names)) + else: + res.append((record.id, ".." + names[-48:])) + return res + return super(Hierarchy, self).name_get() + + #---------------------------------------------------------- + # Create, Update, Delete + #---------------------------------------------------------- + + + def write(self, vals): + if self._parent_path_store and self._rec_name_fallback() in vals: + with self.env.norecompute(): + res = super(Hierarchy, self).write(vals) + domain = [('id', 'child_of', self.ids)] + records = self.sudo().search(domain) + records.modified(['parent_path']) + if self.env.recompute and self.env.context.get('recompute', True): + records.recompute() + return res + return super(Hierarchy, self).write(vals) + \ No newline at end of file diff --git a/odex-event/muk_utils/models/res_config_settings.py b/odex-event/muk_utils/models/res_config_settings.py new file mode 100644 index 000000000..e9f84dd8c --- /dev/null +++ b/odex-event/muk_utils/models/res_config_settings.py @@ -0,0 +1,82 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from odoo import api, fields, models + +class ResConfigSettings(models.TransientModel): + + _inherit = 'res.config.settings' + + #---------------------------------------------------------- + # Selections + #---------------------------------------------------------- + + def _attachment_location_selection(self): + locations = self.env['ir.attachment'].storage_locations() + return list(map(lambda location: (location, location.upper()), locations)) + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + attachment_location = fields.Selection( + selection=lambda self: self._attachment_location_selection(), + string='Storage Location', + required=True, + default='file', + help="Attachment storage location.") + + attachment_location_changed = fields.Boolean( + compute='_compute_attachment_location_changed', + string='Storage Location Changed') + + #---------------------------------------------------------- + # Functions + #---------------------------------------------------------- + + + def set_values(self): + res = super(ResConfigSettings, self).set_values() + param = self.env['ir.config_parameter'].sudo() + param.set_param('ir_attachment.location', self.attachment_location) + return res + + @api.model + def get_values(self): + res = super(ResConfigSettings, self).get_values() + params = self.env['ir.config_parameter'].sudo() + res.update(attachment_location=params.get_param('ir_attachment.location', 'file')) + return res + + def attachment_force_storage(self): + self.env['ir.attachment'].force_storage() + + #---------------------------------------------------------- + # Read + #---------------------------------------------------------- + + @api.depends('attachment_location') + def _compute_attachment_location_changed(self): + params = self.env['ir.config_parameter'].sudo() + location = params.get_param('ir_attachment.location', 'file') + for record in self: + record.attachment_location_changed = location != self.attachment_location diff --git a/odex-event/muk_utils/models/scss_editor.py b/odex-event/muk_utils/models/scss_editor.py new file mode 100644 index 000000000..ddc18ab4e --- /dev/null +++ b/odex-event/muk_utils/models/scss_editor.py @@ -0,0 +1,145 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import re +import uuid +import base64 + +from odoo import models, fields, api +from odoo.modules import module + +class ScssEditor(models.AbstractModel): + + _name = 'muk_utils.scss_editor' + _description = 'Scss Editor' + + #---------------------------------------------------------- + # Helper + #---------------------------------------------------------- + + def _build_custom_url(self, url_parts, xmlid): + return "%s.custom.%s.%s" % (url_parts[0], xmlid, url_parts[1]) + + def _get_custom_url(self, url, xmlid): + return self._build_custom_url(url.rsplit(".", 1), xmlid) + + def _get_custom_attachment(self, url): + return self.env["ir.attachment"].with_context( + bin_size=False, bin_size_datas=False + ).search([("url", '=', url)], limit=1) + + def _get_custom_view(self, url): + return self.env["ir.ui.view"].search([("name", '=', url)]) + + def _get_variable(self, content, variable): + regex = r'{0}\:?\s(.*?);'.format(variable) + value = re.search(regex, content) + return value and value.group(1) + + def _get_variables(self, content, variables): + return {var: self._get_variable(content, var) for var in variables} + + def _replace_variables(self, content, variables): + for variable in variables: + variable_content = '{0}: {1};'.format( + variable['name'], + variable['value'] + ) + regex = r'{0}\:?\s(.*?);'.format(variable['name']) + content = re.sub(regex, variable_content, content) + return content + + #---------------------------------------------------------- + # Read + #---------------------------------------------------------- + + def get_content(self, url, xmlid): + custom_url = self._get_custom_url(url, xmlid) + custom_attachment = self._get_custom_attachment(custom_url) + if custom_attachment.exists(): + return base64.b64decode(custom_attachment.datas).decode('utf-8') + else: + match = re.compile("^/(\w+)/(.+?)(\.custom\.(.+))?\.(\w+)$").match(url) + module_path = module.get_module_path(match.group(1)) + resource_path = "%s.%s" % (match.group(2), match.group(5)) + module_resource_path = module.get_resource_path(module_path, resource_path) + with open(module_resource_path, "rb") as file: + return file.read().decode('utf-8') + + def get_values(self, url, xmlid, variables): + return self._get_variables(self.get_content(url, xmlid), variables) + + #---------------------------------------------------------- + # Write + #---------------------------------------------------------- + + def replace_content(self, url, xmlid, content): + custom_url = self._get_custom_url(url, xmlid) + custom_view = self._get_custom_view(custom_url) + custom_attachment = self._get_custom_attachment(custom_url) + datas = base64.b64encode((content or "\n").encode("utf-8")) + if custom_attachment.exists(): + custom_attachment.write({"datas": datas}) + else: + self.env["ir.attachment"].create({ + 'name': custom_url, + 'type': "binary", + 'mimetype': "text/scss", + 'datas': datas, + 'datas_fname': url.split("/")[-1], + 'url': custom_url, + }) + if not custom_view.exists(): + view_to_xpath = self.env["ir.ui.view"].get_related_views( + xmlid, bundles=True + ).filtered(lambda v: v.arch.find(url) >= 0) + self.env["ir.ui.view"].create({ + 'name': custom_url, + 'key': 'web_editor.scss_%s' % str(uuid.uuid4())[:6], + 'mode': "extension", + 'priority': view_to_xpath.priority, + 'inherit_id': view_to_xpath.id, + 'arch': """ + <data inherit_id="%(inherit_xml_id)s" name="%(name)s"> + <xpath expr="//link[@href='%(url_to_replace)s']" position="attributes"> + <attribute name="href">%(new_url)s</attribute> + </xpath> + </data> + """ % { + 'inherit_xml_id': view_to_xpath.xml_id, + 'name': custom_url, + 'url_to_replace': url, + 'new_url': custom_url, + } + }) + self.env["ir.qweb"].clear_caches() + + def replace_values(self, url, xmlid, variables): + content = self._replace_variables( + self.get_content(url, xmlid), variables + ) + self.replace_content(url, xmlid, content) + + def reset_values(self, url, xmlid): + custom_url = self._get_custom_url(url, xmlid) + self._get_custom_attachment(custom_url).unlink() + self._get_custom_view(custom_url).unlink() diff --git a/odex-event/muk_utils/static/description/banner.png b/odex-event/muk_utils/static/description/banner.png new file mode 100644 index 000000000..cf5692b6a Binary files /dev/null and b/odex-event/muk_utils/static/description/banner.png differ diff --git a/odex-event/muk_utils/static/description/icon.png b/odex-event/muk_utils/static/description/icon.png new file mode 100644 index 000000000..1b124a971 Binary files /dev/null and b/odex-event/muk_utils/static/description/icon.png differ diff --git a/odex-event/muk_utils/static/description/icon.svg b/odex-event/muk_utils/static/description/icon.svg new file mode 100644 index 000000000..c06d89de4 --- /dev/null +++ b/odex-event/muk_utils/static/description/icon.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 250 250" width="250" height="250"><defs><clipPath id="_clipPath_5rr0EeXyavC2fRgJNHhuQzZCzjy09IZA"><rect width="250" height="250"/></clipPath></defs><g clip-path="url(#_clipPath_5rr0EeXyavC2fRgJNHhuQzZCzjy09IZA)"><rect width="250" height="250" style="fill:rgb(0,0,0)" fill-opacity="0"/><defs><filter id="5vfwx5gT6qjO4TRpH7BKCiuWyA7ZIfxj" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feOffset xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" dx="0" dy="3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_100_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_offsetBlur" result="pf_100_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#FFFFFF" flood-opacity="0.5" result="pf_100_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_color" in2="pf_100_inverse" operator="in" result="pf_100_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_shadow" in2="SourceGraphic" operator="over" result="_out_6bQVu1Oz8HUi4fr6oRO94wHxwmOuxkLf"/><feOffset xmlns="http://www.w3.org/2000/svg" in="_out_6bQVu1Oz8HUi4fr6oRO94wHxwmOuxkLf" dx="0" dy="-3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_101_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="_out_6bQVu1Oz8HUi4fr6oRO94wHxwmOuxkLf" in2="pf_101_offsetBlur" result="pf_101_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.5" result="pf_101_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_color" in2="pf_101_inverse" operator="in" result="pf_101_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_shadow" in2="_out_6bQVu1Oz8HUi4fr6oRO94wHxwmOuxkLf" operator="over" result="_out_PTMePnEpiyiOsQCLPxaFyTWiJ0l8NVWE"/><feMerge><feMergeNode in="_out_PTMePnEpiyiOsQCLPxaFyTWiJ0l8NVWE"/></feMerge></filter></defs><g filter="url(#5vfwx5gT6qjO4TRpH7BKCiuWyA7ZIfxj)"><path d="M 15 0 L 235 0 C 243.279 0 250 6.721 250 15 L 250 235 C 250 243.279 243.279 250 235 250 L 15 250 C 6.721 250 0 243.279 0 235 L 0 15 C 0 6.721 6.721 0 15 0 Z" style="stroke:none;fill:#243742;stroke-miterlimit:10;"/></g><defs><filter id="CzvVWUBQcr1CCF0bNVqfwyA7IQYyVrz1" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feGaussianBlur xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" stdDeviation="2.146804531419514"/><feOffset xmlns="http://www.w3.org/2000/svg" dx="-5" dy="5" result="pf_100_offsetBlur"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.5"/><feComposite xmlns="http://www.w3.org/2000/svg" in2="pf_100_offsetBlur" operator="in" result="pf_100_dropShadow"/><feBlend xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_dropShadow" mode="normal"/></filter></defs><defs><filter id="yh1ev2IL0HSxOGTJ7DkiQXTbNogBqNSQ" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feGaussianBlur xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" stdDeviation="2.146804531419514"/><feOffset xmlns="http://www.w3.org/2000/svg" dx="-5" dy="5" result="pf_100_offsetBlur"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.5"/><feComposite xmlns="http://www.w3.org/2000/svg" in2="pf_100_offsetBlur" operator="in" result="pf_100_dropShadow"/><feBlend xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_dropShadow" mode="normal"/></filter><mask id="_mask_HIUQArCFFsfBI4Pf9HeP3XjmTPFS8CCW"><path d="M 38.143 49 L 211.857 49 L 211.857 201 L 38.143 201 L 38.143 49 Z" style="stroke:black;fill:white;stroke-miterlimit:10;"/></mask><mask id="_mask_6zfTQytWZkbEDmLGR75ElxBDY7C65IC9"><path d="M 38.143 49 L 211.857 49 L 211.857 201 L 38.143 201 L 38.143 49 Z" style="stroke:black;fill:white;stroke-miterlimit:10;"/></mask></defs><g filter="url(#yh1ev2IL0HSxOGTJ7DkiQXTbNogBqNSQ)"><g mask="url(#_mask_6zfTQytWZkbEDmLGR75ElxBDY7C65IC9)"><g mask="url(#_mask_HIUQArCFFsfBI4Pf9HeP3XjmTPFS8CCW)"/></g></g><g filter="url(#yh1ev2IL0HSxOGTJ7DkiQXTbNogBqNSQ)"><g mask="url(#_mask_HIUQArCFFsfBI4Pf9HeP3XjmTPFS8CCW)"><image width="2048" height="1792" transform="matrix(0.085,0,0,0.085,38.143,49)" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACAAAAAcACAYAAABE76PZAAAgAElEQVR4XuzdCdi3+Vg//vc5Yx0hY6yhSBIy9ixFliJLRmSt/FU/NBUa2Y19KUtIKkqpHyHFyK6yJoQs2Uq2GHt2xljm/B/Xr3tKjJl7+S7X8voex3PMHDPX5/yc79fnOu7nee7veV/fihcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAweYGafAIBCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRgAcBMQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEZCBgAmMEhikCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAwAuAcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAMBAwAzOAQRSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgYA3AMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAGAgYAZnCIIhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQMA7gECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDADAQMAMzhEEQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAEA9wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJiBgAGAGRyiCAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwACAe4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECMxAwADADA5RBAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgYADAPUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBGYgYABgBocoAgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQMADgHiBAgAABAgQIECBAgAABAgQIECBAgACB2Qh097mS/EqS2yb5epLnJXlqVb1lNiEFIUDgFAW6+xJJbpHkZ5OcKclfJnliVb0fGQECBJYiYABgKSctJwECBAgQIECAAAECBAgQIECAAAECBGYs0N3nSXLvJLffeePvm9N2kicluUdVfW7GDKIR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+P81ASs7bQEDANM+P90TIECAAAECBAgQIECAAAECBAgQIHAAge5+TpKjDlDCUgIEvrPAtarq5UsE6u4jkwwfg3C6JeaXmcCaBf6qqn52zXsoT2CyAgYAJnt0GidAgAABAgQIECBAgAABAgQIECBA4KAC3X3zJM88aB3rCRA4RYGPJPmhqvr8Xn26+yJJzpvkPDv/PHeSsyQ5886vw77p34f/NjzRY/g1XDP8+u6dPT+b5Es7v76YZPg1/PTwyb++/E3/Plz3iSQfS/Lx4Z9V9b599D709rYk37/Xta4nQGBXAjetqmfv6koXEViggAGABR66yAQIECBAgAABAgQIECBAgAABAgQI/JdAdw9vHH5y5w1DLAQIrF7g6Un+T5JzJTlieGz3zpv6w7+fM8nwxv7w/4b/fv6dN/uHN/LH9BqGBoahgGGg4dM7XzOGQYHhI0Q+tfP/PjP896r6YHc/NcltxhRALwRmJPCF4euGx//P6ERFWbmAAYCVkypIgAABAgQIECBAgAABAgQIECBAgMCUBLr7GUluMaWe9UqAAAECBBYq8LSq+rmFZhebwK4EDADsislFBAgQIECAAAECBAgQIECAAAECBAjMVaC7j0rynLnmk4sAAQIECMxI4Ker6nkzyiMKgZULGABYOamCBAgQIECAAAECBAgQIECAAAECBAhMSaC7T5dkeHz32B47PiVGvRIgQIAAgXULfHb4yJCq+vq6N1KfwJQFDABM+fT0ToAAAQIECBAgQIAAAQIECBAgQIDASgS6+0k7n1O+knqKECBAgAABAisX+IOqOnrlVRUkMDMBAwAzO1BxCBAgQIAAAQIECBAgQIAAAQIECBDYu0B3/1iSV+19pRUECBAgQIDAhgSuVlX/uKG9bENgsgIGACZ7dBonQIAAAQIECBAgQIAAAQIECBAgQGCVAt39oSQXWGVNtQgQIECAAIGVCLy/qi6ykkqKEJi5gAGAmR+weAQIECBAgAABAgQIECBAgAABAgQI7E6gux+S5D67u9pVBAgQIECAwAYFHlRV99/gfrYiMFkBAwCTPTqNEyBAgAABAgQIECBAgAABAgQIECCwSoHuvnCS962yploECBAgQIDASgQuXFUfWEklRQjMXMAAwMwPWDwCBAgQIECAAAECBAgQIECAAAECBHYv0N1vSHKF3a9wJQECBAgQILBmgddX1ZXXvIfyBGYjYABgNkcpCAECBAgQIECAAAECBAgQIECAAAECBxXo7jsneexB61hPgAABAgQIrEzg16rqCSurphCBmQsYAJj5AYtHgAABAgQIECBAgAABAgQIECBAgMDuBbr7iCQfT3LI7le5kgABAgQIEFiTwNeSHFFVn19TfWUJzE7AAMDsjlQgAgQIECBAgAABAgQIECBAgAABAgQOItDdxyW58UFqWEuAAAECBAisROCvq+pmK6mkCIGFCBgAWMhBi0mAAAECBAgQIECAAAECBAgQIECAwO4EuvuoJM/Z3dWuIkCAAAECBNYocMOqesEa6ytNYHYCBgBmd6QCESBAgAABAgQIECBAgAABAgQIECBwEIHuHr5vOnwMwLkOUsdaAgQIECBA4EACn0py7qrqA1WxmMDCBAwALOzAxSVAgAABAgQIECBAgAABAgQIECBA4LQFuvsxSe5y2le6ggABAgQIEFiTwCOq6h5rqq0sgdkKGACY7dEKRoAAAQIECBAgQIAAAQIECBAgQIDAfgW6+weTvHu/660jQIAAAQIEDixwsap6z4GrKEBgYQIGABZ24OISIECAAAECBAgQIECAAAECBAgQILA7ge7+5ySX3d3VriJAgAABAgRWKPD6qrryCuspRWAxAgYAFnPUghIgQIAAAQIECBAgQIAAAQIECBAgsBeB7r5TksftZY1rCRAgQIAAgZUI3LGqnriSSooQWJiAAYCFHbi4BAgQIECAAAECBAgQIECAAAECBAjsTqC7z57kk0lOv7sVriJAgAABAgRWIHBiksOr6ssrqKUEgcUJGABY3JELTIAAAQIECBAgQIAAAQIECBAgQIDAbgW6+1lJbrbb611HgAABAgQIHFjgaVX1cweuogCBhQoYAFjowYtNgAABAgQIECBAgAABAgQIECBAgMBpC3T3dZO8+LSvdAUBAgQIECCwIoFrVtUrVlRLGQKLEzAAsLgjF5gAAQIECBAgQIAAAQIECBAgQIAAgb0IdPdHkpxvL2tcS4AAAQIECOxL4D+q6nv3tdIiAgT+n4ABADcCAQIECBAgQIAAAQIECBAgQIAAAQIETkWgu++X5IGQCBAgQIAAgbUL3LOqfnvtu9iAwIwFDADM+HBFI0CAAAECBAgQIECAAAECBAgQIEDg4ALdfd4kxyc55ODVVCBAgAABAgS+g8BJSc5V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D59jMJkIECBAgACB/xbo7nsneTATAgQIEFimgAaAZd53qQkQIECAAAECSxXQAKABYKlrX24CBAgMAjevquehIECAAAECBOYt0N23TPIn804pHQECBAiclIAGAGuDAAECBAgQIEBgSQIaADQALGm9y0qAAIETCxxTVa/BQoAAAQIECMxboLuvnuRV804pHQECBAhoALAGCBAgQIAAAQIECCQaADQA+HNAgACBJQtcpKreu2QA2QkQIECAwBIEuvtiSf5jCVllJECAAIH/KWAHAKuCAAECBAgQIEBgSQIaADQALGm9y0qAAIETC5y1qj6LhQABAgQIEJi3QHefI8lx804pHQECBAiclIAGAGuDAAECBAgQIEBgSQIaADQALGm9y0qAAIFDBbqqjkJCgAABAgQIzF+gu4fffb85/6QSEiBAgMDhBDQAWBcECBAgQIAAAQJLEtAAoAFgSetdVgIECBwq8OmqOjsSAgQIECBAYBkC3f25JGdaRlopCRAgQOBQAQ0A1gMBAgQIECBAgMCSBDQAaABY0nqXlQABAocKvKeqLoqEAAECBAgQWIZAd78vyYWWkVZKAgQIENAAYA0QIECAAAECBAgsVUADgAaApa59uQkQIPD6qroKBgIECBAgQGAZAt39xiRXXEZaKQkQIEBAA4A1QIAAAQIECBAgsFQBDQAaAJa69uUmQIDAy6vquhgIECBAgACBZQh0998kOXYZaaUkQIAAAQ0A1gABAgQIECBAgMBSBTQAaABY6tqXmwABAs+rqptjIECAAAECBJYh0N3PT/LTy0grJQECBAhoALAGCBAgQIAAAQIEliqgAUADwFLXvtwECBB4QlX9KgYCBAgQIEBgGQLd/cQkt1tGWikJECBAQAOANUCAAAECBAgQILBUAQ0AGgCWuvblJkCAwIOr6r4YCBAgQIAAgWUIdPeDk9x7GWmlJECAAAENANYAAQIECBAgQIDAUgU0AGgAWOral5sAAQK/XlWPxECAAAECBAgsQ6C7fz3Jw5eRVkoCBAgQ0ABgDRAgQIAAAQIECCxVQAOABoClrn25CRAgcJuq+iMMBAgQIECAwDIEuvs2SZ66jLRSEiBAgIAGAGuAAAECBAgQIEBgqQIaADQALHXty02AAIGbVNVfYiBAgAABAgSWIdDdN07ygmWklZIAAQIENABYAwQIECBAgAABAksV0ACgAWCpa19uAgQIXKeq/gYDAQIECBAgsAyB7r52kpcvI62UBAgQIKABwBogQIAAAQIECBBYqoAGAA0AS137chMgQOCaVfUPGAgQIECAAIFlCHT3NZO8chlppSRAgAABDQDWAAECBAgQIECAwFIFNABoAFjq2pebAAECx1TVazAQIECAAAECyxDo7mOSvHoZaaUkQIAAAQ0A1gABAgQIECBAgMBSBTQAaABY6tqXmwABAleuqjdiIECAAAECBJYh0N0/kOSfl5FWSgIECBDQAGANECBAgAABAgQILFVAA4AGgKWufbkJECBwuar6VwwECBAgQIDAMgS6+3JJ3ryMtFISIECAgAYAa4AAAQIECBAgQGCpAhoANAAsde3LTYAAgUtW1TswECBAgAABAssQ6O5LJXnrMtJKSYAAAQIaAKwBAgQIECBAgACBpQpoANAAsNS1LzcBAgQuUlXvxUCAAAECBAgsQ6C7L5rkXctIKyUBAgQIaACwBggQIECAAAECBJYqoAFAA8BS177cBAgQOH9VfQgDAQIECBAgsAyB7r5gkv9cRlopCRAgQEADgDVAgAABAgQIECCwVAENABoAlrr25SZAgMC5q+oTGAgQIECAAIFlCHT3eZN8ZBlppSRAgAABDQDWAAECBAgQIECAwFIFNABoAFjq2pebAAECZ62qz2IgQIAAAQIEliHQ3edIctwy0kpJgAABAhoArAECBAgQIECAAIGlCmgA0ACw1LUvNwECBE5fVV/CQIAAAQIECCxDoLvPlORzy0grJQECBAhoALAGCBAgQIAAAQIEliqgAUADwFLXvtwECBA4dVUdj4EAAQIECBBYhkB3nzbJl5eRVkoCBAgQ0ABgDRAgQIAAAQIECCxVQAOABoClrn25CRBYuEBVLf6/gQtfAuITIECAwMIEuvsUSb6+sNjiEiBAgEASv/9ZBgQIECBAgAABAksSWPyXH60BYEnrXVYCBAgcKnCKqvomEgIECBAgQGAZAt19VJJvLCOtlAQIECBwqIAGAOuBAAECBAgQIEBgSQIaADQALGm9y0qAAIFDBY6uqq8gIUCAAAECBJYh4BUAy7jPUhIgQOBwAhoArAsCBAgQIECAAIElCWgA0ACwpPUuKwECBA4VOFNVfQEJAQIECBAgsAyB7j5Tks8tI62UBAgQIHCogAYA64EAAQIECBAgQGBJ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CBAgQIAAga0LdPebktx06wtbkAABAgQIEHhjVd0cAwEChy9gAODwzVxBgAABAgQIECBAgAABAgQIECBAgMDCBbr765L834XHFI8AAQIECExZ4HpV9c4pN6g3AlMUMAAwxV3REwECBAgQIECAAAECBAgQIECAAAECByrQ3U9Lcv8DbcLiBAgQIEBgbIGnVtUDxyaQnsDhCxgAOHwzVxAgQIAAAQIECBAgQIAAAQIECBAgsGCB7l69bnpGkissOKZoBAgQIEBg6gIfTHLlquqpN6o/AlMSMAAwpd3QCwECBAgQIECAAAECBAgQIECAAAECBy7Q3ccneemBN6IBAgQIECBA4PZV9QoMBAjsXsAAwO6tnEmAAAECBAgQIECAAAECBAgQIECAwAAC3b168381BOAgQIAAAQIEDlbg96vqjgfbgtUJzEvAAMC89ku3BAgQIECAAAECBAgQIECAAAECBAhsUKC7L7/z+P8jNriM0gQIECBAgMDuBD6X5IpV9bHdne4sAgQMALgHCBAgQIAAAQIECBAgQIAAAQIECBAgsCPQ3fdL8nQgBAgQIECAwGQE/ntV/cpkutEIgYkLGACY+AZpjwABAgQIECBAgAABAgQIECBAgACB7Ql095uS3HR7K1qJAAECBAgQOITAG6rqWykRILA7AQMAu3NyFgECBAgQIECAAAECBAgQIECAAAECCxfo7msl+ZeFxxSPAAECBAjMUeA6VeXv6DnunJ63LmAAYOvkFiRAgAABAgQIECBAgAABAgQIECBAYIoC3X1ikodNsTc9ESBAgACBwQUeW1WPGdxAfAK7EjAAsCsmJxEgQIAAAQIECBAgQIAAAQIECBAgsHSB7n5fkq9dek75CBAgQIDADAX+uaquO8O+tUxg6wIGALZObkECBAgQIECAAAECBAgQIECAAAECBKYm0N23SvKaqfWlHwIECBAgQOALAsdW1et5ECDw5QUMALhDCBAgQIAAAQIECBAgQIAAAQIECBAYXqC7n5XkhOEhABAgQIAAgekKnFRV95luezojMA0BAwDT2AddECBAgAABAgQIECBAgAABAgQIECBwQALd/RVJPpjksgfUgmUJECBAgACBQwt8JMkVquqcQ5/qDALjChgAGHfvJSdAgAABAgQIECBAgAABAgQIECBAIEl3H5/kpTAIECBAgACByQt8f1W9cvJd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8qQk193F6YdzyruT3Kaq/vFwLnIuAQLbF+ju6yf5kyTXWPPq70ry4Kr6gzXXVY4AAQJbFzAAsHVyCxIgQIAAAQIECBAgQIAAAQIECBAgQIDAXgS6+2JJfibJI5Ncdi81LnDN6tO+t6uqM9dQSwkCBLYg0N2XT/KqJDddw3IfTvL4JM+sqs+toZ4SBAgQOHABAwAHvgUaIECAAAECBAgQIECAAAECBAgQIECAAIHDEejur0nymCT3TrIaCtjLsfqk75286bcXOtcQOFiB7r5EkhcmucMeO1m92f8rSR5dVR/fYw2XESBAYJICBgAmuS2aIkCAAAECBAgQIECAAAECBAgQIECAAIFDCXT36usAnpjkjoc69wJ//otV9fDDvMbpBAhMTKC7n5DkIYfRVif5vZ3H/f/rYVznVAIECMxGwADAbLZKowQIECBAgAABAgQIECBAgAABAgQIECBwYQLdfbMkz0hy3CGE3pfkJ6pq9fhwBwECCxDo7u9L8htJrnKIOH+T5P5V9aYFxBaBAAECFylgAMDNQYAAAQIECBAgQIAAAQIECBAgQIAAAQKLEOjuOyd5cpKrXSDQ6lO/v5bkgVX1yUWEFYIAgS8IdPdlkjwlyQlJLvje13uSPKiqXoSMAAECIwgYABhhl2UkQIAAAQIECBAgQIAAAQIECBAgQIDAQALdfa8k90vy+SQvXn1XeFV53PdA94CoYwp093WS3GXn12eTPLOqnjOmhtQECIwqYABg1J2XmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWJWAAYFHbKQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjCpgAGDUnZebAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYlYABgUdspDAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMKmAAYNSdl5sAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiVgAGBR2ykMAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwqYABg1J2XmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWJWAAYFHbKQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjCpgAGDUnZebAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYlYABgUdspDAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMKmAAYNSdl5sAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiVgAGBR2ykMAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwqYABg1J2XmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWJWAAYFHbKQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjCpgAGDUnZebAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYl8P8BrdAQ+wN7GkEAAAAASUVORK5CYII=" style=""/></g></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_utils/static/description/index.html b/odex-event/muk_utils/static/description/index.html new file mode 100644 index 000000000..6cbfb04b0 --- /dev/null +++ b/odex-event/muk_utils/static/description/index.html @@ -0,0 +1,124 @@ +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <h2 class="oe_slogan">MuK Utils</h2> + <h3 class="oe_slogan">Utility Features</h3> + <h4 class="oe_slogan" style="font-size: 23px;">MuK IT GmbH - + www.mukit.at</h4> + </div> +</section> + +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <div class="text-justify" style="max-width: 84%; margin: 16px 8%;"> + <h3 class="oe_slogan">Overview</h3> + <p class="oe_mt32">Technical module to provide some utility + features. The module is mainly used as a dependency by other modules + and to provide a collection of common libraries. It has no direct + visible effect on the system.</p> + </div> + </div> +</section> + +<section class="oe_container oe_dark"> + <div class="oe_row oe_spaced"> + <h3 class="oe_slogan">Our Services</h3> + <div + style="display: flex; padding-top: 20px; justify-content: space-between;"> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/MQ5" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_implementation.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Implementation + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/u7c" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_integration.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Integration + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/xDJ" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_customization.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Customization + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href=" https://mukit.at/r/J3A" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_development.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Development + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href=" https://mukit.at/r/R1v" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_support.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Support + </h3> + </a> + </div> + </div> + </div> +</section> + +<section class="oe_container" style="padding: 32px 0;"> + <div class="oe_row oe_spaced" style="margin: auto;"> + <div class="oe_demo oe_picture oe_screenshot"> + <a href="https://mukit.at/r/SgN" target="_blank"> <img src="preview.png"> + </a> + </div> + </div> +</section> + +<section class="oe_container oe_dark"> + <h3 class="oe_slogan">Help and Support</h3> + <h5 class="oe_slogan" style="font-size: 20px;">Feel free to + contact us, if you need any help with your Odoo integration or + addiontal features.</h5> + <div class="oe_slogan"> + <a class="btn btn-primary btn-lg mt8" href="https://mukit.at" target="_blank"> + <i class="fa fa-globe"></i> Website + </a> + <a class="btn btn-primary btn-lg mt8" href="mailto:sale@mukit.at"> + <i class="fa fa-envelope"></i> Contact Us + </a> + <a class="btn btn-primary btn-lg mt8" href="https://github.com/muk-it" target="_blank"> + <i class="fa fa-github"></i> Issues + </a> + </div> + <img src="logo.png" + style="width: 200px; margin-bottom: 20px; display: block;" + class="mx-auto center-block"> +</section> \ No newline at end of file diff --git a/odex-event/muk_utils/static/description/logo.png b/odex-event/muk_utils/static/description/logo.png new file mode 100644 index 000000000..9427ce33e Binary files /dev/null and b/odex-event/muk_utils/static/description/logo.png differ diff --git a/odex-event/muk_utils/static/description/preview.png b/odex-event/muk_utils/static/description/preview.png new file mode 100644 index 000000000..1deb1ccef Binary files /dev/null and b/odex-event/muk_utils/static/description/preview.png differ diff --git a/odex-event/muk_utils/static/description/service_customization.png b/odex-event/muk_utils/static/description/service_customization.png new file mode 100644 index 000000000..3eac66488 Binary files /dev/null and b/odex-event/muk_utils/static/description/service_customization.png differ diff --git a/odex-event/muk_utils/static/description/service_development.png b/odex-event/muk_utils/static/description/service_development.png new file mode 100644 index 000000000..580d46046 Binary files /dev/null and b/odex-event/muk_utils/static/description/service_development.png differ diff --git a/odex-event/muk_utils/static/description/service_implementation.png b/odex-event/muk_utils/static/description/service_implementation.png new file mode 100644 index 000000000..d64b66bda Binary files /dev/null and b/odex-event/muk_utils/static/description/service_implementation.png differ diff --git a/odex-event/muk_utils/static/description/service_integration.png b/odex-event/muk_utils/static/description/service_integration.png new file mode 100644 index 000000000..76c5e80f4 Binary files /dev/null and b/odex-event/muk_utils/static/description/service_integration.png differ diff --git a/odex-event/muk_utils/static/description/service_support.png b/odex-event/muk_utils/static/description/service_support.png new file mode 100644 index 000000000..4c530fafd Binary files /dev/null and b/odex-event/muk_utils/static/description/service_support.png differ diff --git a/odex-event/muk_utils/tests/__init__.py b/odex-event/muk_utils/tests/__init__.py new file mode 100644 index 000000000..2fb4f4b18 --- /dev/null +++ b/odex-event/muk_utils/tests/__init__.py @@ -0,0 +1,25 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import common +from . import test_search_parents +from . import test_attachment_migration \ No newline at end of file diff --git a/odex-event/muk_utils/tests/common.py b/odex-event/muk_utils/tests/common.py new file mode 100644 index 000000000..f78b2547f --- /dev/null +++ b/odex-event/muk_utils/tests/common.py @@ -0,0 +1,156 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import time +import hmac +import hashlib +import logging +import functools +import threading +import traceback + +from odoo.tests import common, HOST, PORT + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +#---------------------------------------------------------- +# Decorators +#---------------------------------------------------------- + +def multi_users(users=[['base.user_root', True], ['base.user_admin', True]], reset=True, raise_exception=True): + def decorator(func): + @functools.wraps(func) + def wrapper(self, *args, **kwargs): + user_list = users(self) if callable(users) else users + test_results = [] + for user in user_list: + self.cr.execute('SAVEPOINT test_multi_users') + try: + if not isinstance(user[0], int): + self.uid = self.ref(user[0]) + else: + self.uid = user[0] + func(self, *args, **kwargs) + except Exception as error: + test_results.append({ + 'user': user[0], + 'expect': user[1], + 'result': False, + 'error': error, + }) + else: + test_results.append({ + 'user': user[0], + 'expect': user[1], + 'result': True, + 'error': None, + }) + if reset: + self.env.cache.invalidate() + self.registry.clear_caches() + self.registry.reset_changes() + self.cr.execute('ROLLBACK TO SAVEPOINT test_multi_users') + else: + self._cr.execute('RELEASE SAVEPOINT test_multi_users') + test_fails = [] + for result in test_results: + if result['expect'] != result['result']: + message = "Test (%s) with user (%s) failed!" + _logger.info(message % (func.__name__, result['user'])) + if result['error']: + _logger.error(result['error'], exc_info=True) + test_fails.append(result) + if test_fails: + message = "%s out of %s tests failed" % (len(test_fails), len(test_results)) + if raise_exception: + raise test_fails[0]['error'] + else: + _logger.info(message) + return test_results + return wrapper + return decorator + +def track_function(max_query_count=None, max_query_time=None, max_time=None, return_tracking=False): + def decorator(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + tracking_parameters = [func.__name__] + threading.current_thread().query_time = 0 + threading.current_thread().query_count = 0 + threading.current_thread().perf_t0 = time.time() + result = func(*args, **kwargs) + message = "%s" % func.__name__ + if args and hasattr(args[0], "uid"): + message = " (%s)" % args[0].uid + if hasattr(threading.current_thread(), "query_count"): + query_count = threading.current_thread().query_count + query_time = threading.current_thread().query_time + perf_t0 = threading.current_thread().perf_t0 + remaining_time = time.time() - perf_t0 - query_time + time_taken = query_time + remaining_time + message += " - %s Q %.3fs QT %.3fs OT %.3fs TT" % ( + query_count, query_time, remaining_time, time_taken + ) + tracking_parameters += [ + query_count, query_time, remaining_time, time_taken + ] + if max_query_count and query_count > max_query_count: + raise AssertionError("More than %s queries" % max_query_count) + if max_query_time and query_time > max_query_time: + raise AssertionError("Queries took longer than %.3fs" % max_query_time) + if max_time and time_taken > max_time: + raise AssertionError("Function took longer than %.3fs" % max_time) + if not return_tracking: + _logger.info(message) + if return_tracking: + return result, tracking_parameters + return result + return wrapper + return decorator + +#---------------------------------------------------------- +# Test Cases +#---------------------------------------------------------- + +class HttpCase(common.HttpCase): + + def csrf_token(self, time_limit=3600): + token = self.session.sid + max_ts = '' if not time_limit else int(time.time() + time_limit) + msg = '%s%s' % (token, max_ts) + secret = self.env['ir.config_parameter'].sudo().get_param('database.secret') + assert secret, "CSRF protection requires a configured database secret" + hm = hmac.new(secret.encode('ascii'), msg.encode('utf-8'), hashlib.sha1).hexdigest() + return '%so%s' % (hm, max_ts) + + def url_open(self, url, data=None, timeout=10, csrf=False): + if url.startswith('/'): + url = "http://%s:%s%s" % (HOST, PORT, url) + if data: + if csrf: + data.update({'csrf_token': self.csrf_token()}) + return self.opener.post(url, data=data, timeout=timeout) + return self.opener.get(url, timeout=timeout) + + \ No newline at end of file diff --git a/odex-event/muk_utils/tests/test_attachment_migration.py b/odex-event/muk_utils/tests/test_attachment_migration.py new file mode 100644 index 000000000..3f0ad85bf --- /dev/null +++ b/odex-event/muk_utils/tests/test_attachment_migration.py @@ -0,0 +1,51 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import base64 +import logging + +from odoo import exceptions +from odoo.tests import common + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +class MigrationTestCase(common.TransactionCase): + + def setUp(self): + super(MigrationTestCase, self).setUp() + self.model = self.env['ir.attachment'] + self.params = self.env['ir.config_parameter'].sudo() + self.location = self.params.get_param('ir_attachment.location') + if self.location == 'file': + self.params.set_param('ir_attachment.location', 'db') + else: + self.params.set_param('ir_attachment.location', 'file') + + def tearDown(self): + self.params.set_param('ir_attachment.location', self.location) + super(MigrationTestCase, self).tearDown() + + def test_migration(self): + self.model.search([], limit=25).migrate(batch_size=5) + \ No newline at end of file diff --git a/odex-event/muk_utils/tests/test_search_parents.py b/odex-event/muk_utils/tests/test_search_parents.py new file mode 100644 index 000000000..0f2ffcabb --- /dev/null +++ b/odex-event/muk_utils/tests/test_search_parents.py @@ -0,0 +1,65 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import base64 +import logging + +from odoo import exceptions +from odoo.tests import common + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +class SearchParentTestCase(common.TransactionCase): + + def setUp(self): + super(SearchParentTestCase, self).setUp() + self.model = self.env['res.partner.category'] + + def tearDown(self): + super(SearchParentTestCase, self).tearDown() + + def _evaluate_parent_result(self, parents, records): + for parent in parents: + self.assertTrue( + not parent.parent_id or + parent.parent_id.id not in records.ids + ) + + def test_search_parents(self): + records = self.model.search([]) + parents = self.model.search_parents([]) + self._evaluate_parent_result(parents, records) + + def test_search_parents_domain(self): + records = self.model.search([('id', '!=', 1)]) + parents = self.model.search_parents([('id', '!=', 1)]) + self._evaluate_parent_result(parents, records) + + def test_search_read_parents(self): + parents = self.model.search_parents([]) + read_names = parents.read(['name']) + search_names = self.model.search_read_parents([], ['name']) + self.assertTrue(read_names == search_names) + + \ No newline at end of file diff --git a/odex-event/muk_utils/tools/__init__.py b/odex-event/muk_utils/tools/__init__.py new file mode 100644 index 000000000..6631a99c1 --- /dev/null +++ b/odex-event/muk_utils/tools/__init__.py @@ -0,0 +1,30 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import rst +from . import file +from . import json +from . import cache +from . import types +from . import http +from . import patch +from . import security \ No newline at end of file diff --git a/odex-event/muk_utils/tools/cache.py b/odex-event/muk_utils/tools/cache.py new file mode 100644 index 000000000..0961c697b --- /dev/null +++ b/odex-event/muk_utils/tools/cache.py @@ -0,0 +1,63 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import time +import logging +import datetime +import functools + +_logger = logging.getLogger(__name__) + + +#---------------------------------------------------------- +# Properties +#---------------------------------------------------------- + +class cached_property(object): + + def __init__(self, timeout=None): + self.timeout = timeout + + def __call__(self, func): + return functools.update_wrapper(self, func) + + def __get__(self, obj, cls): + if obj is None: + return self + try: + value, last_updated = obj.__dict__[self.__name__] + except KeyError: + pass + else: + if self.timeout is None: + return value + elif self.timeout >= time.time() - last_updated: + return value + value = self.__wrapped__(obj) + obj.__dict__[self.__name__] = (value, time.time()) + return value + + def __delete__(self, obj): + obj.__dict__.pop(self.__name__, None) + + def __set__(self, obj, value): + obj.__dict__[self.__name__] = (value, time()) \ No newline at end of file diff --git a/odex-event/muk_utils/tools/file.py b/odex-event/muk_utils/tools/file.py new file mode 100644 index 000000000..ceeb5297a --- /dev/null +++ b/odex-event/muk_utils/tools/file.py @@ -0,0 +1,119 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import re +import io +import sys +import base64 +import shutil +import urllib +import logging +import hashlib +import binascii +import tempfile +import mimetypes +import unicodedata + +from odoo.tools import human_size +from odoo.tools.mimetypes import guess_mimetype + +_logger = logging.getLogger(__name__) + +#---------------------------------------------------------- +# File Helper +#---------------------------------------------------------- + +def slugify(value, lower=True): + value = unicodedata.normalize('NFKD', value) + value = value.encode('ascii', 'ignore').decode('ascii') + value = value.lower() if lower else value + value = re.sub('[^\w\s-]', '', value) + value = re.sub('[-\s]+', '-', value) + return value.strip() + +def check_name(name): + tmp_dir = tempfile.mkdtemp() + try: + open(os.path.join(tmp_dir, name), 'a').close() + except IOError: + return False + finally: + shutil.rmtree(tmp_dir) + return True + +def compute_name(name, suffix, escape_suffix): + if escape_suffix: + name, extension = os.path.splitext(name) + return "%s(%s)%s" % (name, suffix, extension) + else: + return "%s(%s)" % (name, suffix) + +def unique_name(name, names, escape_suffix=False): + if not name in names: + return name + else: + suffix = 1 + name = compute_name(name, suffix, escape_suffix) + while name in names: + suffix += 1 + name = compute_name(name, suffix, escape_suffix) + return name + +def unique_files(files): + ufiles = [] + unames = [] + for file in files: + uname = unique_name(file[0], unames, escape_suffix=True) + ufiles.append((uname, file[1])) + unames.append(uname) + return ufiles + +def guess_extension(filename=None, mimetype=None, binary=None): + extension = filename and os.path.splitext(filename)[1][1:].strip().lower() + if not extension and mimetype: + extension = mimetypes.guess_extension(mimetype)[1:].strip().lower() + if not extension and binary: + mimetype = guess_mimetype(binary, default="") + extension = mimetypes.guess_extension(mimetype)[1:].strip().lower() + return extension + +#---------------------------------------------------------- +# System Helper +#---------------------------------------------------------- + +def ensure_path_directories(path): + directory_path = os.path.dirname(path) + if not os.path.exists(directory_path): + os.makedirs(directory_path) + +def remove_empty_directories(path): + if not os.path.isdir(path): + return + entries = os.listdir(path) + if len(entries) > 0: + for entry in entries: + subpath = os.path.join(path, entry) + if os.path.isdir(subpath): + self._remove_empty_directories(subpath) + else: + os.rmdir(path) \ No newline at end of file diff --git a/odex-event/muk_utils/tools/http.py b/odex-event/muk_utils/tools/http.py new file mode 100644 index 000000000..b12e6cb51 --- /dev/null +++ b/odex-event/muk_utils/tools/http.py @@ -0,0 +1,59 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import urllib +import base64 +import logging + +from werkzeug.datastructures import CombinedMultiDict + +_logger = logging.getLogger(__name__) + +#---------------------------------------------------------- +# Header Helper +#---------------------------------------------------------- + +def decode_http_basic_authentication_value(value): + try: + username, password = base64.b64decode(value).decode().split(':', 1) + return urllib.parse.unquote(username), urllib.parse.unquote(password) + except: + return None, None + +def decode_http_basic_authentication(encoded_header): + header_values = encoded_header.strip().split(' ') + if len(header_values) == 1: + return decode_http_basic_authentication_value(header_values[0]) + if len(header_values) == 2 and header_values[0].strip().lower() == 'basic': + return decode_http_basic_authentication_value(header_values[1]) + return None, None + +#---------------------------------------------------------- +# Werkzeug Helper +#---------------------------------------------------------- + +def request_params(httprequest): + return CombinedMultiDict([ + httprequest.args, + httprequest.form, + httprequest.files + ]) \ No newline at end of file diff --git a/odex-event/muk_utils/tools/json.py b/odex-event/muk_utils/tools/json.py new file mode 100644 index 000000000..183a3e171 --- /dev/null +++ b/odex-event/muk_utils/tools/json.py @@ -0,0 +1,52 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import json +import logging +import datetime + +from odoo import models, tools + +_logger = logging.getLogger(__name__) + +#---------------------------------------------------------- +# JSON Encoder +#---------------------------------------------------------- + +class ResponseEncoder(json.JSONEncoder): + + def default(self, obj): + if isinstance(obj, datetime.datetime): + return obj.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT) + if isinstance(obj, datetime.date): + return obj.strftime(tools.DEFAULT_SERVER_DATE_FORMAT) + if isinstance(obj, (bytes, bytearray)): + return obj.decode() + return json.JSONEncoder.default(self, obj) + +class RecordEncoder(ResponseEncoder): + + def default(self, obj): + if isinstance(obj, models.BaseModel): + return obj.name_get() + return ResponseEncoder.default(self, obj) + \ No newline at end of file diff --git a/odex-event/muk_utils/tools/patch.py b/odex-event/muk_utils/tools/patch.py new file mode 100644 index 000000000..c1a66d05c --- /dev/null +++ b/odex-event/muk_utils/tools/patch.py @@ -0,0 +1,39 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import api + +_logger = logging.getLogger(__name__) + +#---------------------------------------------------------- +# Patch Helper +#---------------------------------------------------------- + +def monkey_patch(cls): + def decorate(func): + name = func.__name__ + func.super = getattr(cls, name, None) + setattr(cls, name, func) + return func + return decorate diff --git a/odex-event/muk_utils/tools/rst.py b/odex-event/muk_utils/tools/rst.py new file mode 100644 index 000000000..8bdf2cc7f --- /dev/null +++ b/odex-event/muk_utils/tools/rst.py @@ -0,0 +1,55 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from docutils import nodes +from docutils.core import publish_string +from docutils.transforms import Transform, writer_aux +from docutils.writers.html4css1 import Writer + +from odoo import tools + +_logger = logging.getLogger(__name__) + +class ReStructuredTextFilterMessages(Transform): + default_priority = 870 + def apply(self): + for node in self.document.traverse(nodes.system_message): + node.parent.remove(node) + +class ReStructuredTextWriter(Writer): + def get_transforms(self): + return [ReStructuredTextFilterMessages, writer_aux.Admonitions] + +def rst2html(content): + overrides = { + 'embed_stylesheet': False, + 'doctitle_xform': False, + 'output_encoding': 'unicode', + 'xml_declaration': False, + } + output = publish_string(content, + settings_overrides=overrides, + writer=ReStructuredTextWriter() + ) + return tools.html_sanitize(output) diff --git a/odex-event/muk_utils/tools/security.py b/odex-event/muk_utils/tools/security.py new file mode 100644 index 000000000..ef008a532 --- /dev/null +++ b/odex-event/muk_utils/tools/security.py @@ -0,0 +1,37 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import string +import random +import logging + +_logger = logging.getLogger(__name__) + +UNICODE_ASCII_CHARACTERS = string.ascii_letters + string.digits + +#---------------------------------------------------------- +# Generator +#---------------------------------------------------------- + +def generate_token(length=30, chars=UNICODE_ASCII_CHARACTERS): + generator = random.SystemRandom() + return "".join(generator.choice(chars) for index in range(length)) \ No newline at end of file diff --git a/odex-event/muk_utils/tools/types.py b/odex-event/muk_utils/tools/types.py new file mode 100644 index 000000000..11ef779cd --- /dev/null +++ b/odex-event/muk_utils/tools/types.py @@ -0,0 +1,40 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +_logger = logging.getLogger(__name__) + +#---------------------------------------------------------- +# Meta Classes +#---------------------------------------------------------- + +class Singleton(type): + + _instances = {} + + def __call__(cls, *args, **kwargs): + if cls not in cls._instances: + cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) + return cls._instances[cls] + + \ No newline at end of file diff --git a/odex-event/muk_utils/tools/utils.py b/odex-event/muk_utils/tools/utils.py new file mode 100644 index 000000000..84e3b4c40 --- /dev/null +++ b/odex-event/muk_utils/tools/utils.py @@ -0,0 +1,48 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +_logger = logging.getLogger(__name__) + +#---------------------------------------------------------- +# List Methods +#---------------------------------------------------------- + +def uniquify_list(seq): + seen = set() + return [ + val for val in seq if val not in seen and not seen.add(val) + ] + +#---------------------------------------------------------- +# Safe Execute +#---------------------------------------------------------- + +def safe_execute_exception(default, exception, function, *args, **kwargs): + try: + return function(*args, **kwargs) + except exception: + return default + +def safe_execute(default, function, *args, **kwargs): + return safe_execute_exception(default, Exception, function, *args, **kwargs) \ No newline at end of file diff --git a/odex-event/muk_utils/views/ir_attachment.xml b/odex-event/muk_utils/views/ir_attachment.xml new file mode 100644 index 000000000..eda9bc0e6 --- /dev/null +++ b/odex-event/muk_utils/views/ir_attachment.xml @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="view_attachment_search" model="ir.ui.view"> + <field name="name">ir_attachment.search</field> + <field name="model">ir.attachment</field> + <field name="inherit_id" ref="base.view_attachment_search"/> + <field name="arch" type="xml"> + <xpath expr="//filter[@name='url_filter']" position="before"> + <separator/> + <filter name="all" string="All Data" domain="['|',('res_field', '=', False),('res_field', '!=', False)]"/> + <filter name="set_res_field" string="Field Data" domain="[('res_field', '!=', False)]"/> + <filter name="no_res_field" string="Attachments" domain="[('res_field', '=', False)]"/> + <separator/> + </xpath> + <xpath expr="//group//filter[last()]" position="before"> + <separator/> + <filter name="group_res_model" string="Attached Document Model" context="{'group_by': 'res_model'}" /> + <filter name="group_res_field" string="Attached Document Field" context="{'group_by': 'res_field'}" /> + </xpath> + </field> +</record> + +<record id="view_attachment_tree" model="ir.ui.view"> + <field name="name">ir_attachment.tree</field> + <field name="model">ir.attachment</field> + <field name="inherit_id" ref="base.view_attachment_tree"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='file_size']" position="after"> + <field name="mimetype" /> + </xpath> + </field> +</record> + +<record id="view_attachment_form" model="ir.ui.view"> + <field name="name">ir_attachment.form</field> + <field name="model">ir.attachment</field> + <field name="inherit_id" ref="base.view_attachment_form"/> + <field name="arch" type="xml"> + <xpath expr="//group[@name='description_group']" position="before"> + <group string="Storage" name="storage" groups="base.group_no_one"> + <field name="db_datas" readonly="1" attrs="{'invisible':[('db_datas','=',False)]}"/> + <field name="store_fname" readonly="1" attrs="{'invisible':[('store_fname','=',False)]}"/> + </group> + </xpath> + </field> +</record> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_utils/views/mixins_groups.xml b/odex-event/muk_utils/views/mixins_groups.xml new file mode 100644 index 000000000..0f9bdccd8 --- /dev/null +++ b/odex-event/muk_utils/views/mixins_groups.xml @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + +<record id="view_mixins_groups_tree" model="ir.ui.view"> + <field name="name">muk_utils_mixins_groups.tree</field> + <field name="model">muk_utils.mixins.groups</field> + <field name="arch" type="xml"> + <tree string="Groups"> + <field name="name" /> + <field name="count_users" /> + </tree> + </field> +</record> + +<record id="view_mixins_groups_form" model="ir.ui.view"> + <field name="name">muk_utils_mixins_groups.form</field> + <field name="model">muk_utils.mixins.groups</field> + <field name="arch" type="xml"> + <form string="Group"> + <sheet> + <div class="oe_title"> + <label for="name" class="oe_edit_only" /> + <h1> + <field name="name" /> + </h1> + </div> + <group name="group" string="Group"> + <group> + <field name="parent_group" /> + </group> + <group> + <field name="count_users" /> + </group> + </group> + <notebook> + <page name="users" string="Users"> + <field name="users"> + <tree string="Users"> + <field name="name" /> + <field name="login" /> + <field name="lang" /> + <field name="login_date" /> + </tree> + </field> + </page> + <page name="groups" string="Groups"> + <field name="groups"> + <tree string="Groups"> + <field name="name" /> + <field name="comment" /> + </tree> + </field> + </page> + <page name="extra_users" string="Explicit Users"> + <field name="explicit_users"> + <tree string="Explicit Users"> + <field name="name" /> + <field name="login" /> + <field name="lang" /> + <field name="login_date" /> + </tree> + </field> + </page> + <page name="childs" string="Child Groups"> + <field name="child_groups"> + <tree string="Groups"> + <field name="name" /> + <field name="count_users" /> + </tree> + </field> + </page> + </notebook> + </sheet> + </form> + </field> +</record> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_utils/views/res_config_settings.xml b/odex-event/muk_utils/views/res_config_settings.xml new file mode 100644 index 000000000..7f8a0ff1d --- /dev/null +++ b/odex-event/muk_utils/views/res_config_settings.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + + <record id="res_config_settings_view_form" model="ir.ui.view"> + <field name="name">res.config.settings.view.form</field> + <field name="model">res.config.settings</field> + <field name="inherit_id" ref="base_setup.res_config_settings_view_form"/> + <field name="arch" type="xml"> + <div name="integration" position="after"> + <h2>Storage</h2> + <div class="row mt16 o_settings_container" name="storage"> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"></div> + <div class="o_setting_right_pane"> + <label for="attachment_location"/> + <div class="text-muted"> + Attachment storage location + </div> + <div class="mt8"> + <field name="attachment_location" class="o_light_label"/> + </div> + <div class="mt8 text-warning" attrs="{'invisible': [('attachment_location_changed','=',False)]}"> + <field name="attachment_location_changed" invisible="1"/> + <strong>Save</strong> this page before triggering the migration. + </div> + <div class="mt8"> + <button name="attachment_force_storage" + string="Force Storage Migration" + type="object" icon="fa-refresh"/> + </div> + </div> + </div> + </div> + </div> + </field> + </record> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_web_searchpanel/LICENSE b/odex-event/muk_web_searchpanel/LICENSE new file mode 100644 index 000000000..153d416dc --- /dev/null +++ b/odex-event/muk_web_searchpanel/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/odex-event/muk_web_searchpanel/README.rst b/odex-event/muk_web_searchpanel/README.rst new file mode 100644 index 000000000..a54d3c4ef --- /dev/null +++ b/odex-event/muk_web_searchpanel/README.rst @@ -0,0 +1,160 @@ +================ +MuK Search Panel +================ + +With Odoo version 13 a new feature is added which allows kanban views to be +extended by a search panel. This can be defined via XML and is then automatically +added to the view. With this module the function is ported back to version 12. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI <https://pypi.org/project/pip/>`_). + +To install our modules using the package manager make sure +`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo<version>-addon-<module_name>`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_ +and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +No additional configuration is needed to use this module. + +Usage +============= + +This tool allows to quickly filter data on the basis of given fields. The fields +are specified as direct children of the ``searchpanel`` with tag name ``field``, +and the following attributes: + +* ``name`` (mandatory) the name of the field to filter on +* ``select`` determines the behavior and display. +* ``groups``: restricts to specific users +* ``string``: determines the label to display +* ``icon``: specifies which icon is used +* ``color``: determines the icon color + +Possible values for the ``select`` attribute are + +* ``one`` (default) at most one value can be selected. Supported field types are many2one and selection. +* ``multi`` several values can be selected (checkboxes). Supported field types are many2one, many2many and selection. + +Additional optional attributes are available in the ``multi`` case: + +* ``domain``: determines conditions that the comodel records have to satisfy. + +A domain might be used to express a dependency on another field (with select="one") +of the search panel. Consider + +.. code-block:: xml + + <searchpanel> + <field name="department_id"/> + <field name="manager_id" select="multi" domain="[('department_id', '=', department_id)]"/> + <searchpanel/> + +In the above example, the range of values for manager_id (manager names) available at screen +will depend on the value currently selected for the field ``department_id``. + +* ``groupby``: field name of the comodel (only available for many2one and many2many fields). Values will be grouped by that field. + +* ``disable_counters``: default is false. If set to true the counters won't be computed. + +This feature has been implemented in case performances would be too bad. + +Another way to solve performance issues is to properly override the ``search_panel_select_multi_range`` method. + +Credits +======= + +Contributors +------------ + +* Mathias Markl <mathias.markl@mukit.at> + +Images +------------ + +Some pictures are based on or inspired by the icon set of Font Awesome: + +* `Font Awesome <https://fontawesome.com>`_ + +Projects +------------ + +Parts of the module are based on or inspired by: + +* `Odoo <https://github.com/odoo/odoo>`_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_web_searchpanel/__init__.py b/odex-event/muk_web_searchpanel/__init__.py new file mode 100644 index 000000000..c4c92ba30 --- /dev/null +++ b/odex-event/muk_web_searchpanel/__init__.py @@ -0,0 +1,23 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Search Panel +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import models \ No newline at end of file diff --git a/odex-event/muk_web_searchpanel/__manifest__.py b/odex-event/muk_web_searchpanel/__manifest__.py new file mode 100644 index 000000000..21fbf5a72 --- /dev/null +++ b/odex-event/muk_web_searchpanel/__manifest__.py @@ -0,0 +1,54 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Search Panel +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +{ + 'name': 'MuK Search Panel', + 'summary': 'Kanban Search Panel', + 'version': '12.0.2.0.1', + 'category': 'Extra Tools', + 'license': 'LGPL-3', + 'author': 'MuK IT', + 'website': 'https://www.mukit.at', + 'live_test_url': 'https://mukit.at/r/SgN', + 'contributors': [ + 'Mathias Markl <mathias.markl@mukit.at>', + ], + 'depends': [ + 'muk_web_utils', + ], + 'data': [ + "template/assets.xml", + ], + 'qweb': [ + 'static/src/xml/*.xml', + ], + 'images': [ + 'static/description/banner.png' + ], + 'external_dependencies': { + 'python': [], + 'bin': [], + }, + 'application': False, + 'installable': True, + 'auto_install': False, +} \ No newline at end of file diff --git a/odex-event/muk_web_searchpanel/doc/changelog.rst b/odex-event/muk_web_searchpanel/doc/changelog.rst new file mode 100644 index 000000000..4c6a0d20e --- /dev/null +++ b/odex-event/muk_web_searchpanel/doc/changelog.rst @@ -0,0 +1,15 @@ +`1.2.0` +------- + +- Mobile Support + +`1.1.0` +------- + +- Lazy Loading on long requests + +`1.0.0` +------- + +- Init version + diff --git a/odex-event/muk_web_searchpanel/doc/index.rst b/odex-event/muk_web_searchpanel/doc/index.rst new file mode 100644 index 000000000..a54d3c4ef --- /dev/null +++ b/odex-event/muk_web_searchpanel/doc/index.rst @@ -0,0 +1,160 @@ +================ +MuK Search Panel +================ + +With Odoo version 13 a new feature is added which allows kanban views to be +extended by a search panel. This can be defined via XML and is then automatically +added to the view. With this module the function is ported back to version 12. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI <https://pypi.org/project/pip/>`_). + +To install our modules using the package manager make sure +`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo<version>-addon-<module_name>`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_ +and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +No additional configuration is needed to use this module. + +Usage +============= + +This tool allows to quickly filter data on the basis of given fields. The fields +are specified as direct children of the ``searchpanel`` with tag name ``field``, +and the following attributes: + +* ``name`` (mandatory) the name of the field to filter on +* ``select`` determines the behavior and display. +* ``groups``: restricts to specific users +* ``string``: determines the label to display +* ``icon``: specifies which icon is used +* ``color``: determines the icon color + +Possible values for the ``select`` attribute are + +* ``one`` (default) at most one value can be selected. Supported field types are many2one and selection. +* ``multi`` several values can be selected (checkboxes). Supported field types are many2one, many2many and selection. + +Additional optional attributes are available in the ``multi`` case: + +* ``domain``: determines conditions that the comodel records have to satisfy. + +A domain might be used to express a dependency on another field (with select="one") +of the search panel. Consider + +.. code-block:: xml + + <searchpanel> + <field name="department_id"/> + <field name="manager_id" select="multi" domain="[('department_id', '=', department_id)]"/> + <searchpanel/> + +In the above example, the range of values for manager_id (manager names) available at screen +will depend on the value currently selected for the field ``department_id``. + +* ``groupby``: field name of the comodel (only available for many2one and many2many fields). Values will be grouped by that field. + +* ``disable_counters``: default is false. If set to true the counters won't be computed. + +This feature has been implemented in case performances would be too bad. + +Another way to solve performance issues is to properly override the ``search_panel_select_multi_range`` method. + +Credits +======= + +Contributors +------------ + +* Mathias Markl <mathias.markl@mukit.at> + +Images +------------ + +Some pictures are based on or inspired by the icon set of Font Awesome: + +* `Font Awesome <https://fontawesome.com>`_ + +Projects +------------ + +Parts of the module are based on or inspired by: + +* `Odoo <https://github.com/odoo/odoo>`_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_web_searchpanel/models/__init__.py b/odex-event/muk_web_searchpanel/models/__init__.py new file mode 100644 index 000000000..2f434a23a --- /dev/null +++ b/odex-event/muk_web_searchpanel/models/__init__.py @@ -0,0 +1,24 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Search Panel +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import base + diff --git a/odex-event/muk_web_searchpanel/models/base.py b/odex-event/muk_web_searchpanel/models/base.py new file mode 100644 index 000000000..f87653170 --- /dev/null +++ b/odex-event/muk_web_searchpanel/models/base.py @@ -0,0 +1,196 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Search Panel +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import _, api, fields, models +from odoo.exceptions import UserError +from odoo.osv import expression +from odoo.tools import lazy + +_logger = logging.getLogger(__name__) + +class Base(models.AbstractModel): + + _inherit = 'base' + + #---------------------------------------------------------- + # Functions + #---------------------------------------------------------- + + @api.model + def search_panel_select_range(self, field_name, **kwargs): + """ + Return possible values of the field field_name (case select="one") + and the parent field (if any) used to hierarchize them. + + :param field_name: the name of a many2one category field + :return: { + 'parent_field': parent field on the comodel of field, or False + 'values': array of dictionaries containing some info on the records + available on the comodel of the field 'field_name'. + The display name (and possibly parent_field) are fetched. + } + """ + field = self._fields[field_name] + supported_types = ['many2one'] + if field.type not in supported_types: + raise UserError(_('Only types %(supported_types)s are supported for category (found type %(field_type)s)') % ({ + 'supported_types': supported_types, 'field_type': field.type})) + + Comodel = self.env[field.comodel_name] + fields = ['display_name'] + parent_name = Comodel._parent_name if Comodel._parent_name in Comodel._fields else False + if parent_name: + fields.append(parent_name) + + model_domain = expression.AND([ + kwargs.get('search_domain', []), + kwargs.get('category_domain', []), + kwargs.get('filter_domain', []), + ]) + + return { + 'parent_field': parent_name, + 'values': Comodel.with_context(hierarchical_naming=False).search_read(model_domain, fields), + } + + @api.model + def search_panel_select_multi_range(self, field_name, **kwargs): + """ + Return possible values of the field field_name (case select="multi"), + possibly with counters and groups. + + :param field_name: the name of a filter field; + possible types are many2one, many2many, selection. + :param search_domain: base domain of search + :param category_domain: domain generated by categories + :param filter_domain: domain generated by filters + :param comodel_domain: domain of field values (if relational) + :param group_by: extra field to read on comodel, to group comodel records + :param disable_counters: whether to count records by value + :return: a list of possible values, each being a dict with keys + 'id' (value), + 'name' (value label), + 'count' (how many records with that value), + 'group_id' (value of group), + 'group_name' (label of group). + """ + field = self._fields[field_name] + supported_types = ['many2one', 'many2many', 'selection'] + if field.type not in supported_types: + raise UserError(_('Only types %(supported_types)s are supported for filter (found type %(field_type)s)') % ({ + 'supported_types': supported_types, 'field_type': field.type})) + + Comodel = self.env.get(field.comodel_name) + + model_domain = expression.AND([ + kwargs.get('search_domain', []), + kwargs.get('category_domain', []), + kwargs.get('filter_domain', []), + [(field_name, '!=', False)], + ]) + comodel_domain = kwargs.get('comodel_domain', []) + disable_counters = kwargs.get('disable_counters', False) + + group_by = kwargs.get('group_by', False) + if group_by: + # determine the labeling of values returned by the group_by field + group_by_field = Comodel._fields[group_by] + + if group_by_field.type == 'many2one': + def group_id_name(value): + return value or (False, _("Not Set")) + + elif group_by_field.type == 'selection': + desc = Comodel.fields_get([group_by])[group_by] + group_by_selection = dict(desc['selection']) + group_by_selection[False] = _("Not Set") + + def group_id_name(value): + return value, group_by_selection[value] + + else: + def group_id_name(value): + return (value, value) if value else (False, _("Not Set")) + + # get filter_values + filter_values = [] + + if field.type == 'many2one': + counters = {} + if not disable_counters: + groups = self.read_group(model_domain, [field_name], [field_name]) + counters = { + group[field_name][0]: group[field_name + '_count'] + for group in groups + } + # retrieve all possible values, and return them with their label and counter + field_names = ['display_name', group_by] if group_by else ['display_name'] + records = Comodel.search_read(comodel_domain, field_names) + for record in records: + record_id = record['id'] + values = { + 'id': record_id, + 'name': record['display_name'], + 'count': counters.get(record_id, 0), + } + if group_by: + values['group_id'], values['group_name'] = group_id_name(record[group_by]) + filter_values.append(values) + + elif field.type == 'many2many': + # retrieve all possible values, and return them with their label and counter + field_names = ['display_name', group_by] if group_by else ['display_name'] + records = Comodel.search_read(comodel_domain, field_names) + for record in records: + record_id = record['id'] + values = { + 'id': record_id, + 'name': record['display_name'], + 'count': 0, + } + if not disable_counters: + count_domain = expression.AND([model_domain, [(field_name, 'in', record_id)]]) + values['count'] = self.search_count(count_domain) + if group_by: + values['group_id'], values['group_name'] = group_id_name(record[group_by]) + filter_values.append(values) + + elif field.type == 'selection': + counters = {} + if not disable_counters: + groups = self.read_group(model_domain, [field_name], [field_name]) + counters = { + group[field_name]: group[field_name + '_count'] + for group in groups + } + # retrieve all possible values, and return them with their label and counter + selection = self.fields_get([field_name])[field_name] + for value, label in selection: + filter_values.append({ + 'id': value, + 'name': label, + 'count': counters.get(value, 0), + }) + + return filter_values diff --git a/odex-event/muk_web_searchpanel/static/description/banner.png b/odex-event/muk_web_searchpanel/static/description/banner.png new file mode 100644 index 000000000..4718e7585 Binary files /dev/null and b/odex-event/muk_web_searchpanel/static/description/banner.png differ diff --git a/odex-event/muk_web_searchpanel/static/description/icon.png b/odex-event/muk_web_searchpanel/static/description/icon.png new file mode 100644 index 000000000..80205d335 Binary files /dev/null and b/odex-event/muk_web_searchpanel/static/description/icon.png differ diff --git a/odex-event/muk_web_searchpanel/static/description/icon.svg b/odex-event/muk_web_searchpanel/static/description/icon.svg new file mode 100644 index 000000000..e9106763e --- /dev/null +++ b/odex-event/muk_web_searchpanel/static/description/icon.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 250 250" width="250" height="250"><defs><clipPath id="_clipPath_KBOvcQMajkx6u1KjE87f6Wp7zy0dKIrq"><rect width="250" height="250"/></clipPath></defs><g clip-path="url(#_clipPath_KBOvcQMajkx6u1KjE87f6Wp7zy0dKIrq)"><rect width="250" height="250" style="fill:rgb(0,0,0)" fill-opacity="0"/><defs><filter id="X8vnKaUKqkYAytrIn8Oy6z1k1pFTQEna" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feOffset xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" dx="0" dy="3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_100_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_offsetBlur" result="pf_100_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#FFFFFF" flood-opacity="0.5" result="pf_100_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_color" in2="pf_100_inverse" operator="in" result="pf_100_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_shadow" in2="SourceGraphic" operator="over" result="_out_KfogRIB1Z3caelhojJWnoaONSPxivnX7"/><feOffset xmlns="http://www.w3.org/2000/svg" in="_out_KfogRIB1Z3caelhojJWnoaONSPxivnX7" dx="0" dy="-3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_101_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="_out_KfogRIB1Z3caelhojJWnoaONSPxivnX7" in2="pf_101_offsetBlur" result="pf_101_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.5" result="pf_101_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_color" in2="pf_101_inverse" operator="in" result="pf_101_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_shadow" in2="_out_KfogRIB1Z3caelhojJWnoaONSPxivnX7" operator="over" result="_out_eBBUZkzmm3LPw5i93XsTLnBhP1IFjsIl"/><feMerge><feMergeNode in="_out_eBBUZkzmm3LPw5i93XsTLnBhP1IFjsIl"/></feMerge></filter></defs><g filter="url(#X8vnKaUKqkYAytrIn8Oy6z1k1pFTQEna)"><path d="M 15 0 L 235 0 C 243.279 0 250 6.721 250 15 L 250 235 C 250 243.279 243.279 250 235 250 L 15 250 C 6.721 250 0 243.279 0 235 L 0 15 C 0 6.721 6.721 0 15 0 Z" style="stroke:none;fill:#747474;stroke-miterlimit:10;"/></g><g filter="url(#NSA4ysqYcOG4M1ElpxVdrf63x27scAFh)"><path d=" M 108.94 196 L 198.536 196 C 202.737 196 206.143 192.594 206.143 188.393 L 206.143 163.036 C 206.143 158.834 202.737 155.429 198.536 155.429 L 108.94 155.429 C 104.739 155.429 101.333 158.834 101.333 163.036 L 101.333 188.393 C 101.333 192.594 104.739 196 108.94 196 Z " fill="rgb(255,255,255)"/><path d=" M 101.333 61.607 L 101.333 86.964 C 101.333 91.166 104.739 94.571 108.94 94.571 L 198.536 94.571 C 202.737 94.571 206.143 91.166 206.143 86.964 L 206.143 61.607 C 206.143 57.406 202.737 54 198.536 54 L 108.94 54 C 104.739 54 101.333 57.406 101.333 61.607 Z " fill="rgb(255,255,255)"/><path d=" M 81.625 54 L 52.042 54 C 47.14 54 43.167 58.614 43.167 64.306 L 43.167 185.694 C 43.167 191.386 47.14 196 52.042 196 L 81.625 196 C 86.527 196 90.5 191.386 90.5 185.694 L 90.5 64.306 C 90.5 58.614 86.527 54 81.625 54 Z " fill="rgb(255,255,255)"/><path d=" M 108.94 145.286 L 198.536 145.286 C 202.737 145.286 206.143 141.88 206.143 137.679 L 206.143 112.321 C 206.143 108.12 202.737 104.714 198.536 104.714 L 108.94 104.714 C 104.739 104.714 101.333 108.12 101.333 112.321 L 101.333 137.679 C 101.333 141.88 104.739 145.286 108.94 145.286 Z " fill="rgb(255,255,255)"/></g><defs><filter id="NSA4ysqYcOG4M1ElpxVdrf63x27scAFh" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feGaussianBlur xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" stdDeviation="2.146804531419514"/><feOffset xmlns="http://www.w3.org/2000/svg" dx="-5" dy="5" result="pf_100_offsetBlur"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.5"/><feComposite xmlns="http://www.w3.org/2000/svg" in2="pf_100_offsetBlur" operator="in" result="pf_100_dropShadow"/><feBlend xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_dropShadow" mode="normal"/></filter></defs></g></svg> \ No newline at end of file diff --git a/odex-event/muk_web_searchpanel/static/description/index.html b/odex-event/muk_web_searchpanel/static/description/index.html new file mode 100644 index 000000000..45b4ee928 --- /dev/null +++ b/odex-event/muk_web_searchpanel/static/description/index.html @@ -0,0 +1,124 @@ +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <h2 class="oe_slogan">MuK Search Panel</h2> + <h3 class="oe_slogan">Kanban Search Panel</h3> + <h4 class="oe_slogan" style="font-size: 23px;">MuK IT GmbH - + www.mukit.at</h4> + </div> +</section> + +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <div style="max-width: 84%; margin: 16px 8%;"> + <h3 class="oe_slogan">Overview</h3> + <p class="oe_mt32">With Odoo version 13 a new feature is added + which allows kanban views to be extended by a search panel. This can + be defined via XML and is then automatically added to the view. With + this module the function is ported back to version 12.</p> + </div> + </div> +</section> + +<section class="oe_container oe_dark"> + <div class="oe_row oe_spaced"> + <h3 class="oe_slogan">Our Services</h3> + <div + style="display: flex; padding-top: 20px; justify-content: space-between;"> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/MQ5" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_implementation.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Implementation + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/u7c" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_integration.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Integration + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/xDJ" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_customization.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Customization + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href=" https://mukit.at/r/J3A" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_development.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Development + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href=" https://mukit.at/r/R1v" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_support.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Support + </h3> + </a> + </div> + </div> + </div> +</section> + +<section class="oe_container" style="padding: 32px 0;"> + <div class="oe_row oe_spaced" style="margin: auto;"> + <div class="oe_demo oe_picture oe_screenshot"> + <a href="https://mukit.at/r/SgN" target="_blank"> <img + src="preview.png"> + </a> + </div> + </div> +</section> + +<section class="oe_container oe_dark"> + <h3 class="oe_slogan">Help and Support</h3> + <h5 class="oe_slogan" style="font-size: 20px;">Feel free to + contact us, if you need any help with your Odoo integration or + addiontal features.</h5> + <div class="oe_slogan"> + <a class="btn btn-primary btn-lg mt8" href="https://mukit.at" + target="_blank"> <i class="fa fa-globe"></i> Website + </a> <a class="btn btn-primary btn-lg mt8" href="mailto:sale@mukit.at"> + <i class="fa fa-envelope"></i> Contact Us + </a> <a class="btn btn-primary btn-lg mt8" + href="https://github.com/muk-it" target="_blank"> <i + class="fa fa-github"></i> Issues + </a> + </div> + <img src="logo.png" + style="width: 200px; margin-bottom: 20px; display: block;" + class="mx-auto center-block"> +</section> \ No newline at end of file diff --git a/odex-event/muk_web_searchpanel/static/description/logo.png b/odex-event/muk_web_searchpanel/static/description/logo.png new file mode 100644 index 000000000..9427ce33e Binary files /dev/null and b/odex-event/muk_web_searchpanel/static/description/logo.png differ diff --git a/odex-event/muk_web_searchpanel/static/description/preview.png b/odex-event/muk_web_searchpanel/static/description/preview.png new file mode 100644 index 000000000..1deb1ccef Binary files /dev/null and b/odex-event/muk_web_searchpanel/static/description/preview.png differ diff --git a/odex-event/muk_web_searchpanel/static/description/service_customization.png b/odex-event/muk_web_searchpanel/static/description/service_customization.png new file mode 100644 index 000000000..3eac66488 Binary files /dev/null and b/odex-event/muk_web_searchpanel/static/description/service_customization.png differ diff --git a/odex-event/muk_web_searchpanel/static/description/service_development.png b/odex-event/muk_web_searchpanel/static/description/service_development.png new file mode 100644 index 000000000..580d46046 Binary files /dev/null and b/odex-event/muk_web_searchpanel/static/description/service_development.png differ diff --git a/odex-event/muk_web_searchpanel/static/description/service_implementation.png b/odex-event/muk_web_searchpanel/static/description/service_implementation.png new file mode 100644 index 000000000..d64b66bda Binary files /dev/null and b/odex-event/muk_web_searchpanel/static/description/service_implementation.png differ diff --git a/odex-event/muk_web_searchpanel/static/description/service_integration.png b/odex-event/muk_web_searchpanel/static/description/service_integration.png new file mode 100644 index 000000000..76c5e80f4 Binary files /dev/null and b/odex-event/muk_web_searchpanel/static/description/service_integration.png differ diff --git a/odex-event/muk_web_searchpanel/static/description/service_support.png b/odex-event/muk_web_searchpanel/static/description/service_support.png new file mode 100644 index 000000000..4c530fafd Binary files /dev/null and b/odex-event/muk_web_searchpanel/static/description/service_support.png differ diff --git a/odex-event/muk_web_searchpanel/static/src/js/kanban_controller.js b/odex-event/muk_web_searchpanel/static/src/js/kanban_controller.js new file mode 100644 index 000000000..c4e9a36a7 --- /dev/null +++ b/odex-event/muk_web_searchpanel/static/src/js/kanban_controller.js @@ -0,0 +1,80 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Search Panel +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_searchpanel.KanbanController', function (require) { +"use strict"; + +var core = require('web.core'); +var session = require('web.session'); +var view_dialogs = require('web.view_dialogs'); +var viewUtils = require('web.viewUtils'); + +var Domain = require('web.Domain'); +var Context = require('web.Context'); +var KanbanController = require('web.KanbanController'); + +var _t = core._t; +var QWeb = core.qweb; + +KanbanController.include({ + custom_events: _.extend({}, KanbanController.prototype.custom_events, { + search_panel_domain_updated: '_onSearchPanelDomainUpdated', + }), + init: function (parent, model, renderer, params) { + this._super.apply(this, arguments); + this._searchPanel = params.searchPanel; + this.controlPanelDomain = params.controlPanelDomain || []; + this.searchPanelDomain = this._searchPanel ? this._searchPanel.getDomain() : []; + }, + start: function () { + if (this._searchPanel) { + this.$el.addClass('o_kanban_with_searchpanel'); + this.$el.prepend(this._searchPanel.$el); + } + return this._super.apply(this, arguments); + }, + update: function (params) { + if (!this._searchPanel) { + return this._super.apply(this, arguments); + } + var self = this; + if (params.domain) { + this.controlPanelDomain = params.domain; + } + params.noRender = true; + params.domain = this.controlPanelDomain.concat(this.searchPanelDomain); + var superProm = this._super.apply(this, arguments); + var searchPanelProm = this._updateSearchPanel(); + return $.when(superProm, searchPanelProm).then(function () { + return self.renderer.render(); + }); + }, + _updateSearchPanel: function () { + return this._searchPanel.update({searchDomain: this.controlPanelDomain}); + }, + _onSearchPanelDomainUpdated: function (ev) { + this.searchPanelDomain = ev.data.domain; + this.reload({offset: 0}); + }, +}); + +}); diff --git a/odex-event/muk_web_searchpanel/static/src/js/kanban_renderer.js b/odex-event/muk_web_searchpanel/static/src/js/kanban_renderer.js new file mode 100644 index 000000000..6e13cc6f1 --- /dev/null +++ b/odex-event/muk_web_searchpanel/static/src/js/kanban_renderer.js @@ -0,0 +1,41 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Search Panel +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_searchpanel.KanbanRenderer', function (require) { +"use strict"; + +var core = require('web.core'); +var config = require('web.config'); +var session = require('web.session'); + +var KanbanRenderer = require('web.KanbanRenderer'); + +var _t = core._t; +var QWeb = core.qweb; + +KanbanRenderer.include({ + render: function () { + return this._render(); + }, +}); + +}); diff --git a/odex-event/muk_web_searchpanel/static/src/js/kanban_searchpanel.js b/odex-event/muk_web_searchpanel/static/src/js/kanban_searchpanel.js new file mode 100644 index 000000000..95b1f78a7 --- /dev/null +++ b/odex-event/muk_web_searchpanel/static/src/js/kanban_searchpanel.js @@ -0,0 +1,650 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Search Panel +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('web.SearchPanel', function (require) { +"use strict"; + +var core = require('web.core'); +var config = require('web.config'); +var Domain = require('web.Domain'); +var Widget = require('web.Widget'); + +var qweb = core.qweb; + +var SearchPanel = Widget.extend({ + className: 'o_search_panel', + events: { + 'click .o_search_panel_category_value header': '_onCategoryValueClicked', + 'click .o_search_panel_category_value .o_toggle_fold': '_onToggleFoldCategory', + 'click .o_search_panel_filter_group .o_toggle_fold': '_onToggleFoldFilterGroup', + 'change .o_search_panel_filter_value > div > input': '_onFilterValueChanged', + 'change .o_search_panel_filter_group > div > input': '_onFilterGroupChanged', + }, + + /** + * @override + * @param {Object} params + * @param {Object} [params.defaultCategoryValues={}] the category value to + * activate by default, for each category + * @param {Object} params.fields + * @param {string} params.model + * @param {Object} params.sections + * @param {Array[]} params.searchDomain domain coming from controlPanel + */ + init: function (parent, params) { + this._super.apply(this, arguments); + + this.categories = _.pick(params.sections, function (section) { + return section.type === 'category'; + }); + this.filters = _.pick(params.sections, function (section) { + return section.type === 'filter'; + }); + + this.defaultCategoryValues = params.defaultCategoryValues || {}; + this.fields = params.fields; + this.model = params.model; + this.searchDomain = params.searchDomain; + + this.loadProm = $.Deferred(); + this.loadPromLazy = true; + }, + willStart: function () { + var self = this; + var loading = $.Deferred(); + var loadPromTimer = setTimeout(function () { + if(loading.state() !== 'resolved') { + loading.resolve(); + } + }, this.loadPromMaxTime || 1000); + this._fetchCategories().then(function () { + self._fetchFilters().then(function () { + if(loading.state() !== 'resolved') { + clearTimeout(loadPromTimer); + self.loadPromLazy = false; + loading.resolve(); + } + self.loadProm.resolve(); + }); + }); + return $.when(loading, this._super.apply(this, arguments)); + }, + start: function () { + var self = this; + if(this.loadProm.state() !== 'resolved') { + this.$el.html($("<div/>", { + 'class': "o_search_panel_loading", + 'html': "<i class='fa fa-spinner fa-pulse' />" + })); + } + this.loadProm.then(function() { + self._render(); + }); + return this._super.apply(this, arguments); + }, + + //-------------------------------------------------------------------------- + // Public + //-------------------------------------------------------------------------- + + /** + * @returns {Array[]} the current searchPanel domain based on active + * categories and checked filters + */ + getDomain: function () { + return this._getCategoryDomain().concat(this._getFilterDomain()); + }, + /** + * Reload the filters and re-render. Note that we only reload the filters if + * the controlPanel domain or searchPanel domain has changed. + * + * @param {Object} params + * @param {Array[]} params.searchDomain domain coming from controlPanel + * @returns {$.Promise} + */ + update: function (params) { + if(this.loadProm.state() === 'resolved') { + var newSearchDomainStr = JSON.stringify(params.searchDomain); + var currentSearchDomainStr = JSON.stringify(this.searchDomain); + if (this.needReload || (currentSearchDomainStr !== newSearchDomainStr)) { + this.needReload = false; + this.searchDomain = params.searchDomain; + this._fetchFilters().then(this._render.bind(this)); + } else { + this._render(); + } + } + return $.when(); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @private + * @param {string} categoryId + * @param {Object[]} values + */ + _createCategoryTree: function (categoryId, values) { + var category = this.categories[categoryId]; + var parentField = category.parentField; + + category.values = {}; + values.forEach(function (value) { + category.values[value.id] = _.extend({}, value, { + childrenIds: [], + folded: true, + parentId: value[parentField] && value[parentField][0] || false, + }); + }); + Object.keys(category.values).forEach(function (valueId) { + var value = category.values[valueId]; + if (value.parentId && category.values[value.parentId]) { + category.values[value.parentId].childrenIds.push(value.id); + } else { + value.parentId = false; + value[parentField] = false; + } + }); + category.rootIds = Object.keys(category.values).filter(function (valueId) { + var value = category.values[valueId]; + return value.parentId === false; + }); + category.activeValueId = false; + + if(!this.loadPromLazy) { + // set active value + var validValues = _.pluck(category.values, 'id').concat([false]); + // set active value from context + var value = this.defaultCategoryValues[category.fieldName]; + // if not set in context, or set to an unknown value, set active value + // from localStorage + if (!_.contains(validValues, value)) { + var storageKey = this._getLocalStorageKey(category); + value = this.call('local_storage', 'getItem', storageKey); + } + + // if not set in localStorage either, select 'All' + category.activeValueId = _.contains(validValues, value) ? value : false; + + // unfold ancestor values of active value to make it is visible + if (category.activeValueId) { + var parentValueIds = this._getAncestorValueIds(category, category.activeValueId); + parentValueIds.forEach(function (parentValue) { + category.values[parentValue].folded = false; + }); + } + } + }, + /** + * @private + * @param {string} filterId + * @param {Object[]} values + */ + _createFilterTree: function (filterId, values) { + var filter = this.filters[filterId]; + + // restore checked property + values.forEach(function (value) { + var oldValue = filter.values && filter.values[value.id]; + value.checked = oldValue && oldValue.checked || false; + }); + + filter.values = {}; + var groupIds = []; + if (filter.groupBy) { + var groups = {}; + values.forEach(function (value) { + var groupId = value.group_id; + if (!groups[groupId]) { + if (groupId) { + groupIds.push(groupId); + } + groups[groupId] = { + folded: false, + id: groupId, + name: value.group_name, + values: {}, + tooltip: value.group_tooltip, + sequence: value.group_sequence, + sortedValueIds: [], + }; + // restore former checked and folded state + var oldGroup = filter.groups && filter.groups[groupId]; + groups[groupId].state = oldGroup && oldGroup.state || false; + groups[groupId].folded = oldGroup && oldGroup.folded || false; + } + groups[groupId].values[value.id] = value; + groups[groupId].sortedValueIds.push(value.id); + }); + filter.groups = groups; + filter.sortedGroupIds = _.sortBy(groupIds, function (groupId) { + return groups[groupId].sequence || groups[groupId].name; + }); + Object.keys(filter.groups).forEach(function (groupId) { + filter.values = _.extend(filter.values, filter.groups[groupId].values); + }); + } else { + values.forEach(function (value) { + filter.values[value.id] = value; + }); + filter.sortedValueIds = values.map(function (value) { + return value.id; + }); + } + }, + /** + * Fetch values for each category. This is done only once, at startup. + * + * @private + * @returns {$.Promise} resolved when all categories have been fetched + */ + _fetchCategories: function () { + var self = this; + var defs = Object.keys(this.categories).map(function (categoryId) { + var category = self.categories[categoryId]; + var field = self.fields[category.fieldName]; + var def; + if (field.type === 'selection') { + var values = field.selection.map(function (value) { + return {id: value[0], display_name: value[1]}; + }); + def = $.when(values); + } else { + var categoryDomain = self._getCategoryDomain(); + var filterDomain = self._getFilterDomain(); + def = self._rpc({ + method: 'search_panel_select_range', + model: self.model, + args: [category.fieldName], + kwargs: { + category_domain: categoryDomain, + filter_domain: filterDomain, + search_domain: self.searchDomain, + }, + }, { + shadow: true, + }).then(function (result) { + category.parentField = result.parent_field; + return result.values; + }); + } + return def.then(function (values) { + self._createCategoryTree(categoryId, values); + }); + }); + return $.when.apply($, defs); + }, + /** + * Fetch values for each filter. This is done at startup, and at each reload + * (when the controlPanel or searchPanel domain changes). + * + * @private + * @returns {$.Promise} resolved when all filters have been fetched + */ + _fetchFilters: function () { + var self = this; + var evalContext = {}; + Object.keys(this.categories).forEach(function (categoryId) { + var category = self.categories[categoryId]; + evalContext[category.fieldName] = category.activeValueId; + }); + var categoryDomain = this._getCategoryDomain(); + var filterDomain = this._getFilterDomain(); + var defs = Object.keys(this.filters).map(function (filterId) { + var filter = self.filters[filterId]; + return self._rpc({ + method: 'search_panel_select_multi_range', + model: self.model, + args: [filter.fieldName], + kwargs: { + category_domain: categoryDomain, + comodel_domain: Domain.prototype.stringToArray(filter.domain, evalContext), + disable_counters: filter.disableCounters, + filter_domain: filterDomain, + group_by: filter.groupBy || false, + search_domain: self.searchDomain, + }, + }, { + shadow: true, + }).then(function (values) { + self._createFilterTree(filterId, values); + }); + }); + return $.when.apply($, defs); + }, + /** + * Compute and return the domain based on the current active categories. + * + * @private + * @returns {Array[]} + */ + _getCategoryDomain: function () { + var self = this; + function categoryToDomain(domain, categoryId) { + var category = self.categories[categoryId]; + if (category.activeValueId) { + domain.push([category.fieldName, '=', category.activeValueId]); + } else if(self.loadPromLazy && self.loadProm.state() !== 'resolved') { + var value = self.defaultCategoryValues[category.fieldName]; + if (value) { + domain.push([category.fieldName, '=', value]); + } + } + return domain; + } + return Object.keys(this.categories).reduce(categoryToDomain, []); + }, + /** + * Compute and return the domain based on the current checked filters. + * The values of a single filter are combined using a simple rule: checked values within + * a same group are combined with an 'OR' (this is expressed as single condition using a list) + * and groups are combined with an 'AND' (expressed by concatenation of conditions). + * If a filter has no groups, its checked values are implicitely considered as forming + * a group (and grouped using an 'OR'). + * + * @private + * @returns {Array[]} + */ + _getFilterDomain: function () { + var self = this; + function getCheckedValueIds(values) { + return Object.keys(values).reduce(function (checkedValues, valueId) { + if (values[valueId].checked) { + checkedValues.push(values[valueId].id); + } + return checkedValues; + }, []); + } + function filterToDomain(domain, filterId) { + var filter = self.filters[filterId]; + if (filter.groups) { + Object.keys(filter.groups).forEach(function (groupId) { + var group = filter.groups[groupId]; + var checkedValues = getCheckedValueIds(group.values); + if (checkedValues.length) { + domain.push([filter.fieldName, 'in', checkedValues]); + } + }); + } else if (filter.values) { + var checkedValues = getCheckedValueIds(filter.values); + if (checkedValues.length) { + domain.push([filter.fieldName, 'in', checkedValues]); + } + } + return domain; + } + return Object.keys(this.filters).reduce(filterToDomain, []); + }, + /** + * The active id of each category is stored in the localStorage, s.t. it + * can be restored afterwards (when the action is reloaded, for instance). + * This function returns the key in the sessionStorage for a given category. + * + * @param {Object} category + * @returns {string} + */ + _getLocalStorageKey: function (category) { + return 'searchpanel_' + this.model + '_' + category.fieldName; + }, + /** + * @private + * @param {Object} category + * @param {integer} categoryValueId + * @returns {integer[]} list of ids of the ancestors of the given value in + * the given category + */ + _getAncestorValueIds: function (category, categoryValueId) { + var categoryValue = category.values[categoryValueId]; + var parentId = categoryValue.parentId; + if (parentId) { + return [parentId].concat(this._getAncestorValueIds(category, parentId)); + } + return []; + }, + /** + * @private + */ + _render: function () { + var self = this; + this.$el.empty(); + + // sort categories and filters according to their index + var categories = Object.keys(this.categories).map(function (categoryId) { + return self.categories[categoryId]; + }); + var filters = Object.keys(this.filters).map(function (filterId) { + return self.filters[filterId]; + }); + var sections = categories.concat(filters).sort(function (s1, s2) { + return s1.index - s2.index; + }); + + sections.forEach(function (section) { + if (Object.keys(section.values).length) { + if (section.type === 'category') { + self.$el.append(self._renderCategory(section)); + } else { + self.$el.append(self._renderFilter(section)); + } + } + }); + }, + /** + * @private + * @param {Object} category + * @returns {string} + */ + _renderCategory: function (category) { + return qweb.render('SearchPanel.Category', {category: category}); + }, + /** + * @private + * @param {Object} filter + * @returns {jQuery} + */ + _renderFilter: function (filter) { + var $filter = $(qweb.render('SearchPanel.Filter', {filter: filter})); + + // set group inputs in indeterminate state when necessary + Object.keys(filter.groups || {}).forEach(function (groupId) { + var state = filter.groups[groupId].state; + // group 'false' is not displayed + if (groupId !== 'false' && state === 'indeterminate') { + $filter + .find('.o_search_panel_filter_group[data-group-id=' + groupId + '] input') + .get(0) + .indeterminate = true; + } + }); + + return $filter; + }, + /** + * Compute the current searchPanel domain based on categories and filters, + * and notify environment of the domain change. + * + * Note that this assumes that the environment will update the searchPanel. + * This is done as such to ensure the coordination between the reloading of + * the searchPanel and the reloading of the data. + * + * @private + */ + _notifyDomainUpdated: function () { + this.needReload = true; + this.trigger_up('search_panel_domain_updated', { + domain: this.getDomain(), + }); + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * @private + * @param {MouseEvent} ev + */ + _onCategoryValueClicked: function (ev) { + ev.stopPropagation(); + var $item = $(ev.currentTarget).closest('.o_search_panel_category_value'); + var category = this.categories[$item.data('categoryId')]; + var valueId = $item.data('id') || false; + category.activeValueId = valueId; + var storageKey = this._getLocalStorageKey(category); + this.call('local_storage', 'setItem', storageKey, valueId); + this._notifyDomainUpdated(); + }, + /** + * @private + * @param {MouseEvent} ev + */ + _onFilterGroupChanged: function (ev) { + ev.stopPropagation(); + var $item = $(ev.target).closest('.o_search_panel_filter_group'); + var filter = this.filters[$item.data('filterId')]; + var groupId = $item.data('groupId'); + var group = filter.groups[groupId]; + group.state = group.state === 'checked' ? 'unchecked' : 'checked'; + Object.keys(group.values).forEach(function (valueId) { + group.values[valueId].checked = group.state === 'checked'; + }); + this._notifyDomainUpdated(); + }, + /** + * @private + * @param {MouseEvent} ev + */ + _onFilterValueChanged: function (ev) { + ev.stopPropagation(); + var $item = $(ev.target).closest('.o_search_panel_filter_value'); + var valueId = $item.data('valueId'); + var filter = this.filters[$item.data('filterId')]; + var value = filter.values[valueId]; + value.checked = !value.checked; + var group = filter.groups && filter.groups[value.group_id]; + if (group) { + var valuePartition = _.partition(Object.keys(group.values), function (valueId) { + return group.values[valueId].checked; + }); + if (valuePartition[0].length && valuePartition[1].length) { + group.state = 'indeterminate'; + } else if (valuePartition[0].length) { + group.state = 'checked'; + } else { + group.state = 'unchecked'; + } + } + this._notifyDomainUpdated(); + }, + /** + * @private + * @param {MouseEvent} ev + */ + _onToggleFoldCategory: function (ev) { + ev.preventDefault(); + ev.stopPropagation(); + var $item = $(ev.currentTarget).closest('.o_search_panel_category_value'); + var category = this.categories[$item.data('categoryId')]; + var valueId = $item.data('id'); + category.values[valueId].folded = !category.values[valueId].folded; + this._render(); + }, + /** + * @private + * @param {MouseEvent} ev + */ + _onToggleFoldFilterGroup: function (ev) { + ev.preventDefault(); + ev.stopPropagation(); + var $item = $(ev.currentTarget).closest('.o_search_panel_filter_group'); + var filter = this.filters[$item.data('filterId')]; + var groupId = $item.data('groupId'); + filter.groups[groupId].folded = !filter.groups[groupId].folded; + this._render(); + }, +}); + +if (config.device.isMobile) { + SearchPanel.include({ + tagName: 'details', + + _getCategorySelection: function () { + var self = this; + return Object.keys(this.categories).reduce(function (selection, categoryId) { + var category = self.categories[categoryId]; + console.log('category', category); + if (category.activeValueId) { + var ancestorIds = [category.activeValueId].concat(self._getAncestorValueIds(category, category.activeValueId)); + var breadcrumb = ancestorIds.map(function (valueId) { + return category.values[valueId].display_name; + }); + selection.push({ breadcrumb: breadcrumb, icon: category.icon, color: category.color}); + } + console.log('selection', selection); + return selection; + }, []); + }, + + _getFilterSelection: function () { + var self = this; + return Object.keys(this.filters).reduce(function (selection, filterId) { + var filter = self.filters[filterId]; + console.log('filter', filter); + if (filter.groups) { + Object.keys(filter.groups).forEach(function (groupId) { + var group = filter.groups[groupId]; + Object.keys(group.values).forEach(function (valueId) { + var value = group.values[valueId]; + if (value.checked) { + selection.push({name: value.name, icon: filter.icon, color: filter.color}); + } + }); + }); + } else if (filter.values) { + Object.keys(filter.values).forEach(function (valueId) { + var value = filter.values[valueId]; + if (value.checked) { + selection.push({name: value.name, icon: filter.icon, color: filter.color}); + } + }); + } + console.log('selection', selection); + return selection; + }, []); + }, + + _render: function () { + this._super.apply(this, arguments); + this.$el.prepend(qweb.render('SearchPanel.MobileSummary', { + categories: this._getCategorySelection(), + filterValues: this._getFilterSelection(), + separator: ' / ', + })); + }, + }); +} + +return SearchPanel; + +}); \ No newline at end of file diff --git a/odex-event/muk_web_searchpanel/static/src/js/kanban_view.js b/odex-event/muk_web_searchpanel/static/src/js/kanban_view.js new file mode 100644 index 000000000..17705c612 --- /dev/null +++ b/odex-event/muk_web_searchpanel/static/src/js/kanban_view.js @@ -0,0 +1,133 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Search Panel +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_searchpanel.KanbanView', function (require) { +"use strict"; + +var core = require('web.core'); +var config = require('web.config'); +var pyUtils = require('web.py_utils'); +var utils = require('web.utils'); + +var KanbanView = require('web.KanbanView'); +var SearchPanel = require('web.SearchPanel'); + +var _t = core._t; +var QWeb = core.qweb; + +KanbanView.include({ + config: _.extend({}, KanbanView.prototype.config, { + SearchPanel: SearchPanel, + }), + init: function (viewInfo, params) { + this.searchPanelSections = Object.create(null); + this._super.apply(this, arguments); + this.hasSearchPanel = !_.isEmpty(this.searchPanelSections); + + }, + getController: function (parent) { + var self = this; + var def = undefined; + if (this.hasSearchPanel) { + def = this._createSearchPanel(parent); + } + var _super = this._super.bind(this); + return $.when(def).then(function (searchPanel) { + return _super(parent).done(function (controller) { + if (self.hasSearchPanel) { + self.controllerParams.searchPanel.setParent(controller); + } + return controller + }); + }); + }, + _createSearchPanel: function (parent) { + var self = this; + var defaultCategoryValues = {}; + Object.keys(this.loadParams.context).forEach(function (key) { + var match = /^searchpanel_default_(.*)$/.exec(key); + if (match) { + defaultCategoryValues[match[1]] = self.loadParams.context[key]; + } + }); + var controlPanelDomain = this.loadParams.domain; + var searchPanel = new this.config.SearchPanel(parent, { + defaultCategoryValues: defaultCategoryValues, + fields: this.fields, + model: this.loadParams.modelName, + searchDomain: controlPanelDomain, + sections: this.searchPanelSections, + }); + this.controllerParams.searchPanel = searchPanel; + this.controllerParams.controlPanelDomain = controlPanelDomain; + return searchPanel.appendTo(document.createDocumentFragment()).then(function () { + var searchPanelDomain = searchPanel.getDomain(); + self.loadParams.domain = controlPanelDomain.concat(searchPanelDomain); + }); + }, + _processNode: function (node, fv) { + if (node.tag === 'searchpanel') { +// if (!config.device.isMobile) { +// this._processSearchPanelNode(node, fv); +// } + this._processSearchPanelNode(node, fv); + return false; + } + return this._super.apply(this, arguments); + }, + _processSearchPanelNode: function (node, fv) { + var self = this; + node.children.forEach(function (childNode, index) { + if (childNode.tag !== 'field') { + return; + } + if (childNode.attrs.invisible === "1") { + return; + } + var fieldName = childNode.attrs.name; + var type = childNode.attrs.select === 'multi' ? 'filter' : 'category'; + + var sectionId = _.uniqueId('section_'); + var section = { + color: childNode.attrs.color, + description: childNode.attrs.string || fv.fields[fieldName].string, + fieldName: fieldName, + icon: childNode.attrs.icon, + id: sectionId, + index: index, + type: type, + }; + if (section.type === 'category') { + section.icon = section.icon || 'fa-folder'; + } else if (section.type === 'filter') { + section.disableCounters = !!pyUtils.py_eval(childNode.attrs.disable_counters || '0'); + section.domain = childNode.attrs.domain || '[]'; + section.groupBy = childNode.attrs.groupby; + section.icon = section.icon || 'fa-filter'; + } + self.searchPanelSections[sectionId] = section; + }); + }, +}); + + +}); diff --git a/odex-event/muk_web_searchpanel/static/src/scss/kanban_view.scss b/odex-event/muk_web_searchpanel/static/src/scss/kanban_view.scss new file mode 100644 index 000000000..6c2495a90 --- /dev/null +++ b/odex-event/muk_web_searchpanel/static/src/scss/kanban_view.scss @@ -0,0 +1,173 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Search Panel +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.o_kanban_with_searchpanel { + display: flex; + flex-flow: row wrap; + align-items: flex-start; + + .o_onboarding_container { + flex: 1 1 100%; + } + .o_kanban_view { + flex: 1 1 calc(100% - #{$o-searchpanel-w}); + overflow: auto; + max-height: 100%; + } + .o_search_panel { + flex: 0 0 $o-searchpanel-w; + overflow: auto; + height: 100%; + padding: $o-searchpanel-p-small $o-searchpanel-p-small $o-searchpanel-p*2 $o-searchpanel-p; + border-right: 1px solid $gray-300; + background-color: white; + position: relative; + + .o_search_panel_loading { + position: absolute; + margin-top: -30px; + margin-left: -30px; + margin-bottom: 0; + margin-right: 0; + font-size: 60px; + height: 60px; + width: 60px; + left: 50%; + top: 50%; + } + + .o_search_panel_category .o_search_panel_section_icon { + color: $o-searchpanel-category-default-color; + } + .o_search_panel_filter .o_search_panel_section_icon { + color: $o-searchpanel-filter-default-color; + } + + .o_search_panel_label { + cursor: pointer; + user-select: none; + + .o_toggle_fold { + padding: 3px; + } + } + .o_search_panel_section_header { + padding: $o-searchpanel-p-small 0; + } + .list-group-item { + padding: 0 0 $o-searchpanel-p-small 0; + + .list-group-item { + padding: 0 0 0 $custom-control-gutter; + margin-bottom: $o-searchpanel-p-tiny*0.5; + &:first-child { + margin-top: $o-searchpanel-p-tiny*0.5; + } + } + span.o_search_panel_label_title { + color: $headings-color; + @include o-text-overflow(inline-block, calc(100% - 22px)); + } + header.active { + background-color: $list-group-action-active-bg; + } + } + .o_search_panel_category_value { + header { + margin-left: -$o-searchpanel-p-tiny; + padding-left: $o-searchpanel-p-tiny; + } + .o_search_panel_category_value { + position: relative; + padding-left: $o-searchpanel-p; + padding-bottom: $o-searchpanel-p-tiny; + margin-bottom: 0; + + &:before, &:after { + @include o-position-absolute(0, $left: $o-searchpanel-p-tiny) + @include size(1px, 100%); + background: $gray-500; + content: ''; + } + &:after { + top: 10px; + @include size(8px, 1px); + } + &:last-child { + &:before { + height: 11px; + } + &:after { + top: 11px; + } + } + } + } + } +} + +@include media-breakpoint-down(sm) { + .o_kanban_with_searchpanel { + flex-direction: column; + + .o_onboarding_container { + display: none; + } + + details.o_search_panel { + flex-basis: auto; + height: auto; + width: 100%; + padding: 0; + + > summary { + padding: $o-searchpanel-p-small; + // Hide the caret. For details see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary + list-style-type: none; + &::-webkit-details-marker { + display: none + } + + .badge { + font-size: 100%; + background-color: white; + } + } + + > .o_search_panel_section { + margin: 0 $o-searchpanel-p-small 0 $o-searchpanel-p; + } + + &[open] { + z-index: $zindex-dropdown; + + > summary { + background-color: $list-group-action-active-bg; + } + + .fa-chevron-left:before { + content: "\f078"; + } + } + } + } +} \ No newline at end of file diff --git a/odex-event/muk_web_searchpanel/static/src/scss/variables.scss b/odex-event/muk_web_searchpanel/static/src/scss/variables.scss new file mode 100644 index 000000000..c4d2259a6 --- /dev/null +++ b/odex-event/muk_web_searchpanel/static/src/scss/variables.scss @@ -0,0 +1,30 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Search Panel +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +$o-searchpanel-w: 220px; + +$o-searchpanel-p: $o-horizontal-padding; +$o-searchpanel-p-small: $o-horizontal-padding*0.5; +$o-searchpanel-p-tiny: $o-searchpanel-p-small*0.5; + +$o-searchpanel-category-default-color: $o-brand-primary; +$o-searchpanel-filter-default-color: $o-brand-odoo; \ No newline at end of file diff --git a/odex-event/muk_web_searchpanel/static/src/xml/kanban.xml b/odex-event/muk_web_searchpanel/static/src/xml/kanban.xml new file mode 100644 index 000000000..6dd8110ce --- /dev/null +++ b/odex-event/muk_web_searchpanel/static/src/xml/kanban.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Search Panel + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<templates id="template" xml:space="preserve"> + +<t t-name="SearchPanel.SectionHeader"> + <header class="o_search_panel_section_header text-uppercase"> + <i t-attf-class="mr-1 fa #{section.icon} o_search_panel_section_icon" t-attf-style="#{section.color ? ('color: ' + section.color) : ''}"/> + <b><t t-esc="section.description"/></b> + </header> +</t> + +<t t-name="SearchPanel.Category"> + <section class="o_search_panel_section o_search_panel_category"> + <t t-call="SearchPanel.SectionHeader"> + <t t-set="section" t-value="category"/> + </t> + <ul class="list-group d-block"> + <li class="o_search_panel_category_value border-0 list-group-item" t-att-data-category-id="category.id"> + <header t-att-class="'list-group-item-action' + (!category.activeValueId ? ' active' : '')"> + <label class="o_search_panel_label mb0 d-block"> + <span class="o_search_panel_label_title"><b>All</b></span> + </label> + </header> + </li> + <t t-call="SearchPanel.CategoryValues"> + <t t-set="values" t-value="category.rootIds"/> + </t> + </ul> + </section> +</t> +<t t-name="SearchPanel.CategoryValues"> + <t t-foreach="values" t-as="valueId"> + <t t-set="value" t-value="category.values[valueId]"/> + <li class="o_search_panel_category_value border-0 list-group-item" t-att-data-id="value.id" t-att-data-category-id="category.id"> + <header t-att-class="'list-group-item-action' + (value.id === category.activeValueId ? ' active' : '')"> + <label t-att-for="value.display_name" class="o_search_panel_label mb0 d-block"> + <i t-if="value.childrenIds.length" t-att-class="'fa fa-fw pull-right o_toggle_fold ' + (value.folded ? 'fa-caret-left' : 'fa-caret-down')"/> + <span class="o_search_panel_label_title"><t t-esc="value.display_name"/></span> + </label> + </header> + <ul t-if="!value.folded" class="list-group d-block"> + <t t-call="SearchPanel.CategoryValues"> + <t t-set="values" t-value="value.childrenIds"/> + </t> + </ul> + </li> + </t> +</t> + +<t t-name="SearchPanel.Filter"> + <section class="o_search_panel_section o_search_panel_filter"> + <t t-call="SearchPanel.SectionHeader"> + <t t-set="section" t-value="filter"/> + </t> + <ul class="list-group d-block"> + <t t-if="filter.groups" t-call="SearchPanel.FilterGroups"> + <t t-set="groups" t-value="filter.groups"/> + </t> + <t t-else="" t-call="SearchPanel.FilterValues"> + <t t-set="sortedValueIds" t-value="filter.sortedValueIds"/> + <t t-set="values" t-value="filter.values"/> + </t> + </ul> + </section> +</t> +<t t-name="SearchPanel.FilterGroups"> + <li t-foreach="filter.sortedGroupIds" t-as="groupId" t-att-data-group-id="groupId" t-att-data-filter-id="filter.id" + class="o_search_panel_filter_group list-group-item border-0"> + <t t-set="group" t-value="groups[groupId]"/> + <div class="custom-control custom-checkbox"> + <t t-set="inputId" t-value="_.uniqueId('input_')"/> + <input type="checkbox" t-att-id="inputId" t-att-checked="group.state === 'checked' ? 'checked' : undefined" class="custom-control-input"/> + <label t-att-for="inputId" class="o_search_panel_label custom-control-label d-block" t-att-title="group.tooltip"> + <i t-att-class="'fa fa-fw pull-right o_toggle_fold ' + (group.folded ? 'fa-caret-left' : 'fa-caret-down')"/> + <span class="o_search_panel_label_title"><t t-esc="group.name"/></span> + </label> + </div> + <ul t-if="!group.folded" class="list-group d-block"> + <t t-call="SearchPanel.FilterValues"> + <t t-set="sortedValueIds" t-value="group.sortedValueIds"/> + <t t-set="values" t-value="group.values"/> + </t> + </ul> + </li> + <ul t-if="groups['false']" class="list-group d-block"> + <t t-call="SearchPanel.FilterValues"> + <t t-set="group" t-value="groups['false']"/> + <t t-set="sortedValueIds" t-value="group.sortedValueIds"/> + <t t-set="values" t-value="group.values"/> + </t> + </ul> +</t> +<t t-name="SearchPanel.FilterValues"> + <li t-foreach="sortedValueIds" t-as="valueId" t-att-data-value-id="valueId" t-att-data-filter-id="filter.id" + class="o_search_panel_filter_value list-group-item border-0"> + <t t-set="value" t-value="values[valueId]"/> + <div class="custom-control custom-checkbox"> + <t t-set="inputId" t-value="_.uniqueId('input_')"/> + <input type="checkbox" t-att-id="inputId" t-att-checked="value.checked ? 'checked' : undefined" class="custom-control-input"/> + <label t-att-for="inputId" class="o_search_panel_label custom-control-label d-block" t-att-title="group && group.tooltip"> + <span class="o_search_panel_label_title"><t t-esc="value.name"/></span> + <span t-if="value.count > 0" class="pull-right text-muted mr-2 mt-1 small"><t t-esc="value.count"/></span> + <span t-if="filter.disableCounters" class="pull-right text-muted mr-2 mt-1 small">?</span> + </label> + </div> + </li> +</t> + +<t t-name="SearchPanel.MobileSummary"> + <t t-set="emptySelection" t-value="!categories.length & !filterValues.length"/> + <summary class="d-flex align-items-center"> + <div class="text-truncate font-italic ml-2 mr-auto"> + <t t-if="emptySelection">Filters...</t> + <span t-foreach="categories" t-as="category" class="o_search_panel_category mr-1"> + <i t-if="category.icon" t-attf-class="o_search_panel_section_icon fa fa-w #{category.icon}" t-attf-style="#{category.color ? ('color: ' + category.color) : undefined}"/> + <t t-esc="category.breadcrumb.join(separator)"/> + </span> + <span t-foreach="filterValues" t-as="filterValue" class="o_search_panel_filter mr-1"> + <i t-if="filterValue.icon" t-attf-class="o_search_panel_section_icon fa fa-w #{filterValue.icon}" t-attf-style="#{filterValue.color ? ('color: ' + filterValue.color) : undefined}"/> + <t t-esc="filterValue.name"/> + </span> + </div> + <i class="fa fa-fw fa-chevron-left"/> + </summary> +</t> + +</templates> \ No newline at end of file diff --git a/odex-event/muk_web_searchpanel/template/assets.xml b/odex-event/muk_web_searchpanel/template/assets.xml new file mode 100644 index 000000000..255e47971 --- /dev/null +++ b/odex-event/muk_web_searchpanel/template/assets.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Search Panel + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + + <template id="assets_backend" name="Backend Assets" inherit_id="web.assets_backend"> + <xpath expr="//link[last()]" position="after"> + <link rel="stylesheet" type="text/css" href="/muk_web_searchpanel/static/src/scss/variables.scss" /> + <link rel="stylesheet" type="text/css" href="/muk_web_searchpanel/static/src/scss/kanban_view.scss" /> + </xpath> + <xpath expr="//script[last()]" position="after"> + <script type="text/javascript" src="/muk_web_searchpanel/static/src/js/kanban_searchpanel.js" /> + <script type="text/javascript" src="/muk_web_searchpanel/static/src/js/kanban_controller.js" /> + <script type="text/javascript" src="/muk_web_searchpanel/static/src/js/kanban_renderer.js" /> + <script type="text/javascript" src="/muk_web_searchpanel/static/src/js/kanban_view.js" /> + </xpath> + </template> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_web_utils/LICENSE b/odex-event/muk_web_utils/LICENSE new file mode 100644 index 000000000..153d416dc --- /dev/null +++ b/odex-event/muk_web_utils/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/odex-event/muk_web_utils/README.rst b/odex-event/muk_web_utils/README.rst new file mode 100644 index 000000000..1d9ac5771 --- /dev/null +++ b/odex-event/muk_web_utils/README.rst @@ -0,0 +1,113 @@ +============= +MuK Web Utils +============= + +Technical module to provide some utility features and libraries that can be used +in other applications. This module has no direct effect on the running system. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI <https://pypi.org/project/pip/>`_). + +To install our modules using the package manager make sure +`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo<version>-addon-<module_name>`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_ +and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +No additional configuration is needed to use this module. + +Usage +============= + +This module has no direct visible effect on the system. It provide utility features. + +Credits +======= + +Contributors +------------ + +* Mathias Markl <mathias.markl@mukit.at> + +Images +------------ + +Some pictures are based on or inspired by the icon set of Font Awesome: + +* `Font Awesome <https://fontawesome.com>`_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_web_utils/__init__.py b/odex-event/muk_web_utils/__init__.py new file mode 100644 index 000000000..bbab24ae8 --- /dev/null +++ b/odex-event/muk_web_utils/__init__.py @@ -0,0 +1,24 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Web Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import models +from . import controllers \ No newline at end of file diff --git a/odex-event/muk_web_utils/__manifest__.py b/odex-event/muk_web_utils/__manifest__.py new file mode 100644 index 000000000..54149357e --- /dev/null +++ b/odex-event/muk_web_utils/__manifest__.py @@ -0,0 +1,57 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Web Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +{ + "name": "MuK Web Utils", + "summary": """Utility Features""", + "version": "12.0.3.0.5", + "category": "Extra Tools", + "license": "LGPL-3", + "author": "MuK IT", + "website": "http://www.mukit.at", + 'live_test_url': 'https://mukit.at/r/SgN', + "contributors": [ + "Mathias Markl <mathias.markl@mukit.at>", + ], + "depends": [ + "web_editor", + "muk_autovacuum", + ], + "data": [ + "template/assets.xml", + "views/res_config_settings_view.xml", + "data/autovacuum.xml", + ], + "qweb": [ + "static/src/xml/*.xml", + ], + "images": [ + 'static/description/banner.png' + ], + "external_dependencies": { + "python": [], + "bin": [], + }, + "application": False, + "installable": True, + 'auto_install': False, +} diff --git a/odex-event/muk_web_utils/controllers/__init__.py b/odex-event/muk_web_utils/controllers/__init__.py new file mode 100644 index 000000000..5caf3fa18 --- /dev/null +++ b/odex-event/muk_web_utils/controllers/__init__.py @@ -0,0 +1,24 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Web Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import backend +from . import attachment diff --git a/odex-event/muk_web_utils/controllers/attachment.py b/odex-event/muk_web_utils/controllers/attachment.py new file mode 100644 index 000000000..e951353da --- /dev/null +++ b/odex-event/muk_web_utils/controllers/attachment.py @@ -0,0 +1,56 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Web Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import json +import base64 +import logging + +from odoo import http +from odoo.http import request +from odoo.tools.misc import str2bool + +_logger = logging.getLogger(__name__) + +class AttachmentController(http.Controller): + + @http.route('/utils/attachment/add', type='http', auth="user", methods=['POST']) + def add_attachment(self, ufile, temporary=False, **kw): + tmp = temporary and str2bool(temporary) or False + name = "Access Attachment: %s" % ufile.filename + attachment = request.env['ir.attachment'].create({ + 'name': tmp and "%s (Temporary)" % name or name, + 'datas': base64.b64encode(ufile.read()), + 'datas_fname': ufile.filename, + 'type': 'binary', + 'public': False, + 'temporary': tmp, + }) + attachment.generate_access_token() + if ufile.mimetype and ufile.mimetype != 'application/octet-stream': + attachment.sudo().write({ + 'mimetype': ufile.mimetype, + }) + base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url') + result = attachment.read(['name', 'datas_fname', 'mimetype', 'checksum', 'access_token'])[0] + result['url'] = '%s/web/content/%s?access_token=%s' % (base_url, attachment.id, attachment.access_token) + return json.dumps(result) + \ No newline at end of file diff --git a/odex-event/muk_web_utils/controllers/backend.py b/odex-event/muk_web_utils/controllers/backend.py new file mode 100644 index 000000000..80a9fec70 --- /dev/null +++ b/odex-event/muk_web_utils/controllers/backend.py @@ -0,0 +1,37 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Web Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import logging + +from odoo import http +from odoo.http import request + +_logger = logging.getLogger(__name__) + +class BackendController(http.Controller): + + @http.route('/config/muk_web_utils.binary_max_size', type='json', auth="user") + def max_upload_size(self, **kw): + params = request.env['ir.config_parameter'].sudo() + return { + 'max_upload_size': int(params.get_param('muk_web_utils.binary_max_size', default=25)) + } \ No newline at end of file diff --git a/odex-event/muk_web_utils/data/autovacuum.xml b/odex-event/muk_web_utils/data/autovacuum.xml new file mode 100644 index 000000000..c3c3f2289 --- /dev/null +++ b/odex-event/muk_web_utils/data/autovacuum.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Web Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo noupdate="1"> + + <record id="autovacuum_temporary_attachments" model="muk_autovacuum.rules"> + <field name="name">Delete temporary Attachments</field> + <field name="model" ref="base.model_ir_attachment"/> + <field name="active" eval="True" /> + <field name="state">domain</field> + <field name="domain">[('temporary','=',True), ('create_date', '<=', (datetime.datetime.utcnow() - datetime.timedelta(hours=24)).strftime('%Y-%m-%d %H:%M:%S'))]</field> + <field name="protect_starred" eval="False" /> + </record> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_web_utils/doc/changelog.rst b/odex-event/muk_web_utils/doc/changelog.rst new file mode 100644 index 000000000..faf2ed65a --- /dev/null +++ b/odex-event/muk_web_utils/doc/changelog.rst @@ -0,0 +1,54 @@ +`2.9.0` +------- + +- Temporary attachments + +`2.8.0` +------- + +- Added path field widgets + +`2.7.0` +------- + +- Added color index field widget + +`2.6.0` +------- + +- Moved editor features to separate module + +`2.5.0` +------- + +- Added color field widget + +`2.4.0` +------- + +- Added widget to share binary fields + +`2.3.0` +------- + +- Added custom colors to snippet options + +`2.2.0` +------- + +- Added widget to share text fields + +`2.1.0` +------- + +- Automatic labels on settings + +`2.0.0` +------- + +- Migrated to Python 3 + +`1.0.0` +------- + +- Init version diff --git a/odex-event/muk_web_utils/doc/index.rst b/odex-event/muk_web_utils/doc/index.rst new file mode 100644 index 000000000..1d9ac5771 --- /dev/null +++ b/odex-event/muk_web_utils/doc/index.rst @@ -0,0 +1,113 @@ +============= +MuK Web Utils +============= + +Technical module to provide some utility features and libraries that can be used +in other applications. This module has no direct effect on the running system. + +Installation +============ + +To install this module, you need to: + +Download the module and add it to your Odoo addons folder. Afterward, log on to +your Odoo server and go to the Apps menu. Trigger the debug mode and update the +list by clicking on the "Update Apps List" link. Now install the module by +clicking on the install button. + +Another way to install this module is via the package management for Python +(`PyPI <https://pypi.org/project/pip/>`_). + +To install our modules using the package manager make sure +`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed +correctly. Then open a console and install the module by entering the following +command: + +``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +The module name consists of the Odoo version and the module name, where +underscores are replaced by a dash. + +**Module:** + +``odoo<version>-addon-<module_name>`` + +**Example:** + +``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils`` + +Once the installation has been successfully completed, the app is already in the +correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the +debug mode and update the list by clicking on the "Update Apps List" link. Now +install the module by clicking on the install button. + +The biggest advantage of this variant is that you can now also update the app +using the "pip" command. To do this, enter the following command in your console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo. The steps are the same as for the installation only the button has changed +from "Install" to "Upgrade". + +You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_ +and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_. + +For modules licensed under OPL-1, you will receive access data when you purchase +the module. If the modules were not purchased directly from +`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at) +with a confirmation of purchase to receive the corresponding access data. + +Upgrade +============ + +To upgrade this module, you need to: + +Download the module and add it to your Odoo addons folder. Restart the server +and log on to your Odoo server. Select the Apps menu and upgrade the module by +clicking on the upgrade button. + +If you installed the module using the "pip" command, you can also update the +module in the same way. Just type the following command into the console: + +``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` + +When the process is finished, restart your server and update the application in +Odoo, just like you would normally. + +Configuration +============= + +No additional configuration is needed to use this module. + +Usage +============= + +This module has no direct visible effect on the system. It provide utility features. + +Credits +======= + +Contributors +------------ + +* Mathias Markl <mathias.markl@mukit.at> + +Images +------------ + +Some pictures are based on or inspired by the icon set of Font Awesome: + +* `Font Awesome <https://fontawesome.com>`_ + +Author & Maintainer +------------------- + +This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_. + +MuK IT is an Austrian company specialized in customizing and extending Odoo. +We develop custom solutions for your individual needs to help you focus on +your strength and expertise to grow your business. + +If you want to get in touch please contact us via mail +(sale@mukit.at) or visit our website (https://mukit.at). diff --git a/odex-event/muk_web_utils/i18n/de.po b/odex-event/muk_web_utils/i18n/de.po new file mode 100644 index 000000000..9b8953280 --- /dev/null +++ b/odex-event/muk_web_utils/i18n/de.po @@ -0,0 +1,340 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_web_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190128\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-02-27 09:28+0000\n" +"PO-Revision-Date: 2019-06-27 08:23+0000\n" +"Last-Translator: MuK IT <admin@mukit.at>\n" +"Language-Team: German <http://weblate.mukit.at/projects/web-12/muk_web_utils/" +"de/>\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.7\n" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/color.js:113 +#, python-format +msgid "'%s' is not a correct color index (0-12)" +msgstr "%s' ist kein korrekter Farbindex (0-12)." + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/color.js:68 +#, python-format +msgid "'%s' is not a correct color value" +msgstr "%s' ist kein korrekter Farbwert." + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:175 +#, python-format +msgid "<%= name %> shared a file!" +msgstr "<%= name %> teilte eine Datei!" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:115 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:144 +#, python-format +msgid "<%= name %> shared a message!" +msgstr "<%= name %> teilte eine Nachricht!" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:116 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:145 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:176 +#, python-format +msgid "<%= value %>" +msgstr "<%= Wert %>" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dialog.js:51 +#: code:addons/muk_web_utils/static/src/js/fields/module.js:50 +#, python-format +msgid "Cancel" +msgstr "Abbrechen" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/module.xml:30 +#, python-format +msgid "Click on the download button to be redirected to the store and download the corresponding module." +msgstr "" +"Klicken Sie auf den Download-Button, um in den Shop weitergeleitet zu werden " +"und das entsprechende Modul herunterzuladen." + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:46 +#, python-format +msgid "Color 0" +msgstr "Farbe 0" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:47 +#, python-format +msgid "Color 1" +msgstr "Farbe 1" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:56 +#, python-format +msgid "Color 10" +msgstr "Farbe 10" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:57 +#, python-format +msgid "Color 11" +msgstr "Farbe 11" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:48 +#, python-format +msgid "Color 2" +msgstr "Farbe 2" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:49 +#, python-format +msgid "Color 3" +msgstr "Farbe 3" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:50 +#, python-format +msgid "Color 4" +msgstr "Farbe 4" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:51 +#, python-format +msgid "Color 5" +msgstr "Farbe 5" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:52 +#, python-format +msgid "Color 6" +msgstr "Farbe 6" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:53 +#, python-format +msgid "Color 7" +msgstr "Farbe 7" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:54 +#, python-format +msgid "Color 8" +msgstr "Farbe 8" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:55 +#, python-format +msgid "Color 9" +msgstr "Farbe 9" + +#. module: muk_web_utils +#: model:ir.model,name:muk_web_utils.model_res_config_settings +msgid "Config Settings" +msgstr "Konfiguration " + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:45 +#: code:addons/muk_web_utils/static/src/xml/share.xml:97 +#, python-format +msgid "Download" +msgstr "Herunterladen" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dropzone.js:108 +#, python-format +msgid "Drop files here to upload!" +msgstr "Lassen Sie Dateien hier zum Hochladen fallen!" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:45 +#, python-format +msgid "External" +msgstr "Extern" + +#. module: muk_web_utils +#: model:ir.model.fields,field_description:muk_web_utils.field_res_config_settings__binary_max_size +msgid "File Size Limit" +msgstr "Dateigrößenbegrenzung" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:35 +#, python-format +msgid "Internal" +msgstr "Intern" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/copy.js:107 +#, python-format +msgid "Link Copied!" +msgstr "Link kopiert!" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:48 +#, python-format +msgid "Mail" +msgstr "Mail" + +#. module: muk_web_utils +#: model_terms:ir.ui.view,arch_db:muk_web_utils.res_config_settings_view_form +msgid "Maximum allowed file size in MB" +msgstr "Maximal zulässige Dateigröße in MB" + +#. module: muk_web_utils +#: model:ir.model.fields,help:muk_web_utils.field_res_config_settings__binary_max_size +msgid "Maximum allowed file size in megabytes. Note that this setting only adjusts\n" +" the binary widgets accordingly. The maximum file size on your server can probably\n" +" be restricted in several places. Note that a large file size limit and therefore\n" +" large files in your system can significantly limit performance." +msgstr "" +"Maximal zulässige Dateigröße in Megabyte. Beachten Sie, dass diese " +"Einstellung nur angepasst wird._x000D_\n" +" die binären Widgets entsprechend. Die maximale Dateigröße auf " +"Ihrem Server kann wahrscheinlich_x000D_\n" +" an mehreren Stellen eingeschränkt sein. Beachten Sie, dass eine " +"große Dateigröße und damit eine große Dateigröße begrenzt ist._x000D_\n" +" können große Dateien in Ihrem System die Leistung erheblich " +"einschränken." + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:38 +#, python-format +msgid "Message" +msgstr "Nachricht" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:59 +#: code:addons/muk_web_utils/static/src/xml/module.xml:26 +#, python-format +msgid "Missing Module" +msgstr "Fehlende Module" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:42 +#, python-format +msgid "Note" +msgstr "Hinweis" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:83 +#, python-format +msgid "Open" +msgstr "Offen" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dialog.js:45 +#, python-format +msgid "Save" +msgstr "Speichern" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:52 +#, python-format +msgid "Send" +msgstr "Senden" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:27 +#, python-format +msgid "Share" +msgstr "Teilen" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:74 +#, python-format +msgid "Store" +msgstr "Laden" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/copy.js:35 +#, python-format +msgid "The field '%s' must be a binary field with an set attachment flag for the share widget to work." +msgstr "" +"Das Feld'%s' muss ein Binärfeld mit einem gesetzten Attachment-Flag sein, " +"damit das Share-Widget funktioniert." + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/module.xml:29 +#, python-format +msgid "The module could not be found on the server." +msgstr "Das Modul konnte auf dem Server nicht gefunden werden." + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/async.js:46 +#, python-format +msgid "Upload" +msgstr "Hochladen" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/async.js:47 +#, python-format +msgid "Uploading..." +msgstr "Hochladen....." + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:95 +#, python-format +msgid "shared a file with you!" +msgstr "hat eine Datei mit dir geteilt!" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:81 +#, python-format +msgid "shared a link with you!" +msgstr "einen Link mit dir geteilt!" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:87 +#, python-format +msgid "shared a message with you!" +msgstr "hat eine Nachricht mit dir geteilt!" diff --git a/odex-event/muk_web_utils/i18n/es.po b/odex-event/muk_web_utils/i18n/es.po new file mode 100644 index 000000000..72ab6d390 --- /dev/null +++ b/odex-event/muk_web_utils/i18n/es.po @@ -0,0 +1,326 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_web_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190128\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-02-27 09:28+0000\n" +"PO-Revision-Date: 2019-02-27 09:28+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/color.js:113 +#, python-format +msgid "'%s' is not a correct color index (0-12)" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/color.js:68 +#, python-format +msgid "'%s' is not a correct color value" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:175 +#, python-format +msgid "<%= name %> shared a file!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:115 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:144 +#, python-format +msgid "<%= name %> shared a message!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:116 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:145 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:176 +#, python-format +msgid "<%= value %>" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dialog.js:51 +#: code:addons/muk_web_utils/static/src/js/fields/module.js:50 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/module.xml:30 +#, python-format +msgid "Click on the download button to be redirected to the store and download the corresponding module." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:46 +#, python-format +msgid "Color 0" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:47 +#, python-format +msgid "Color 1" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:56 +#, python-format +msgid "Color 10" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:57 +#, python-format +msgid "Color 11" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:48 +#, python-format +msgid "Color 2" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:49 +#, python-format +msgid "Color 3" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:50 +#, python-format +msgid "Color 4" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:51 +#, python-format +msgid "Color 5" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:52 +#, python-format +msgid "Color 6" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:53 +#, python-format +msgid "Color 7" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:54 +#, python-format +msgid "Color 8" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:55 +#, python-format +msgid "Color 9" +msgstr "" + +#. module: muk_web_utils +#: model:ir.model,name:muk_web_utils.model_res_config_settings +msgid "Config Settings" +msgstr "Opciones de Configuración" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:45 +#: code:addons/muk_web_utils/static/src/xml/share.xml:97 +#, python-format +msgid "Download" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dropzone.js:108 +#, python-format +msgid "Drop files here to upload!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:45 +#, python-format +msgid "External" +msgstr "" + +#. module: muk_web_utils +#: model:ir.model.fields,field_description:muk_web_utils.field_res_config_settings__binary_max_size +msgid "File Size Limit" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:35 +#, python-format +msgid "Internal" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/copy.js:107 +#, python-format +msgid "Link Copied!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:48 +#, python-format +msgid "Mail" +msgstr "" + +#. module: muk_web_utils +#: model_terms:ir.ui.view,arch_db:muk_web_utils.res_config_settings_view_form +msgid "Maximum allowed file size in MB" +msgstr "" + +#. module: muk_web_utils +#: model:ir.model.fields,help:muk_web_utils.field_res_config_settings__binary_max_size +msgid "Maximum allowed file size in megabytes. Note that this setting only adjusts\n" +" the binary widgets accordingly. The maximum file size on your server can probably\n" +" be restricted in several places. Note that a large file size limit and therefore\n" +" large files in your system can significantly limit performance." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:38 +#, python-format +msgid "Message" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:59 +#: code:addons/muk_web_utils/static/src/xml/module.xml:26 +#, python-format +msgid "Missing Module" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:42 +#, python-format +msgid "Note" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:83 +#, python-format +msgid "Open" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dialog.js:45 +#, python-format +msgid "Save" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:52 +#, python-format +msgid "Send" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:27 +#, python-format +msgid "Share" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:74 +#, python-format +msgid "Store" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/copy.js:35 +#, python-format +msgid "The field '%s' must be a binary field with an set attachment flag for the share widget to work." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/module.xml:29 +#, python-format +msgid "The module could not be found on the server." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/async.js:46 +#, python-format +msgid "Upload" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/async.js:47 +#, python-format +msgid "Uploading..." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:95 +#, python-format +msgid "shared a file with you!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:81 +#, python-format +msgid "shared a link with you!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:87 +#, python-format +msgid "shared a message with you!" +msgstr "" + diff --git a/odex-event/muk_web_utils/i18n/fr.po b/odex-event/muk_web_utils/i18n/fr.po new file mode 100644 index 000000000..d00b7e5a6 --- /dev/null +++ b/odex-event/muk_web_utils/i18n/fr.po @@ -0,0 +1,326 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_web_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190128\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-02-27 09:28+0000\n" +"PO-Revision-Date: 2019-02-27 09:28+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/color.js:113 +#, python-format +msgid "'%s' is not a correct color index (0-12)" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/color.js:68 +#, python-format +msgid "'%s' is not a correct color value" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:175 +#, python-format +msgid "<%= name %> shared a file!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:115 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:144 +#, python-format +msgid "<%= name %> shared a message!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:116 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:145 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:176 +#, python-format +msgid "<%= value %>" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dialog.js:51 +#: code:addons/muk_web_utils/static/src/js/fields/module.js:50 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/module.xml:30 +#, python-format +msgid "Click on the download button to be redirected to the store and download the corresponding module." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:46 +#, python-format +msgid "Color 0" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:47 +#, python-format +msgid "Color 1" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:56 +#, python-format +msgid "Color 10" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:57 +#, python-format +msgid "Color 11" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:48 +#, python-format +msgid "Color 2" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:49 +#, python-format +msgid "Color 3" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:50 +#, python-format +msgid "Color 4" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:51 +#, python-format +msgid "Color 5" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:52 +#, python-format +msgid "Color 6" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:53 +#, python-format +msgid "Color 7" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:54 +#, python-format +msgid "Color 8" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:55 +#, python-format +msgid "Color 9" +msgstr "" + +#. module: muk_web_utils +#: model:ir.model,name:muk_web_utils.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de config" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:45 +#: code:addons/muk_web_utils/static/src/xml/share.xml:97 +#, python-format +msgid "Download" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dropzone.js:108 +#, python-format +msgid "Drop files here to upload!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:45 +#, python-format +msgid "External" +msgstr "" + +#. module: muk_web_utils +#: model:ir.model.fields,field_description:muk_web_utils.field_res_config_settings__binary_max_size +msgid "File Size Limit" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:35 +#, python-format +msgid "Internal" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/copy.js:107 +#, python-format +msgid "Link Copied!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:48 +#, python-format +msgid "Mail" +msgstr "" + +#. module: muk_web_utils +#: model_terms:ir.ui.view,arch_db:muk_web_utils.res_config_settings_view_form +msgid "Maximum allowed file size in MB" +msgstr "" + +#. module: muk_web_utils +#: model:ir.model.fields,help:muk_web_utils.field_res_config_settings__binary_max_size +msgid "Maximum allowed file size in megabytes. Note that this setting only adjusts\n" +" the binary widgets accordingly. The maximum file size on your server can probably\n" +" be restricted in several places. Note that a large file size limit and therefore\n" +" large files in your system can significantly limit performance." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:38 +#, python-format +msgid "Message" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:59 +#: code:addons/muk_web_utils/static/src/xml/module.xml:26 +#, python-format +msgid "Missing Module" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:42 +#, python-format +msgid "Note" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:83 +#, python-format +msgid "Open" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dialog.js:45 +#, python-format +msgid "Save" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:52 +#, python-format +msgid "Send" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:27 +#, python-format +msgid "Share" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:74 +#, python-format +msgid "Store" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/copy.js:35 +#, python-format +msgid "The field '%s' must be a binary field with an set attachment flag for the share widget to work." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/module.xml:29 +#, python-format +msgid "The module could not be found on the server." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/async.js:46 +#, python-format +msgid "Upload" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/async.js:47 +#, python-format +msgid "Uploading..." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:95 +#, python-format +msgid "shared a file with you!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:81 +#, python-format +msgid "shared a link with you!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:87 +#, python-format +msgid "shared a message with you!" +msgstr "" + diff --git a/odex-event/muk_web_utils/i18n/nl.po b/odex-event/muk_web_utils/i18n/nl.po new file mode 100644 index 000000000..032b13baa --- /dev/null +++ b/odex-event/muk_web_utils/i18n/nl.po @@ -0,0 +1,326 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * muk_web_utils +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0-20190128\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-02-27 09:28+0000\n" +"PO-Revision-Date: 2019-02-27 09:28+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/color.js:113 +#, python-format +msgid "'%s' is not a correct color index (0-12)" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/color.js:68 +#, python-format +msgid "'%s' is not a correct color value" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:175 +#, python-format +msgid "<%= name %> shared a file!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:115 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:144 +#, python-format +msgid "<%= name %> shared a message!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/share.js:116 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:145 +#: code:addons/muk_web_utils/static/src/js/fields/share.js:176 +#, python-format +msgid "<%= value %>" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dialog.js:51 +#: code:addons/muk_web_utils/static/src/js/fields/module.js:50 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/module.xml:30 +#, python-format +msgid "Click on the download button to be redirected to the store and download the corresponding module." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:46 +#, python-format +msgid "Color 0" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:47 +#, python-format +msgid "Color 1" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:56 +#, python-format +msgid "Color 10" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:57 +#, python-format +msgid "Color 11" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:48 +#, python-format +msgid "Color 2" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:49 +#, python-format +msgid "Color 3" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:50 +#, python-format +msgid "Color 4" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:51 +#, python-format +msgid "Color 5" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:52 +#, python-format +msgid "Color 6" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:53 +#, python-format +msgid "Color 7" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:54 +#, python-format +msgid "Color 8" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/color.xml:55 +#, python-format +msgid "Color 9" +msgstr "" + +#. module: muk_web_utils +#: model:ir.model,name:muk_web_utils.model_res_config_settings +msgid "Config Settings" +msgstr "Configuratie instellingen" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:45 +#: code:addons/muk_web_utils/static/src/xml/share.xml:97 +#, python-format +msgid "Download" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dropzone.js:108 +#, python-format +msgid "Drop files here to upload!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:45 +#, python-format +msgid "External" +msgstr "" + +#. module: muk_web_utils +#: model:ir.model.fields,field_description:muk_web_utils.field_res_config_settings__binary_max_size +msgid "File Size Limit" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:35 +#, python-format +msgid "Internal" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/copy.js:107 +#, python-format +msgid "Link Copied!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:48 +#, python-format +msgid "Mail" +msgstr "" + +#. module: muk_web_utils +#: model_terms:ir.ui.view,arch_db:muk_web_utils.res_config_settings_view_form +msgid "Maximum allowed file size in MB" +msgstr "" + +#. module: muk_web_utils +#: model:ir.model.fields,help:muk_web_utils.field_res_config_settings__binary_max_size +msgid "Maximum allowed file size in megabytes. Note that this setting only adjusts\n" +" the binary widgets accordingly. The maximum file size on your server can probably\n" +" be restricted in several places. Note that a large file size limit and therefore\n" +" large files in your system can significantly limit performance." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:38 +#, python-format +msgid "Message" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:59 +#: code:addons/muk_web_utils/static/src/xml/module.xml:26 +#, python-format +msgid "Missing Module" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:42 +#, python-format +msgid "Note" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:83 +#, python-format +msgid "Open" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/dialog.js:45 +#, python-format +msgid "Save" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:52 +#, python-format +msgid "Send" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:27 +#, python-format +msgid "Share" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/module.js:74 +#, python-format +msgid "Store" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/fields/copy.js:35 +#, python-format +msgid "The field '%s' must be a binary field with an set attachment flag for the share widget to work." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/module.xml:29 +#, python-format +msgid "The module could not be found on the server." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/async.js:46 +#, python-format +msgid "Upload" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/js/core/async.js:47 +#, python-format +msgid "Uploading..." +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:95 +#, python-format +msgid "shared a file with you!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:81 +#, python-format +msgid "shared a link with you!" +msgstr "" + +#. module: muk_web_utils +#. openerp-web +#: code:addons/muk_web_utils/static/src/xml/share.xml:87 +#, python-format +msgid "shared a message with you!" +msgstr "" + diff --git a/odex-event/muk_web_utils/models/__init__.py b/odex-event/muk_web_utils/models/__init__.py new file mode 100644 index 000000000..b692fb19f --- /dev/null +++ b/odex-event/muk_web_utils/models/__init__.py @@ -0,0 +1,25 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Web Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import ir_attachment +from . import res_config_settings + diff --git a/odex-event/muk_web_utils/models/ir_attachment.py b/odex-event/muk_web_utils/models/ir_attachment.py new file mode 100644 index 000000000..bb5d745da --- /dev/null +++ b/odex-event/muk_web_utils/models/ir_attachment.py @@ -0,0 +1,46 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Web Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import base64 +import logging +import mimetypes + +from odoo import api, models, fields, _ +from odoo.exceptions import AccessError +from odoo.tools.mimetypes import guess_mimetype + +_logger = logging.getLogger(__name__) + +class IrAttachment(models.Model): + + _inherit = 'ir.attachment' + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + temporary = fields.Boolean( + string="Temporary", + default=False, + help="Attachments will be deleted by Autovacuum.", + ) + \ No newline at end of file diff --git a/odex-event/muk_web_utils/models/res_config_settings.py b/odex-event/muk_web_utils/models/res_config_settings.py new file mode 100644 index 000000000..6e6827738 --- /dev/null +++ b/odex-event/muk_web_utils/models/res_config_settings.py @@ -0,0 +1,80 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Web Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import re +import json +import logging + +from lxml import etree + +from odoo import api, fields, models + +_logger = logging.getLogger(__name__) + +class ResConfigSettings(models.TransientModel): + + _inherit = 'res.config.settings' + + #---------------------------------------------------------- + # Database + #---------------------------------------------------------- + + binary_max_size = fields.Integer( + string='File Size Limit', + required=True, + default=25, + help="""Maximum allowed file size in megabytes. Note that this setting only adjusts + the binary widgets accordingly. The maximum file size on your server can probably + be restricted in several places. Note that a large file size limit and therefore + large files in your system can significantly limit performance.""") + + #---------------------------------------------------------- + # Functions + #---------------------------------------------------------- + + + def set_values(self): + res = super(ResConfigSettings, self).set_values() + param = self.env['ir.config_parameter'].sudo() + param.set_param('muk_web_utils.binary_max_size', self.binary_max_size) + return res + + @api.model + def get_values(self): + res = super(ResConfigSettings, self).get_values() + params = self.env['ir.config_parameter'].sudo() + res.update(binary_max_size=int(params.get_param('muk_web_utils.binary_max_size', 25))) + return res + + @api.model + def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False): + ret_val = super(ResConfigSettings, self).fields_view_get( + view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu) + modules = self.env['ir.module.module'].sudo().search([]).mapped('name') + document = etree.XML(ret_val['arch']) + for field in ret_val['fields']: + if field.startswith("module_") and field[len("module_"):] not in modules: + for node in document.xpath("//field[@name='%s']" % field): + if node.get("widget") != 'upgrade_boolean': + node.set("widget", "module_boolean") + ret_val['arch'] = etree.tostring(document, encoding='unicode') + return ret_val \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/description/banner.png b/odex-event/muk_web_utils/static/description/banner.png new file mode 100644 index 000000000..98df572ac Binary files /dev/null and b/odex-event/muk_web_utils/static/description/banner.png differ diff --git a/odex-event/muk_web_utils/static/description/icon.png b/odex-event/muk_web_utils/static/description/icon.png new file mode 100644 index 000000000..858ea62ff Binary files /dev/null and b/odex-event/muk_web_utils/static/description/icon.png differ diff --git a/odex-event/muk_web_utils/static/description/icon.svg b/odex-event/muk_web_utils/static/description/icon.svg new file mode 100644 index 000000000..d3d63f188 --- /dev/null +++ b/odex-event/muk_web_utils/static/description/icon.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 250 250" width="250" height="250"><defs><clipPath id="_clipPath_eIuZ8cRqZ5i6ALRDfq9LHZKedC3tjzVm"><rect width="250" height="250"/></clipPath></defs><g clip-path="url(#_clipPath_eIuZ8cRqZ5i6ALRDfq9LHZKedC3tjzVm)"><rect width="250" height="250" style="fill:rgb(0,0,0)" fill-opacity="0"/><defs><filter id="r7gJWUJ1v2dXHSmhwE3Jsh2f6AIiRy1C" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feOffset xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" dx="0" dy="3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_100_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_offsetBlur" result="pf_100_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#FFFFFF" flood-opacity="0.5" result="pf_100_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_color" in2="pf_100_inverse" operator="in" result="pf_100_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_shadow" in2="SourceGraphic" operator="over" result="_out_e6zonF59yJ8jdfMQWFA74pGAFU8GZz9w"/><feOffset xmlns="http://www.w3.org/2000/svg" in="_out_e6zonF59yJ8jdfMQWFA74pGAFU8GZz9w" dx="0" dy="-3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_101_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="_out_e6zonF59yJ8jdfMQWFA74pGAFU8GZz9w" in2="pf_101_offsetBlur" result="pf_101_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.5" result="pf_101_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_color" in2="pf_101_inverse" operator="in" result="pf_101_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_shadow" in2="_out_e6zonF59yJ8jdfMQWFA74pGAFU8GZz9w" operator="over" result="_out_7RB5Y6O2BTLoBqvaPSKOiZHVGGCV57Z4"/><feMerge><feMergeNode in="_out_7RB5Y6O2BTLoBqvaPSKOiZHVGGCV57Z4"/></feMerge></filter></defs><g filter="url(#r7gJWUJ1v2dXHSmhwE3Jsh2f6AIiRy1C)"><path d="M 15 0 L 235 0 C 243.279 0 250 6.721 250 15 L 250 235 C 250 243.279 243.279 250 235 250 L 15 250 C 6.721 250 0 243.279 0 235 L 0 15 C 0 6.721 6.721 0 15 0 Z" style="stroke:none;fill:#747474;stroke-miterlimit:10;"/></g><defs><filter id="GhdC5V5BOnAvYYRiQAYj6RuEPQnAO5IT" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feGaussianBlur xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" stdDeviation="2.146804531419514"/><feOffset xmlns="http://www.w3.org/2000/svg" dx="-5" dy="5" result="pf_100_offsetBlur"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.65"/><feComposite xmlns="http://www.w3.org/2000/svg" in2="pf_100_offsetBlur" operator="in" result="pf_100_dropShadow"/><feBlend xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_dropShadow" mode="normal"/></filter></defs><defs><filter id="03qmstfo68Mzna5zhqxIjGRaZLLtWf9O" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feGaussianBlur xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" stdDeviation="2.146804531419514"/><feOffset xmlns="http://www.w3.org/2000/svg" dx="-5" dy="5" result="pf_100_offsetBlur"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.65"/><feComposite xmlns="http://www.w3.org/2000/svg" in2="pf_100_offsetBlur" operator="in" result="pf_100_dropShadow"/><feBlend xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_dropShadow" mode="normal"/></filter><mask id="_mask_fJLDTdKdeYEaXR6b2co7inrGEva6EyiM"><path d="M 38.143 49 L 211.857 49 L 211.857 201 L 38.143 201 L 38.143 49 Z" style="stroke:black;fill:white;stroke-miterlimit:10;"/></mask><mask id="_mask_gifdIO9SnNXKJ0snBo4Dc9OA96mO0icu"><path d="M 38.143 49 L 211.857 49 L 211.857 201 L 38.143 201 L 38.143 49 Z" style="stroke:black;fill:white;stroke-miterlimit:10;"/></mask></defs><g filter="url(#03qmstfo68Mzna5zhqxIjGRaZLLtWf9O)"><g mask="url(#_mask_gifdIO9SnNXKJ0snBo4Dc9OA96mO0icu)"><g mask="url(#_mask_fJLDTdKdeYEaXR6b2co7inrGEva6EyiM)"/></g></g><g filter="url(#03qmstfo68Mzna5zhqxIjGRaZLLtWf9O)"><g mask="url(#_mask_fJLDTdKdeYEaXR6b2co7inrGEva6EyiM)"><image width="2048" height="1792" transform="matrix(0.085,0,0,0.085,38.143,49)" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACAAAAAcACAYAAABE76PZAAAgAElEQVR4XuzdCdi3+Vg//vc5Yx0hY6yhSBIy9ixFliJLRmSt/FU/NBUa2Y19KUtIKkqpHyHFyK6yJoQs2Uq2GHt2xljm/B/Xr3tKjJl7+S7X8voex3PMHDPX5/yc79fnOu7nee7veV/fihcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAweYGafAIBCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRgAcBMQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEZCBgAmMEhikCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAwAuAcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAMBAwAzOAQRSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgYA3AMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAGAgYAZnCIIhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQMA7gECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDADAQMAMzhEEQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAEA9wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJiBgAGAGRyiCAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwACAe4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECMxAwADADA5RBAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgYADAPUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBGYgYABgBocoAgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQMADgHiBAgAABAgQIECBAgAABAgQIECBAgACB2Qh097mS/EqS2yb5epLnJXlqVb1lNiEFIUDgFAW6+xJJbpHkZ5OcKclfJnliVb0fGQECBJYiYABgKSctJwECBAgQIECAAAECBAgQIECAAAECBGYs0N3nSXLvJLffeePvm9N2kicluUdVfW7GDKIRWJxAd188yS133vQfBgC+9XVSkj9Pcp+q+sjigAQmQGBxAgYAFnfkAhMgQIAAAQIECBAgQIAAAQIECBAgQGA+At19RJL7J/m1XaT6eJI7VdXwU8FeBAhMXKC775PkIXuI8agkD66qz+9hjUsJECAwKQEDAJM6Ls0SIECAAAECBAgQIECAAAECBAgQIECAwCDQ3d+d5O7DG/pJzrJHlT9KcseqGn4y2IsAgQkKdPedkzx2H61/JslDkzy+qr66j/WWECBAYNQCBgBGfTyaI0CAAAECBAgQIECAAAECBAgQIECAAIFvFuju4XO9hzf975vkrAfQeVmSn/GRAAcQtJTAlgS6++gkTzjg9h8evo5U1Z8dsI7lBAgQGJWAAYBRHYdmCBAgQIAAAQIECBAgQIAAAQIECBAgQOCUBLr7kCS3TfLAJBdckdK/JbleVb1/RfWUIUBgzQLdfbskf7LCbYavAw9I8kxPBVmhqlIECGxNwADA1uhtTIAAAQIECBAgQIAAAQIECBAgQIAAAQK7Eeju6yZ5ZJIf3s31e7xmeBz4jarqNXtc53ICBDYs0N23TvLUJOt4f+tdSe6f5K+qqjcczXYECBBYmcA6vkCurDmFCBAgQIAAAQIECBAgQIAAAQIECBAgQGC5At19yZ3HfF9jzQpfS3JUVb1wzfsoT4DAPgW6+6ZJ/jLJ8DSQdb7enuRXq+pV69xEbQIECKxLwADAumTVJUCAAAECBAgQIECAAAECBAgQIECAAIF9CXT3+ZM8NMkvbODNvpN7/HqSGxsC2NeRWURgrQLdfaMkz0ly6Fo3+t/FX5DkmKoaPiLAiwABApMRMAAwmaPSKAECBAgQIECAAAECBAgQIECAAAECBOYt0N1nSXLPJHdNcuYtpB2GAH62qo7bwt62JEDgFAR2PgLk+UlOtwWgbyR5cpL7VtUnt7C/LQkQILBnAQMAeyazgAABAgQIECBAgAABAgQIECBAgAABAgRWKdDdwyO9b5fkIUnOu8ra+6g1vOF3m6p65j7WWkKAwAoFuvuaSV6c5AwrLLufUl9M8sjhV1WdsJ8C1hAgQGBTAgYANiVtHwIECBAgQIAAAQIECBAgQIAAAQIECBD4NoHuvmqSP07yQyPi6SS3MgQwohPRyuIEuvtqSf4uyZlGFP4jw9MAkvxZVZ00or60QoAAgf8WMADgZiBAgAABAgQIECBAgAABAgQIECBAgACBjQt09w8keXSS4bO9x/ga3twbngTwjDE2pycCcxbo7isleXmSw0aa811J7lhVrxppf9oiQGDBAgYAFnz4ohMgQIAAAQIECBAgQIAAAQIECBAgQGDTAt199iQPTHJ0ktNvev897jd8HMCNq+oFe1zncgIE9inQ3ZdO8g9JzrrPEptc9qIkx1TVuze5qb0IECBwagIGANwfBAgQIECAAAECBAgQIECAAAECBAgQILB2ge4+XZJfSfKAJIevfcPVbfDVJD9ZVa9cXUmVCBA4JYHuvnCSNyQ554SEhkGhJyW5X1V9akJ9a5UAgZkKGACY6cGKRYAAAQIECBAgQIAAAQIECBAgQIAAgbEIdPcNkjwqycXH0tMe+/hykutU1Wv3uM7lBAjsUqC7z5XkTUkuuMslY7vs80kemuRxVXXi2JrTDwECyxEwALCcs5aUAAECBAgQIECAAAECBAgQIECAAAECGxXo7osmeXyS62104/Vs9oUkP1pVb1tPeVUJLFdg56NBXpPkkjNQ+ECSu1fVs2aQRQQCBCYoYABggoemZQIECBAgQIAAAQIECBAgQIAAAQIECIxZYOfNvAclOTrJ8Oj/ubz+M8lVquo9cwkkB4FtC3T3GZO8OskVt93Livd/fZI7VdU/rbiucgQIEDhVAQMAbhACBAgQIECAAAECBAgQIECAAAECBAgQWIlAdx+a5FeSPDDJ4SspOr4iH0lyhar66Pha0xGBaQnsfM14YZKfnFbne+r26TtPBPjwnla5mAABAvsUMACwTzjLCBAgQIAAAQIECBAgQIAAAQIECBAgQOB/BLr7WkmekOTiC3D51yQ/UlWfW0BWEQmsTaC7/yrJTde2wXgKfyXJo5M8vKq+NJ62dEKAwBwFDADM8VRlIkCAAAECBAgQIECAAAECBAgQIECAwIYEuvsHkjwmyQ02tOVYthke6331qjpxLA3pg8CUBLr7D5LccUo9r6DXjyW5T5I/rapeQT0lCBAg8G0CBgDcFAQIECBAgAABAgQIECBAgAABAgQIECCwZ4HuPnuSByT51SSn33OBeSx4cZLreyNvHocpxeYEuvvYJA/a3I6j2+mtSe5UVa8aXWcaIkBg8gIGACZ/hAIQIECAAAECBAgQIECAAAECBAgQIEBgcwI7n9l9hyQPTHLE5nYe7U5PrqpfHm13GiMwMoHuvm2Sp4ysrW21c1ySu1bV+7bVgH0JEJifgAGA+Z2pRAQIECBAgAABAgQIECBAgAABAgQIEFiLQHdfPckTk1x8LRtMt+j9q2rJP8083ZPT+UYFuvtnkjwrySEb3Xjcm301yeOSPLiqvjDuVnVHgMAUBAwATOGU9EiAAAECBAgQIECAAAECBAgQIECAAIEtCnT3RZI8NsmNttjG2Lf+uap62tib1B+BbQl099WSvCLJ6bbVw8j3/USS4aMR/riqThp5r9ojQGDEAgYARnw4WiNAgAABAgQIECBAgAABAgQIECBAgMA2Bbr7rEnun+TXk5xhm71MYO9vJLlBVb1kAr1qkcBGBbr7YknemGT4muJ16gLvSHJ0Vb0KFAECBPYjYABgP2rWECBAgAABAgQIECBAgAABAgQIECBAYMYC3T08nnv4XPsHJzn3jKOuOtoJSX6kqv5l1YXVIzBVge4evoa8Ocn5p5phS30fl+SuVfW+Le1vWwIEJipgAGCiB6dtAgQIECBAgAABAgQIECBAgAABAgQIrEOgu6+a5ElJLrmO+guo+bEkV6iq4xeQVUQCpyrQ3YcleX2SS6Hal8BXkzxuGMaqqi/sq4JFBAgsTsAAwOKOXGACBAgQIECAAAECBAgQIECAAAECBAh8u0B3f2+SRye5KZ8DC7xrZwjgyweupACBiQrsPEnkb5Nca6IRxtT2J5LcJ8mfVNVJY2pMLwQIjE/AAMD4zkRHBAgQIECAAAECBAgQIECAAAECBAgQ2JhAd59l542lY5KccWMbz3+j4Y3P63mzbv4HLeEpC3T3/03yc3xWKvCOJEdX1atWWlUxAgRmJWAAYFbHKQwBAgQIECBAgAABAgQIECBAgAABAgR2J9Ddw/eHb5vkYUnOt7tVrtqjwJ9W1S/ucY3LCUxeoLvvOzy2fvJBxhvg2UmOqaoPjrdFnREgsC0BAwDbkrcvAQIECBAgQIAAAQIECBAgQIAAAQIEtiTQ3VdK8vtJLr+lFpa07d2q6lFLCizrsgW6+2ZJnrVshY2kPzHJY5I8pKq+tJEdbUKAwCQEDABM4pg0SYAAAQIECBAgQIAAAQIECBAgQIAAgYMLdPcFkjwyyS0PXk2FXQp0khtV1Qt2eb3LCExWoLuvluQVSU432RDTa/zjSe6dZHjiyPD1xosAgYULGABY+A0gPgECBAgQIECAAAECBAgQIECAAAEC8xfo7jMluWeSuyc58/wTjy7hCUl+rKreNLrONERgRQLdfbEkb0xy1hWVVGZvAm9NcnRV/ePelrmaAIG5CRgAmNuJykOAAAECBAgQIECAAAECBAgQIECAAIFvEuju4af9H5HkgmC2KvCpJJepquO32oXNCaxBoLvPneTNSc6/hvJK7k3gL5Pctao+vLdlriZAYC4CBgDmcpJyECBAgAABAgQIECBAgAABAgQIECBA4JsEuvvSSZ6U5EfAjEbgXcN5VNUXRtORRggcUKC7D0vy+iSXOmApy1cnMDx15FFJfquqvry6sioRIDAFAQMAUzglPRIgQIAAAQIECBAgQIAAAQIECBAgQGCXAt19xPCmT5LbJTlkl8tctjmBv0/yEz6re3PgdlqfQHcfmuSlSa61vl1UPoDA8BSAe1bV0w5Qw1ICBCYmYABgYgemXQIECBAgQIAAAQIECBAgQIAAAQIECJySQHefPsmdkxyb5GyURi3wmKo6ZtQdao7ALgS6e3hj+da7uNQl2xUYntBwdFX983bbsDsBApsQMACwCWV7ECBAgAABAgQIECBAgAABAgQIECBAYI0C3X2jJI9O8gNr3Ebp1Qrctqr+fLUlVSOwOYHuHoZYhq87XtMQ6CTD15y7V9UnptGyLgkQ2I+AAYD9qFlDgAABAgQIECBAgAABAgQIECBAgACBEQh090WT/GGSa4+gHS3sTeBrSa5WVW/Y2zJXE9i+QHdfJ8lLfMzI9s9iHx18MclDkwxPIjlxH+stIUBg5AIGAEZ+QNojQIAAAQIECBAgQIAAAQIECBAgQIDAtwp099mTPGh4pHOS0xGarMAnk1yuqobP6fYiMAmB7r54kjcmOcskGtbkdxJ4X5K7VtVxiAgQmJeAAYB5nac0BAgQIECAAAECBAgQIECAAAECBAjMWKC7D0lyh503/4+YcdQlRXt7kitW1VeWFFrWaQp09zmTvCXJBaaZQNenIPDKYZisqt5JhwCBeQgYAJjHOUpBgAABAgQIECBAgAABAgQIECBAgMDMBbr7qkmelOSSM4+6xHjHVdVNlhhc5ukIdPfwtJHXJrnCdLrW6S4FvpHkiUmOrapP73KNywgQGKmAAYCRHoy2CBAgQIAAAQIECBAgQIAAAQIECBAgMAh09/CTto9JcjMisxZ4cFXdb9YJhZu0QHc/LcmtJx1C86cl8JkkD0jy+1X19dO62P8nQGCcAgYAxnkuuiJAgAABAgQIECBAgAABAgQIECBAYOEC3X1Yknsl+c0kZ1o4x1LiH1VVz11KWDmnI9Dd90zy8Ol0rNMDCrwnyR2r6mUHrGM5AQJbEDAAsAV0WxIgQIAAAQIECBAgQIAAAQIECBAgQODUBLp7+Cnb3/Y524u7T05IctWqGj5j3YvAKAS6+wZJnpfEe0qjOJGNNvH8JMdU1TAQ4EWAwEQEfLGeyEFpkwABAgQIECBAgAABAgQIECBAgACB+Qt095FJnpDkavNPK+F3EDg+yZWq6iOECGxbYOdr0us8hWTbJ7H1/R+V5EFV9YWtd6IBAgROU8AAwGkSuYAAAQIECBAgQIAAAQIECBAgQIAAAQLrFejuI3Z+4v//S3LIendTfQICb05y5ar66gR61eJMBbr7nEnenuS8M40o1t4EPp7k3kn+tKp6b0tdTYDAJgUMAGxS214ECBAgQIAAAQIECBAgQIAAAQIECBD4JoHuPn2SOyc5NsnZ4BD4JoFnVtUtiRDYhkB3nyHJa5JcYRv723PUAm9Ncvuq+qdRd6k5AgsWMACw4MMXnQABAgQIECBAgAABAgQIECBAgACB7Ql09w2T/E6SH9heF3YeucBvVNVjR96j9mYo0N1/leSmM4wm0uoEnpbkblX10dWVVIkAgVUIGABYhaIaBAgQIECAAAECBAgQIECAAAECBAgQ2KVAd180yeOTXG+XS1y2XIGTkvxEVb1suQSSb1qgu++f5AGb3td+kxT4UpKHJ3lUVZ04yQSaJjBDAQMAMzxUkQgQIECAAAECBAgQIECAAAECBAgQGJ9Ad5915021X08yPPrfi8BuBD6X5LJV9f7dXOwaAgcR6O4bJznuIDWsXaTA8PXprlX1nEWmF5rAyAQMAIzsQLRDgAABAgQIECBAgAABAgQIECBAgMC8BLp7+D7sLyV5aJJzzyudNBsS+Nckl6+q4adtvQisRaC7L5bkLUnOvJYNFF2CwCuT3KGqhq9ZXgQIbEnAAMCW4G1LgAABAgQIECBAgAABAgQIECBAgMD8Bbr7SkmelOTI+aeVcM0CL6qq6695D+UXKtDdZ0vy5iQXWSiB2KsT+EaSP0xyn6oanmDiRYDAhgUMAGwY3HYECBAgQIAAAQIECBAgQIAAAQIECMxfoLsvkOQRSW41/7QSblDgQVU1fD67F4GVCew8peRvk1x7ZUUVIpB8OsmxSZ5YVcNQgBcBAhsSMACwIWjbECBAgAABAgQIECBAgAABAgQIECAwf4HuPlOSeyS5e5LD5p9Ywi0IHFVVz93CvracqUB3D8NKd5tpPLG2L/DunY8FeNX2W9EBgWUIGABYxjlLSYAAAQIECBAgQIAAAQIECBAgQIDAmgW6+xY7P/V/oTVvpfyyBU5IcsWqeseyGaRfhUB33zzJM1dRSw0CpyHw7CTHVNUHSREgsF4BAwDr9VWdAAECBAgQIECAAAECBAgQIECAAIGZC3T3pZP8fpKrzTyqeOMR+FCSI6vqM+NpSSdTE+juSyZ5U5IzTq13/U5W4CtJHpXk4VX15cmm0DiBkQsYABj5AWmPAAECBAgQIECAAAECBAgQIECAAIFxCnT3EUl+K8ntkhwyzi51NWOB4XHaP15VPeOMoq1JoLvPkeStSS64pi2UJXBqAscPH5VTVX+BiQCB1QsYAFi9qYoECBAgQIAAAQIECBAgQIAAAQIECMxYoLtPn+QuSe6b5Gwzjira+AUeU1XHjL9NHY5JoLuHgaVXJvnRMfWll0UKvD7J7avqbYtMLzSBNQkYAFgTrLIECBAgQIAAAQIECBAgQIAAAQIECMxPoLt/Osmjk1x0fukkmqjAravq6RPtXdtbEOjuxyW50xa2tiWBUxIYnmLyp0nuUVWfQkSAwMEFDAAc3FAFAgQIECBAgAABAgQIECBAgAABAgRmLtDdP5jkCUmuPfOo4k1P4MQkV6iqt0+vdR1vWqC7b57kmZve134EdiHw+SQPTvK4qvraLq53CQEC30HAAIBbgwABAgQIECBAgAABAgQIECBAgAABAt9BoLsP33lD4g5JDgVFYKQC/5HkMlX1mZH2p60RCHT3ZZK8LskZR9COFgh8J4H3Jfk/VfUyRAQI7E/AAMD+3KwiQIAAAQIECBAgQIAAAQIECBAgQGDGAt19uiS/muT+Sc4x46iizUfgVUmuWVUnzSeSJKsS6O4jkgyfs36+VdVUh8CaBV4wfFRFVQ0DAV4ECOxBwADAHrBcSoAAAQIECBAgQIAAAQIECBAgQIDA/AW6+4ZJHpVkeOy/F4EpCTy2qn5jSg3rdf0COwNNr0lypfXvZgcCKxX4apLHJnlQVX1ppZUVIzBjAQMAMz5c0QgQIECAAAECBAgQIECAAAECBAgQ2L1Adw9v+D8hybV3v8qVBEYncOuqevroutLQ1gS6+/d2nmiytR5sTOCAAh9Ncs8k/7eq+oC1LCcwewEDALM/YgEJECBAgAABAgQIECBAgAABAgQIEDg1ge4+Z5KHDJ85nORQWgQmLnBikqtU1ZsnnkP7KxDo7pskefYKSilBYAwCb0py+6r65zE0owcCYxUwADDWk9EXAQIECBAgQIAAAQIECBAgQIAAAQJrFejuMyQZHpd+7yRnW+tmihPYrMBHklyqqj6z2W3tNiaBnaeaDG+UHjamvvRC4IACwxMAnpLk7lX1qQPWspzALAUMAMzyWIUiQIAAAQIECBAgQIAAAQIECBAgQOA7CXT38H3RWyZ5WJLvI0VgpgKvSnLNqjpppvnEOhWB7j5Lkrcm+X5QBGYq8PkkD0zyu1X19ZlmFIvAvgQMAOyLzSICBAgQIECAAAECBAgQIECAAAECBKYo0N3XS/LQJJebYv96JrBHgd+pqrvucY3LZyDQ3c9JctQMoohA4LQE3pPkTlX14tO60P8nsBQBAwBLOWk5CRAgQIAAAQIECBAgQIAAAQIECCxYYOen/n83ya8tmEH0ZQr8TFUNbwZ7LUSgu++e5LcXEldMAicL/N7OIMDwEQFeBBYtYABg0ccvPAECBAgQIECAAAECBAgQIECAAIFlCHT3cUluvIy0UhL4XwInJPmRqvoXLvMX6O6rJ3nl/JNKSOAUBY6rqpuwIbB0AQMAS78D5CdAgAABAgQIECBAgAABAgQIECAwc4HuvleSh808pngETk3gP5L8cFUNn5ntNVOB7j5XkncnOXymEcUisBuBe1TVI3ZzoWsIzFXAAMBcT1YuAgQIECBAgAABAgQIECBAgAABAgTS3d+X5P0oCBDIS6vquhzmK9Ddr01y5fkmlIzArgUuVFUf2vXVLiQwMwEDADM7UHEIECBAgAABAgQIECBAgAABAgQIEPgfge4efgrwbkwIEPh/Ag+tqvuymJ9Adz9u+Pzz+SWTiMC+BB5RVffY10qLCMxAwADADA5RBAIECBAgQIAAAQIECBAgQIAAAQIETlmgu9+S5Eg+BAj8t8ANquqFPOYj0N3DZ54/ez6JJCFwYIG3VNVlD1xFAQITFTAAMNGD0zYBAgQIECBAgAABAgQIECBAgAABAqct0N1fTnLm077SFQQWI/DFYSimqt63mMQzDtrdP5jkn5McNuOYohHYq8Bnq+oce13kegJzETAAMJeTlIMAAQIECBAgQIAAAQIECBAgQIAAgW8T6O4Tk5wBDQEC/0vg3UmuUFVf4jJdge4+S5K3Jvn+6abQOYG1CJxYVWdaS2VFCUxAwADABA5JiwQIECBAgAABAgQIECBAgAABAgQI7E+guz+Z5Ij9rbaKwKwFnldVPz3rhDMP193PT3KDmccUj8B+BD5RVefZz0JrCMxBwADAHE5RBgIECBAgQIAAAQIECBAgQIAAAQIETlGgu9+b5CJ4CBA4RYG7VdWj2ExPoLvvmsTZTe/odLwZgfdU1cU2s5VdCIxPwADA+M5ERwQIECBAgAABAgQIECBAgAABAgQIrEigu1+T5KorKqcMgbkJnJTkalX1urkFm3Oe7r5cktcnOd2cc8pG4AACr6qqaxxgvaUEJi1gAGDSx6d5AgQIECBAgAABAgQIECBAgAABAgROTaC7/zzJz1MiQOA7Cnw8yaWr6hOMxi/Q3WdP8o4k3zP+bnVIYGsCT6mq221tdxsT2LKAAYAtH4DtCRAgQIAAAQIECBAgQIAAAQIECBBYn0B3PyDJ/de3g8oEZiHw2iQ/VlXfmEWaGYfo7pck+ckZRxSNwCoEjq2qh6yikBoEpihgAGCKp6ZnAgQIECBAgAABAgQIECBAgAABAgR2JdDdw0//D08B8CJA4NQFHldVd4E0XoHuvmeSh4+3Q50RGI3Aravq6aPpRiMENixgAGDD4LYjQIAAAQIECBAgQIAAAQIECBAgQGBzAt191SSv2dyOdiIwaYGbVdVfTzrBTJvv7ivvfC07ZKYRxSKwSoErV9XrV1lQLQJTEjAAMKXT0isBAgQIECBAgAABAgQIECBAgAABAnsS6O6zJfncnha5mMByBb6c5PJV9e7lEowveXcfnuSdSc4zvu50RGB0AiclOUtVfWV0nWmIwIYEDABsCNo2BAgQIECAAAECBAgQIECAAAECBAhsR6C735Xk4tvZ3a4EJifw70kuU1VfmlznM224u1+e5MdnGk8sAqsWeEdVXWrVRdUjMCUBAwBTOi29EiBAgAABAgQIECBAgAABAgQIECCwZ4Hu/rMkv7DnhRYQWK7Ac6vqqOXGH0/y7r53koeOpyOdEBi9wJ9U1S+NvksNElijgAGANeIqTYAAAQIECBAgQIAAAQIECBAgQIDA9gW6++gkT9h+JzogMCmBO1XV4yfV8cya7e4rJ3lNkkNmFk0cAusUuENVPWmdG6hNYOwCBgDGfkL6I0CAAAECBAgQIECAAAECBAgQIEDgQALdfWSStxyoiMUElifwtSRXrao3Li/69osWP3sAACAASURBVBN39+FJ3pnkPNvvRgcEJiVwqap6x6Q61iyBFQsYAFgxqHIECBAgQIAAAQIECBAgQIAAAQIECIxPoLs/n+Ss4+tMRwRGLXB8kktW1edG3eUMm+vulyf58RlGE4nAOgU+XVXnXOcGahOYgoABgCmckh4JECBAgAABAgQIECBAgAABAgQIEDiQQHcfl+TGBypiMYFlCry4qn5qmdG3k7q7j03yoO3sblcCkxZ4dlXddNIJNE9gBQIGAFaAqAQBAgQIECBAgAABAgQIECBAgAABAuMW6O7fSPI74+5SdwRGK3Cvqvqt0XY3o8a6+8pJXpPkkBnFEoXApgTuVFWP39Rm9iEwVgEDAGM9GX0RIECAAAECBAgQIECAAAECBAgQILAyge6+XJI3raygQgSWJXBSkh+rqn9cVuzNpu3uw5O8M8l5Nruz3QjMRuDIqnrbbNIIQmCfAgYA9glnGQECBAgQIECAAAECBAgQIECAAAEC0xHo7uF7ocPnmJ91Ol3rlMCoBD6e5BJV9elRdTWjZrr75Ul+fEaRRCGwSYFPV9U5N7mhvQiMVcAAwFhPRl8ECBAgQIAAAQIECBAgQIAAAQIECKxUoLufneQmKy2qGIFlCfx9VV1nWZE3k7a775/kAZvZzS4EZinwrKq6+SyTCUVgjwIGAPYI5nICBAgQIECAAAECBAgQIECAAAECBKYp0N2/nOSPptm9rgmMRuDYqnrIaLqZQSPdfY0kL0tyyAziiEBgWwK3q6qnbGtz+xIYk4ABgDGdhl4IECBAgAABAgQIECBAgAABAgQIEFibQHcfkeSTa9tAYQLLEDgpydWr6jXLiLvelN09PLL83UmGr09eBAjsX+CIqvrP/S+3ksB8BAwAzOcsJSFAgAABAgQIECBAgAABAgQIECBA4DQEuvstSY4ERYDAgQQ+luTiVfW5A1WxON39d0mujYIAgQMJvKmqrnCgChYTmJGAAYAZHaYoBAgQIECAAAECBAgQIECAAAECBAicukB3PyzJvTgRIHBggRdW1Q0OXGXBBbr7mCSPXjCB6ARWJfDgqrrfqoqpQ2DqAgYApn6C+idAgAABAgQIECBAgAABAgQIECBAYNcC3f2jSV696wUuJEDg1ATuVlWPQrR3ge4enkTyT0nOsPfVVhAg8C0CV6mq11EhQOC/BAwAuBMIECBAgAABAgQIECBAgAABAgQIEFiUQHd/KsnwudteBAgcTODrSa5aVW84WJllre7uMyd5Z5LvW1ZyaQmsReDTVeX39LXQKjpVAQMAUz05fRMgQIAAAQIECBAgQIAAAQIECBAgsC+B7v6TJLfb12KLCBD4VoEPJblkVX0Bze4EuvvPkvzC7q52FQECpyHwR1V1e0oECPyPgAEAdwMBAgQIECBAgAABAgQIECBAgAABAosS6O4bJfmbRYUWlsB6BZ5VVTdf7xbzqN7dt0jyjHmkkYLAKASuX1UvGkUnmiAwEgEDACM5CG0QIECAAAECBAgQIECAAAECBAgQILAZge4+fZLPJRkew+1FgMBqBH6+qp66mlLzrNLd37vz6P/D5plQKgIbFzghydmr6msb39mGBEYsYABgxIejNQIECBAgQIAAAQIECBAgQIAAAQIE1iPQ3c9KcrP1VFeVwCIFPr/zUQAfXmT60wjd3YcmeWOSy/AhQGBlAs+sqluurJpCBGYiYABgJgcpBgECBAgQIECAAAECBAgQIECAAAECuxfo7lsnedruV7iSAIFdCLwuyVWrqndx7aIu6e5HJLnbokILS2D9Aresqmeufxs7EJiWgAGAaZ2XbgkQIECAAAECBAgQIECAAAECBAgQWIFAd581yWeSDD+V60WAwOoEHlxV91tduelX6u5rJfn76SeRgMCoBL668/j/r4yqK80QGIGAAYARHIIWCBAgQIAAAQIECBAgQIAAAQIECBDYvEB3vyDJ9Te/sx0JzFrgpCQ/UlXD4+4X/+rucyZ5d5IjFo8BgMBqBZ5XVT+92pKqEZiHgAGAeZyjFAQIECBAgAABAgQIECBAgAABAgQI7FGgu38hyZ/tcZnLCRA4bYH3JrlkVZ142pfO+4ru/rsk1553SukIbEXgNlX1F1vZ2aYERi5gAGDkB6Q9AgQIECBAgAABAgQIECBAgAABAgTWI9Dd35XkP5OcYT07qEpg0QJ/UFVHL1mgu38zySOXbCA7gTUJnJDk8Kry+P81ASs7bQEDANM+P90TIECAAAECBAgQIECAAAECBAgQIHAAge5+TpKjDlDCUgIEvrPAtarq5UsE6u4jkwwfg3C6JeaXmcCaBf6qqn52zXsoT2CyAgYAJnt0GidAgAABAgQIECBAgAABAgQIECBA4KAC3X3zJM88aB3rCRA4RYGPJPmhqvr8Xn26+yJJzpvkPDv/PHeSsyQ5886vw77p34f/NjzRY/g1XDP8+u6dPT+b5Es7v76YZPg1/PTwyb++/E3/Plz3iSQfS/Lx4Z9V9b599D709rYk37/Xta4nQGBXAjetqmfv6koXEViggAGABR66yAQIECBAgAABAgQIECBAgAABAgQI/JdAdw9vHH5y5w1DLAQIrF7g6Un+T5JzJTlieGz3zpv6w7+fM8nwxv7w/4b/fv6dN/uHN/LH9BqGBoahgGGg4dM7XzOGQYHhI0Q+tfP/PjP896r6YHc/NcltxhRALwRmJPCF4euGx//P6ERFWbmAAYCVkypIgAABAgQIECBAgAABAgQIECBAgMCUBLr7GUluMaWe9UqAAAECBBYq8LSq+rmFZhebwK4EDADsislFBAgQIECAAAECBAgQIECAAAECBAjMVaC7j0rynLnmk4sAAQIECMxI4Ker6nkzyiMKgZULGABYOamCBAgQIECAAAECBAgQIECAAAECBAhMSaC7T5dkeHz32B47PiVGvRIgQIAAgXULfHb4yJCq+vq6N1KfwJQFDABM+fT0ToAAAQIECBAgQIAAAQIECBAgQIDASgS6+0k7n1O+knqKECBAgAABAisX+IOqOnrlVRUkMDMBAwAzO1BxCBAgQIAAAQIECBAgQIAAAQIECBDYu0B3/1iSV+19pRUECBAgQIDAhgSuVlX/uKG9bENgsgIGACZ7dBonQIAAAQIECBAgQIAAAQIECBAgQGCVAt39oSQXWGVNtQgQIECAAIGVCLy/qi6ykkqKEJi5gAGAmR+weAQIECBAgAABAgQIECBAgAABAgQI7E6gux+S5D67u9pVBAgQIECAwAYFHlRV99/gfrYiMFkBAwCTPTqNEyBAgAABAgQIECBAgAABAgQIECCwSoHuvnCS962yploECBAgQIDASgQuXFUfWEklRQjMXMAAwMwPWDwCBAgQIECAAAECBAgQIECAAAECBHYv0N1vSHKF3a9wJQECBAgQILBmgddX1ZXXvIfyBGYjYABgNkcpCAECBAgQIECAAAECBAgQIECAAAECBxXo7jsneexB61hPgAABAgQIrEzg16rqCSurphCBmQsYAJj5AYtHgAABAgQIECBAgAABAgQIECBAgMDuBbr7iCQfT3LI7le5kgABAgQIEFiTwNeSHFFVn19TfWUJzE7AAMDsjlQgAgQIECBAgAABAgQIECBAgAABAgQOItDdxyW58UFqWEuAAAECBAisROCvq+pmK6mkCIGFCBgAWMhBi0mAAAECBAgQIECAAAECBAgQIECAwO4EuvuoJM/Z3dWuIkCAAAECBNYocMOqesEa6ytNYHYCBgBmd6QCESBAgAABAgQIECBAgAABAgQIECBwEIHuHr5vOnwMwLkOUsdaAgQIECBA4EACn0py7qrqA1WxmMDCBAwALOzAxSVAgAABAgQIECBAgAABAgQIECBA4LQFuvsxSe5y2le6ggABAgQIEFiTwCOq6h5rqq0sgdkKGACY7dEKRoAAAQIECBAgQIAAAQIECBAgQIDAfgW6+weTvHu/660jQIAAAQIEDixwsap6z4GrKEBgYQIGABZ24OISIECAAAECBAgQIECAAAECBAgQILA7ge7+5ySX3d3VriJAgAABAgRWKPD6qrryCuspRWAxAgYAFnPUghIgQIAAAQIECBAgQIAAAQIECBAgsBeB7r5TksftZY1rCRAgQIAAgZUI3LGqnriSSooQWJiAAYCFHbi4BAgQIECAAAECBAgQIECAAAECBAjsTqC7z57kk0lOv7sVriJAgAABAgRWIHBiksOr6ssrqKUEgcUJGABY3JELTIAAAQIECBAgQIAAAQIECBAgQIDAbgW6+1lJbrbb611HgAABAgQIHFjgaVX1cweuogCBhQoYAFjowYtNgAABAgQIECBAgAABAgQIECBAgMBpC3T3dZO8+LSvdAUBAgQIECCwIoFrVtUrVlRLGQKLEzAAsLgjF5gAAQIECBAgQIAAAQIECBAgQIAAgb0IdPdHkpxvL2tcS4AAAQIECOxL4D+q6nv3tdIiAgT+n4ABADcCAQIECBAgQIAAAQIECBAgQIAAAQIETkWgu++X5IGQCBAgQIAAgbUL3LOqfnvtu9iAwIwFDADM+HBFI0CAAAECBAgQIECAAAECBAgQIEDg4ALdfd4kxyc55ODVVCBAgAABAgS+g8BJSc5V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D59jMJkIECBAgACB/xbo7nsneTATAgQIEFimgAaAZd53qQkQIECAAAECSxXQAKABYKlrX24CBAgMAjevquehIECAAAECBOYt0N23TPIn804pHQECBAiclIAGAGuDAAECBAgQIEBgSQIaADQALGm9y0qAAIETCxxTVa/BQoAAAQIECMxboLuvnuRV804pHQECBAhoALAGCBAgQIAAAQIECCQaADQA+HNAgACBJQtcpKreu2QA2QkQIECAwBIEuvtiSf5jCVllJECAAIH/KWAHAKuCAAECBAgQIEBgSQIaADQALGm9y0qAAIETC5y1qj6LhQABAgQIEJi3QHefI8lx804pHQECBAiclIAGAGuDAAECBAgQIEBgSQIaADQALGm9y0qAAIFDBbqqjkJCgAABAgQIzF+gu4fffb85/6QSEiBAgMDhBDQAWBcECBAgQIAAAQJLEtAAoAFgSetdVgIECBwq8OmqOjsSAgQIECBAYBkC3f25JGdaRlopCRAgQOBQAQ0A1gMBAgQIECBAgMCSBDQAaABY0nqXlQABAocKvKeqLoqEAAECBAgQWIZAd78vyYWWkVZKAgQIENAAYA0QIECAAAECBAgsVUADgAaApa59uQkQIPD6qroKBgIECBAgQGAZAt39xiRXXEZaKQkQIEBAA4A1QIAAAQIECBAgsFQBDQAaAJa69uUmQIDAy6vquhgIECBAgACBZQh0998kOXYZaaUkQIAAAQ0A1gABAgQIECBAgMBSBTQAaABY6tqXmwABAs+rqptjIECAAAECBJYh0N3PT/LTy0grJQECBAhoALAGCBAgQIAAAQIEliqgAUADwFLXvtwECBB4QlX9KgYCBAgQIEBgGQLd/cQkt1tGWikJECBAQAOANUCAAAECBAgQILBUAQ0AGgCWuvblJkCAwIOr6r4YCBAgQIAAgWUIdPeDk9x7GWmlJECAAAENANYAAQIECBAgQIDAUgU0AGgAWOral5sAAQK/XlWPxECAAAECBAgsQ6C7fz3Jw5eRVkoCBAgQ0ABgDRAgQIAAAQIECCxVQAOABoClrn25CRAgcJuq+iMMBAgQIECAwDIEuvs2SZ66jLRSEiBAgIAGAGuAAAECBAgQIEBgqQIaADQALHXty02AAIGbVNVfYiBAgAABAgSWIdDdN07ygmWklZIAAQIENABYAwQIECBAgAABAksV0ACgAWCpa19uAgQIXKeq/gYDAQIECBAgsAyB7r52kpcvI62UBAgQIKABwBogQIAAAQIECBBYqoAGAA0AS137chMgQOCaVfUPGAgQIECAAIFlCHT3NZO8chlppSRAgAABDQDWAAECBAgQIECAwFIFNABoAFjq2pebAAECx1TVazAQIECAAAECyxDo7mOSvHoZaaUkQIAAAQ0A1gABAgQIECBAgMBSBTQAaABY6tqXmwABAleuqjdiIECAAAECBJYh0N0/kOSfl5FWSgIECBDQAGANECBAgAABAgQILFVAA4AGgKWufbkJECBwuar6VwwECBAgQIDAMgS6+3JJ3ryMtFISIECAgAYAa4AAAQIECBAgQGCpAhoANAAsde3LTYAAgUtW1TswECBAgAABAssQ6O5LJXnrMtJKSYAAAQIaAKwBAgQIECBAgACBpQpoANAAsNS1LzcBAgQuUlXvxUCAAAECBAgsQ6C7L5rkXctIKyUBAgQIaACwBggQIECAAAECBJYqoAFAA8BS177cBAgQOH9VfQgDAQIECBAgsAyB7r5gkv9cRlopCRAgQEADgDVAgAABAgQIECCwVAENABoAlrr25SZAgMC5q+oTGAgQIECAAIFlCHT3eZN8ZBlppSRAgAABDQDWAAECBAgQIECAwFIFNABoAFjq2pebAAECZ62qz2IgQIAAAQIEliHQ3edIctwy0kpJgAABAhoArAECBAgQIECAAIGlCmgA0ACw1LUvNwECBE5fVV/CQIAAAQIECCxDoLvPlORzy0grJQECBAhoALAGCBAgQIAAAQIEliqgAUADwFLXvtwECBA4dVUdj4EAAQIECBBYhkB3nzbJl5eRVkoCBAgQ0ABgDRAgQIAAAQIECCxVQAOABoClrn25CRBYuEBVLf6/gQtfAuITIECAwMIEuvsUSb6+sNjiEiBAgEASv/9ZBgQIECBAgAABAksSWPyXH60BYEnrXVYCBAgcKnCKqvomEgIECBAgQGAZAt19VJJvLCOtlAQIECBwqIAGAOuBAAECBAgQIEBgSQIaADQALGm9y0qAAIFDBY6uqq8gIUCAAAECBJYh4BUAy7jPUhIgQOBwAhoArAsCBAgQIECAAIElCWgA0ACwpPUuKwECBA4VOFNVfQEJAQIECBAgsAyB7j5Tks8tI62UBAgQIHCogAYA64EAAQIECBAgQGBJ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CBAgQIAAga0LdPebktx06wtbkAABAgQIEHhjVd0cAwEChy9gAODwzVxBgAABAgQIECBAgAABAgQIECBAgMDCBbr765L834XHFI8AAQIECExZ4HpV9c4pN6g3AlMUMAAwxV3REwECBAgQIECAAAECBAgQIECAAAECByrQ3U9Lcv8DbcLiBAgQIEBgbIGnVtUDxyaQnsDhCxgAOHwzVxAgQIAAAQIECBAgQIAAAQIECBAgsGCB7l69bnpGkissOKZoBAgQIEBg6gIfTHLlquqpN6o/AlMSMAAwpd3QCwECBAgQIECAAAECBAgQIECAAAECBy7Q3ccneemBN6IBAgQIECBA4PZV9QoMBAjsXsAAwO6tnEmAAAECBAgQIECAAAECBAgQIECAwAAC3b168381BOAgQIAAAQIEDlbg96vqjgfbgtUJzEvAAMC89ku3BAgQIECAAAECBAgQIECAAAECBAhsUKC7L7/z+P8jNriM0gQIECBAgMDuBD6X5IpV9bHdne4sAgQMALgHCBAgQIAAAQIECBAgQIAAAQIECBAgsCPQ3fdL8nQgBAgQIECAwGQE/ntV/cpkutEIgYkLGACY+AZpjwABAgQIECBAgAABAgQIECBAgACB7Ql095uS3HR7K1qJAAECBAgQOITAG6rqWykRILA7AQMAu3NyFgECBAgQIECAAAECBAgQIECAAAECCxfo7msl+ZeFxxSPAAECBAjMUeA6VeXv6DnunJ63LmAAYOvkFiRAgAABAgQIECBAgAABAgQIECBAYIoC3X1ikodNsTc9ESBAgACBwQUeW1WPGdxAfAK7EjAAsCsmJxEgQIAAAQIECBAgQIAAAQIECBAgsHSB7n5fkq9dek75CBAgQIDADAX+uaquO8O+tUxg6wIGALZObkECBAgQIECAAAECBAgQIECAAAECBKYm0N23SvKaqfWlHwIECBAgQOALAsdW1et5ECDw5QUMALhDCBAgQIAAAQIECBAgQIAAAQIECBAYXqC7n5XkhOEhABAgQIAAgekKnFRV95luezojMA0BAwDT2AddECBAgAABAgQIECBAgAABAgQIECBwQALd/RVJPpjksgfUgmUJECBAgACBQwt8JMkVquqcQ5/qDALjChgAGHfvJSdAgAABAgQIECBAgAABAgQIECBAIEl3H5/kpTAIECBAgACByQt8f1W9cvJd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8qQk193F6YdzyruT3Kaq/vFwLnIuAQLbF+ju6yf5kyTXWPPq70ry4Kr6gzXXVY4AAQJbFzAAsHVyCxIgQIAAAQIECBAgQIAAAQIECBAgQIDAXgS6+2JJfibJI5Ncdi81LnDN6tO+t6uqM9dQSwkCBLYg0N2XT/KqJDddw3IfTvL4JM+sqs+toZ4SBAgQOHABAwAHvgUaIECAAAECBAgQIECAAAECBAgQIECAAIHDEejur0nymCT3TrIaCtjLsfqk75286bcXOtcQOFiB7r5EkhcmucMeO1m92f8rSR5dVR/fYw2XESBAYJICBgAmuS2aIkCAAAECBAgQIECAAAECBAgQIECAAIFDCXT36usAnpjkjoc69wJ//otV9fDDvMbpBAhMTKC7n5DkIYfRVif5vZ3H/f/rYVznVAIECMxGwADAbLZKowQIECBAgAABAgQIECBAgAABAgQIECBwYQLdfbMkz0hy3CGE3pfkJ6pq9fhwBwECCxDo7u9L8htJrnKIOH+T5P5V9aYFxBaBAAECFylgAMDNQYAAAQIECBAgQIAAAQIECBAgQIAAAQKLEOjuOyd5cpKrXSDQ6lO/v5bkgVX1yUWEFYIAgS8IdPdlkjwlyQlJLvje13uSPKiqXoSMAAECIwgYABhhl2UkQIAAAQIECBAgQIAAAQIECBAgQIDAQALdfa8k90vy+SQvXn1XeFV53PdA94CoYwp093WS3GXn12eTPLOqnjOmhtQECIwqYABg1J2XmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWJWAAYFHbKQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjCpgAGDUnZebAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYlYABgUdspDAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMKmAAYNSdl5sAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiVgAGBR2ykMAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwqYABg1J2XmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWJWAAYFHbKQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjCpgAGDUnZebAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYlYABgUdspDAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMKmAAYNSdl5sAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiVgAGBR2ykMAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwqYABg1J2XmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWJWAAYFHbKQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjCpgAGDUnZebAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYl8P8BrdAQ+wN7GkEAAAAASUVORK5CYII=" style=""/></g></g></g></svg> \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/description/index.html b/odex-event/muk_web_utils/static/description/index.html new file mode 100644 index 000000000..2cccde3c2 --- /dev/null +++ b/odex-event/muk_web_utils/static/description/index.html @@ -0,0 +1,124 @@ +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <h2 class="oe_slogan">MuK Web Utils</h2> + <h3 class="oe_slogan">Utility Features</h3> + <h4 class="oe_slogan" style="font-size: 23px;">MuK IT GmbH - + www.mukit.at</h4> + </div> +</section> + +<section class="oe_container"> + <div class="oe_row oe_spaced"> + <div class="text-justify" style="max-width: 84%; margin: 16px 8%;"> + <h3 class="oe_slogan">Overview</h3> + <p class="oe_mt32">Technical module to provide some utility + features. The module is mainly used as a dependency by other modules + and to provide a collection of common libraries. It has no direct + visible effect on the system.</p> + </div> + </div> +</section> + +<section class="oe_container oe_dark"> + <div class="oe_row oe_spaced"> + <h3 class="oe_slogan">Our Services</h3> + <div + style="display: flex; padding-top: 20px; justify-content: space-between;"> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/MQ5" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_implementation.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Implementation + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/u7c" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_integration.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Integration + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href="https://mukit.at/r/xDJ" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_customization.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Customization + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href=" https://mukit.at/r/J3A" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_development.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Development + </h3> + </a> + </div> + <div style="flex-basis: 18%;"> + <a href=" https://mukit.at/r/R1v" target="_blank"> + <div + style="width: 75px; height: 75px; border-radius: 100%; margin: auto;"> + <img src="service_support.png" + style="width: 100%; border-radius: 100%;"> + </div> + <h3 class="oe_slogan" + style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;"> + Odoo <br>Support + </h3> + </a> + </div> + </div> + </div> +</section> + +<section class="oe_container" style="padding: 32px 0;"> + <div class="oe_row oe_spaced" style="margin: auto;"> + <div class="oe_demo oe_picture oe_screenshot"> + <a href="https://mukit.at/r/SgN" target="_blank"> <img src="preview.png"> + </a> + </div> + </div> +</section> + +<section class="oe_container oe_dark"> + <h3 class="oe_slogan">Help and Support</h3> + <h5 class="oe_slogan" style="font-size: 20px;">Feel free to + contact us, if you need any help with your Odoo integration or + addiontal features.</h5> + <div class="oe_slogan"> + <a class="btn btn-primary btn-lg mt8" href="https://mukit.at" target="_blank"> + <i class="fa fa-globe"></i> Website + </a> + <a class="btn btn-primary btn-lg mt8" href="mailto:sale@mukit.at"> + <i class="fa fa-envelope"></i> Contact Us + </a> + <a class="btn btn-primary btn-lg mt8" href="https://github.com/muk-it" target="_blank"> + <i class="fa fa-github"></i> Issues + </a> + </div> + <img src="logo.png" + style="width: 200px; margin-bottom: 20px; display: block;" + class="mx-auto center-block"> +</section> \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/description/logo.png b/odex-event/muk_web_utils/static/description/logo.png new file mode 100644 index 000000000..9427ce33e Binary files /dev/null and b/odex-event/muk_web_utils/static/description/logo.png differ diff --git a/odex-event/muk_web_utils/static/description/preview.png b/odex-event/muk_web_utils/static/description/preview.png new file mode 100644 index 000000000..1deb1ccef Binary files /dev/null and b/odex-event/muk_web_utils/static/description/preview.png differ diff --git a/odex-event/muk_web_utils/static/description/service_customization.png b/odex-event/muk_web_utils/static/description/service_customization.png new file mode 100644 index 000000000..3eac66488 Binary files /dev/null and b/odex-event/muk_web_utils/static/description/service_customization.png differ diff --git a/odex-event/muk_web_utils/static/description/service_development.png b/odex-event/muk_web_utils/static/description/service_development.png new file mode 100644 index 000000000..580d46046 Binary files /dev/null and b/odex-event/muk_web_utils/static/description/service_development.png differ diff --git a/odex-event/muk_web_utils/static/description/service_implementation.png b/odex-event/muk_web_utils/static/description/service_implementation.png new file mode 100644 index 000000000..d64b66bda Binary files /dev/null and b/odex-event/muk_web_utils/static/description/service_implementation.png differ diff --git a/odex-event/muk_web_utils/static/description/service_integration.png b/odex-event/muk_web_utils/static/description/service_integration.png new file mode 100644 index 000000000..76c5e80f4 Binary files /dev/null and b/odex-event/muk_web_utils/static/description/service_integration.png differ diff --git a/odex-event/muk_web_utils/static/description/service_support.png b/odex-event/muk_web_utils/static/description/service_support.png new file mode 100644 index 000000000..4c530fafd Binary files /dev/null and b/odex-event/muk_web_utils/static/description/service_support.png differ diff --git a/odex-event/muk_web_utils/static/libs/simplebar/simplebar.css b/odex-event/muk_web_utils/static/libs/simplebar/simplebar.css new file mode 100644 index 000000000..4db7a3ab3 --- /dev/null +++ b/odex-event/muk_web_utils/static/libs/simplebar/simplebar.css @@ -0,0 +1,183 @@ +[data-simplebar] { + position: relative; + flex-direction: column; + flex-wrap: wrap; + justify-content: flex-start; + align-content: flex-start; + align-items: flex-start; + width: inherit; + height: inherit; + max-width: inherit; + max-height: inherit; +} + +.simplebar-wrapper { + overflow: hidden; + width: inherit; + height: inherit; + max-width: inherit; + max-height: inherit; +} + +.simplebar-mask { + direction: inherit; + position: absolute; + overflow: hidden; + padding: 0; + margin: 0; + left: 0; + top: 0; + bottom: 0; + right: 0; + width: auto !important; + height: auto !important; + z-index: 0; +} + +.simplebar-offset { + direction: inherit !important; + box-sizing: inherit !important; + resize: none !important; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + padding: 0; + margin: 0; + -webkit-overflow-scrolling: touch; +} + +.simplebar-content { + direction: inherit; + box-sizing: border-box !important; + position: relative; + display: block; + height: 100%; /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */ + width: auto; + visibility: visible; + overflow: scroll; /* Scroll on this element otherwise element can't have a padding applied properly */ + max-width: 100%; /* Not required for horizontal scroll to trigger */ + max-height: 100%; /* Needed for vertical scroll to trigger */ +} + +.simplebar-placeholder { + max-height: 100%; + max-width: 100%; + width: 100%; + pointer-events: none; +} + +.simplebar-height-auto-observer-wrapper { + box-sizing: inherit !important; + height: 100%; + width: inherit; + max-width: 1px; + position: relative; + float: left; + max-height: 1px; + overflow: hidden; + z-index: -1; + padding: 0; + margin: 0; + pointer-events: none; + flex-grow: inherit; + flex-shrink: 0; + flex-basis: 0; +} + +.simplebar-height-auto-observer { + box-sizing: inherit; + display: block; + opacity: 0; + position: absolute; + top: 0; + left: 0; + height: 1000%; + width: 1000%; + min-height: 1px; + min-width: 1px; + overflow: hidden; + pointer-events: none; + z-index: -1; +} + +.simplebar-track { + z-index: 1; + position: absolute; + right: 0; + bottom: 0; + pointer-events: none; +} + +.simplebar-scrollbar { + position: absolute; + right: 2px; + width: 7px; + min-height: 10px; +} + +.simplebar-scrollbar:before { + position: absolute; + content: ""; + background: black; + border-radius: 7px; + left: 0; + right: 0; + opacity: 0; + transition: opacity 0.2s linear; +} + +.simplebar-track .simplebar-scrollbar.simplebar-visible:before { + /* When hovered, remove all transitions from drag handle */ + opacity: 0.5; + transition: opacity 0s linear; +} + +.simplebar-track.simplebar-vertical { + top: 0; + width: 11px; +} + +.simplebar-track.simplebar-vertical .simplebar-scrollbar:before { + top: 2px; + bottom: 2px; +} + +.simplebar-track.simplebar-horizontal { + left: 0; + height: 11px; +} + +.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before { + height: 100%; + left: 2px; + right: 2px; +} + +.simplebar-track.simplebar-horizontal .simplebar-scrollbar { + right: auto; + left: 0; + top: 2px; + height: 7px; + min-height: 0; + min-width: 10px; + width: auto; +} + +/* Rtl support */ +[data-simplebar-direction="rtl"] .simplebar-track.simplebar-vertical { + right: auto; + left: 0; +} + +.hs-dummy-scrollbar-size { + direction: rtl; + position: fixed; + opacity: 0; + visibility: hidden; + height: 500px; + width: 500px; + overflow-y: hidden; + overflow-x: scroll; +} \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/libs/simplebar/simplebar.js b/odex-event/muk_web_utils/static/libs/simplebar/simplebar.js new file mode 100644 index 000000000..1132dc97f --- /dev/null +++ b/odex-event/muk_web_utils/static/libs/simplebar/simplebar.js @@ -0,0 +1,4391 @@ +/** + * SimpleBar.js - v3.1.3 + * Scrollbars, simpler. + * https://grsmto.github.io/simplebar/ + * + * Made by Adrien Denat from a fork by Jonathan Nicol + * Under MIT License + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.SimpleBar = factory()); +}(this, function () { 'use strict'; + + var _isObject = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + + var _anObject = function (it) { + if (!_isObject(it)) throw TypeError(it + ' is not an object!'); + return it; + }; + + // 7.2.1 RequireObjectCoercible(argument) + var _defined = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; + }; + + // 7.1.13 ToObject(argument) + + var _toObject = function (it) { + return Object(_defined(it)); + }; + + // 7.1.4 ToInteger + var ceil = Math.ceil; + var floor = Math.floor; + var _toInteger = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); + }; + + // 7.1.15 ToLength + + var min = Math.min; + var _toLength = function (it) { + return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 + }; + + // true -> String#at + // false -> String#codePointAt + var _stringAt = function (TO_STRING) { + return function (that, pos) { + var s = String(_defined(that)); + var i = _toInteger(pos); + var l = s.length; + var a, b; + if (i < 0 || i >= l) return TO_STRING ? '' : undefined; + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; + }; + + var at = _stringAt(true); + + // `AdvanceStringIndex` abstract operation + // https://tc39.github.io/ecma262/#sec-advancestringindex + var _advanceStringIndex = function (S, index, unicode) { + return index + (unicode ? at(S, index).length : 1); + }; + + var toString = {}.toString; + + var _cof = function (it) { + return toString.call(it).slice(8, -1); + }; + + var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var _core = createCommonjsModule(function (module) { + var core = module.exports = { version: '2.6.2' }; + if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef + }); + var _core_1 = _core.version; + + var _global = createCommonjsModule(function (module) { + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); + if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef + }); + + var _library = false; + + var _shared = createCommonjsModule(function (module) { + var SHARED = '__core-js_shared__'; + var store = _global[SHARED] || (_global[SHARED] = {}); + + (module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); + })('versions', []).push({ + version: _core.version, + mode: _library ? 'pure' : 'global', + copyright: '© 2019 Denis Pushkarev (zloirock.ru)' + }); + }); + + var id = 0; + var px = Math.random(); + var _uid = function (key) { + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); + }; + + var _wks = createCommonjsModule(function (module) { + var store = _shared('wks'); + + var Symbol = _global.Symbol; + var USE_SYMBOL = typeof Symbol == 'function'; + + var $exports = module.exports = function (name) { + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name)); + }; + + $exports.store = store; + }); + + // getting tag from 19.1.3.6 Object.prototype.toString() + + var TAG = _wks('toStringTag'); + // ES3 wrong here + var ARG = _cof(function () { return arguments; }()) == 'Arguments'; + + // fallback for IE11 Script Access Denied error + var tryGet = function (it, key) { + try { + return it[key]; + } catch (e) { /* empty */ } + }; + + var _classof = function (it) { + var O, T, B; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T + // builtinTag case + : ARG ? _cof(O) + // ES3 arguments fallback + : (B = _cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; + }; + + var builtinExec = RegExp.prototype.exec; + + // `RegExpExec` abstract operation + // https://tc39.github.io/ecma262/#sec-regexpexec + var _regexpExecAbstract = function (R, S) { + var exec = R.exec; + if (typeof exec === 'function') { + var result = exec.call(R, S); + if (typeof result !== 'object') { + throw new TypeError('RegExp exec method returned something other than an Object or null'); + } + return result; + } + if (_classof(R) !== 'RegExp') { + throw new TypeError('RegExp#exec called on incompatible receiver'); + } + return builtinExec.call(R, S); + }; + + // 21.2.5.3 get RegExp.prototype.flags + + var _flags = function () { + var that = _anObject(this); + var result = ''; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.unicode) result += 'u'; + if (that.sticky) result += 'y'; + return result; + }; + + var nativeExec = RegExp.prototype.exec; + // This always refers to the native implementation, because the + // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, + // which loads this file before patching the method. + var nativeReplace = String.prototype.replace; + + var patchedExec = nativeExec; + + var LAST_INDEX = 'lastIndex'; + + var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/, + re2 = /b*/g; + nativeExec.call(re1, 'a'); + nativeExec.call(re2, 'a'); + return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0; + })(); + + // nonparticipating capturing group, copied from es5-shim's String#split patch. + var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED; + + if (PATCH) { + patchedExec = function exec(str) { + var re = this; + var lastIndex, reCopy, match, i; + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + re.source + '$(?!\\s)', _flags.call(re)); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX]; + + match = nativeExec.call(re, str); + + if (UPDATES_LAST_INDEX_WRONG && match) { + re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ + // eslint-disable-next-line no-loop-func + nativeReplace.call(match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + return match; + }; + } + + var _regexpExec = patchedExec; + + var _fails = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } + }; + + // Thank's IE8 for his funny defineProperty + var _descriptors = !_fails(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; + }); + + var document$1 = _global.document; + // typeof document.createElement is 'object' in old IE + var is = _isObject(document$1) && _isObject(document$1.createElement); + var _domCreate = function (it) { + return is ? document$1.createElement(it) : {}; + }; + + var _ie8DomDefine = !_descriptors && !_fails(function () { + return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7; + }); + + // 7.1.1 ToPrimitive(input [, PreferredType]) + + // instead of the ES6 spec version, we didn't implement @@toPrimitive case + // and the second argument - flag - preferred type is a string + var _toPrimitive = function (it, S) { + if (!_isObject(it)) return it; + var fn, val; + if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val; + if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val; + if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val; + throw TypeError("Can't convert object to primitive value"); + }; + + var dP = Object.defineProperty; + + var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) { + _anObject(O); + P = _toPrimitive(P, true); + _anObject(Attributes); + if (_ie8DomDefine) try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; + }; + + var _objectDp = { + f: f + }; + + var _propertyDesc = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + + var _hide = _descriptors ? function (object, key, value) { + return _objectDp.f(object, key, _propertyDesc(1, value)); + } : function (object, key, value) { + object[key] = value; + return object; + }; + + var hasOwnProperty = {}.hasOwnProperty; + var _has = function (it, key) { + return hasOwnProperty.call(it, key); + }; + + var _redefine = createCommonjsModule(function (module) { + var SRC = _uid('src'); + var TO_STRING = 'toString'; + var $toString = Function[TO_STRING]; + var TPL = ('' + $toString).split(TO_STRING); + + _core.inspectSource = function (it) { + return $toString.call(it); + }; + + (module.exports = function (O, key, val, safe) { + var isFunction = typeof val == 'function'; + if (isFunction) _has(val, 'name') || _hide(val, 'name', key); + if (O[key] === val) return; + if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); + if (O === _global) { + O[key] = val; + } else if (!safe) { + delete O[key]; + _hide(O, key, val); + } else if (O[key]) { + O[key] = val; + } else { + _hide(O, key, val); + } + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(Function.prototype, TO_STRING, function toString() { + return typeof this == 'function' && this[SRC] || $toString.call(this); + }); + }); + + var _aFunction = function (it) { + if (typeof it != 'function') throw TypeError(it + ' is not a function!'); + return it; + }; + + // optional / simple context binding + + var _ctx = function (fn, that, length) { + _aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; + }; + + var PROTOTYPE = 'prototype'; + + var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE]; + var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {}); + var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); + var key, own, out, exp; + if (IS_GLOBAL) source = name; + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out; + // extend global + if (target) _redefine(target, key, out, type & $export.U); + // export + if (exports[key] != out) _hide(exports, key, exp); + if (IS_PROTO && expProto[key] != out) expProto[key] = out; + } + }; + _global.core = _core; + // type bitmap + $export.F = 1; // forced + $export.G = 2; // global + $export.S = 4; // static + $export.P = 8; // proto + $export.B = 16; // bind + $export.W = 32; // wrap + $export.U = 64; // safe + $export.R = 128; // real proto method for `library` + var _export = $export; + + _export({ + target: 'RegExp', + proto: true, + forced: _regexpExec !== /./.exec + }, { + exec: _regexpExec + }); + + var SPECIES = _wks('species'); + + var REPLACE_SUPPORTS_NAMED_GROUPS = !_fails(function () { + // #replace needs built-in support for named groups. + // #match works fine because it just return the exec results, even if it has + // a "grops" property. + var re = /./; + re.exec = function () { + var result = []; + result.groups = { a: '7' }; + return result; + }; + return ''.replace(re, '$<a>') !== '7'; + }); + + var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () { + // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec + var re = /(?:)/; + var originalExec = re.exec; + re.exec = function () { return originalExec.apply(this, arguments); }; + var result = 'ab'.split(re); + return result.length === 2 && result[0] === 'a' && result[1] === 'b'; + })(); + + var _fixReWks = function (KEY, length, exec) { + var SYMBOL = _wks(KEY); + + var DELEGATES_TO_SYMBOL = !_fails(function () { + // String methods call symbol-named RegEp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) != 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !_fails(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + re.exec = function () { execCalled = true; return null; }; + if (KEY === 'split') { + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES] = function () { return re; }; + } + re[SYMBOL](''); + return !execCalled; + }) : undefined; + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) || + (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) + ) { + var nativeRegExpMethod = /./[SYMBOL]; + var fns = exec( + _defined, + SYMBOL, + ''[KEY], + function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) { + if (regexp.exec === _regexpExec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; + } + return { done: true, value: nativeMethod.call(str, regexp, arg2) }; + } + return { done: false }; + } + ); + var strfn = fns[0]; + var rxfn = fns[1]; + + _redefine(String.prototype, KEY, strfn); + _hide(RegExp.prototype, SYMBOL, length == 2 + // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) + // 21.2.5.11 RegExp.prototype[@@split](string, limit) + ? function (string, arg) { return rxfn.call(string, this, arg); } + // 21.2.5.6 RegExp.prototype[@@match](string) + // 21.2.5.9 RegExp.prototype[@@search](string) + : function (string) { return rxfn.call(string, this); } + ); + } + }; + + var max = Math.max; + var min$1 = Math.min; + var floor$1 = Math.floor; + var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g; + var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g; + + var maybeToString = function (it) { + return it === undefined ? it : String(it); + }; + + // @@replace logic + _fixReWks('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) { + return [ + // `String.prototype.replace` method + // https://tc39.github.io/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = defined(this); + var fn = searchValue == undefined ? undefined : searchValue[REPLACE]; + return fn !== undefined + ? fn.call(searchValue, O, replaceValue) + : $replace.call(String(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace + function (regexp, replaceValue) { + var res = maybeCallNative($replace, regexp, this, replaceValue); + if (res.done) return res.value; + + var rx = _anObject(regexp); + var S = String(this); + var functionalReplace = typeof replaceValue === 'function'; + if (!functionalReplace) replaceValue = String(replaceValue); + var global = rx.global; + if (global) { + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + var results = []; + while (true) { + var result = _regexpExecAbstract(rx, S); + if (result === null) break; + results.push(result); + if (!global) break; + var matchStr = String(result[0]); + if (matchStr === '') rx.lastIndex = _advanceStringIndex(S, _toLength(rx.lastIndex), fullUnicode); + } + var accumulatedResult = ''; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + var matched = String(result[0]); + var position = max(min$1(_toInteger(result.index), S.length), 0); + var captures = []; + // NOTE: This is equivalent to + // captures = result.slice(1).map(maybeToString) + // but for some reason `nativeSlice.call(result, 1, result.length)` (called in + // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and + // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. + for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = [matched].concat(captures, position, S); + if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); + var replacement = String(replaceValue.apply(undefined, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += S.slice(nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + return accumulatedResult + S.slice(nextSourcePosition); + } + ]; + + // https://tc39.github.io/ecma262/#sec-getsubstitution + function getSubstitution(matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== undefined) { + namedCaptures = _toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return $replace.call(replacement, symbols, function (match, ch) { + var capture; + switch (ch.charAt(0)) { + case '$': return '$'; + case '&': return matched; + case '`': return str.slice(0, position); + case "'": return str.slice(tailPos); + case '<': + capture = namedCaptures[ch.slice(1, -1)]; + break; + default: // \d\d? + var n = +ch; + if (n === 0) return match; + if (n > m) { + var f = floor$1(n / 10); + if (f === 0) return match; + if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); + return match; + } + capture = captures[n - 1]; + } + return capture === undefined ? '' : capture; + }); + } + }); + + var dP$1 = _objectDp.f; + var FProto = Function.prototype; + var nameRE = /^\s*function ([^ (]*)/; + var NAME = 'name'; + + // 19.2.4.2 name + NAME in FProto || _descriptors && dP$1(FProto, NAME, { + configurable: true, + get: function () { + try { + return ('' + this).match(nameRE)[1]; + } catch (e) { + return ''; + } + } + }); + + // @@match logic + _fixReWks('match', 1, function (defined, MATCH, $match, maybeCallNative) { + return [ + // `String.prototype.match` method + // https://tc39.github.io/ecma262/#sec-string.prototype.match + function match(regexp) { + var O = defined(this); + var fn = regexp == undefined ? undefined : regexp[MATCH]; + return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O)); + }, + // `RegExp.prototype[@@match]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match + function (regexp) { + var res = maybeCallNative($match, regexp, this); + if (res.done) return res.value; + var rx = _anObject(regexp); + var S = String(this); + if (!rx.global) return _regexpExecAbstract(rx, S); + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + var A = []; + var n = 0; + var result; + while ((result = _regexpExecAbstract(rx, S)) !== null) { + var matchStr = String(result[0]); + A[n] = matchStr; + if (matchStr === '') rx.lastIndex = _advanceStringIndex(S, _toLength(rx.lastIndex), fullUnicode); + n++; + } + return n === 0 ? null : A; + } + ]; + }); + + // 22.1.3.31 Array.prototype[@@unscopables] + var UNSCOPABLES = _wks('unscopables'); + var ArrayProto = Array.prototype; + if (ArrayProto[UNSCOPABLES] == undefined) _hide(ArrayProto, UNSCOPABLES, {}); + var _addToUnscopables = function (key) { + ArrayProto[UNSCOPABLES][key] = true; + }; + + var _iterStep = function (done, value) { + return { value: value, done: !!done }; + }; + + var _iterators = {}; + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + + // eslint-disable-next-line no-prototype-builtins + var _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) { + return _cof(it) == 'String' ? it.split('') : Object(it); + }; + + // to indexed object, toObject with fallback for non-array-like ES3 strings + + + var _toIobject = function (it) { + return _iobject(_defined(it)); + }; + + var max$1 = Math.max; + var min$2 = Math.min; + var _toAbsoluteIndex = function (index, length) { + index = _toInteger(index); + return index < 0 ? max$1(index + length, 0) : min$2(index, length); + }; + + // false -> Array#indexOf + // true -> Array#includes + + + + var _arrayIncludes = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = _toIobject($this); + var length = _toLength(O.length); + var index = _toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) if (IS_INCLUDES || index in O) { + if (O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; + }; + + var shared = _shared('keys'); + + var _sharedKey = function (key) { + return shared[key] || (shared[key] = _uid(key)); + }; + + var arrayIndexOf = _arrayIncludes(false); + var IE_PROTO = _sharedKey('IE_PROTO'); + + var _objectKeysInternal = function (object, names) { + var O = _toIobject(object); + var i = 0; + var result = []; + var key; + for (key in O) if (key != IE_PROTO) _has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (_has(O, key = names[i++])) { + ~arrayIndexOf(result, key) || result.push(key); + } + return result; + }; + + // IE 8- don't enum bug keys + var _enumBugKeys = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' + ).split(','); + + // 19.1.2.14 / 15.2.3.14 Object.keys(O) + + + + var _objectKeys = Object.keys || function keys(O) { + return _objectKeysInternal(O, _enumBugKeys); + }; + + var _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) { + _anObject(O); + var keys = _objectKeys(Properties); + var length = keys.length; + var i = 0; + var P; + while (length > i) _objectDp.f(O, P = keys[i++], Properties[P]); + return O; + }; + + var document$2 = _global.document; + var _html = document$2 && document$2.documentElement; + + // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) + + + + var IE_PROTO$1 = _sharedKey('IE_PROTO'); + var Empty = function () { /* empty */ }; + var PROTOTYPE$1 = 'prototype'; + + // Create object with fake `null` prototype: use iframe Object with cleared prototype + var createDict = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = _domCreate('iframe'); + var i = _enumBugKeys.length; + var lt = '<'; + var gt = '>'; + var iframeDocument; + iframe.style.display = 'none'; + _html.appendChild(iframe); + iframe.src = 'javascript:'; // eslint-disable-line no-script-url + // createDict = iframe.contentWindow.Object; + // html.removeChild(iframe); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while (i--) delete createDict[PROTOTYPE$1][_enumBugKeys[i]]; + return createDict(); + }; + + var _objectCreate = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + Empty[PROTOTYPE$1] = _anObject(O); + result = new Empty(); + Empty[PROTOTYPE$1] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO$1] = O; + } else result = createDict(); + return Properties === undefined ? result : _objectDps(result, Properties); + }; + + var def = _objectDp.f; + + var TAG$1 = _wks('toStringTag'); + + var _setToStringTag = function (it, tag, stat) { + if (it && !_has(it = stat ? it : it.prototype, TAG$1)) def(it, TAG$1, { configurable: true, value: tag }); + }; + + var IteratorPrototype = {}; + + // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() + _hide(IteratorPrototype, _wks('iterator'), function () { return this; }); + + var _iterCreate = function (Constructor, NAME, next) { + Constructor.prototype = _objectCreate(IteratorPrototype, { next: _propertyDesc(1, next) }); + _setToStringTag(Constructor, NAME + ' Iterator'); + }; + + // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) + + + var IE_PROTO$2 = _sharedKey('IE_PROTO'); + var ObjectProto = Object.prototype; + + var _objectGpo = Object.getPrototypeOf || function (O) { + O = _toObject(O); + if (_has(O, IE_PROTO$2)) return O[IE_PROTO$2]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } return O instanceof Object ? ObjectProto : null; + }; + + var ITERATOR = _wks('iterator'); + var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` + var FF_ITERATOR = '@@iterator'; + var KEYS = 'keys'; + var VALUES = 'values'; + + var returnThis = function () { return this; }; + + var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { + _iterCreate(Constructor, NAME, next); + var getMethod = function (kind) { + if (!BUGGY && kind in proto) return proto[kind]; + switch (kind) { + case KEYS: return function keys() { return new Constructor(this, kind); }; + case VALUES: return function values() { return new Constructor(this, kind); }; + } return function entries() { return new Constructor(this, kind); }; + }; + var TAG = NAME + ' Iterator'; + var DEF_VALUES = DEFAULT == VALUES; + var VALUES_BUG = false; + var proto = Base.prototype; + var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; + var $default = $native || getMethod(DEFAULT); + var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; + var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; + var methods, key, IteratorPrototype; + // Fix native + if ($anyNative) { + IteratorPrototype = _objectGpo($anyNative.call(new Base())); + if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { + // Set @@toStringTag to native iterators + _setToStringTag(IteratorPrototype, TAG, true); + // fix for some old engines + if (!_library && typeof IteratorPrototype[ITERATOR] != 'function') _hide(IteratorPrototype, ITERATOR, returnThis); + } + } + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEF_VALUES && $native && $native.name !== VALUES) { + VALUES_BUG = true; + $default = function values() { return $native.call(this); }; + } + // Define iterator + if ((!_library || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { + _hide(proto, ITERATOR, $default); + } + // Plug for library + _iterators[NAME] = $default; + _iterators[TAG] = returnThis; + if (DEFAULT) { + methods = { + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: $entries + }; + if (FORCED) for (key in methods) { + if (!(key in proto)) _redefine(proto, key, methods[key]); + } else _export(_export.P + _export.F * (BUGGY || VALUES_BUG), NAME, methods); + } + return methods; + }; + + // 22.1.3.4 Array.prototype.entries() + // 22.1.3.13 Array.prototype.keys() + // 22.1.3.29 Array.prototype.values() + // 22.1.3.30 Array.prototype[@@iterator]() + var es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) { + this._t = _toIobject(iterated); // target + this._i = 0; // next index + this._k = kind; // kind + // 22.1.5.2.1 %ArrayIteratorPrototype%.next() + }, function () { + var O = this._t; + var kind = this._k; + var index = this._i++; + if (!O || index >= O.length) { + this._t = undefined; + return _iterStep(1); + } + if (kind == 'keys') return _iterStep(0, index); + if (kind == 'values') return _iterStep(0, O[index]); + return _iterStep(0, [index, O[index]]); + }, 'values'); + + // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) + _iterators.Arguments = _iterators.Array; + + _addToUnscopables('keys'); + _addToUnscopables('values'); + _addToUnscopables('entries'); + + var ITERATOR$1 = _wks('iterator'); + var TO_STRING_TAG = _wks('toStringTag'); + var ArrayValues = _iterators.Array; + + var DOMIterables = { + CSSRuleList: true, // TODO: Not spec compliant, should be false. + CSSStyleDeclaration: false, + CSSValueList: false, + ClientRectList: false, + DOMRectList: false, + DOMStringList: false, + DOMTokenList: true, + DataTransferItemList: false, + FileList: false, + HTMLAllCollection: false, + HTMLCollection: false, + HTMLFormElement: false, + HTMLSelectElement: false, + MediaList: true, // TODO: Not spec compliant, should be false. + MimeTypeArray: false, + NamedNodeMap: false, + NodeList: true, + PaintRequestList: false, + Plugin: false, + PluginArray: false, + SVGLengthList: false, + SVGNumberList: false, + SVGPathSegList: false, + SVGPointList: false, + SVGStringList: false, + SVGTransformList: false, + SourceBufferList: false, + StyleSheetList: true, // TODO: Not spec compliant, should be false. + TextTrackCueList: false, + TextTrackList: false, + TouchList: false + }; + + for (var collections = _objectKeys(DOMIterables), i = 0; i < collections.length; i++) { + var NAME$1 = collections[i]; + var explicit = DOMIterables[NAME$1]; + var Collection = _global[NAME$1]; + var proto = Collection && Collection.prototype; + var key; + if (proto) { + if (!proto[ITERATOR$1]) _hide(proto, ITERATOR$1, ArrayValues); + if (!proto[TO_STRING_TAG]) _hide(proto, TO_STRING_TAG, NAME$1); + _iterators[NAME$1] = ArrayValues; + if (explicit) for (key in es6_array_iterator) if (!proto[key]) _redefine(proto, key, es6_array_iterator[key], true); + } + } + + var $at = _stringAt(true); + + // 21.1.3.27 String.prototype[@@iterator]() + _iterDefine(String, 'String', function (iterated) { + this._t = String(iterated); // target + this._i = 0; // next index + // 21.1.5.2.1 %StringIteratorPrototype%.next() + }, function () { + var O = this._t; + var index = this._i; + var point; + if (index >= O.length) return { value: undefined, done: true }; + point = $at(O, index); + this._i += point.length; + return { value: point, done: false }; + }); + + // call something on iterator step with safe closing on error + + var _iterCall = function (iterator, fn, value, entries) { + try { + return entries ? fn(_anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (e) { + var ret = iterator['return']; + if (ret !== undefined) _anObject(ret.call(iterator)); + throw e; + } + }; + + // check on default Array iterator + + var ITERATOR$2 = _wks('iterator'); + var ArrayProto$1 = Array.prototype; + + var _isArrayIter = function (it) { + return it !== undefined && (_iterators.Array === it || ArrayProto$1[ITERATOR$2] === it); + }; + + var _createProperty = function (object, index, value) { + if (index in object) _objectDp.f(object, index, _propertyDesc(0, value)); + else object[index] = value; + }; + + var ITERATOR$3 = _wks('iterator'); + + var core_getIteratorMethod = _core.getIteratorMethod = function (it) { + if (it != undefined) return it[ITERATOR$3] + || it['@@iterator'] + || _iterators[_classof(it)]; + }; + + var ITERATOR$4 = _wks('iterator'); + var SAFE_CLOSING = false; + + try { + var riter = [7][ITERATOR$4](); + riter['return'] = function () { SAFE_CLOSING = true; }; + } catch (e) { /* empty */ } + + var _iterDetect = function (exec, skipClosing) { + if (!skipClosing && !SAFE_CLOSING) return false; + var safe = false; + try { + var arr = [7]; + var iter = arr[ITERATOR$4](); + iter.next = function () { return { done: safe = true }; }; + arr[ITERATOR$4] = function () { return iter; }; + exec(arr); + } catch (e) { /* empty */ } + return safe; + }; + + _export(_export.S + _export.F * !_iterDetect(function (iter) { }), 'Array', { + // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) + from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = _toObject(arrayLike); + var C = typeof this == 'function' ? this : Array; + var aLen = arguments.length; + var mapfn = aLen > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var index = 0; + var iterFn = core_getIteratorMethod(O); + var length, result, step, iterator; + if (mapping) mapfn = _ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); + // if object isn't iterable or it's array with default iterator - use simple case + if (iterFn != undefined && !(C == Array && _isArrayIter(iterFn))) { + for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { + _createProperty(result, index, mapping ? _iterCall(iterator, mapfn, [step.value, index], true) : step.value); + } + } else { + length = _toLength(O.length); + for (result = new C(length); length > index; index++) { + _createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); + } + } + result.length = index; + return result; + } + }); + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + var ownKeys = Object.keys(source); + + if (typeof Object.getOwnPropertySymbols === 'function') { + ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { + return Object.getOwnPropertyDescriptor(source, sym).enumerable; + })); + } + + ownKeys.forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } + + return target; + } + + var scrollbarWidth = createCommonjsModule(function (module, exports) { + /*! scrollbarWidth.js v0.1.3 | felixexter | MIT | https://github.com/felixexter/scrollbarWidth */ + (function (root, factory) { + { + module.exports = factory(); + } + }(commonjsGlobal, function () { + + function scrollbarWidth() { + if (typeof document === 'undefined') { + return 0 + } + + var + body = document.body, + box = document.createElement('div'), + boxStyle = box.style, + width; + + boxStyle.position = 'absolute'; + boxStyle.top = boxStyle.left = '-9999px'; + boxStyle.width = boxStyle.height = '100px'; + boxStyle.overflow = 'scroll'; + + body.appendChild(box); + + width = box.offsetWidth - box.clientWidth; + + body.removeChild(box); + + return width; + } + + return scrollbarWidth; + })); + }); + + /** + * lodash (Custom Build) <https://lodash.com/> + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors <https://jquery.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var objectToString = objectProto.toString; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = function() { + return root.Date.now(); + }; + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + result = wait - timeSinceLastCall; + + return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + var lodash_throttle = throttle; + + /** + * lodash (Custom Build) <https://lodash.com/> + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors <https://jquery.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT$1 = 'Expected a function'; + + /** Used as references for various `Number` constants. */ + var NAN$1 = 0 / 0; + + /** `Object#toString` result references. */ + var symbolTag$1 = '[object Symbol]'; + + /** Used to match leading and trailing whitespace. */ + var reTrim$1 = /^\s+|\s+$/g; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex$1 = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary$1 = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal$1 = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt$1 = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + + /** Detect free variable `self`. */ + var freeSelf$1 = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root$1 = freeGlobal$1 || freeSelf$1 || Function('return this')(); + + /** Used for built-in method references. */ + var objectProto$1 = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var objectToString$1 = objectProto$1.toString; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax$1 = Math.max, + nativeMin$1 = Math.min; + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now$1 = function() { + return root$1.Date.now(); + }; + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce$1(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT$1); + } + wait = toNumber$1(wait) || 0; + if (isObject$1(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax$1(toNumber$1(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + result = wait - timeSinceLastCall; + + return maxing ? nativeMin$1(result, maxWait - timeSinceLastInvoke) : result; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now$1(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now$1()); + } + + function debounced() { + var time = now$1(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject$1(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike$1(value) { + return !!value && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol$1(value) { + return typeof value == 'symbol' || + (isObjectLike$1(value) && objectToString$1.call(value) == symbolTag$1); + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber$1(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol$1(value)) { + return NAN$1; + } + if (isObject$1(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject$1(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim$1, ''); + var isBinary = reIsBinary$1.test(value); + return (isBinary || reIsOctal$1.test(value)) + ? freeParseInt$1(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex$1.test(value) ? NAN$1 : +value); + } + + var lodash_debounce = debounce$1; + + /** + * lodash (Custom Build) <https://lodash.com/> + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors <https://jquery.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT$2 = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** `Object#toString` result references. */ + var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]'; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal$2 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + + /** Detect free variable `self`. */ + var freeSelf$2 = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root$2 = freeGlobal$2 || freeSelf$2 || Function('return this')(); + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ + function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; + } + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto$2 = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root$2['__core-js_shared__']; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var objectToString$2 = objectProto$2.toString; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$1).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /* Built-in method references that are verified to be native. */ + var Map$1 = getNative(root$2, 'Map'), + nativeCreate = getNative(Object, 'create'); + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty$1.call(data, key) ? data[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty$1.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map$1 || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject$2(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT$2); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Assign cache to `_.memoize`. + memoize.Cache = MapCache; + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject$2(value) ? objectToString$2.call(value) : ''; + return tag == funcTag || tag == genTag; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject$2(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + var lodash_memoize = memoize; + + /** + * A collection of shims that provide minimal functionality of the ES6 collections. + * + * These implementations are not meant to be used outside of the ResizeObserver + * modules as they cover only a limited range of use cases. + */ + /* eslint-disable require-jsdoc, valid-jsdoc */ + var MapShim = (function () { + if (typeof Map !== 'undefined') { + return Map; + } + /** + * Returns index in provided array that matches the specified key. + * + * @param {Array<Array>} arr + * @param {*} key + * @returns {number} + */ + function getIndex(arr, key) { + var result = -1; + arr.some(function (entry, index) { + if (entry[0] === key) { + result = index; + return true; + } + return false; + }); + return result; + } + return /** @class */ (function () { + function class_1() { + this.__entries__ = []; + } + Object.defineProperty(class_1.prototype, "size", { + /** + * @returns {boolean} + */ + get: function () { + return this.__entries__.length; + }, + enumerable: true, + configurable: true + }); + /** + * @param {*} key + * @returns {*} + */ + class_1.prototype.get = function (key) { + var index = getIndex(this.__entries__, key); + var entry = this.__entries__[index]; + return entry && entry[1]; + }; + /** + * @param {*} key + * @param {*} value + * @returns {void} + */ + class_1.prototype.set = function (key, value) { + var index = getIndex(this.__entries__, key); + if (~index) { + this.__entries__[index][1] = value; + } + else { + this.__entries__.push([key, value]); + } + }; + /** + * @param {*} key + * @returns {void} + */ + class_1.prototype.delete = function (key) { + var entries = this.__entries__; + var index = getIndex(entries, key); + if (~index) { + entries.splice(index, 1); + } + }; + /** + * @param {*} key + * @returns {void} + */ + class_1.prototype.has = function (key) { + return !!~getIndex(this.__entries__, key); + }; + /** + * @returns {void} + */ + class_1.prototype.clear = function () { + this.__entries__.splice(0); + }; + /** + * @param {Function} callback + * @param {*} [ctx=null] + * @returns {void} + */ + class_1.prototype.forEach = function (callback, ctx) { + if (ctx === void 0) { ctx = null; } + for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) { + var entry = _a[_i]; + callback.call(ctx, entry[1], entry[0]); + } + }; + return class_1; + }()); + })(); + + /** + * Detects whether window and document objects are available in current environment. + */ + var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document; + + // Returns global object of a current environment. + var global$1 = (function () { + if (typeof global !== 'undefined' && global.Math === Math) { + return global; + } + if (typeof self !== 'undefined' && self.Math === Math) { + return self; + } + if (typeof window !== 'undefined' && window.Math === Math) { + return window; + } + // eslint-disable-next-line no-new-func + return Function('return this')(); + })(); + + /** + * A shim for the requestAnimationFrame which falls back to the setTimeout if + * first one is not supported. + * + * @returns {number} Requests' identifier. + */ + var requestAnimationFrame$1 = (function () { + if (typeof requestAnimationFrame === 'function') { + // It's required to use a bounded function because IE sometimes throws + // an "Invalid calling object" error if rAF is invoked without the global + // object on the left hand side. + return requestAnimationFrame.bind(global$1); + } + return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); }; + })(); + + // Defines minimum timeout before adding a trailing call. + var trailingTimeout = 2; + /** + * Creates a wrapper function which ensures that provided callback will be + * invoked only once during the specified delay period. + * + * @param {Function} callback - Function to be invoked after the delay period. + * @param {number} delay - Delay after which to invoke callback. + * @returns {Function} + */ + function throttle$1 (callback, delay) { + var leadingCall = false, trailingCall = false, lastCallTime = 0; + /** + * Invokes the original callback function and schedules new invocation if + * the "proxy" was called during current request. + * + * @returns {void} + */ + function resolvePending() { + if (leadingCall) { + leadingCall = false; + callback(); + } + if (trailingCall) { + proxy(); + } + } + /** + * Callback invoked after the specified delay. It will further postpone + * invocation of the original function delegating it to the + * requestAnimationFrame. + * + * @returns {void} + */ + function timeoutCallback() { + requestAnimationFrame$1(resolvePending); + } + /** + * Schedules invocation of the original function. + * + * @returns {void} + */ + function proxy() { + var timeStamp = Date.now(); + if (leadingCall) { + // Reject immediately following calls. + if (timeStamp - lastCallTime < trailingTimeout) { + return; + } + // Schedule new call to be in invoked when the pending one is resolved. + // This is important for "transitions" which never actually start + // immediately so there is a chance that we might miss one if change + // happens amids the pending invocation. + trailingCall = true; + } + else { + leadingCall = true; + trailingCall = false; + setTimeout(timeoutCallback, delay); + } + lastCallTime = timeStamp; + } + return proxy; + } + + // Minimum delay before invoking the update of observers. + var REFRESH_DELAY = 20; + // A list of substrings of CSS properties used to find transition events that + // might affect dimensions of observed elements. + var transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight']; + // Check if MutationObserver is available. + var mutationObserverSupported = typeof MutationObserver !== 'undefined'; + /** + * Singleton controller class which handles updates of ResizeObserver instances. + */ + var ResizeObserverController = /** @class */ (function () { + /** + * Creates a new instance of ResizeObserverController. + * + * @private + */ + function ResizeObserverController() { + /** + * Indicates whether DOM listeners have been added. + * + * @private {boolean} + */ + this.connected_ = false; + /** + * Tells that controller has subscribed for Mutation Events. + * + * @private {boolean} + */ + this.mutationEventsAdded_ = false; + /** + * Keeps reference to the instance of MutationObserver. + * + * @private {MutationObserver} + */ + this.mutationsObserver_ = null; + /** + * A list of connected observers. + * + * @private {Array<ResizeObserverSPI>} + */ + this.observers_ = []; + this.onTransitionEnd_ = this.onTransitionEnd_.bind(this); + this.refresh = throttle$1(this.refresh.bind(this), REFRESH_DELAY); + } + /** + * Adds observer to observers list. + * + * @param {ResizeObserverSPI} observer - Observer to be added. + * @returns {void} + */ + ResizeObserverController.prototype.addObserver = function (observer) { + if (!~this.observers_.indexOf(observer)) { + this.observers_.push(observer); + } + // Add listeners if they haven't been added yet. + if (!this.connected_) { + this.connect_(); + } + }; + /** + * Removes observer from observers list. + * + * @param {ResizeObserverSPI} observer - Observer to be removed. + * @returns {void} + */ + ResizeObserverController.prototype.removeObserver = function (observer) { + var observers = this.observers_; + var index = observers.indexOf(observer); + // Remove observer if it's present in registry. + if (~index) { + observers.splice(index, 1); + } + // Remove listeners if controller has no connected observers. + if (!observers.length && this.connected_) { + this.disconnect_(); + } + }; + /** + * Invokes the update of observers. It will continue running updates insofar + * it detects changes. + * + * @returns {void} + */ + ResizeObserverController.prototype.refresh = function () { + var changesDetected = this.updateObservers_(); + // Continue running updates if changes have been detected as there might + // be future ones caused by CSS transitions. + if (changesDetected) { + this.refresh(); + } + }; + /** + * Updates every observer from observers list and notifies them of queued + * entries. + * + * @private + * @returns {boolean} Returns "true" if any observer has detected changes in + * dimensions of it's elements. + */ + ResizeObserverController.prototype.updateObservers_ = function () { + // Collect observers that have active observations. + var activeObservers = this.observers_.filter(function (observer) { + return observer.gatherActive(), observer.hasActive(); + }); + // Deliver notifications in a separate cycle in order to avoid any + // collisions between observers, e.g. when multiple instances of + // ResizeObserver are tracking the same element and the callback of one + // of them changes content dimensions of the observed target. Sometimes + // this may result in notifications being blocked for the rest of observers. + activeObservers.forEach(function (observer) { return observer.broadcastActive(); }); + return activeObservers.length > 0; + }; + /** + * Initializes DOM listeners. + * + * @private + * @returns {void} + */ + ResizeObserverController.prototype.connect_ = function () { + // Do nothing if running in a non-browser environment or if listeners + // have been already added. + if (!isBrowser || this.connected_) { + return; + } + // Subscription to the "Transitionend" event is used as a workaround for + // delayed transitions. This way it's possible to capture at least the + // final state of an element. + document.addEventListener('transitionend', this.onTransitionEnd_); + window.addEventListener('resize', this.refresh); + if (mutationObserverSupported) { + this.mutationsObserver_ = new MutationObserver(this.refresh); + this.mutationsObserver_.observe(document, { + attributes: true, + childList: true, + characterData: true, + subtree: true + }); + } + else { + document.addEventListener('DOMSubtreeModified', this.refresh); + this.mutationEventsAdded_ = true; + } + this.connected_ = true; + }; + /** + * Removes DOM listeners. + * + * @private + * @returns {void} + */ + ResizeObserverController.prototype.disconnect_ = function () { + // Do nothing if running in a non-browser environment or if listeners + // have been already removed. + if (!isBrowser || !this.connected_) { + return; + } + document.removeEventListener('transitionend', this.onTransitionEnd_); + window.removeEventListener('resize', this.refresh); + if (this.mutationsObserver_) { + this.mutationsObserver_.disconnect(); + } + if (this.mutationEventsAdded_) { + document.removeEventListener('DOMSubtreeModified', this.refresh); + } + this.mutationsObserver_ = null; + this.mutationEventsAdded_ = false; + this.connected_ = false; + }; + /** + * "Transitionend" event handler. + * + * @private + * @param {TransitionEvent} event + * @returns {void} + */ + ResizeObserverController.prototype.onTransitionEnd_ = function (_a) { + var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b; + // Detect whether transition may affect dimensions of an element. + var isReflowProperty = transitionKeys.some(function (key) { + return !!~propertyName.indexOf(key); + }); + if (isReflowProperty) { + this.refresh(); + } + }; + /** + * Returns instance of the ResizeObserverController. + * + * @returns {ResizeObserverController} + */ + ResizeObserverController.getInstance = function () { + if (!this.instance_) { + this.instance_ = new ResizeObserverController(); + } + return this.instance_; + }; + /** + * Holds reference to the controller's instance. + * + * @private {ResizeObserverController} + */ + ResizeObserverController.instance_ = null; + return ResizeObserverController; + }()); + + /** + * Defines non-writable/enumerable properties of the provided target object. + * + * @param {Object} target - Object for which to define properties. + * @param {Object} props - Properties to be defined. + * @returns {Object} Target object. + */ + var defineConfigurable = (function (target, props) { + for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) { + var key = _a[_i]; + Object.defineProperty(target, key, { + value: props[key], + enumerable: false, + writable: false, + configurable: true + }); + } + return target; + }); + + /** + * Returns the global object associated with provided element. + * + * @param {Object} target + * @returns {Object} + */ + var getWindowOf = (function (target) { + // Assume that the element is an instance of Node, which means that it + // has the "ownerDocument" property from which we can retrieve a + // corresponding global object. + var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView; + // Return the local global object if it's not possible extract one from + // provided element. + return ownerGlobal || global$1; + }); + + // Placeholder of an empty content rectangle. + var emptyRect = createRectInit(0, 0, 0, 0); + /** + * Converts provided string to a number. + * + * @param {number|string} value + * @returns {number} + */ + function toFloat(value) { + return parseFloat(value) || 0; + } + /** + * Extracts borders size from provided styles. + * + * @param {CSSStyleDeclaration} styles + * @param {...string} positions - Borders positions (top, right, ...) + * @returns {number} + */ + function getBordersSize(styles) { + var positions = []; + for (var _i = 1; _i < arguments.length; _i++) { + positions[_i - 1] = arguments[_i]; + } + return positions.reduce(function (size, position) { + var value = styles['border-' + position + '-width']; + return size + toFloat(value); + }, 0); + } + /** + * Extracts paddings sizes from provided styles. + * + * @param {CSSStyleDeclaration} styles + * @returns {Object} Paddings box. + */ + function getPaddings(styles) { + var positions = ['top', 'right', 'bottom', 'left']; + var paddings = {}; + for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) { + var position = positions_1[_i]; + var value = styles['padding-' + position]; + paddings[position] = toFloat(value); + } + return paddings; + } + /** + * Calculates content rectangle of provided SVG element. + * + * @param {SVGGraphicsElement} target - Element content rectangle of which needs + * to be calculated. + * @returns {DOMRectInit} + */ + function getSVGContentRect(target) { + var bbox = target.getBBox(); + return createRectInit(0, 0, bbox.width, bbox.height); + } + /** + * Calculates content rectangle of provided HTMLElement. + * + * @param {HTMLElement} target - Element for which to calculate the content rectangle. + * @returns {DOMRectInit} + */ + function getHTMLElementContentRect(target) { + // Client width & height properties can't be + // used exclusively as they provide rounded values. + var clientWidth = target.clientWidth, clientHeight = target.clientHeight; + // By this condition we can catch all non-replaced inline, hidden and + // detached elements. Though elements with width & height properties less + // than 0.5 will be discarded as well. + // + // Without it we would need to implement separate methods for each of + // those cases and it's not possible to perform a precise and performance + // effective test for hidden elements. E.g. even jQuery's ':visible' filter + // gives wrong results for elements with width & height less than 0.5. + if (!clientWidth && !clientHeight) { + return emptyRect; + } + var styles = getWindowOf(target).getComputedStyle(target); + var paddings = getPaddings(styles); + var horizPad = paddings.left + paddings.right; + var vertPad = paddings.top + paddings.bottom; + // Computed styles of width & height are being used because they are the + // only dimensions available to JS that contain non-rounded values. It could + // be possible to utilize the getBoundingClientRect if only it's data wasn't + // affected by CSS transformations let alone paddings, borders and scroll bars. + var width = toFloat(styles.width), height = toFloat(styles.height); + // Width & height include paddings and borders when the 'border-box' box + // model is applied (except for IE). + if (styles.boxSizing === 'border-box') { + // Following conditions are required to handle Internet Explorer which + // doesn't include paddings and borders to computed CSS dimensions. + // + // We can say that if CSS dimensions + paddings are equal to the "client" + // properties then it's either IE, and thus we don't need to subtract + // anything, or an element merely doesn't have paddings/borders styles. + if (Math.round(width + horizPad) !== clientWidth) { + width -= getBordersSize(styles, 'left', 'right') + horizPad; + } + if (Math.round(height + vertPad) !== clientHeight) { + height -= getBordersSize(styles, 'top', 'bottom') + vertPad; + } + } + // Following steps can't be applied to the document's root element as its + // client[Width/Height] properties represent viewport area of the window. + // Besides, it's as well not necessary as the <html> itself neither has + // rendered scroll bars nor it can be clipped. + if (!isDocumentElement(target)) { + // In some browsers (only in Firefox, actually) CSS width & height + // include scroll bars size which can be removed at this step as scroll + // bars are the only difference between rounded dimensions + paddings + // and "client" properties, though that is not always true in Chrome. + var vertScrollbar = Math.round(width + horizPad) - clientWidth; + var horizScrollbar = Math.round(height + vertPad) - clientHeight; + // Chrome has a rather weird rounding of "client" properties. + // E.g. for an element with content width of 314.2px it sometimes gives + // the client width of 315px and for the width of 314.7px it may give + // 314px. And it doesn't happen all the time. So just ignore this delta + // as a non-relevant. + if (Math.abs(vertScrollbar) !== 1) { + width -= vertScrollbar; + } + if (Math.abs(horizScrollbar) !== 1) { + height -= horizScrollbar; + } + } + return createRectInit(paddings.left, paddings.top, width, height); + } + /** + * Checks whether provided element is an instance of the SVGGraphicsElement. + * + * @param {Element} target - Element to be checked. + * @returns {boolean} + */ + var isSVGGraphicsElement = (function () { + // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement + // interface. + if (typeof SVGGraphicsElement !== 'undefined') { + return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; }; + } + // If it's so, then check that element is at least an instance of the + // SVGElement and that it has the "getBBox" method. + // eslint-disable-next-line no-extra-parens + return function (target) { return (target instanceof getWindowOf(target).SVGElement && + typeof target.getBBox === 'function'); }; + })(); + /** + * Checks whether provided element is a document element (<html>). + * + * @param {Element} target - Element to be checked. + * @returns {boolean} + */ + function isDocumentElement(target) { + return target === getWindowOf(target).document.documentElement; + } + /** + * Calculates an appropriate content rectangle for provided html or svg element. + * + * @param {Element} target - Element content rectangle of which needs to be calculated. + * @returns {DOMRectInit} + */ + function getContentRect(target) { + if (!isBrowser) { + return emptyRect; + } + if (isSVGGraphicsElement(target)) { + return getSVGContentRect(target); + } + return getHTMLElementContentRect(target); + } + /** + * Creates rectangle with an interface of the DOMRectReadOnly. + * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly + * + * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions. + * @returns {DOMRectReadOnly} + */ + function createReadOnlyRect(_a) { + var x = _a.x, y = _a.y, width = _a.width, height = _a.height; + // If DOMRectReadOnly is available use it as a prototype for the rectangle. + var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object; + var rect = Object.create(Constr.prototype); + // Rectangle's properties are not writable and non-enumerable. + defineConfigurable(rect, { + x: x, y: y, width: width, height: height, + top: y, + right: x + width, + bottom: height + y, + left: x + }); + return rect; + } + /** + * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates. + * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit + * + * @param {number} x - X coordinate. + * @param {number} y - Y coordinate. + * @param {number} width - Rectangle's width. + * @param {number} height - Rectangle's height. + * @returns {DOMRectInit} + */ + function createRectInit(x, y, width, height) { + return { x: x, y: y, width: width, height: height }; + } + + /** + * Class that is responsible for computations of the content rectangle of + * provided DOM element and for keeping track of it's changes. + */ + var ResizeObservation = /** @class */ (function () { + /** + * Creates an instance of ResizeObservation. + * + * @param {Element} target - Element to be observed. + */ + function ResizeObservation(target) { + /** + * Broadcasted width of content rectangle. + * + * @type {number} + */ + this.broadcastWidth = 0; + /** + * Broadcasted height of content rectangle. + * + * @type {number} + */ + this.broadcastHeight = 0; + /** + * Reference to the last observed content rectangle. + * + * @private {DOMRectInit} + */ + this.contentRect_ = createRectInit(0, 0, 0, 0); + this.target = target; + } + /** + * Updates content rectangle and tells whether it's width or height properties + * have changed since the last broadcast. + * + * @returns {boolean} + */ + ResizeObservation.prototype.isActive = function () { + var rect = getContentRect(this.target); + this.contentRect_ = rect; + return (rect.width !== this.broadcastWidth || + rect.height !== this.broadcastHeight); + }; + /** + * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data + * from the corresponding properties of the last observed content rectangle. + * + * @returns {DOMRectInit} Last observed content rectangle. + */ + ResizeObservation.prototype.broadcastRect = function () { + var rect = this.contentRect_; + this.broadcastWidth = rect.width; + this.broadcastHeight = rect.height; + return rect; + }; + return ResizeObservation; + }()); + + var ResizeObserverEntry = /** @class */ (function () { + /** + * Creates an instance of ResizeObserverEntry. + * + * @param {Element} target - Element that is being observed. + * @param {DOMRectInit} rectInit - Data of the element's content rectangle. + */ + function ResizeObserverEntry(target, rectInit) { + var contentRect = createReadOnlyRect(rectInit); + // According to the specification following properties are not writable + // and are also not enumerable in the native implementation. + // + // Property accessors are not being used as they'd require to define a + // private WeakMap storage which may cause memory leaks in browsers that + // don't support this type of collections. + defineConfigurable(this, { target: target, contentRect: contentRect }); + } + return ResizeObserverEntry; + }()); + + var ResizeObserverSPI = /** @class */ (function () { + /** + * Creates a new instance of ResizeObserver. + * + * @param {ResizeObserverCallback} callback - Callback function that is invoked + * when one of the observed elements changes it's content dimensions. + * @param {ResizeObserverController} controller - Controller instance which + * is responsible for the updates of observer. + * @param {ResizeObserver} callbackCtx - Reference to the public + * ResizeObserver instance which will be passed to callback function. + */ + function ResizeObserverSPI(callback, controller, callbackCtx) { + /** + * Collection of resize observations that have detected changes in dimensions + * of elements. + * + * @private {Array<ResizeObservation>} + */ + this.activeObservations_ = []; + /** + * Registry of the ResizeObservation instances. + * + * @private {Map<Element, ResizeObservation>} + */ + this.observations_ = new MapShim(); + if (typeof callback !== 'function') { + throw new TypeError('The callback provided as parameter 1 is not a function.'); + } + this.callback_ = callback; + this.controller_ = controller; + this.callbackCtx_ = callbackCtx; + } + /** + * Starts observing provided element. + * + * @param {Element} target - Element to be observed. + * @returns {void} + */ + ResizeObserverSPI.prototype.observe = function (target) { + if (!arguments.length) { + throw new TypeError('1 argument required, but only 0 present.'); + } + // Do nothing if current environment doesn't have the Element interface. + if (typeof Element === 'undefined' || !(Element instanceof Object)) { + return; + } + if (!(target instanceof getWindowOf(target).Element)) { + throw new TypeError('parameter 1 is not of type "Element".'); + } + var observations = this.observations_; + // Do nothing if element is already being observed. + if (observations.has(target)) { + return; + } + observations.set(target, new ResizeObservation(target)); + this.controller_.addObserver(this); + // Force the update of observations. + this.controller_.refresh(); + }; + /** + * Stops observing provided element. + * + * @param {Element} target - Element to stop observing. + * @returns {void} + */ + ResizeObserverSPI.prototype.unobserve = function (target) { + if (!arguments.length) { + throw new TypeError('1 argument required, but only 0 present.'); + } + // Do nothing if current environment doesn't have the Element interface. + if (typeof Element === 'undefined' || !(Element instanceof Object)) { + return; + } + if (!(target instanceof getWindowOf(target).Element)) { + throw new TypeError('parameter 1 is not of type "Element".'); + } + var observations = this.observations_; + // Do nothing if element is not being observed. + if (!observations.has(target)) { + return; + } + observations.delete(target); + if (!observations.size) { + this.controller_.removeObserver(this); + } + }; + /** + * Stops observing all elements. + * + * @returns {void} + */ + ResizeObserverSPI.prototype.disconnect = function () { + this.clearActive(); + this.observations_.clear(); + this.controller_.removeObserver(this); + }; + /** + * Collects observation instances the associated element of which has changed + * it's content rectangle. + * + * @returns {void} + */ + ResizeObserverSPI.prototype.gatherActive = function () { + var _this = this; + this.clearActive(); + this.observations_.forEach(function (observation) { + if (observation.isActive()) { + _this.activeObservations_.push(observation); + } + }); + }; + /** + * Invokes initial callback function with a list of ResizeObserverEntry + * instances collected from active resize observations. + * + * @returns {void} + */ + ResizeObserverSPI.prototype.broadcastActive = function () { + // Do nothing if observer doesn't have active observations. + if (!this.hasActive()) { + return; + } + var ctx = this.callbackCtx_; + // Create ResizeObserverEntry instance for every active observation. + var entries = this.activeObservations_.map(function (observation) { + return new ResizeObserverEntry(observation.target, observation.broadcastRect()); + }); + this.callback_.call(ctx, entries, ctx); + this.clearActive(); + }; + /** + * Clears the collection of active observations. + * + * @returns {void} + */ + ResizeObserverSPI.prototype.clearActive = function () { + this.activeObservations_.splice(0); + }; + /** + * Tells whether observer has active observations. + * + * @returns {boolean} + */ + ResizeObserverSPI.prototype.hasActive = function () { + return this.activeObservations_.length > 0; + }; + return ResizeObserverSPI; + }()); + + // Registry of internal observers. If WeakMap is not available use current shim + // for the Map collection as it has all required methods and because WeakMap + // can't be fully polyfilled anyway. + var observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim(); + /** + * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation + * exposing only those methods and properties that are defined in the spec. + */ + var ResizeObserver = /** @class */ (function () { + /** + * Creates a new instance of ResizeObserver. + * + * @param {ResizeObserverCallback} callback - Callback that is invoked when + * dimensions of the observed elements change. + */ + function ResizeObserver(callback) { + if (!(this instanceof ResizeObserver)) { + throw new TypeError('Cannot call a class as a function.'); + } + if (!arguments.length) { + throw new TypeError('1 argument required, but only 0 present.'); + } + var controller = ResizeObserverController.getInstance(); + var observer = new ResizeObserverSPI(callback, controller, this); + observers.set(this, observer); + } + return ResizeObserver; + }()); + // Expose public methods of ResizeObserver. + [ + 'observe', + 'unobserve', + 'disconnect' + ].forEach(function (method) { + ResizeObserver.prototype[method] = function () { + var _a; + return (_a = observers.get(this))[method].apply(_a, arguments); + }; + }); + + var index = (function () { + // Export existing implementation if available. + if (typeof global$1.ResizeObserver !== 'undefined') { + return global$1.ResizeObserver; + } + return ResizeObserver; + })(); + + var canUseDOM = !!( + typeof window !== 'undefined' && + window.document && + window.document.createElement + ); + + var canUseDom = canUseDOM; + + var SimpleBar = + /*#__PURE__*/ + function () { + function SimpleBar(element, options) { + var _this = this; + + _classCallCheck(this, SimpleBar); + + this.onScroll = function () { + if (!_this.scrollXTicking) { + window.requestAnimationFrame(_this.scrollX); + _this.scrollXTicking = true; + } + + if (!_this.scrollYTicking) { + window.requestAnimationFrame(_this.scrollY); + _this.scrollYTicking = true; + } + }; + + this.scrollX = function () { + if (_this.axis.x.isOverflowing) { + _this.showScrollbar('x'); + + _this.positionScrollbar('x'); + } + + _this.scrollXTicking = false; + }; + + this.scrollY = function () { + if (_this.axis.y.isOverflowing) { + _this.showScrollbar('y'); + + _this.positionScrollbar('y'); + } + + _this.scrollYTicking = false; + }; + + this.onMouseEnter = function () { + _this.showScrollbar('x'); + + _this.showScrollbar('y'); + }; + + this.onMouseMove = function (e) { + _this.mouseX = e.clientX; + _this.mouseY = e.clientY; + + if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) { + _this.onMouseMoveForAxis('x'); + } + + if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) { + _this.onMouseMoveForAxis('y'); + } + }; + + this.onMouseLeave = function () { + _this.onMouseMove.cancel(); + + if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) { + _this.onMouseLeaveForAxis('x'); + } + + if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) { + _this.onMouseLeaveForAxis('y'); + } + + _this.mouseX = -1; + _this.mouseY = -1; + }; + + this.onWindowResize = function () { + // Recalculate scrollbarWidth in case it's a zoom + _this.scrollbarWidth = scrollbarWidth(); + + _this.hideNativeScrollbar(); + }; + + this.hideScrollbars = function () { + _this.axis.x.track.rect = _this.axis.x.track.el.getBoundingClientRect(); + _this.axis.y.track.rect = _this.axis.y.track.el.getBoundingClientRect(); + + if (!_this.isWithinBounds(_this.axis.y.track.rect)) { + _this.axis.y.scrollbar.el.classList.remove(_this.classNames.visible); + + _this.axis.y.isVisible = false; + } + + if (!_this.isWithinBounds(_this.axis.x.track.rect)) { + _this.axis.x.scrollbar.el.classList.remove(_this.classNames.visible); + + _this.axis.x.isVisible = false; + } + }; + + this.onPointerEvent = function (e) { + var isWithinBoundsY, isWithinBoundsX; + _this.axis.x.scrollbar.rect = _this.axis.x.scrollbar.el.getBoundingClientRect(); + _this.axis.y.scrollbar.rect = _this.axis.y.scrollbar.el.getBoundingClientRect(); + + if (_this.axis.x.isOverflowing || _this.axis.x.forceVisible) { + isWithinBoundsX = _this.isWithinBounds(_this.axis.x.scrollbar.rect); + } + + if (_this.axis.y.isOverflowing || _this.axis.y.forceVisible) { + isWithinBoundsY = _this.isWithinBounds(_this.axis.y.scrollbar.rect); + } // If any pointer event is called on the scrollbar + + + if (isWithinBoundsY || isWithinBoundsX) { + // Preventing the event's default action stops text being + // selectable during the drag. + e.preventDefault(); // Prevent event leaking + + e.stopPropagation(); + + if (e.type === 'mousedown') { + if (isWithinBoundsY) { + _this.onDragStart(e, 'y'); + } + + if (isWithinBoundsX) { + _this.onDragStart(e, 'x'); + } + } + } + }; + + this.drag = function (e) { + var eventOffset; + var track = _this.axis[_this.draggedAxis].track; + var trackSize = track.rect[_this.axis[_this.draggedAxis].sizeAttr]; + var scrollbar = _this.axis[_this.draggedAxis].scrollbar; + e.preventDefault(); + e.stopPropagation(); + + if (_this.draggedAxis === 'y') { + eventOffset = e.pageY; + } else { + eventOffset = e.pageX; + } // Calculate how far the user's mouse is from the top/left of the scrollbar (minus the dragOffset). + + + var dragPos = eventOffset - track.rect[_this.axis[_this.draggedAxis].offsetAttr] - _this.axis[_this.draggedAxis].dragOffset; // Convert the mouse position into a percentage of the scrollbar height/width. + + var dragPerc = dragPos / track.rect[_this.axis[_this.draggedAxis].sizeAttr]; // Scroll the content by the same percentage. + + var scrollPos = dragPerc * _this.contentEl[_this.axis[_this.draggedAxis].scrollSizeAttr]; // Fix browsers inconsistency on RTL + + if (_this.draggedAxis === 'x') { + scrollPos = _this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollbarInverted ? scrollPos - (trackSize + scrollbar.size) : scrollPos; + scrollPos = _this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollingInverted ? -scrollPos : scrollPos; + } + + _this.contentEl[_this.axis[_this.draggedAxis].scrollOffsetAttr] = scrollPos; + }; + + this.onEndDrag = function (e) { + e.preventDefault(); + e.stopPropagation(); + document.removeEventListener('mousemove', _this.drag); + document.removeEventListener('mouseup', _this.onEndDrag); + }; + + this.el = element; + this.flashTimeout; + this.contentEl; + this.offsetEl; + this.maskEl; + this.globalObserver; + this.mutationObserver; + this.resizeObserver; + this.scrollbarWidth; + this.minScrollbarWidth = 20; + this.options = _objectSpread({}, SimpleBar.defaultOptions, options); + this.classNames = _objectSpread({}, SimpleBar.defaultOptions.classNames, this.options.classNames); + this.isRtl; + this.axis = { + x: { + scrollOffsetAttr: 'scrollLeft', + sizeAttr: 'width', + scrollSizeAttr: 'scrollWidth', + offsetAttr: 'left', + overflowAttr: 'overflowX', + dragOffset: 0, + isOverflowing: true, + isVisible: false, + forceVisible: false, + track: {}, + scrollbar: {} + }, + y: { + scrollOffsetAttr: 'scrollTop', + sizeAttr: 'height', + scrollSizeAttr: 'scrollHeight', + offsetAttr: 'top', + overflowAttr: 'overflowY', + dragOffset: 0, + isOverflowing: true, + isVisible: false, + forceVisible: false, + track: {}, + scrollbar: {} + } + }; + this.recalculate = lodash_throttle(this.recalculate.bind(this), 64); + this.onMouseMove = lodash_throttle(this.onMouseMove.bind(this), 64); + this.hideScrollbars = lodash_debounce(this.hideScrollbars.bind(this), this.options.timeout); + this.onWindowResize = lodash_debounce(this.onWindowResize.bind(this), 64, { + leading: true + }); + SimpleBar.getRtlHelpers = lodash_memoize(SimpleBar.getRtlHelpers); // getContentElement is deprecated + + this.getContentElement = this.getScrollElement; + this.init(); + } + /** + * Static properties + */ + + /** + * Helper to fix browsers inconsistency on RTL: + * - Firefox inverts the scrollbar initial position + * - IE11 inverts both scrollbar position and scrolling offset + * Directly inspired by @KingSora's OverlayScrollbars https://github.com/KingSora/OverlayScrollbars/blob/master/js/OverlayScrollbars.js#L1634 + */ + + + _createClass(SimpleBar, [{ + key: "init", + value: function init() { + // Save a reference to the instance, so we know this DOM node has already been instancied + this.el.SimpleBar = this; // We stop here on server-side + + if (canUseDom) { + this.initDOM(); + this.scrollbarWidth = scrollbarWidth(); + this.recalculate(); + this.initListeners(); + } + } + }, { + key: "initDOM", + value: function initDOM() { + var _this2 = this; + + // make sure this element doesn't have the elements yet + if (Array.from(this.el.children).filter(function (child) { + return child.classList.contains(_this2.classNames.wrapper); + }).length) { + // assume that element has his DOM already initiated + this.wrapperEl = this.el.querySelector(".".concat(this.classNames.wrapper)); + this.contentEl = this.el.querySelector(".".concat(this.classNames.content)); + this.offsetEl = this.el.querySelector(".".concat(this.classNames.offset)); + this.maskEl = this.el.querySelector(".".concat(this.classNames.mask)); + this.placeholderEl = this.el.querySelector(".".concat(this.classNames.placeholder)); + this.heightAutoObserverWrapperEl = this.el.querySelector(".".concat(this.classNames.heightAutoObserverWrapperEl)); + this.heightAutoObserverEl = this.el.querySelector(".".concat(this.classNames.heightAutoObserverEl)); + this.axis.x.track.el = this.el.querySelector(".".concat(this.classNames.track, ".").concat(this.classNames.horizontal)); + this.axis.y.track.el = this.el.querySelector(".".concat(this.classNames.track, ".").concat(this.classNames.vertical)); + } else { + // Prepare DOM + this.wrapperEl = document.createElement('div'); + this.contentEl = document.createElement('div'); + this.offsetEl = document.createElement('div'); + this.maskEl = document.createElement('div'); + this.placeholderEl = document.createElement('div'); + this.heightAutoObserverWrapperEl = document.createElement('div'); + this.heightAutoObserverEl = document.createElement('div'); + this.wrapperEl.classList.add(this.classNames.wrapper); + this.contentEl.classList.add(this.classNames.content); + this.offsetEl.classList.add(this.classNames.offset); + this.maskEl.classList.add(this.classNames.mask); + this.placeholderEl.classList.add(this.classNames.placeholder); + this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl); + this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl); + + while (this.el.firstChild) { + this.contentEl.appendChild(this.el.firstChild); + } + + this.offsetEl.appendChild(this.contentEl); + this.maskEl.appendChild(this.offsetEl); + this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl); + this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl); + this.wrapperEl.appendChild(this.maskEl); + this.wrapperEl.appendChild(this.placeholderEl); + this.el.appendChild(this.wrapperEl); + } + + if (!this.axis.x.track.el || !this.axis.y.track.el) { + var track = document.createElement('div'); + var scrollbar = document.createElement('div'); + track.classList.add(this.classNames.track); + scrollbar.classList.add(this.classNames.scrollbar); + + if (!this.options.autoHide) { + scrollbar.classList.add(this.classNames.visible); + } + + track.appendChild(scrollbar); + this.axis.x.track.el = track.cloneNode(true); + this.axis.x.track.el.classList.add(this.classNames.horizontal); + this.axis.y.track.el = track.cloneNode(true); + this.axis.y.track.el.classList.add(this.classNames.vertical); + this.el.appendChild(this.axis.x.track.el); + this.el.appendChild(this.axis.y.track.el); + } + + this.axis.x.scrollbar.el = this.axis.x.track.el.querySelector(".".concat(this.classNames.scrollbar)); + this.axis.y.scrollbar.el = this.axis.y.track.el.querySelector(".".concat(this.classNames.scrollbar)); + this.el.setAttribute('data-simplebar', 'init'); + } + }, { + key: "initListeners", + value: function initListeners() { + var _this3 = this; + + // Event listeners + if (this.options.autoHide) { + this.el.addEventListener('mouseenter', this.onMouseEnter); + } + + ['mousedown', 'click', 'dblclick', 'touchstart', 'touchend', 'touchmove'].forEach(function (e) { + _this3.el.addEventListener(e, _this3.onPointerEvent, true); + }); + this.el.addEventListener('mousemove', this.onMouseMove); + this.el.addEventListener('mouseleave', this.onMouseLeave); + this.contentEl.addEventListener('scroll', this.onScroll); // Browser zoom triggers a window resize + + window.addEventListener('resize', this.onWindowResize); // MutationObserver is IE11+ + + if (typeof MutationObserver !== 'undefined') { + // create an observer instance + this.mutationObserver = new MutationObserver(function (mutations) { + mutations.forEach(function (mutation) { + if (mutation.target === _this3.el || !_this3.isChildNode(mutation.target) || mutation.addedNodes.length || mutation.removedNodes.length) { + _this3.recalculate(); + } + }); + }); // pass in the target node, as well as the observer options + + this.mutationObserver.observe(this.el, { + attributes: true, + childList: true, + characterData: true, + subtree: true + }); + } + + this.resizeObserver = new index(this.recalculate); + this.resizeObserver.observe(this.el); + } + }, { + key: "recalculate", + value: function recalculate() { + var isHeightAuto = this.heightAutoObserverEl.offsetHeight <= 1; + this.elStyles = window.getComputedStyle(this.el); + this.isRtl = this.elStyles.direction === 'rtl'; + this.contentEl.style.padding = "".concat(this.elStyles.paddingTop, " ").concat(this.elStyles.paddingRight, " ").concat(this.elStyles.paddingBottom, " ").concat(this.elStyles.paddingLeft); + this.contentEl.style.height = isHeightAuto ? 'auto' : '100%'; + this.placeholderEl.style.width = "".concat(this.contentEl.scrollWidth, "px"); + this.placeholderEl.style.height = "".concat(this.contentEl.scrollHeight, "px"); + this.wrapperEl.style.margin = "-".concat(this.elStyles.paddingTop, " -").concat(this.elStyles.paddingRight, " -").concat(this.elStyles.paddingBottom, " -").concat(this.elStyles.paddingLeft); + this.axis.x.track.rect = this.axis.x.track.el.getBoundingClientRect(); + this.axis.y.track.rect = this.axis.y.track.el.getBoundingClientRect(); // Set isOverflowing to false if scrollbar is not necessary (content is shorter than offset) + + this.axis.x.isOverflowing = (this.scrollbarWidth ? this.contentEl.scrollWidth : this.contentEl.scrollWidth - this.minScrollbarWidth) > Math.ceil(this.axis.x.track.rect.width); + this.axis.y.isOverflowing = (this.scrollbarWidth ? this.contentEl.scrollHeight : this.contentEl.scrollHeight - this.minScrollbarWidth) > Math.ceil(this.axis.y.track.rect.height); // Set isOverflowing to false if user explicitely set hidden overflow + + this.axis.x.isOverflowing = this.elStyles.overflowX === 'hidden' ? false : this.axis.x.isOverflowing; + this.axis.y.isOverflowing = this.elStyles.overflowY === 'hidden' ? false : this.axis.y.isOverflowing; + this.axis.x.forceVisible = this.options.forceVisible === "x" || this.options.forceVisible === true; + this.axis.y.forceVisible = this.options.forceVisible === "y" || this.options.forceVisible === true; + this.axis.x.scrollbar.size = this.getScrollbarSize('x'); + this.axis.y.scrollbar.size = this.getScrollbarSize('y'); + this.axis.x.scrollbar.el.style.width = "".concat(this.axis.x.scrollbar.size, "px"); + this.axis.y.scrollbar.el.style.height = "".concat(this.axis.y.scrollbar.size, "px"); + this.positionScrollbar('x'); + this.positionScrollbar('y'); + this.toggleTrackVisibility('x'); + this.toggleTrackVisibility('y'); + this.hideNativeScrollbar(); + } + /** + * Calculate scrollbar size + */ + + }, { + key: "getScrollbarSize", + value: function getScrollbarSize() { + var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y'; + var contentSize = this.scrollbarWidth ? this.contentEl[this.axis[axis].scrollSizeAttr] : this.contentEl[this.axis[axis].scrollSizeAttr] - this.minScrollbarWidth; + var trackSize = this.axis[axis].track.rect[this.axis[axis].sizeAttr]; + var scrollbarSize; + + if (!this.axis[axis].isOverflowing) { + return; + } + + var scrollbarRatio = trackSize / contentSize; // Calculate new height/position of drag handle. + + scrollbarSize = Math.max(~~(scrollbarRatio * trackSize), this.options.scrollbarMinSize); + + if (this.options.scrollbarMaxSize) { + scrollbarSize = Math.min(scrollbarSize, this.options.scrollbarMaxSize); + } + + return scrollbarSize; + } + }, { + key: "positionScrollbar", + value: function positionScrollbar() { + var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y'; + var contentSize = this.contentEl[this.axis[axis].scrollSizeAttr]; + var trackSize = this.axis[axis].track.rect[this.axis[axis].sizeAttr]; + var hostSize = parseInt(this.elStyles[this.axis[axis].sizeAttr], 10); + var scrollbar = this.axis[axis].scrollbar; + var scrollOffset = this.contentEl[this.axis[axis].scrollOffsetAttr]; + scrollOffset = axis === 'x' && this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollingInverted ? -scrollOffset : scrollOffset; + var scrollPourcent = scrollOffset / (contentSize - hostSize); + var handleOffset = ~~((trackSize - scrollbar.size) * scrollPourcent); + handleOffset = axis === 'x' && this.isRtl && SimpleBar.getRtlHelpers().isRtlScrollbarInverted ? handleOffset + (trackSize - scrollbar.size) : handleOffset; + scrollbar.el.style.transform = axis === 'x' ? "translate3d(".concat(handleOffset, "px, 0, 0)") : "translate3d(0, ".concat(handleOffset, "px, 0)"); + } + }, { + key: "toggleTrackVisibility", + value: function toggleTrackVisibility() { + var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y'; + var track = this.axis[axis].track.el; + var scrollbar = this.axis[axis].scrollbar.el; + + if (this.axis[axis].isOverflowing || this.axis[axis].forceVisible) { + track.style.visibility = 'visible'; + this.contentEl.style[this.axis[axis].overflowAttr] = 'scroll'; + } else { + track.style.visibility = 'hidden'; + this.contentEl.style[this.axis[axis].overflowAttr] = 'hidden'; + } // Even if forceVisible is enabled, scrollbar itself should be hidden + + + if (this.axis[axis].isOverflowing) { + scrollbar.style.visibility = 'visible'; + } else { + scrollbar.style.visibility = 'hidden'; + } + } + }, { + key: "hideNativeScrollbar", + value: function hideNativeScrollbar() { + this.offsetEl.style[this.isRtl ? 'left' : 'right'] = this.axis.y.isOverflowing || this.axis.y.forceVisible ? "-".concat(this.scrollbarWidth || this.minScrollbarWidth, "px") : 0; + this.offsetEl.style.bottom = this.axis.x.isOverflowing || this.axis.x.forceVisible ? "-".concat(this.scrollbarWidth || this.minScrollbarWidth, "px") : 0; // If floating scrollbar + + if (!this.scrollbarWidth) { + var paddingDirection = [this.isRtl ? 'paddingLeft' : 'paddingRight']; + this.contentEl.style[paddingDirection] = this.axis.y.isOverflowing || this.axis.y.forceVisible ? "calc(".concat(this.elStyles[paddingDirection], " + ").concat(this.minScrollbarWidth, "px)") : this.elStyles[paddingDirection]; + this.contentEl.style.paddingBottom = this.axis.x.isOverflowing || this.axis.x.forceVisible ? "calc(".concat(this.elStyles.paddingBottom, " + ").concat(this.minScrollbarWidth, "px)") : this.elStyles.paddingBottom; + } + } + /** + * On scroll event handling + */ + + }, { + key: "onMouseMoveForAxis", + value: function onMouseMoveForAxis() { + var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y'; + this.axis[axis].track.rect = this.axis[axis].track.el.getBoundingClientRect(); + this.axis[axis].scrollbar.rect = this.axis[axis].scrollbar.el.getBoundingClientRect(); + var isWithinScrollbarBoundsX = this.isWithinBounds(this.axis[axis].scrollbar.rect); + + if (isWithinScrollbarBoundsX) { + this.axis[axis].scrollbar.el.classList.add(this.classNames.hover); + } else { + this.axis[axis].scrollbar.el.classList.remove(this.classNames.hover); + } + + if (this.isWithinBounds(this.axis[axis].track.rect)) { + this.showScrollbar(axis); + this.axis[axis].track.el.classList.add(this.classNames.hover); + } else { + this.axis[axis].track.el.classList.remove(this.classNames.hover); + } + } + }, { + key: "onMouseLeaveForAxis", + value: function onMouseLeaveForAxis() { + var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y'; + this.axis[axis].track.el.classList.remove(this.classNames.hover); + this.axis[axis].scrollbar.el.classList.remove(this.classNames.hover); + } + }, { + key: "showScrollbar", + + /** + * Show scrollbar + */ + value: function showScrollbar() { + var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y'; + var scrollbar = this.axis[axis].scrollbar.el; + + if (!this.axis[axis].isVisible) { + scrollbar.classList.add(this.classNames.visible); + this.axis[axis].isVisible = true; + } + + if (this.options.autoHide) { + this.hideScrollbars(); + } + } + /** + * Hide Scrollbar + */ + + }, { + key: "onDragStart", + + /** + * on scrollbar handle drag movement starts + */ + value: function onDragStart(e) { + var axis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'y'; + var scrollbar = this.axis[axis].scrollbar.el; // Measure how far the user's mouse is from the top of the scrollbar drag handle. + + var eventOffset = axis === 'y' ? e.pageY : e.pageX; + this.axis[axis].dragOffset = eventOffset - scrollbar.getBoundingClientRect()[this.axis[axis].offsetAttr]; + this.draggedAxis = axis; + document.addEventListener('mousemove', this.drag); + document.addEventListener('mouseup', this.onEndDrag); + } + /** + * Drag scrollbar handle + */ + + }, { + key: "getScrollElement", + + /** + * Getter for original scrolling element + */ + value: function getScrollElement() { + return this.contentEl; + } + }, { + key: "removeListeners", + value: function removeListeners() { + var _this4 = this; + + // Event listeners + if (this.options.autoHide) { + this.el.removeEventListener('mouseenter', this.onMouseEnter); + } + + ['mousedown', 'click', 'dblclick', 'touchstart', 'touchend', 'touchmove'].forEach(function (e) { + _this4.el.removeEventListener(e, _this4.onPointerEvent); + }); + this.el.removeEventListener('mousemove', this.onMouseMove); + this.el.removeEventListener('mouseleave', this.onMouseLeave); + this.contentEl.removeEventListener('scroll', this.onScroll); + window.removeEventListener('resize', this.onWindowResize); + this.mutationObserver && this.mutationObserver.disconnect(); + this.resizeObserver.disconnect(); // Cancel all debounced functions + + this.recalculate.cancel(); + this.onMouseMove.cancel(); + this.hideScrollbars.cancel(); + this.onWindowResize.cancel(); + } + /** + * UnMount mutation observer and delete SimpleBar instance from DOM element + */ + + }, { + key: "unMount", + value: function unMount() { + this.removeListeners(); + this.el.SimpleBar = null; + } + /** + * Recursively walks up the parent nodes looking for this.el + */ + + }, { + key: "isChildNode", + value: function isChildNode(el) { + if (el === null) return false; + if (el === this.el) return true; + return this.isChildNode(el.parentNode); + } + /** + * Check if mouse is within bounds + */ + + }, { + key: "isWithinBounds", + value: function isWithinBounds(bbox) { + return this.mouseX >= bbox.left && this.mouseX <= bbox.left + bbox.width && this.mouseY >= bbox.top && this.mouseY <= bbox.top + bbox.height; + } + }], [{ + key: "getRtlHelpers", + value: function getRtlHelpers() { + var dummyDiv = document.createElement('div'); + dummyDiv.innerHTML = '<div class="hs-dummy-scrollbar-size"><div style="height: 200%; width: 200%; margin: 10px 0;"></div></div>'; + var scrollbarDummyEl = dummyDiv.firstElementChild; + document.body.appendChild(scrollbarDummyEl); + var dummyContainerChild = scrollbarDummyEl.firstElementChild; + scrollbarDummyEl.scrollLeft = 0; + var dummyContainerOffset = SimpleBar.getOffset(scrollbarDummyEl); + var dummyContainerChildOffset = SimpleBar.getOffset(dummyContainerChild); + scrollbarDummyEl.scrollLeft = 999; + var dummyContainerScrollOffsetAfterScroll = SimpleBar.getOffset(dummyContainerChild); + return { + // determines if the scrolling is responding with negative values + isRtlScrollingInverted: dummyContainerOffset.left !== dummyContainerChildOffset.left && dummyContainerChildOffset.left - dummyContainerScrollOffsetAfterScroll.left !== 0, + // determines if the origin scrollbar position is inverted or not (positioned on left or right) + isRtlScrollbarInverted: dummyContainerOffset.left !== dummyContainerChildOffset.left + }; + } + }, { + key: "initHtmlApi", + value: function initHtmlApi() { + this.initDOMLoadedElements = this.initDOMLoadedElements.bind(this); // MutationObserver is IE11+ + + if (typeof MutationObserver !== 'undefined') { + // Mutation observer to observe dynamically added elements + this.globalObserver = new MutationObserver(function (mutations) { + mutations.forEach(function (mutation) { + Array.from(mutation.addedNodes).forEach(function (addedNode) { + if (addedNode.nodeType === 1) { + if (addedNode.hasAttribute('data-simplebar')) { + !addedNode.SimpleBar && new SimpleBar(addedNode, SimpleBar.getElOptions(addedNode)); + } else { + Array.from(addedNode.querySelectorAll('[data-simplebar]')).forEach(function (el) { + !el.SimpleBar && new SimpleBar(el, SimpleBar.getElOptions(el)); + }); + } + } + }); + Array.from(mutation.removedNodes).forEach(function (removedNode) { + if (removedNode.nodeType === 1) { + if (removedNode.hasAttribute('data-simplebar')) { + removedNode.SimpleBar && removedNode.SimpleBar.unMount(); + } else { + Array.from(removedNode.querySelectorAll('[data-simplebar]')).forEach(function (el) { + el.SimpleBar && el.SimpleBar.unMount(); + }); + } + } + }); + }); + }); + this.globalObserver.observe(document, { + childList: true, + subtree: true + }); + } // Taken from jQuery `ready` function + // Instantiate elements already present on the page + + + if (document.readyState === 'complete' || document.readyState !== 'loading' && !document.documentElement.doScroll) { + // Handle it asynchronously to allow scripts the opportunity to delay init + window.setTimeout(this.initDOMLoadedElements); + } else { + document.addEventListener('DOMContentLoaded', this.initDOMLoadedElements); + window.addEventListener('load', this.initDOMLoadedElements); + } + } // Helper function to retrieve options from element attributes + + }, { + key: "getElOptions", + value: function getElOptions(el) { + var options = Array.from(el.attributes).reduce(function (acc, attribute) { + var option = attribute.name.match(/data-simplebar-(.+)/); + + if (option) { + var key = option[1].replace(/\W+(.)/g, function (x, chr) { + return chr.toUpperCase(); + }); + + switch (attribute.value) { + case 'true': + acc[key] = true; + break; + + case 'false': + acc[key] = false; + break; + + case undefined: + acc[key] = true; + break; + + default: + acc[key] = attribute.value; + } + } + + return acc; + }, {}); + return options; + } + }, { + key: "removeObserver", + value: function removeObserver() { + this.globalObserver.disconnect(); + } + }, { + key: "initDOMLoadedElements", + value: function initDOMLoadedElements() { + document.removeEventListener('DOMContentLoaded', this.initDOMLoadedElements); + window.removeEventListener('load', this.initDOMLoadedElements); + Array.from(document.querySelectorAll('[data-simplebar]')).forEach(function (el) { + if (!el.SimpleBar) new SimpleBar(el, SimpleBar.getElOptions(el)); + }); + } + }, { + key: "getOffset", + value: function getOffset(el) { + var rect = el.getBoundingClientRect(); + return { + top: rect.top + (window.pageYOffset || document.documentElement.scrollTop), + left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft) + }; + } + }]); + + return SimpleBar; + }(); + /** + * HTML API + * Called only in a browser env. + */ + + + SimpleBar.defaultOptions = { + autoHide: true, + forceVisible: false, + classNames: { + content: 'simplebar-content', + offset: 'simplebar-offset', + mask: 'simplebar-mask', + wrapper: 'simplebar-wrapper', + placeholder: 'simplebar-placeholder', + scrollbar: 'simplebar-scrollbar', + track: 'simplebar-track', + heightAutoObserverWrapperEl: 'simplebar-height-auto-observer-wrapper', + heightAutoObserverEl: 'simplebar-height-auto-observer', + visible: 'simplebar-visible', + horizontal: 'simplebar-horizontal', + vertical: 'simplebar-vertical', + hover: 'simplebar-hover' + }, + scrollbarMinSize: 25, + scrollbarMaxSize: 0, + timeout: 1000 + }; + + if (canUseDom) { + SimpleBar.initHtmlApi(); + } + + return SimpleBar; + +})); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/img/module.png b/odex-event/muk_web_utils/static/src/img/module.png new file mode 100644 index 000000000..74ca4c7e2 Binary files /dev/null and b/odex-event/muk_web_utils/static/src/img/module.png differ diff --git a/odex-event/muk_web_utils/static/src/js/core/async.js b/odex-event/muk_web_utils/static/src/js/core/async.js new file mode 100644 index 000000000..e8e7e7524 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/core/async.js @@ -0,0 +1,85 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.async', function (require) { +"use strict"; + +var core = require('web.core'); + +var _t = core._t; +var QWeb = core.qweb; + +var syncLoop = function(items, func, callback) { + items.reduce(function(promise, item) { + return promise.then(func.bind(this, item)); + }, $.Deferred().resolve()).then(callback); +}; + +var syncProgress = function(items, func, callback, update) { + var progress = 0; + items.reduce(function(promise, item) { + return promise.done(function() { + update(++progress / items.length); + return func(item); + }); + }, $.Deferred().resolve()).then(callback); +}; + +var createNotification = function(widget, title) { + return widget.call('notification', 'notify', { + title: title || _t('Upload'), + message: _t('Uploading...'), + icon: 'fa-upload', + sticky: true, + progress: { + text: "0%", + state: 0.0, + }, + }); +}; + +var updateNotification = function(widget, notification, progress) { + widget.call('notification', 'progress', notification, { + text: (progress * 100).toFixed(2) + "%", + state: (progress * 100).toFixed(2), + }); +}; + +var closeNotification = function(widget, notification) { + widget.call('notification', 'close', notification); +}; + +var syncNotification = function(widget, title, items, func, callback) { + var notification = createNotification(widget, title); + var update = _.partial(updateNotification, widget, notification); + syncProgress(items, func, function() { + $.when(closeNotification(widget, notification)).then(callback); + }, update); +}; + +return { + syncLoop: syncLoop, + syncProgress: syncProgress, + syncNotification: syncNotification, +}; + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/js/core/dialog.js b/odex-event/muk_web_utils/static/src/js/core/dialog.js new file mode 100644 index 000000000..95b888399 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/core/dialog.js @@ -0,0 +1,68 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.Dialog', function (require) { +"use strict"; + +var core = require('web.core'); + +var Dialog = require('web.Dialog'); + +var QWeb = core.qweb; +var _t = core._t; + +Dialog.input = function (owner, title, options) { + var $content = $('<main/>'); + var $input = $('<input/>', { + type: 'text', + class: options && options.input && options.input.class, + value: options && options.input && options.input.value, + }); + $content.append($input); + var confirm = function(event) { + if(options && options.confirm_callback) { + options.confirm_callback.call(this, event, this.$("input").val()); + } + } + var buttons = [ + { + text: _t("Save"), + classes: 'btn-primary', + close: true, + click: confirm, + }, + { + text: _t("Cancel"), + close: true, + click: options && options.cancel_callback + } + ]; + return new Dialog(owner, _.extend({ + size: 'medium', + buttons: buttons, + $content: $content, + title: title, + }, options)).open({shouldFocusButtons:true}); +}; + + +}); diff --git a/odex-event/muk_web_utils/static/src/js/core/dropzone.js b/odex-event/muk_web_utils/static/src/js/core/dropzone.js new file mode 100644 index 000000000..8c12fce5c --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/core/dropzone.js @@ -0,0 +1,132 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.dropzone', function (require) { +"use strict"; + +var core = require('web.core'); + +var _t = core._t; +var QWeb = core.qweb; + +var DropzoneMixin = { + dropzoneData: {}, + dropzoneClasses: ['mk_dropzone'], + _checkDropzoneEvent: function(event) { + return true; + }, + _startDropzone: function($dropzone) { + if(this.$dropzone) { + this._destroyDropzone(); + } + this.$dropzone = $dropzone; + this.$dropzone.dndHover().on({ + 'dndHoverStart.dropzone': this._hoverDropzoneEnter.bind(this), + 'dndHoverEnd.dropzone': this._hoverDropzoneLeave.bind(this), + }); + this.$dropzone.on('dragenter.dropzone', this._dragenterDropzone.bind(this)); + this.$dropzone.on('dragover.dropzone', this._dragoverDropzone.bind(this)); + this.$dropzone.on('dragleave.dropzone', this._dragleaveDropzone.bind(this)); + this.$dropzone.on('drop.dropzone', this._dropDropzone.bind(this)); + _.each(this.dropzoneData, function(value, key) { + this.$dropzone.attr(key, value) + }, this); + }, + _destroyDropzone: function() { + if(this.$dropzone) { + this.$dropzone.off('.dropzone'); + this.$dropzone.dndHover('destroy'); + _.each(this.dropzoneData, function(value, key) { + this.$dropzone.removeAttr(key) + }, this); + this.$dropzone = false; + } + }, + _toggleDropzone: function(state) { + this.$dropzone.toggleClass(this.dropzoneClasses.join(" "), state); + }, + _hoverDropzoneEnter: function(event, originalEvent) { + if(this._checkDropzoneEvent(originalEvent)) { + this._toggleDropzone(true); + event.preventDefault(); + return false; + } + }, + _hoverDropzoneLeave: function(event, originalEvent) { + this._toggleDropzone(false); + event.stopPropagation(); + event.preventDefault(); + return false; + }, + _handleDrag: function(event) { + }, + _handleDrop: function(event) { + }, + _dragenterDropzone: function(event) { + if(this._checkDropzoneEvent(event)) { + event.preventDefault(); + } + }, + _dragoverDropzone: function(event) { + if(this._checkDropzoneEvent(event)) { + event.preventDefault(); + this._handleDrag(event); + } + }, + _dragleaveDropzone: function(event) { + if(this._checkDropzoneEvent(event)) { + event.preventDefault(); + } + }, + _dropDropzone: function(event) { + if(this._checkDropzoneEvent(event)) { + event.preventDefault(); +// event.stopPropagation(); + this._handleDrop(event); + } + } +}; + +var FileDropzoneMixin = _.extend({}, DropzoneMixin, { + dropzoneData: { + 'data-dropzone-text': _t("Drop files here to upload!"), + }, + dropzoneClasses: DropzoneMixin.dropzoneClasses.concat(['mk_dropzone_file']), + dropzoneCheck: window.File && window.FileReader && window.FileList && window.Blob, + _checkDropzoneEvent: function(event) { + var dataTransfer = event.originalEvent && event.originalEvent.dataTransfer; + var fileCheck = dataTransfer && _.some(dataTransfer.types, function(type) { + return type == "Files"; + }); + return this.dropzoneCheck && fileCheck; + }, + _handleDrag: function(event) { + event.originalEvent.dataTransfer.dropEffect = 'copy'; + }, +}); + +return { + DropzoneMixin: DropzoneMixin, + FileDropzoneMixin: FileDropzoneMixin, +}; + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/js/core/files.js b/odex-event/muk_web_utils/static/src/js/core/files.js new file mode 100644 index 000000000..6e0972ed5 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/core/files.js @@ -0,0 +1,176 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.files', function (require) { +"use strict"; + +var core = require('web.core'); + +var QWeb = core.qweb; +var _t = core._t; + +var traverseItems = function(items, tree) { + var def = $.Deferred(); + var files = []; + var defs = []; + _.each(items, function(item, index) { + var entry = item.webkitGetAsEntry(); + if(entry) { + var traverse = $.Deferred(); + traverseEntry(entry, tree).then(function(result) { + if(tree) { + files = files.concat(result); + } else { + files = _.union(files, result); + } + traverse.resolve(); + }); + defs.push(traverse); + } else { + var file = item.getAsFile(); + if(file) { + if(file.size) { + files.push(_.extend({}, file, {isFileItem: true})); + } + } else { + console.warn("Your browser doesn't support Drag and Drop!"); + } + } + }); + $.when.apply($, defs).then(function () { + def.resolve(files); + }); + return def; +}; + +var traverseEntries = function(entries, tree) { + var def = $.Deferred(); + var files = []; + var defs = []; + _.each(entries, function(entry, index) { + var traverse = $.Deferred(); + traverseEntry(entry, tree).then(function(result) { + if(tree) { + files = files.concat(result); + } else { + files = _.union(files, result); + } + traverse.resolve(); + }); + defs.push(traverse); + }); + $.when.apply($, defs).then(function () { + def.resolve(files); + }); + return def; +} + +var traverseEntry = function(entry, tree) { + var def = $.Deferred(); + if(entry.isFile) { + def.resolve([entry]); + } else if(entry.isDirectory) { + entry.createReader().readEntries(function (entries) { + traverseEntries(entries, tree).then(function (files) { + if(tree) { + def.resolve([{ + name: entry.name, + files: files, + isFile: false, + isDirectory: true, + childCount: files.length, + fullPath: entry.fullPath, + fileCount: _.reduce(files, function(sum, item) { + return item.isFile ? sum + 1 : sum + item.fileCount || 0; + }, 0), + }]); + } else { + def.resolve(files); + } + }); + }); + } else { + def.resolve([]); + } + return def; +}; + +var getFileTree = function(items, count) { + var traverse = traverseItems(items, true); + if(count) { + var def = $.Deferred(); + traverse.then(function(files) { + def.resolve({ + files: files, + count: _.reduce(files, function(sum, item) { + return item.isFile ? sum + 1 : sum + item.fileCount || 0; + }, 0), + }); + }); + return def; + } + return traverse; +}; + +var getFileList = function(items, count) { + var traverse = traverseItems(items, false); + if(count) { + var def = $.Deferred(); + traverse.then(function(files) { + def.resolve({ + files: files, + count: files.length, + }); + + }); + return def; + } + return traverse; +}; + +var loadFile = function(file, callback) { + var fileReader = new FileReader(); + fileReader.readAsDataURL(file); + fileReader.onloadend = callback; +}; + +var readFile = function(file, callback) { + if(file.isFile) { + file.file(function(file) { + loadFile(file, callback); + }); + } else { + loadFile(file, callback); + } +}; + +return { + traverseItems: traverseItems, + traverseEntries: traverseEntries, + traverseEntry: traverseEntry, + getFileTree: getFileTree, + getFileList: getFileList, + loadFile: loadFile, + readFile: readFile, +}; + +}); diff --git a/odex-event/muk_web_utils/static/src/js/core/mimetype.js b/odex-event/muk_web_utils/static/src/js/core/mimetype.js new file mode 100644 index 000000000..e874d30e2 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/core/mimetype.js @@ -0,0 +1,110 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.mimetype', function (require) { +"use strict"; + +var core = require('web.core'); +var utils = require('web.utils'); + +var QWeb = core.qweb; +var _t = core._t; + +var mapping = [ + ['file-image-o', /^image\//], + ['file-audio-o', /^audio\//], + ['file-video-o', /^video\//], + ['file-pdf-o', 'application/pdf'], + ['file-text-o', 'text/plain'], + ['file-code-o', [ + 'text/html', + 'text/javascript', + 'application/javascript' + ]], + ['file-archive-o', [ + /^application\/x-(g?tar|xz|compress|bzip2|g?zip)$/, + /^application\/x-(7z|rar|zip)-compressed$/, + /^application\/(zip|gzip|tar)$/ + ]], + ['file-word-o', [ + /ms-?word/, 'application/vnd.oasis.opendocument.text', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + ]], + ['file-powerpoint-o', [ + /ms-?powerpoint/, + 'application/vnd.openxmlformats-officedocument.presentationml.presentation' + ]], + ['file-excel-o', [ + /ms-?excel/, + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + ]], + ['file-o' ] +]; + +function match(mimetype, cond) { + if (Array.isArray(cond)) { + return cond.reduce(function(v, c) { + return v || match(mimetype, c); + }, false); + } else if (cond instanceof RegExp) { + return cond.test(mimetype); + } else if (cond === undefined) { + return true; + } else { + return mimetype === cond; + } +} + +var cache = {}; +function resolve(mimetype) { + if (cache[mimetype]) { + return cache[mimetype]; + } + for (var i = 0; i < mapping.length; i++) { + if (match(mimetype, mapping[i][1])) { + cache[mimetype] = mapping[i][0]; + return mapping[i][0]; + } + } +} + +function mimetype2fa(mimetype, options) { + if (typeof mimetype === 'object') { + options = mimetype; + return function(mimetype) { + return mimetype2fa(mimetype, options); + }; + } else { + var icon = resolve(mimetype); + if (icon && options && options.prefix) { + return options.prefix + icon; + } else { + return icon; + } + } +} + +return { + mimetype2fa: mimetype2fa, +}; + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/js/core/utils.js b/odex-event/muk_web_utils/static/src/js/core/utils.js new file mode 100644 index 000000000..b0c97349e --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/core/utils.js @@ -0,0 +1,85 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.utils', function (require) { +"use strict"; + +var core = require('web.core'); + +var _t = core._t; +var QWeb = core.qweb; + +var isUrl = function(string) { + var protocol = string.match(/^(?:\w+:)?\/\/(\S+)$/); + if (protocol && protocol[1]) { + var localHost = (/^localhost[\:?\d]*(?:[^\:?\d]\S*)?$/).test(protocol[1]); + var nonLocalHost = (/^localhost[\:?\d]*(?:[^\:?\d]\S*)?$/).test(protocol[1]); + return !!(localHost || nonLocalHost); + } + return false; +} + +var parseText2Html= function(text) { + return text + .replace(/((?:https?|ftp):\/\/[\S]+)/g,'<a href="$1">$1</a> ') + .replace(/[\n\r]/g,'<br/>'); +} + +var closedRange = function(start, end) { + return _.range(start, end + 1); +} + +var partitionPageList = function(pages, page, size) { + if (!size || size < 5) { + throw "The size must be at least 5 to partition the list."; + } + var sideSize = size < 9 ? 1 : 2; + var leftSize = (size - sideSize * 2 - 3) >> 1; + var rightSize = (size - sideSize * 2 - 2) >> 1; + if (pages <= size) { + return closedRange(1, pages); + } + if (page <= size - sideSize - 1 - rightSize) { + return closedRange(1, size - sideSize - 1) + .concat([false]) + .concat(closedRange(pages - sideSize + 1, pages)); + } + if (page >= pages - sideSize - 1 - rightSize) { + return closedRange(1, sideSize) + .concat([false]) + .concat(closedRange(pages - sideSize - 1 - rightSize - leftSize, pages)); + } + return closedRange(1, sideSize) + .concat([false]) + .concat(closedRange(page - leftSize, page + rightSize)) + .concat([false]) + .concat(closedRange(pages - sideSize + 1, pages)); +} + +return { + isUrl: isUrl, + closedRange: closedRange, + parseText2Html: parseText2Html, + partitionPageList: partitionPageList, +}; + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/js/fields/abstract.js b/odex-event/muk_web_utils/static/src/js/fields/abstract.js new file mode 100644 index 000000000..39ac1bd6e --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/fields/abstract.js @@ -0,0 +1,46 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.abstract', function(require) { +"use strict"; + +var core = require('web.core'); +var session = require('web.session'); +var utils = require('web.field_utils'); +var fields = require('web.basic_fields'); +var registry = require('web.field_registry'); + +var AbstractField = require('web.AbstractField'); + +var _t = core._t; +var QWeb = core.qweb; + +AbstractField.include({ + isFocusable: function () { + if(!!this.attrs.skip_focus){ + return false; + } + return this._super.apply(this, arguments); + }, +}); + +}); diff --git a/odex-event/muk_web_utils/static/src/js/fields/binary.js b/odex-event/muk_web_utils/static/src/js/fields/binary.js new file mode 100644 index 000000000..41ad239b2 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/fields/binary.js @@ -0,0 +1,86 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.binary', function(require) { +"use strict"; + +var core = require('web.core'); +var session = require('web.session'); +var utils = require('web.field_utils'); +var fields = require('web.basic_fields'); +var registry = require('web.field_registry'); + +var _t = core._t; +var QWeb = core.qweb; + +fields.FieldBinaryFile.include({ + willStart: function () { + var def = this._rpc({ + route: '/config/muk_web_utils.binary_max_size', + }).done(function(result) { + this.max_upload_size = result.max_upload_size * 1024 * 1024; + }.bind(this)); + return this._super.apply(this, arguments); + }, + _renderReadonly: function () { + this._super.apply(this, arguments); + var $wrapper = $('<div/>', { + class: "mk_field_binary_wrapper" + }); + $wrapper.addClass(this.$el.attr('class')); + this.$el.removeClass("o_field_widget"); + this.$el.removeClass("o_hidden"); + $wrapper.append(this.$el); + this.setElement($wrapper); + }, + _renderEdit: function () { + this._super.apply(this, arguments); + if (this.nodeOptions && this.nodeOptions.accept) { + this.$('input[name="ufile"]').prop("accept", this.nodeOptions.accept); + } + }, +}); + +var FieldBinarySize = fields.FieldFloat.extend({ + init: function(parent, name, record) { + this._super.apply(this, arguments); + this.nodeOptions = _.defaults(this.nodeOptions, { + si: true, + }); + }, + _formatValue: function (value) { + var options = _.extend({}, + this.nodeOptions, + { data: this.recordData }, + this.formatOptions + ); + return utils.format['binary_size'](value, this.field, options) + }, +}); + +registry.add('binary_size', FieldBinarySize); + +return { + FieldBinarySize: FieldBinarySize, +}; + +}); diff --git a/odex-event/muk_web_utils/static/src/js/fields/color.js b/odex-event/muk_web_utils/static/src/js/fields/color.js new file mode 100644 index 000000000..d979b0060 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/fields/color.js @@ -0,0 +1,130 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.color', function (require) { +"use strict"; + +var core = require('web.core'); +var fields = require('web.basic_fields'); +var registry = require('web.field_registry'); +var colorpicker = require('web.colorpicker'); + +var AbstractField = require('web.AbstractField'); + +var _t = core._t; +var QWeb = core.qweb; + +var FieldColor = fields.InputField.extend({ + events: _.extend({}, fields.InputField.prototype.events, { + "click .mk_field_color_button": "_onCustomColorButtonClick", + }), + template: "muk_web_utils.FieldColor", + supportedFieldTypes: ['char'], + start: function() { + this.$input = this.$('.mk_field_color_input'); + return this._super.apply(this, arguments); + }, + _renderEdit: function () { + this.$('.mk_field_color_input').val( + this._formatValue(this.value) + ); + this.$('.mk_field_color_input').css({ + 'background-color': this._formatValue(this.value), + }); + }, + _renderReadonly: function () { + this.$el.text(this._formatValue(this.value)); + this.$el.css({'color': this._formatValue(this.value)}); + }, + _doAction: function() { + this._super.apply(this, arguments); + this.$('.mk_field_color_input').css({ + 'background-color': this._getValue(), + }); + }, + _formatValue: function (value) { + return value; + }, + _parseValue: function (value) { + if((/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i).test(value)) { + return value; + } else { + throw new Error(_.str.sprintf(_t("'%s' is not a correct color value"), value)); + } + }, + _onCustomColorButtonClick: function () { + var ColorpickerDialog = new colorpicker(this, { + dialogClass: 'mk_field_color_picker', + defaultColor: this._getValue(), + }); + ColorpickerDialog.on('colorpicker:saved', this, function (event) { + this.$input.val(event.data.hex); + this._doAction(); + }); + ColorpickerDialog.open(); + }, +}); + +var FieldColorIndex = AbstractField.extend({ + events: _.extend({}, AbstractField.prototype.events, { + 'change': '_onChange', + }), + template: 'muk_web_utils.FieldColorIndex', + supportedFieldTypes: ['integer'], + isSet: function () { + return this.value === 0 || this._super.apply(this, arguments); + }, + getFocusableElement: function () { + return this.$el.is('select') ? this.$el : $(); + }, + _renderEdit: function () { + this.$el.addClass('mk_color_index_' + this.value); + this.$('option[value="' + this.value + '"]').prop('selected', true); + }, + _renderReadonly: function () { + this.$el.addClass('mk_color_index_' + this.value); + this.$el.empty().text('Color ' + this._formatValue(this.value)); + }, + _onChange: function (event) { + this.$el.removeClass(function (index, className) { + return (className.match (/(^|\s)mk_color_index_\S+/g) || []).join(' '); + }); + this.$el.addClass('mk_color_index_' + this.$el.val()); + this._setValue(this.$el.val()); + }, + _parseValue: function (value) { + if(0 > value || value > 12) { + throw new Error(_.str.sprintf(_t("'%s' is not a correct color index (0-12)"), value)); + } + return value; + }, +}); + +registry.add('color', FieldColor); +registry.add('color_index', FieldColorIndex); + +return { + FieldColor: FieldColor, + FieldColorIndex: FieldColorIndex, +}; + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/js/fields/copy.js b/odex-event/muk_web_utils/static/src/js/fields/copy.js new file mode 100644 index 000000000..ec1a22abc --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/fields/copy.js @@ -0,0 +1,135 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.copy', function (require) { +"use strict"; + +var core = require('web.core'); +var session = require('web.session'); +var fields = require('web.basic_fields'); +var registry = require('web.field_registry'); + +var _t = core._t; +var QWeb = core.qweb; + +var BinaryFileCopy = fields.FieldBinaryFile.extend({ + init: function () { + this._super.apply(this, arguments); + if (!this.field.attachment) { + throw _.str.sprintf(_t( + "The field '%s' must be a binary field with an set " + + "attachment flag for the share widget to work." + ), this.field.string); + } + this.accessToken = !!this.nodeOptions.token; + }, + willStart: function() { + var def = this.value && this.res_id ? this._fetchShareUrl() : $.when(); + return $.when(this._super.apply(this, arguments), def); + }, + _fetchShareUrl: function() { + var self = this; + var def = $.Deferred(); + if (this.accessToken) { + this._rpc({ + model: 'ir.attachment', + method: 'search', + args: [[ + ['res_id', '=', this.res_id], + ['res_field', '=', this.name], + ['res_model', '=', this.model], + ]], + kwargs: { + context: session.user_context, + }, + }).then(function(attchments) { + self._rpc({ + model: 'ir.attachment', + method: 'generate_access_token', + args: attchments + }).then(function(access_token) { + self.shareUrl = session.url('/web/content', { + model: self.model, + field: self.name, + id: self.res_id, + access_token: access_token.shift(), + }); + def.resolve(); + }); + }); + } else { + this.shareUrl = session.url('/web/content', { + model: self.model, + field: self.name, + id: self.res_id, + }); + def.resolve(); + } + return def; + }, + _setUpClipboad: function() { + var self = this; + var $clipboardBtn = this.$('.mk_copy_binary'); + this.clipboard = new ClipboardJS($clipboardBtn[0], { + text: function (trigger) { + return self.shareUrl; + }, + container: self.$el[0] + }); + this.clipboard.on('success', function (event) { + _.defer(function () { + $clipboardBtn.tooltip('show'); + _.delay(function () { + $clipboardBtn.tooltip('hide'); + }, 800); + }); + }); + $clipboardBtn.click(function(event) { + event.stopPropagation(); + }); + $clipboardBtn.tooltip({ + title: _t('Link Copied!'), + trigger: 'manual', + placement: 'bottom' + }); + }, + _renderReadonly: function () { + this._super.apply(this, arguments); + this.$el.addClass('mk_field_copy'); + this.$el.append($(QWeb.render('muk_web_utils.BinaryFieldCopy'))); + this._setUpClipboad(); + }, + destroy: function () { + this._super.apply(this, arguments); + if (this.clipboard) { + this.clipboard.destroy(); + } + }, +}); + +registry.add('copy_binary', BinaryFileCopy); + +return { + BinaryFileCopy: BinaryFileCopy, +}; + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/js/fields/domain.js b/odex-event/muk_web_utils/static/src/js/fields/domain.js new file mode 100644 index 000000000..4204f42d7 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/fields/domain.js @@ -0,0 +1,54 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.domain', function (require) { +"use strict"; + +var core = require('web.core'); +var session = require('web.session'); +var fields = require('web.basic_fields'); +var view_dialogs = require('web.view_dialogs'); + +var _t = core._t; +var QWeb = core.qweb; + +fields.FieldDomain.include({ + _onShowSelectionButtonClick: function (e) { + e.preventDefault(); + new view_dialogs.SelectCreateDialog(this, { + context: this.attrs.context || {}, + title: _t("Selected records"), + res_model: this._domainModel, + domain: this.value || "[]", + no_create: true, + readonly: true, + disable_multiple_selection: true, + }).open(); + }, + isValid: function () { + return ( + this._isValid && (!this.domainSelector || this.domainSelector.isValid()) + ); + }, +}); + +}); diff --git a/odex-event/muk_web_utils/static/src/js/fields/image.js b/odex-event/muk_web_utils/static/src/js/fields/image.js new file mode 100644 index 000000000..7ebd6166c --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/fields/image.js @@ -0,0 +1,58 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.image', function (require) { +"use strict"; + +var core = require('web.core'); +var session = require('web.session'); +var fields = require('web.basic_fields'); + +var _t = core._t; +var QWeb = core.qweb; + +fields.FieldBinaryImage.include({ + willStart: function () { + var def = this._rpc({ + route: '/config/muk_web_utils.binary_max_size', + }).done(function(result) { + this.max_upload_size = result.max_upload_size * 1024 * 1024; + }.bind(this)); + return this._super.apply(this, arguments); + }, + _render: function () { + this._super.apply(this, arguments); + this.$('.mk_field_image_wrapper').remove(); + this.$('img').wrap($('<div/>', { + class: "mk_field_image_wrapper" + })); + var $wrapper = $('.mk_field_image_wrapper'); + var width = this.nodeOptions.size ? + this.nodeOptions.size[0] : this.attrs.width; + var height = this.nodeOptions.size ? + this.nodeOptions.size[1] : this.attrs.height; + $wrapper.css('min-width', (width || 50) + 'px'); + $wrapper.css('min-height', (height || 50) + 'px'); + }, +}); + +}); diff --git a/odex-event/muk_web_utils/static/src/js/fields/module.js b/odex-event/muk_web_utils/static/src/js/fields/module.js new file mode 100644 index 000000000..59eaed9e4 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/fields/module.js @@ -0,0 +1,96 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.ModuleBoolean', function (require) { +"use strict"; + +var core = require('web.core'); +var fields = require('web.basic_fields'); +var registry = require('web.field_registry'); +var framework = require('web.framework'); + +var Dialog = require('web.Dialog'); +var AbstractField = require('web.AbstractField'); + +var _t = core._t; +var QWeb = core.qweb; + +var ModuleBoolean = fields.FieldBoolean.extend({ + supportedFieldTypes: [], + events: _.extend({}, AbstractField.prototype.events, { + 'click input': '_onInputClicked', + }), + renderWithLabel: function ($label) { + this.$label = $label; + this._render(); + }, + _openDialog: function () { + var buttons = [{ + text: _t("Download"), + classes: 'btn-primary', + close: true, + click: this._confirmRedirect.bind(this), + }, { + text: _t("Cancel"), + close: true, + }]; + return new Dialog(this, { + size: 'medium', + buttons: buttons, + $content: $('<div>', { + html: $(QWeb.render('muk_web_utils.MissingModuleDialog')), + }), + title: _t("Missing Module"), + }).open(); + }, + _confirmRedirect: function () { + if(this.nodeOptions.url) { + framework.redirect(this.nodeOptions.url); + } else { + var module = this.name.replace("module_", ""); + framework.redirect("https://apps.odoo.com/apps/modules/browse?search=" + module); + } + }, + _render: function () { + this._super.apply(this, arguments); + var $element = this.$label || this.$el; + $element.append(' ').append($("<span>", { + 'text': _t("Store"), + 'class': "badge badge-primary oe_inline mk_module_label" + })); + }, + _onInputClicked: function (event) { + if ($(event.currentTarget).prop("checked")) { + var dialog = this._openDialog(); + dialog.on('closed', this, this._resetValue.bind(this)); + } + }, + _resetValue: function () { + this.$input.prop("checked", false).change(); + }, +}); + +registry.add('module_boolean', ModuleBoolean); + +return ModuleBoolean; + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/js/fields/path.js b/odex-event/muk_web_utils/static/src/js/fields/path.js new file mode 100644 index 000000000..ffc2bc132 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/fields/path.js @@ -0,0 +1,119 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.path', function (require) { +"use strict"; + +var core = require('web.core'); +var fields = require('web.basic_fields'); +var registry = require('web.field_registry'); +var colorpicker = require('web.colorpicker'); + +var AbstractField = require('web.AbstractField'); + +var _t = core._t; +var QWeb = core.qweb; + +var FieldPathNames = fields.FieldChar.extend({ + init: function(parent, name, record) { + this._super.apply(this, arguments); + this.max_width = this.nodeOptions.width || 500; + }, + _renderReadonly: function() { + var show_value = this._formatValue(this.value); + var text_witdh = $.fn.textWidth(show_value); + if(text_witdh >= this.max_width) { + var ratio_start = (1 - (this.max_width / text_witdh)) * show_value.length; + show_value = ".." + show_value.substring(ratio_start, show_value.length); + } + this.$el.text(show_value); + }, +}); + +var FieldPathJson = fields.FieldText.extend({ + events: _.extend({}, fields.FieldText.prototype.events, { + 'click a' : '_onNodeClicked', + }), + init: function(parent, name, record) { + this._super.apply(this, arguments); + this.max_width = this.nodeOptions.width || 500; + this.seperator = this.nodeOptions.seperator || "/"; + this.prefix = this.nodeOptions.prefix || false; + this.suffix = this.nodeOptions.suffix || false; + }, + _renderReadonly: function() { + this.$el.empty(); + this._renderPath(); + }, + _renderPath: function() { + var text_width_measure = ""; + var path = JSON.parse(this.value || "[]"); + $.each(_.clone(path).reverse(), function(index, element) { + text_width_measure += element.name + "/"; + if($.fn.textWidth(text_width_measure) >= this.max_width) { + this.$el.prepend($('<span/>').text("..")); + } else { + if (index == 0) { + if(this.suffix) { + this.$el.prepend($('<span/>').text(this.seperator)); + } + this.$el.prepend($('<span/>').text(element.name)); + this.$el.prepend($('<span/>').text(this.seperator)); + } else { + this.$el.prepend($('<a/>', { + 'class': 'oe_form_uri', + 'data-model': element.model, + 'data-id': element.id, + 'href': "javascript:void(0);", + 'text': element.name, + })); + if (index != path.length - 1) { + this.$el.prepend($('<span/>').text(this.seperator)); + } else if (this.prefix) { + this.$el.prepend($('<span/>').text(this.seperator)); + } + } + } + return ($.fn.textWidth(text_width_measure) < this.max_width); + }.bind(this)); + }, + _onNodeClicked : function(event) { + this.do_action({ + type: 'ir.actions.act_window', + res_model: $(event.currentTarget).data('model'), + res_id: $(event.currentTarget).data('id'), + views: [[false, 'form']], + target: 'current', + context: {}, + }); + } +}); + +registry.add('path_names', FieldPathNames); +registry.add('path_json', FieldPathJson); + +return { + FieldPathNames: FieldPathNames, + FieldPathJson: FieldPathJson, +}; + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/js/fields/share.js b/odex-event/muk_web_utils/static/src/js/fields/share.js new file mode 100644 index 000000000..eaa0eeed8 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/fields/share.js @@ -0,0 +1,227 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.share', function (require) { +"use strict"; + +var core = require('web.core'); +var session = require('web.session'); +var fields = require('web.basic_fields'); +var registry = require('web.field_registry'); + +var utils = require('muk_web_utils.utils'); +var copy = require('muk_web_utils.copy'); + +var _t = core._t; +var QWeb = core.qweb; + +var ShareMixin = { + shareEvents: { + 'click .mk_share_dropdown_message': '_onShareMessageClick', + 'click .mk_share_dropdown_note': '_onShareNoteClick', + 'click .mk_share_dropdown_mail': '_onShareMailClick', + 'click .mk_share_dropdown_send': '_onShareSendClick', + }, + getShareMessageValues: function(message) { + var values = { + name: session.partner_display_name, + record: this.recordData.display_name, + url: utils.isUrl(this.value) && this.value, + value: this.value, + }; + return { + subject: _.template(this.shareOptions.subjectTemplate)(values), + body: QWeb.render(this.shareOptions.bodyTemplate, values), + text: _.template(this.shareOptions.textTemplate)(values), + url: utils.isUrl(this.value) && this.value, + } + }, + openShareChat: function(note) { + var values = this.getShareMessageValues(); + var context = { + default_is_log: note, + default_body: values.body, + default_subject: values.subject, + default_model: this.shareOptions.res_model, + default_res_id: this.shareOptions.res_id, + mail_post_autofollow: false, + }; + this.do_action({ + type: 'ir.actions.act_window', + res_model: 'mail.compose.message', + view_mode: 'form', + view_type: 'form', + views: [[false, 'form']], + target: 'new', + context: context, + }); + }, + _onShareMessageClick: function(event) { + event.preventDefault(); + event.stopPropagation(); + this.openShareChat(false); + }, + _onShareNoteClick: function(event) { + event.preventDefault(); + event.stopPropagation(); + this.openShareChat(true); + }, + _onShareMailClick: function(event) { + event.preventDefault(); + event.stopPropagation(); + var values = this.getShareMessageValues(); + var subject = "subject=" + values.subject; + var body = "&body=" + encodeURIComponent(values.text); + window.location.href = "mailto:?" + subject + body; + }, + _onShareSendClick: function(event) { + event.preventDefault(); + event.stopPropagation(); + var values = this.getShareMessageValues(); + navigator.share({ + title: values.subject, + text: values.text, + url: values.url, + }); + }, +}; + +var CharShare = fields.CharCopyClipboard.extend(ShareMixin, { + fieldDependencies: _.extend({}, fields.CharCopyClipboard.prototype.fieldDependencies, { + display_name: {type: 'char'}, + }), + events: _.extend({}, fields.CharCopyClipboard.prototype.events, ShareMixin.shareEvents), + init: function(parent, name, record) { + this._super.apply(this, arguments); + this.navigator = window.navigator.share; + this.chatter = _.contains(odoo._modules, "mail"); + this.shareOptions = _.defaults(this.nodeOptions, { + subjectTemplate: _t("<%= name %> shared a message!"), + textTemplate: _t("<%= value %>"), + bodyTemplate: 'muk_web_utils.ShareMessage', + }); + this.shareOptions = _.extend({}, this.shareOptions, { + res_model: this.recordData[this.nodeOptions.res_model] || this.model, + res_id: this.recordData[this.nodeOptions.res_id] || this.res_id, + }); + }, + _render: function() { + this._super.apply(this, arguments); + this.$el.addClass('mk_field_share'); + this.$el.prepend($(QWeb.render('muk_web_utils.CharShare', { + navigator: !!this.navigator, + chatter: !!this.chatter, + }))); + }, +}); + +var TextShare = fields.TextCopyClipboard.extend(ShareMixin, { + fieldDependencies: _.extend({}, fields.TextCopyClipboard.prototype.fieldDependencies, { + display_name: {type: 'char'}, + }), + events: _.extend({}, fields.TextCopyClipboard.prototype.events, ShareMixin.shareEvents), + init: function(parent, name, record) { + this._super.apply(this, arguments); + this.navigator = window.navigator.share; + this.chatter = _.contains(odoo._modules, "mail"); + this.shareOptions = _.defaults(this.nodeOptions, { + subjectTemplate: _t("<%= name %> shared a message!"), + textTemplate: _t("<%= value %>"), + bodyTemplate: 'muk_web_utils.ShareMessage', + }); + this.shareOptions = _.extend({}, this.shareOptions, { + res_model: this.recordData[this.nodeOptions.res_model] || this.model, + res_id: this.recordData[this.nodeOptions.res_id] || this.res_id, + }); + }, + _render: function() { + this._super.apply(this, arguments); + this.$el.addClass('mk_field_share'); + this.$el.prepend($(QWeb.render('muk_web_utils.TextShare', { + navigator: !!this.navigator, + chatter: !!this.chatter, + }))); + } +}); + +var BinaryFileShare = copy.BinaryFileCopy.extend(ShareMixin, { + fieldDependencies: _.extend({}, fields.FieldBinaryFile.prototype.fieldDependencies, { + display_name: {type: 'char'}, + }), + events: _.extend({}, copy.BinaryFileCopy.prototype.events, ShareMixin.shareEvents, { + 'click .mk_share_button': '_onShareDropdownClick', + }), + init: function () { + this._super.apply(this, arguments); + this.navigator = window.navigator.share; + this.chatter = _.contains(odoo._modules, "mail"); + this.shareOptions = _.defaults(this.nodeOptions, { + subjectTemplate: _t("<%= name %> shared a file!"), + textTemplate: _t("<%= value %>"), + bodyTemplate: 'muk_web_utils.ShareBinaryMessage', + }); + this.shareOptions = _.extend({}, this.shareOptions, { + res_model: this.recordData[this.nodeOptions.res_model] || this.model, + res_id: this.recordData[this.nodeOptions.res_id] || this.res_id, + }); + }, + getShareMessageValues: function() { + var values = { + name: session.partner_display_name, + record: this.recordData.display_name, + url: this.shareUrl, + value: this.shareUrl, + }; + return { + subject: _.template(this.shareOptions.subjectTemplate)(values), + body: QWeb.render(this.shareOptions.bodyTemplate, values), + text: _.template(this.shareOptions.textTemplate)(values), + url: this.shareUrl, + } + }, + _renderReadonly: function () { + this._super.apply(this, arguments); + this.$el.addClass('mk_field_share'); + this.$el.append($(QWeb.render('muk_web_utils.BinaryShare', { + navigator: !!this.navigator, + chatter: !!this.chatter, + share: !!this.shareUrl, + }))); + }, + _onShareDropdownClick: function(event) { + $(event.currentTarget).dropdown("toggle"); + event.stopPropagation(); + }, +}); + +registry.add('share_char', CharShare); +registry.add('share_text', TextShare); +registry.add('share_binary', BinaryFileShare); + +return { + ShareMixin: ShareMixin, + CharShare: CharShare, + TextShare: TextShare, + BinaryFileShare: BinaryFileShare, +}; + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/js/fields/utils.js b/odex-event/muk_web_utils/static/src/js/fields/utils.js new file mode 100644 index 000000000..001acdd04 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/fields/utils.js @@ -0,0 +1,54 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.field_utils', function(require) { +"use strict"; + +var core = require('web.core'); +var session = require('web.session'); +var utils = require('web.field_utils'); + +var _t = core._t; +var QWeb = core.qweb; + +function formatBinarySize(value, field, options) { + options = _.defaults(options || {}, { + si: true, + }); + var thresh = options.si ? 1000 : 1024; + if(Math.abs(value) < thresh) { + return utils.format['float'](value, field, options) + ' B'; + } + var units = options.si + ? ['KB','MB','GB','TB','PB','EB','ZB','YB'] + : ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB']; + var unit = -1; + do { + value /= thresh; + ++unit; + } while(Math.abs(value) >= thresh && unit < units.length - 1); + return utils.format['float'](value, field, options) + ' ' + units[unit]; +} + +utils.format.binary_size = formatBinarySize; + +}); diff --git a/odex-event/muk_web_utils/static/src/js/libs/jquery.js b/odex-event/muk_web_utils/static/src/js/libs/jquery.js new file mode 100644 index 000000000..84b3314ec --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/libs/jquery.js @@ -0,0 +1,104 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +$.fn.textWidth = function(text, font) { + if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('<span>').hide().appendTo(document.body); + $.fn.textWidth.fakeEl.text(text || this.val() || this.text()).css('font', font || this.css('font')); + return $.fn.textWidth.fakeEl.width(); +}; + +$.fn.dndHover = function(options) { + return this.each(function() { + var self = $(this); + var collection = $(); + var dragenter = function(event) { + if (collection.size() === 0) { + self.trigger('dndHoverStart', [event]); + } + collection = collection.add(event.target); + }; + var dragleave = function(event) { + setTimeout(function() { + collection = collection.not(event.target); + if (collection.size() === 0) { + self.trigger('dndHoverEnd', [event]); + } + }, 1); + }; + var drop = function(event) { + setTimeout(function() { + collection = $(); + self.trigger('dndHoverEnd', [event]); + }, 1); + }; + if(options && options === 'destroy') { + self.off('dragenter.dnd_hover'); + self.off('dragleave.dnd_hover'); + self.off('drop.dnd_hover'); + } else { + self.on('dragenter.dnd_hover', dragenter); + self.on('dragleave.dnd_hover', dragleave); + self.on('drop.dnd_hover', drop); + } + }); +}; + +$.ajaxTransport("+binary", function(options, originalOptions, jqXHR) { + if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || + (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || + (window.Blob && options.data instanceof Blob))))) { + return { + send: function(headers, callback){ + var xhr = new XMLHttpRequest(); + var url = options.url, + type = options.type, + async = options.async || true, + dataType = options.responseType || 'blob', + data = options.data || null, + username = options.username, + password = options.password; + xhr.addEventListener('load', function(){ + var data = {}; + data[options.dataType] = xhr.response; + callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders()); + }); + xhr.open(type, url, async, username, password); + for (var i in headers ) { + xhr.setRequestHeader(i, headers[i] ); + } + if (options.xhrFields) { + for (var key in options.xhrFields) { + if (key in xhr) { + xhr[key] = options.xhrFields[key]; + } + } + } + xhr.responseType = dataType; + xhr.send(data); + }, + abort: function(){ + jqXHR.abort(); + } + }; + } +}); + diff --git a/odex-event/muk_web_utils/static/src/js/libs/scrollbar.js b/odex-event/muk_web_utils/static/src/js/libs/scrollbar.js new file mode 100644 index 000000000..2c889fdb7 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/libs/scrollbar.js @@ -0,0 +1,27 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +$.fn.renderScrollBar = function() { + this.each(function() { + new SimpleBar(this); + }); +}; diff --git a/odex-event/muk_web_utils/static/src/js/libs/underscore.js b/odex-event/muk_web_utils/static/src/js/libs/underscore.js new file mode 100644 index 000000000..a8a4aa84d --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/libs/underscore.js @@ -0,0 +1,47 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +_.mixin({ + memoizeDebounce: function(func, wait, options) { + wait = (typeof wait !== 'undefined') ? wait : 0; + options = (typeof options !== 'undefined') ? options : {}; + var mem = _.memoize(function() { + return _.debounce(func, wait, options) + }, options.resolver); + return function() { + mem.apply(this, arguments).apply(this, arguments) + } + } +}); + +_.mixin({ + memoizeThrottle: function(func, wait, options) { + wait = (typeof wait !== 'undefined') ? wait : 0; + options = (typeof options !== 'undefined') ? options : {}; + var mem = _.memoize(function() { + return _.throttle(func, wait, options) + }, options.resolver); + return function() { + mem.apply(this, arguments).apply(this, arguments) + } + } +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/js/services/notification_service.js b/odex-event/muk_web_utils/static/src/js/services/notification_service.js new file mode 100644 index 000000000..8f5787e70 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/services/notification_service.js @@ -0,0 +1,37 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.NotificationService', function (require) { +"use strict"; + +var NotificationService = require('web.NotificationService'); + +NotificationService.include({ + progress: function (notificationId, progress) { + if(notificationId in this.notifications) { + var notification = this.notifications[notificationId]; + notification.updateProgress(progress.state, progress.text); + } + }, +}); + +}); diff --git a/odex-event/muk_web_utils/static/src/js/views/form/renderer.js b/odex-event/muk_web_utils/static/src/js/views/form/renderer.js new file mode 100644 index 000000000..496211a98 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/views/form/renderer.js @@ -0,0 +1,47 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.FormRenderer', function (require) { +"use strict"; + +var core = require('web.core'); + +var FormRenderer = require('web.FormRenderer'); + +var _t = core._t; +var QWeb = core.qweb; + +FormRenderer.include({ + _updateView: function ($newContent) { + this._super.apply(this, arguments); + _.each(this.allFieldWidgets[this.state.id], function (widget) { + if (widget.attrs.widget === 'module_boolean') { + var inputID = this.idsForLabels[widget.name]; + var $widgets = this.$('.o_field_widget[name=' + widget.name + ']'); + var $label = inputID ? this.$('.o_form_label[for=' + inputID + ']') : $(); + widget.renderWithLabel($label.eq($widgets.index(widget.$el))); + } + }, this); + } +}); + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/js/widgets/notification.js b/odex-event/muk_web_utils/static/src/js/widgets/notification.js new file mode 100644 index 000000000..b51b63628 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/js/widgets/notification.js @@ -0,0 +1,46 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_utils.Notification', function (require) { +"use strict"; + +var core = require('web.core'); + +var Notification = require('web.Notification'); + +var _t = core._t; +var QWeb = core.qweb; + +Notification.include({ + init: function (parent, params) { + this._super.apply(this, arguments); + this.icon = params.icon || this.icon; + this.progress = params.progress; + }, + updateProgress: function(state, text) { + this.progress = {state: state, text: text}; + this.$(".progress-bar").text(text); + this.$(".progress-bar").width(state + "%"); + }, +}); + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/scss/binary.scss b/odex-event/muk_web_utils/static/src/scss/binary.scss new file mode 100644 index 000000000..d4541e2df --- /dev/null +++ b/odex-event/muk_web_utils/static/src/scss/binary.scss @@ -0,0 +1,28 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.o_list_view .o_field_widget.o_field_binary_file { + height: 100%; + button.btn { + padding-top: 0.25rem; + } +} diff --git a/odex-event/muk_web_utils/static/src/scss/color.scss b/odex-event/muk_web_utils/static/src/scss/color.scss new file mode 100644 index 000000000..297f8f927 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/scss/color.scss @@ -0,0 +1,66 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.mk_field_color_picker { + .o_opacity_slider { + display: none ! important; + } + input#opacity { + display: none ! important; + } + label[for="opacity"] { + display: none ! important; + } +} + +.o_field_widget.mk_field_color { + .mk_field_color_input { + width: auto; + display: inline-block; + } + .mk_field_color_button { + display: inline-block; + margin-bottom: 0.25rem; + line-height: 1.42rem; + } +} + +span.mk_field_color_index { + @for $size from 1 through length($o-colors) { + &.mk_color_index_#{$size - 1} { + color: nth($o-colors, $size); + } + } +} + +select.mk_field_color_index { + &.mk_color_index_0, .mk_color_index_0 { + background-color: $white ! important; + color: nth($o-colors, 1) ! important; + } + @for $size from 2 through length($o-colors) { + &.mk_color_index_#{$size - 1}, .mk_color_index_#{$size - 1} { + background-color: nth($o-colors, $size) ! important; + color: $white ! important; + } + } +} \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/scss/copy.scss b/odex-event/muk_web_utils/static/src/scss/copy.scss new file mode 100644 index 000000000..ff675046c --- /dev/null +++ b/odex-event/muk_web_utils/static/src/scss/copy.scss @@ -0,0 +1,34 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.o_field_widget.mk_field_copy { + .mk_copy_binary { + margin-left: 0.5rem; + .mk_copy_button { + font-size: 0.8rem; + line-height: 0.5; + border-radius: 0.2rem; + margin-bottom: 0.12rem; + padding: 0.25rem 0.4rem; + } + } +} \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/scss/dropzone.scss b/odex-event/muk_web_utils/static/src/scss/dropzone.scss new file mode 100644 index 000000000..337ffbfce --- /dev/null +++ b/odex-event/muk_web_utils/static/src/scss/dropzone.scss @@ -0,0 +1,64 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.mk_dropzone { + position: relative; + &:before { + display:flex; + z-index: 1052; + color: gray('700'); + flex-direction:row; + align-items: center; + justify-content: center; + width: #{"calc(100% - 20px)"}; + height: #{"calc(100% - 20px)"}; + border: 2px dashed gray('700'); + @include gradient-y($white, gray('100')); + @include o-position-absolute(10px, 0, 0, 10px); + } + &:after { + display:flex; + z-index: 1052; + color: gray('700'); + flex-direction:row; + align-items: center; + justify-content: center; + width: #{"calc(100% - 20px)"}; + height: #{"calc(100% - 10px)"}; + @include o-position-absolute(0, 0, 0, 0); + } + &.mk_dropzone_file { + &:before { + font-family: FontAwesome; + text-decoration: inherit; + font-style: normal; + font-weight: normal; + font-size: 15rem; + content: "\f0ee"; + } + &:after { + padding-top: 18rem; + font-size: 3rem; + content: attr(data-dropzone-text); + } + } +} \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/scss/image.scss b/odex-event/muk_web_utils/static/src/scss/image.scss new file mode 100644 index 000000000..e78e9a386 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/scss/image.scss @@ -0,0 +1,84 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.o_field_widget.o_field_image { + @include media-breakpoint-up(sm, $o-extra-grid-breakpoints) { + .mk_field_image_wrapper { + min-height: 60px; + min-width: 80px; + } + } + .mk_form_image_controls { + @include o-position-absolute($left: 0, $bottom: 0); + width: 100%; + color: white; + background-color: $o-brand-primary; + opacity: 0; + transition: opacity ease 400ms; + > button.fa { + border: none; + background-color: transparent; + } + > .fa { + margin: 5px; + cursor: pointer; + } + } + &:hover .mk_form_image_controls { + opacity: 0.8; + } + @include media-breakpoint-down(xs, $o-extra-grid-breakpoints) { + .mk_form_image_controls{ + position: initial; + opacity: 1; + > .fa{ + width: 50%; + padding: 6px; + margin: 0px; + text-align: center; + background: $o-brand-secondary; + } + } + } +} + +.o_field_widget.o_field_image.oe_avatar { + .mk_form_image_controls { + @include o-position-absolute($left: 0, $bottom: 10px); + } + img { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + max-width: $o-avatar-size; + max-height: $o-avatar-size; + vertical-align: top; + margin-bottom: 10px; + border: none; + } + @include media-breakpoint-down(xs, $o-extra-grid-breakpoints) { + .mk_form_image_controls{ + position: initial; + > .fa{ + background: $o-brand-secondary; + } + } + } +} diff --git a/odex-event/muk_web_utils/static/src/scss/mixins.scss b/odex-event/muk_web_utils/static/src/scss/mixins.scss new file mode 100644 index 000000000..4c6e540e2 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/scss/mixins.scss @@ -0,0 +1,40 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +@mixin mk-flex-container ($direction: row, $wrap: nowrap, $justify: flex-start, $items: stretch, $content: stretch) { + display: flex; + flex-wrap: $wrap; + flex-direction: $direction; + justify-content: $justify; + align-content: $content; + align-items: $items; +} + +@mixin mk-flex-child ($grow: 0, $shrink: 1, $basis: auto, $order: 0) { + display: flex; + flex-grow: $grow; + flex-shrink: $shrink; + flex-basis: $basis; + order: $order; +} + + diff --git a/odex-event/muk_web_utils/static/src/scss/module.scss b/odex-event/muk_web_utils/static/src/scss/module.scss new file mode 100644 index 000000000..0a30d94a2 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/scss/module.scss @@ -0,0 +1,33 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.o_settings_container { + .o_setting_box { + .o_setting_left_pane { + .mk_module_label { + position: absolute; + top: 0px; + right: 40px; + } + } + } +} \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/scss/notification.scss b/odex-event/muk_web_utils/static/src/scss/notification.scss new file mode 100644 index 000000000..4caf3397d --- /dev/null +++ b/odex-event/muk_web_utils/static/src/scss/notification.scss @@ -0,0 +1,30 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.o_notification { + .mk_notification_progress { + padding: 2px 10px 10px 10px; + .progress { + background-color: rgba(0, 0, 0, 0.3); + } + } +} diff --git a/odex-event/muk_web_utils/static/src/scss/share.scss b/odex-event/muk_web_utils/static/src/scss/share.scss new file mode 100644 index 000000000..37fa64ecb --- /dev/null +++ b/odex-event/muk_web_utils/static/src/scss/share.scss @@ -0,0 +1,54 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.o_field_widget.mk_field_share { + &.o_field_copy { + padding-left: 90px; + .mk_share_dropdown { + @include o-position-absolute($top: 0, $left: 0); + .mk_share_button { + padding: 0 10px; + } + &.mk_share_char { + height: 100%; + + } + &.mk_share_text { + .dropdown-menu { + line-height: 0.1 + } + } + } + } + &.o_form_uri { + .mk_share_dropdown { + margin-left: 0.2rem; + .mk_share_button { + padding: 0.25rem 0.4rem; + font-size: 0.8rem; + line-height: 0.5; + border-radius: 0.2rem; + margin-bottom: 0.12rem; + } + } + } +} \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/scss/switch.scss b/odex-event/muk_web_utils/static/src/scss/switch.scss new file mode 100644 index 000000000..7fe9d6eb0 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/scss/switch.scss @@ -0,0 +1,158 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +.switch { + font-size: $font-size-base; + position: relative; + + input { + position: absolute; + height: 1px; + width: 1px; + background: none; + border: 0; + clip: rect(0 0 0 0); + clip-path: inset(50%); + overflow: hidden; + padding: 0; + + + label { + position: relative; + min-width: calc(#{$switch-height} * 2); + border-radius: $switch-border-radius; + height: $switch-height; + line-height: $switch-height; + display: inline-block; + cursor: pointer; + outline: none; + user-select: none; + vertical-align: middle; + text-indent: calc(calc(#{$switch-height} * 2) + .5rem); + } + + + label::before, + + label::after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: calc(#{$switch-height} * 2); + bottom: 0; + display: block; + } + + + label::before { + right: 0; + background-color: $switch-bg; + border-radius: $switch-border-radius; + transition: $switch-transition; + } + + + label::after { + top: $switch-thumb-padding; + left: $switch-thumb-padding; + width: calc(#{$switch-height} - calc(#{$switch-thumb-padding} * 2)); + height: calc(#{$switch-height} - calc(#{$switch-thumb-padding} * 2)); + border-radius: $switch-thumb-border-radius; + background-color: $switch-thumb-bg; + transition: $switch-transition; + } + + &:checked + label::before { + background-color: $switch-checked-bg; + } + + &:checked + label::after { + margin-left: $switch-height; + } + + &:focus + label::before { + outline: none; + box-shadow: $switch-focus-box-shadow; + } + + &:disabled + label { + color: $switch-disabled-color; + cursor: not-allowed; + } + + &:disabled + label::before { + background-color: $switch-disabled-bg; + } + } + + &.switch-sm { + font-size: $font-size-sm; + + input { + + label { + min-width: calc(#{$switch-height-sm} * 2); + height: $switch-height-sm; + line-height: $switch-height-sm; + text-indent: calc(calc(#{$switch-height-sm} * 2) + .5rem); + } + + + label::before { + width: calc(#{$switch-height-sm} * 2); + } + + + label::after { + width: calc(#{$switch-height-sm} - calc(#{$switch-thumb-padding} * 2)); + height: calc(#{$switch-height-sm} - calc(#{$switch-thumb-padding} * 2)); + } + + &:checked + label::after { + margin-left: $switch-height-sm; + } + } + } + + &.switch-lg { + font-size: $font-size-lg; + + input { + + label { + min-width: calc(#{$switch-height-lg} * 2); + height: $switch-height-lg; + line-height: $switch-height-lg; + text-indent: calc(calc(#{$switch-height-lg} * 2) + .5rem); + } + + + label::before { + width: calc(#{$switch-height-lg} * 2); + } + + + label::after { + width: calc(#{$switch-height-lg} - calc(#{$switch-thumb-padding} * 2)); + height: calc(#{$switch-height-lg} - calc(#{$switch-thumb-padding} * 2)); + } + + &:checked + label::after { + margin-left: $switch-height-lg; + } + } + } + + + .switch { + margin-left: 1rem; + } +} \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/scss/variables.scss b/odex-event/muk_web_utils/static/src/scss/variables.scss new file mode 100644 index 000000000..74fa8ca27 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/scss/variables.scss @@ -0,0 +1,39 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +//---------------------------------------------------------- +// Switch +//---------------------------------------------------------- + +$switch-bg: #dee2e6; +$switch-disabled-bg: #e9ecef; +$switch-disabled-color: #868e96; +$switch-height: calc(#{$input-height} * .8) !default; +$switch-height-sm: calc(#{$input-height-sm} * .8) !default; +$switch-height-lg: calc(#{$input-height-lg} * .8) !default; +$switch-checked-bg: map-get($theme-colors, 'primary') !default; +$switch-thumb-bg: $white !default; +$switch-thumb-border-radius: 50% !default; +$switch-thumb-padding: 2px !default; +$switch-transition: .2s all !default; +$switch-border-radius: $switch-height; +$switch-focus-box-shadow: 0 0 0 $input-btn-focus-width rgba(map-get($theme-colors, 'primary'), .25); \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/xml/color.xml b/odex-event/muk_web_utils/static/src/xml/color.xml new file mode 100644 index 000000000..ecbc10d72 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/xml/color.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Web Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<templates id="template" xml:space="preserve"> + +<t t-name="muk_web_utils.FieldColor"> + <span t-if="widget.mode === 'readonly'" class="mk_field_color"/> + <div t-if="widget.mode !== 'readonly'" class="mk_field_color"> + <input type="text" class="o_input mk_field_color_input" + t-att-name="widget.name" + t-att-tabindex="widget.attrs.tabindex" + t-att-autocomplete="widget.attrs.autocomplete" + t-att-placeholder="widget.attrs.placeholder" + t-att-autofocus="widget.attrs.autofocus"/> + <button class="btn btn-sm btn-outline-primary mk_field_color_button" type="button"> + <span class="fa fa-paint-brush"></span> + </button> + </div> +</t> + +<t t-name="muk_web_utils.FieldColorIndex"> + <span t-if="widget.mode === 'readonly'" class="mk_field_color_index"/> + <select t-if="widget.mode !== 'readonly'" + class="o_input mk_field_color_index" + t-att-name="widget.name" + t-att-tabindex="widget.attrs.tabindex" + t-att-autofocus="widget.attrs.autofocus" + t-att-id="widget.idForLabel"> + <option class="mk_color_index_0" value="0">Color 0</option> + <option class="mk_color_index_1" value="1">Color 1</option> + <option class="mk_color_index_2" value="2">Color 2</option> + <option class="mk_color_index_3" value="3">Color 3</option> + <option class="mk_color_index_4" value="4">Color 4</option> + <option class="mk_color_index_5" value="5">Color 5</option> + <option class="mk_color_index_6" value="6">Color 6</option> + <option class="mk_color_index_7" value="7">Color 7</option> + <option class="mk_color_index_8" value="8">Color 8</option> + <option class="mk_color_index_9" value="9">Color 9</option> + <option class="mk_color_index_10" value="10">Color 10</option> + <option class="mk_color_index_11" value="11">Color 11</option> + </select> +</t> + +</templates> \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/xml/copy.xml b/odex-event/muk_web_utils/static/src/xml/copy.xml new file mode 100644 index 000000000..4a21900f3 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/xml/copy.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Web Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<templates id="template" xml:space="preserve"> + +<t t-name="muk_web_utils.BinaryFieldCopy"> + <div class="d-inline-block mk_copy_binary"> + <button class="btn btn-sm btn-outline-primary mk_copy_button" type="button"> + <span class="fa fa-clipboard"></span> + </button> + </div> +</t> + +</templates> \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/xml/image.xml b/odex-event/muk_web_utils/static/src/xml/image.xml new file mode 100644 index 000000000..824c3af56 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/xml/image.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Web Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<templates id="template" xml:space="preserve"> + +<t t-extend="FieldBinaryImage"> + <t t-jquery=".o_form_image_controls" t-operation="after"> + <div class="mk_form_image_controls"> + </div> + </t> +</t> + +</templates> \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/xml/module.xml b/odex-event/muk_web_utils/static/src/xml/module.xml new file mode 100644 index 000000000..0709de484 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/xml/module.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Web Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<templates id="template" xml:space="preserve"> + +<t t-name="muk_web_utils.MissingModuleDialog"> + <div class="row" role="status"> + <div class="col-6"> + <img class="img-fluid" t-att-src='_s + "/muk_web_utils/static/src/img/module.png"' alt="Missing Module" /> + </div> + <div class="col-6"> + <p><strong>The module could not be found on the server.</strong></p> + <p>Click on the download button to be redirected to the store and download the corresponding module.</p> + </div> + </div> +</t> + +</templates> \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/xml/notification.xml b/odex-event/muk_web_utils/static/src/xml/notification.xml new file mode 100644 index 000000000..2ed595a5a --- /dev/null +++ b/odex-event/muk_web_utils/static/src/xml/notification.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Web Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<templates id="template" xml:space="preserve"> + +<t t-extend="Notification"> + <t t-jquery=".o_notification_content" t-operation="after"> + <div t-if="widget.progress" class="mk_notification_progress"> + <div class="progress"> + <div class="progress-bar" t-attf-style="width: #{widget.progress.state}%;"> + <t t-esc="widget.progress.text"/> + </div> + </div> + </div> + </t> +</t> + +</templates> \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/xml/share.xml b/odex-event/muk_web_utils/static/src/xml/share.xml new file mode 100644 index 000000000..64bcee4de --- /dev/null +++ b/odex-event/muk_web_utils/static/src/xml/share.xml @@ -0,0 +1,106 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Web Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<templates id="template" xml:space="preserve"> + +<t t-name="muk_web_utils.Share"> + <div t-attf-class="btn-group mk_share_dropdown #{share_class}"> + <button class="btn btn-sm btn-primary dropdown-toggle mk_share_button" type="button" data-toggle="dropdown"> + <span class="fa fa-share-alt"></span> + <span>Share</span> + </button> + <t t-call="muk_web_utils.ShareDropdown" /> + </div> +</t> + +<t t-name="muk_web_utils.ShareDropdown"> + <div class="dropdown-menu"> + <h6 class="dropdown-header">Internal</h6> + <a t-if="chatter" class="dropdown-item mk_share_dropdown_message" href="#"> + <span class="fa fa-comments"></span> + <span>Message</span> + </a> + <a t-if="chatter" class="dropdown-item mk_share_dropdown_note" href="#"> + <span class="fa fa-sticky-note-o"></span> + <span>Note</span> + </a> + <div class="dropdown-divider"></div> + <h6 class="dropdown-header">External</h6> + <a class="dropdown-item mk_share_dropdown_mail" href="#"> + <span class="fa fa-envelope"></span> + <span>Mail</span> + </a> + <a t-if="navigator" class="dropdown-item mk_share_dropdown_send" href="#"> + <span class="fa fa-paper-plane"></span> + <span>Send</span> + </a> + </div> +</t> + +<t t-name="muk_web_utils.CharShare"> + <t t-call="muk_web_utils.Share"> + <t t-set="share_class" t-value="'mk_share_char'"/> + </t> +</t> + +<t t-name="muk_web_utils.TextShare"> + <t t-call="muk_web_utils.Share"> + <t t-set="share_class" t-value="'mk_share_text'"/> + </t> +</t> + +<t t-name="muk_web_utils.BinaryShare"> + <div t-if="share" t-attf-class="btn-group mk_share_dropdown"> + <button class="btn btn-sm btn-outline-primary dropdown-toggle mk_share_button" type="button" data-toggle="dropdown"> + <span class="fa fa-share-alt"></span> + </button> + <t t-call="muk_web_utils.ShareDropdown" /> + </div> +</t> + +<t t-name="muk_web_utils.ShareMessage"> + <div> + <t t-if="url"> + <p><span t-esc="name"/> shared a link with you!</p> + <a t-attf-href="#{url}" target="_blank" style="background-color: #875A7B; padding: 10px; text-decoration: none; color: #fff; border-radius: 5px; font-size: 12px;"> + <strong>Open</strong> + </a> + </t> + <t t-else=""> + <p><span t-esc="name"/> shared a message with you!</p> + <p t-esc="value" /> + </t> + </div> +</t> + +<t t-name="muk_web_utils.ShareBinaryMessage"> + <div> + <p><span t-esc="name"/> shared a file with you!</p> + <a t-attf-href="#{url}" target="_blank" style="background-color: #875A7B; padding: 10px; text-decoration: none; color: #fff; border-radius: 5px; font-size: 12px;"> + <strong>Download</strong> + </a> + </div> +</t> + +</templates> \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/src/xml/switch.xml b/odex-event/muk_web_utils/static/src/xml/switch.xml new file mode 100644 index 000000000..cb9e742a5 --- /dev/null +++ b/odex-event/muk_web_utils/static/src/xml/switch.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Web Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<templates id="template" xml:space="preserve"> + +<t t-name="muk_web_utils.switch"> + <span class="switch"> + <input type="checkbox" t-att-id="id" /> + <label t-att-for="id"> + <t t-if="label"><t t-esc="label"/></t> + </label> + </span> +</t> + +<t t-name="muk_web_utils.switch_sm"> + <span class="switch switch-sm"> + <input type="checkbox" t-att-id="id" /> + <label t-att-for="id"> + <t t-if="label"><t t-esc="label"/></t> + </label> + </span> +</t> + +<t t-name="muk_web_utils.switch_lg"> + <span class="switch switch-lg"> + <input type="checkbox" t-att-id="id" /> + <label t-att-for="id"> + <t t-if="label"><t t-esc="label"/></t> + </label> + </span> +</t> + +</templates> \ No newline at end of file diff --git a/odex-event/muk_web_utils/static/tests/fields.js b/odex-event/muk_web_utils/static/tests/fields.js new file mode 100644 index 000000000..6af0e6f30 --- /dev/null +++ b/odex-event/muk_web_utils/static/tests/fields.js @@ -0,0 +1,205 @@ +/********************************************************************************** +* +* Copyright (c) 2017-2019 MuK IT GmbH. +* +* This file is part of MuK Web Utils +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ +odoo.define('muk_web_utils.tests.fields', function (require) { +"use strict"; + +var basicFields = require('web.basic_fields'); +var concurrency = require('web.concurrency'); +var config = require('web.config'); +var core = require('web.core'); +var FormView = require('web.FormView'); +var KanbanView = require('web.KanbanView'); +var ListView = require('web.ListView'); +var session = require('web.session'); +var testUtils = require('web.test_utils'); +var field_registry = require('web.field_registry'); + +var createView = testUtils.createView; +var createAsyncView = testUtils.createAsyncView; +var DebouncedField = basicFields.DebouncedField; +var JournalDashboardGraph = basicFields.JournalDashboardGraph; +var _t = core._t; + +QUnit.module('muk_web_utils', {}, function () { + +QUnit.module('fields', { + beforeEach: function () { + this.data = { + partner: { + fields: { + display_name: { + string: "Displayed name", + type: "char", + searchable: true + }, + short: { + string: "Short", + type: "char", + searchable: true, + trim: true + }, + long: { + string: "Long", + string: "txt", + type: "text", + }, + document: { + string: "Binary", + type: "binary", + attachment: true, + }, + }, + records: [{ + id: 1, + display_name: "first record", + short: "Short Text", + long: "Super looooooong Text", + document: 'coucou==\n', + }], + }, + }; + } +}, function () { + QUnit.module('BinaryFileCopy'); + + QUnit.test('Fields is correctly rendered', function (assert) { + assert.expect(2); + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: ( + '<form string="Partners">' + + '<field name="document" widget="copy_binary" filename="short"/>' + + '<field name="short"/>' + + '</form>' + ), + res_id: 1, + }); + + assert.strictEqual( + form.$('a.o_field_widget[name="document"] > .mk_copy_binary > .mk_copy_button').length, + 1, "the copy button should be visible in readonly mode" + ); + + form.$buttons.find('.o_form_button_edit').click(); + + assert.strictEqual( + form.$('a.o_field_widget[name="document"] > .mk_copy_binary').length, + 0, "the copy button shouldn't be visible in edit mode" + ); + + form.destroy(); + }); + + QUnit.module('CharShare'); + + QUnit.test('Fields is correctly rendered', function (assert) { + assert.expect(1); + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: ( + '<form string="Partners">' + + '<div>' + + '<field name="short" widget="share_char"/>' + + '</div>' + + '</form>' + ), + res_id: 1, + }); + + assert.strictEqual( + form.$('span.o_field_widget[name="short"] > .mk_share_dropdown.mk_share_char').length, + 1, "the copy button should be visible in readonly mode" + ); + + form.destroy(); + }); + + QUnit.module('TextShare'); + + QUnit.test('Fields is correctly rendered', function (assert) { + assert.expect(1); + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: ( + '<form string="Partners">' + + '<div>' + + '<field name="long" widget="share_text"/>' + + '</div>' + + '</form>' + ), + res_id: 1, + }); + + assert.strictEqual( + form.$('span.o_field_widget[name="long"] > .mk_share_dropdown.mk_share_text').length, + 1, "the copy button should be visible in readonly mode" + ); + + form.destroy(); + }); + + QUnit.module('BinaryFileShare'); + + QUnit.test('Fields is correctly rendered', function (assert) { + assert.expect(2); + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: ( + '<form string="Partners">' + + '<field name="document" widget="share_binary" filename="short"/>' + + '<field name="short"/>' + + '</form>' + ), + res_id: 1, + }); + + assert.strictEqual( + form.$('a.o_field_widget[name="document"] > .mk_share_dropdown > .mk_share_button').length, + 1, "the share dropdown should be visible in readonly mode" + ); + + form.$buttons.find('.o_form_button_edit').click(); + + assert.strictEqual( + form.$('a.o_field_widget[name="document"] > .mk_share_dropdown > .mk_share_button').length, + 0, "the share dropdown shouldn't be visible in edit mode" + ); + + form.destroy(); + }); +}); + +}); + +}); \ No newline at end of file diff --git a/odex-event/muk_web_utils/template/assets.xml b/odex-event/muk_web_utils/template/assets.xml new file mode 100644 index 000000000..1386b49d4 --- /dev/null +++ b/odex-event/muk_web_utils/template/assets.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Web Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + + <template id="assets_backend" name="Backend Assets" inherit_id="web.assets_backend"> + <xpath expr="//link[last()]" position="after"> + <link rel="stylesheet" type="text/css" href="/muk_web_utils/static/libs/simplebar/simplebar.css" /> + </xpath> + <xpath expr="//script[last()]" position="after"> + <script type="text/javascript" src="/muk_web_utils/static/libs/simplebar/simplebar.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/libs/jquery.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/libs/scrollbar.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/libs/underscore.js" /> + </xpath> + <xpath expr="//link[last()]" position="after"> + <link rel="stylesheet" type="text/scss" href="/muk_web_utils/static/src/scss/variables.scss" /> + <link rel="stylesheet" type="text/scss" href="/muk_web_utils/static/src/scss/mixins.scss" /> + <link rel="stylesheet" type="text/scss" href="/muk_web_utils/static/src/scss/switch.scss" /> + <link rel="stylesheet" type="text/scss" href="/muk_web_utils/static/src/scss/dropzone.scss" /> + <link rel="stylesheet" type="text/scss" href="/muk_web_utils/static/src/scss/module.scss" /> + <link rel="stylesheet" type="text/scss" href="/muk_web_utils/static/src/scss/color.scss" /> + <link rel="stylesheet" type="text/scss" href="/muk_web_utils/static/src/scss/binary.scss" /> + <link rel="stylesheet" type="text/scss" href="/muk_web_utils/static/src/scss/image.scss" /> + <link rel="stylesheet" type="text/scss" href="/muk_web_utils/static/src/scss/copy.scss" /> + <link rel="stylesheet" type="text/scss" href="/muk_web_utils/static/src/scss/share.scss" /> + <link rel="stylesheet" type="text/scss" href="/muk_web_utils/static/src/scss/notification.scss" /> + </xpath> + <xpath expr="//script[last()]" position="after"> + <script type="text/javascript" src="/muk_web_utils/static/src/js/core/utils.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/core/async.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/core/files.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/core/dropzone.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/core/mimetype.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/core/dialog.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/services/notification_service.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/widgets/notification.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/fields/abstract.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/fields/utils.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/fields/color.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/fields/image.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/fields/copy.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/fields/share.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/fields/path.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/fields/binary.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/fields/module.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/fields/domain.js" /> + <script type="text/javascript" src="/muk_web_utils/static/src/js/views/form/renderer.js" /> + </xpath> + </template> + + <template id="qunit_suite" name="QUnit Assets" inherit_id="web.qunit_suite"> + <xpath expr="//script[last()]" position="after"> + <script type="text/javascript" src="/muk_web_utils/static/tests/fields.js" /> + </xpath> + </template> + +</odoo> \ No newline at end of file diff --git a/odex-event/muk_web_utils/tests/__init__.py b/odex-event/muk_web_utils/tests/__init__.py new file mode 100644 index 000000000..0c50c4c5d --- /dev/null +++ b/odex-event/muk_web_utils/tests/__init__.py @@ -0,0 +1,23 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Web Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +from . import test_js diff --git a/odex-event/muk_web_utils/tests/test_js.py b/odex-event/muk_web_utils/tests/test_js.py new file mode 100644 index 000000000..39266f6ef --- /dev/null +++ b/odex-event/muk_web_utils/tests/test_js.py @@ -0,0 +1,41 @@ +################################################################################### +# +# Copyright (c) 2017-2019 MuK IT GmbH. +# +# This file is part of MuK Web Utils +# (see https://mukit.at). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +################################################################################### + +import os +import json +import logging +import requests +import unittest + +from odoo import _, http, tools, SUPERUSER_ID +from odoo.tests.common import HttpCase + +from odoo.addons.muk_utils.tools.json import RecordEncoder + +_path = os.path.dirname(os.path.dirname(__file__)) +_logger = logging.getLogger(__name__) + +class WebSuite(HttpCase): + + @unittest.skip("") + def test_js(self): + self.browser_js('/web/tests?module=muk_web_utils&failfast', "", "", login='admin', timeout=1800) \ No newline at end of file diff --git a/odex-event/muk_web_utils/views/res_config_settings_view.xml b/odex-event/muk_web_utils/views/res_config_settings_view.xml new file mode 100644 index 000000000..e9ea79e46 --- /dev/null +++ b/odex-event/muk_web_utils/views/res_config_settings_view.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + + Copyright (c) 2017-2019 MuK IT GmbH. + + This file is part of MuK Web Utils + (see https://mukit.at). + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --> + +<odoo> + + <record id="res_config_settings_view_form" model="ir.ui.view"> + <field name="name">res.config.settings.view.form</field> + <field name="model">res.config.settings</field> + <field name="inherit_id" ref="base_setup.res_config_settings_view_form"/> + <field name="arch" type="xml"> + <div name="storage" position="inside"> + <div class="col-12 col-lg-6 o_setting_box"> + <div class="o_setting_left_pane"></div> + <div class="o_setting_right_pane"> + <label for="binary_max_size"/> + <div class="text-muted"> + Maximum allowed file size in MB + </div> + <div class="mt8"> + <field name="binary_max_size" class="o_light_label"/> + </div> + </div> + </div> + </div> + </field> + </record> + +</odoo> \ No newline at end of file