Merge branch 'MDL-36412-m23' of git://github.com/sammarshallou/moodle into MOODLE_23_...
authorDan Poltawski <dan@moodle.com>
Wed, 16 Jan 2013 01:57:01 +0000 (09:57 +0800)
committerDan Poltawski <dan@moodle.com>
Wed, 16 Jan 2013 01:57:01 +0000 (09:57 +0800)
41 files changed:
admin/plugins.php
backup/moodle2/restore_stepslib.php
comment/comment.js
course/dndupload.js
course/dnduploadlib.php
course/edit_form.php
course/editsection.php
course/editsection_form.php
course/format/renderer.php
course/index.php
course/lib.php
course/tests/externallib_test.php
course/yui/modchooser/modchooser.js
course/yui/toolboxes/toolboxes.js
group/lib.php
lib/blocklib.php
lib/filelib.php
lib/form/dndupload.js
lib/form/filemanager.js
lib/form/filemanager.php
lib/outputcomponents.php
lib/plagiarismlib.php
lib/yui/chooserdialogue/chooserdialogue.js
lib/yui/formautosubmit/formautosubmit.js
mod/book/tool/importhtml/locallib.php
mod/forum/lib.php
mod/quiz/backup/moodle2/restore_quiz_stepslib.php
mod/wiki/lang/en/wiki.php
mod/wiki/lib.php
question/format/xml/format.php
question/format/xml/tests/fixtures/multichoice.xml [new file with mode: 0644]
question/format/xml/tests/fixtures/truefalse.xml [new file with mode: 0644]
question/format/xml/tests/xmlformat_test.php
question/previewlib.php
question/type/edit_question_form.php
question/type/questiontypebase.php
repository/flickr_public/lib.php
theme/base/style/core.css
theme/base/style/course.css
user/tests/externallib_test.php
user/view.php

index 943f23a..02eeb6d 100644 (file)
@@ -28,8 +28,8 @@ require_once(dirname(dirname(__FILE__)) . '/config.php');
 require_once($CFG->libdir . '/adminlib.php');
 require_once($CFG->libdir . '/pluginlib.php');
 
-require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM));
 admin_externalpage_setup('pluginsoverview');
+require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM));
 
 $fetchremote = optional_param('fetchremote', false, PARAM_BOOL);
 
index 740c202..d2b1c3a 100644 (file)
@@ -843,20 +843,12 @@ class restore_groups_structure_step extends restore_structure_step {
     }
 
     public function process_grouping_group($data) {
-        global $DB;
-
-        $data = (object)$data;
-
-        $data->groupingid = $this->get_new_parentid('grouping'); // Use new parentid
-        $data->groupid    = $this->get_mappingid('group', $data->groupid); // Get from mappings
+        global $CFG;
 
-        $params = array();
-        $params['groupingid'] = $data->groupingid;
-        $params['groupid']    = $data->groupid;
+        require_once($CFG->dirroot.'/group/lib.php');
 
-        if (!$DB->record_exists('groupings_groups', $params)) {
-            $DB->insert_record('groupings_groups', $data);  // No need to set this mapping (no child info nor files)
-        }
+        $data = (object)$data;
+        groups_assign_grouping($this->get_new_parentid('grouping'), $this->get_mappingid('group', $data->groupid), $data->timeadded);
     }
 
     protected function after_execute() {
index 76efcf3..ad8aa52 100644 (file)
@@ -157,8 +157,7 @@ bodyContent: '<div class="comment-delete-confirm"><a href="#" id="confirmdelete-
                         scope: scope
                     },
                     headers: {
-                        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
-                        'User-Agent': 'MoodleComment/3.0'
+                        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
                     },
                     data: build_querystring(params)
                 };
@@ -472,8 +471,7 @@ bodyContent: '<div class="comment-delete-confirm"><a href="#" id="confirmdelete-
                             scope: this
                         },
                         headers: {
-                            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
-                            'User-Agent': 'MoodleComment/3.0'
+                            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
                         },
                         data: build_querystring(data)
                     };
index 2dcaa13..fda43af 100644 (file)
@@ -728,6 +728,9 @@ M.course_dndupload = {
                             resel.icon.src = result.icon;
                             resel.a.href = result.link;
                             resel.namespan.innerHTML = result.name;
+                            if (!parseInt(result.visible, 10)) {
+                                resel.a.className = 'dimmed';
+                            }
 
                             if (result.groupingname) {
                                 resel.groupingspan.innerHTML = '(' + result.groupingname + ')';
@@ -915,6 +918,9 @@ M.course_dndupload = {
                             resel.icon.src = result.icon;
                             resel.a.href = result.link;
                             resel.namespan.innerHTML = result.name;
+                            if (!parseInt(result.visible, 10)) {
+                                resel.a.className = 'dimmed';
+                            }
 
                             if (result.groupingname) {
                                 resel.groupingspan.innerHTML = '(' + result.groupingname + ')';
index 2aa6b02..10cedba 100644 (file)
@@ -620,12 +620,18 @@ class dndupload_ajax_processor {
             throw new moodle_exception('errorcreatingactivity', 'moodle', '', $this->module->name);
         }
 
+        // Note the section visibility
+        $visible = get_fast_modinfo($this->course)->get_section_info($this->section)->visible;
+
         $DB->set_field('course_modules', 'instance', $instanceid, array('id' => $this->cm->id));
 
         $sectionid = add_mod_to_section($this->cm);
         $DB->set_field('course_modules', 'section', $sectionid, array('id' => $this->cm->id));
 
-        set_coursemodule_visible($this->cm->id, true);
+        set_coursemodule_visible($this->cm->id, $visible);
+        if (!$visible) {
+            $DB->set_field('course_modules', 'visibleold', 1, array('id' => $this->cm->id));
+        }
 
         // Rebuild the course cache and retrieve the final info about this module.
         rebuild_course_cache($this->course->id, true);
@@ -636,7 +642,7 @@ class dndupload_ajax_processor {
             delete_course_module($this->cm->id);
             throw new moodle_exception('errorcreatingactivity', 'moodle', '', $this->module->name);
         }
-        $mod = $info->cms[$this->cm->id];
+        $mod = $info->get_cm($this->cm->id);
         $mod->groupmodelink = $this->cm->groupmodelink;
         $mod->groupmode = $this->cm->groupmode;
 
@@ -675,6 +681,7 @@ class dndupload_ajax_processor {
         $resp->elementid = 'module-'.$mod->id;
         $resp->commands = make_editing_buttons($mod, true, true, 0, $mod->sectionnum);
         $resp->onclick = $mod->get_on_click();
+        $resp->visible = $mod->visible;
 
         // if using groupings, then display grouping name
         if (!empty($mod->groupingid) && has_capability('moodle/course:managegroups', $this->context)) {
index bcb237a..7d22c94 100644 (file)
@@ -257,7 +257,7 @@ class course_edit_form extends moodleform {
                 array(0=>get_string('completiondisabled','completion'), 1=>get_string('completionenabled','completion')));
             $mform->setDefault('enablecompletion', $courseconfig->enablecompletion);
 
-            $mform->addElement('checkbox', 'completionstartonenrol', get_string('completionstartonenrol', 'completion'));
+            $mform->addElement('advcheckbox', 'completionstartonenrol', get_string('completionstartonenrol', 'completion'));
             $mform->setDefault('completionstartonenrol', $courseconfig->completionstartonenrol);
             $mform->disabledIf('completionstartonenrol', 'enablecompletion', 'eq', 0);
         } else {
index c307a6d..2ec254c 100644 (file)
@@ -57,7 +57,7 @@ if (!empty($CFG->enableavailability)) {
 }
 
 $mform = new editsection_form($PAGE->url, array('course' => $course, 'editoroptions' => $editoroptions,
-        'cs' => $section, 'showavailability' => $section->showavailability));
+        'cs' => $section));
 $mform->set_data($section); // set current value
 
 $returnurl = course_get_url($course, $sectionreturn);
index e904909..edd156b 100644 (file)
@@ -54,11 +54,19 @@ class editsection_form extends moodleform {
                 $mform->addHelpButton('groupingid', 'groupingsection', 'group');
             }
 
-            // Date and time conditions
+            // Available from/to defaults to midnight because then the display
+            // will be nicer where it tells users when they can access it (it
+            // shows only the date and not time).
+            $date = usergetdate(time());
+            $midnight = make_timestamp($date['year'], $date['mon'], $date['mday']);
+
+            // Date and time conditions.
             $mform->addElement('date_time_selector', 'availablefrom',
-                    get_string('availablefrom', 'condition'), array('optional' => true));
+                    get_string('availablefrom', 'condition'),
+                    array('optional' => true, 'defaulttime' => $midnight));
             $mform->addElement('date_time_selector', 'availableuntil',
-                    get_string('availableuntil', 'condition'), array('optional' => true));
+                    get_string('availableuntil', 'condition'),
+                    array('optional' => true, 'defaulttime' => $midnight));
 
             // Conditions based on grades
             $gradeoptions = array();
@@ -162,8 +170,6 @@ class editsection_form extends moodleform {
                 CONDITION_STUDENTVIEW_HIDE => get_string('showavailabilitysection_hide', 'condition'));
             $mform->addElement('select', 'showavailability',
                     get_string('showavailabilitysection', 'condition'), $showhide);
-
-            $mform->setDefault('showavailability', $this->_customdata['showavailability']);
         }
 
         $this->add_action_buttons();
index d832388..3fbb59b 100644 (file)
@@ -175,7 +175,8 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
         }
         $o.= html_writer::end_tag('div');
 
-        $o .= $this->section_availability_message($section);
+        $o .= $this->section_availability_message($section,
+                has_capability('moodle/course:viewhiddensections', $context));
 
         return $o;
     }
@@ -305,7 +306,9 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
         $o.= html_writer::end_tag('div');
         $o.= $this->section_activity_summary($section, $course, $mods);
 
-        $o.= $this->section_availability_message($section);
+        $context = context_course::instance($course->id);
+        $o .= $this->section_availability_message($section,
+                has_capability('moodle/course:viewhiddensections', $context));
 
         $o .= html_writer::end_tag('div');
         $o .= html_writer::end_tag('li');
@@ -388,22 +391,38 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
     }
 
     /**
-     * If section is not visible to current user, display the message about that
-     * ('Not available until...', that sort of thing). Otherwise, returns blank.
+     * If section is not visible, display the message about that ('Not available
+     * until...', that sort of thing). Otherwise, returns blank.
+     *
+     * For users with the ability to view hidden sections, it shows the
+     * information even though you can view the section and also may include
+     * slightly fuller information (so that teachers can tell when sections
+     * are going to be unavailable etc). This logic is the same as for
+     * activities.
      *
      * @param stdClass $section The course_section entry from DB
+     * @param bool $canviewhidden True if user can view hidden sections
      * @return string HTML to output
      */
-    protected function section_availability_message($section) {
+    protected function section_availability_message($section, $canviewhidden) {
+        global $CFG;
         $o = '';
-        if (!$section->uservisible || $section->availableinfo) {
+        if (!$section->uservisible) {
             $o .= html_writer::start_tag('div', array('class' => 'availabilityinfo'));
-            if (!empty($section->availableinfo)) {
-                $o .= $section->availableinfo;
-            } else {
-                $o .= get_string('notavailable');
-            }
+            // Note: We only get to this function if availableinfo is non-empty,
+            // so there is definitely something to print.
+            $o .= $section->availableinfo;
             $o .= html_writer::end_tag('div');
+        } else if ($canviewhidden && !empty($CFG->enableavailability) && $section->visible) {
+            $ci = new condition_info_section($section);
+            $fullinfo = $ci->get_full_information();
+            if ($fullinfo) {
+                $o .= html_writer::start_tag('div', array('class' => 'availabilityinfo'));
+                $o .= get_string(
+                        ($section->showavailability ? 'userrestriction_visible' : 'userrestriction_hidden'),
+                        'condition', $fullinfo);
+                $o .= html_writer::end_tag('div');
+            }
         }
         return $o;
     }
@@ -677,9 +696,10 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
                 $thissection->showavailability = 0;
             }
             // Show the section if the user is permitted to access it, OR if it's not available
-            // but showavailability is turned on
+            // but showavailability is turned on (and there is some available info text).
             $showsection = $thissection->uservisible ||
-                    ($thissection->visible && !$thissection->available && $thissection->showavailability);
+                    ($thissection->visible && !$thissection->available && $thissection->showavailability
+                    && !empty($thissection->availableinfo));
             if (!$showsection) {
                 // Hidden section message is overridden by 'unavailable' control
                 // (showavailability option).
@@ -716,7 +736,7 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
                     continue;
                 }
                 echo $this->stealth_section_header($section);
-                print_section($course, $thissection, $mods, $modnamesused, true, "100%", false, $displaysection);
+                print_section($course, $thissection, $mods, $modnamesused, true, "100%", false, 0);
                 echo $this->stealth_section_footer();
             }
 
index f315d4e..2b4e46b 100644 (file)
@@ -67,12 +67,11 @@ $straction = get_string('action');
 $strfulllistofcourses = get_string('fulllistofcourses');
 
 
-/// Unless it's an editing admin, just print the regular listing of courses/categories
+// Unless it's an editing admin, just print the regular listing of courses/categories.
 if (!$adminediting) {
-
-/// Print form for creating new categories
+    $showaddcoursebutton = true;
+    // Print form for creating new categories.
     $countcategories = $DB->count_records('course_categories');
-
     if ($countcategories > 1 || ($countcategories == 1 && $DB->count_records('course') > 200)) {
         $strcourses = get_string('courses');
         $strcategories = get_string('categories');
@@ -96,14 +95,13 @@ if (!$adminediting) {
         echo $OUTPUT->header();
         echo $OUTPUT->skip_link_target();
         echo $OUTPUT->box_start('courseboxes');
-        print_courses(0);
+        $showaddcoursebutton = print_courses(0);
         echo $OUTPUT->box_end();
     }
 
     echo $OUTPUT->container_start('buttons');
-    if (has_capability('moodle/course:create', $systemcontext)) {
-    /// Print link to create a new course
-    /// Get the 1st available category
+    if (has_capability('moodle/course:create', $systemcontext) && $showaddcoursebutton) {
+        // Print link to create a new course, for the 1st available category.
         $options = array('category' => $CFG->defaultrequestcategory);
         echo $OUTPUT->single_button(new moodle_url('edit.php', $options), get_string('addnewcourse'), 'get');
     }
index 54dfc74..bbb855e 100644 (file)
@@ -2457,7 +2457,9 @@ function update_category_button($categoryid = 0) {
 }
 
 /**
- * Category is 0 (for all courses) or an object
+ * Print courses in category. If category is 0 then all courses are printed.
+ * @param int|stdClass $category category object or id.
+ * @return bool true if courses found and printed, else false.
  */
 function print_courses($category) {
     global $CFG, $OUTPUT;
@@ -2505,8 +2507,10 @@ function print_courses($category) {
             echo html_writer::start_tag('div', array('class'=>'addcoursebutton'));
             echo $OUTPUT->single_button(new moodle_url('/course/edit.php', $options), get_string("addnewcourse"));
             echo html_writer::end_tag('div');
+            return false;
         }
     }
+    return true;
 }
 
 /**
@@ -2606,6 +2610,7 @@ function print_course($course, $highlightterms = '') {
     if ($icons = enrol_get_course_info_icons($course)) {
         echo html_writer::start_tag('div', array('class'=>'enrolmenticons'));
         foreach ($icons as $icon) {
+            $icon->attributes["alt"] .= ": ". format_string($coursename, true, array('context'=>$context));
             echo $OUTPUT->render($icon);
         }
         echo html_writer::end_tag('div'); // End of enrolmenticons div
index 984b9ed..bdfc636 100644 (file)
@@ -76,6 +76,9 @@ class core_course_external_testcase extends externallib_advanced_testcase {
 
         $createdcats = core_course_external::create_categories($categories);
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $createdcats = external_api::clean_returnvalue(core_course_external::create_categories_returns(), $createdcats);
+
         // Initially confirm that base data was inserted correctly.
         $this->assertEquals($category1->name, $createdcats[0]['name']);
         $this->assertEquals($category2->name, $createdcats[1]['name']);
@@ -93,6 +96,9 @@ class core_course_external_testcase extends externallib_advanced_testcase {
 
         $createdsubcats = core_course_external::create_categories($subcategories);
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $createdsubcats = external_api::clean_returnvalue(core_course_external::create_categories_returns(), $createdsubcats);
+
         // Confirm that sub categories were inserted correctly.
         $this->assertEquals($category3->name, $createdsubcats[0]['name']);
 
@@ -197,6 +203,9 @@ class core_course_external_testcase extends externallib_advanced_testcase {
             array('key' => 'id', 'value' => $category1->id),
             array('key' => 'visible', 'value' => 1)), 1);
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $categories = external_api::clean_returnvalue(core_course_external::get_categories_returns(), $categories);
+
         // Check we retrieve the good total number of categories.
         $this->assertEquals(2, count($categories));
 
@@ -214,6 +223,10 @@ class core_course_external_testcase extends externallib_advanced_testcase {
             array('key' => 'id', 'value' => $category1->id),
             array('key' => 'idnumber', 'value' => $category1->idnumber),
             array('key' => 'visible', 'value' => 1)), 0);
+
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $categories = external_api::clean_returnvalue(core_course_external::get_categories_returns(), $categories);
+
         $this->assertEquals(1, count($categories));
 
         // Retrieve categories from parent.
@@ -223,6 +236,10 @@ class core_course_external_testcase extends externallib_advanced_testcase {
 
         // Retrieve all categories.
         $categories = core_course_external::get_categories();
+
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $categories = external_api::clean_returnvalue(core_course_external::get_categories_returns(), $categories);
+
         $this->assertEquals($DB->count_records('course_categories'), count($categories));
 
         // Call without required capability (it will fail cause of the search on idnumber).
@@ -343,6 +360,9 @@ class core_course_external_testcase extends externallib_advanced_testcase {
 
         $createdcourses = core_course_external::create_courses($courses);
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $createdcourses = external_api::clean_returnvalue(core_course_external::create_courses_returns(), $createdcourses);
+
         // Check that right number of courses were created.
         $this->assertEquals(2, count($createdcourses));
 
@@ -475,6 +495,9 @@ class core_course_external_testcase extends externallib_advanced_testcase {
         $courses = core_course_external::get_courses(array('ids' =>
             array($course1->id, $course2->id)));
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $courses = external_api::clean_returnvalue(core_course_external::get_courses_returns(), $courses);
+
         // Check we retrieve the good total number of categories.
         $this->assertEquals(2, count($courses));
 
@@ -508,6 +531,10 @@ class core_course_external_testcase extends externallib_advanced_testcase {
 
         // Get all courses in the DB
         $courses = core_course_external::get_courses(array());
+
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $courses = external_api::clean_returnvalue(core_course_external::get_courses_returns(), $courses);
+
         $this->assertEquals($DB->count_records('course'), count($courses));
     }
 
@@ -535,6 +562,9 @@ class core_course_external_testcase extends externallib_advanced_testcase {
 
         $courses = core_course_external::get_course_contents($course->id, array());
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $courses = external_api::clean_returnvalue(core_course_external::get_course_contents_returns(), $courses);
+
         // Check that the course has the 3 created modules
         $this->assertEquals(3, count($courses[0]['modules']));
     }
@@ -578,6 +608,9 @@ class core_course_external_testcase extends externallib_advanced_testcase {
         $duplicate = core_course_external::duplicate_course($course->id, $newcourse['fullname'],
                 $newcourse['shortname'], $newcourse['categoryid'], $newcourse['visible'], $newcourse['options']);
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $duplicate = external_api::clean_returnvalue(core_course_external::duplicate_course_returns(), $duplicate);
+
         // Check that the course has been duplicated.
         $this->assertEquals($newcourse['shortname'], $duplicate['shortname']);
     }
index 28b9081..f7ff2c6 100644 (file)
@@ -152,6 +152,9 @@ YUI.add('moodle-course-modchooser', function(Y) {
     {
         NAME : MODCHOOSERNAME,
         ATTRS : {
+            maxheight : {
+                value : 800
+            }
         }
     });
     M.course = M.course || {};
index 2486fba..cec03e0 100644 (file)
@@ -259,15 +259,6 @@ YUI.add('moodle-course-toolboxes', function(Y) {
         },
         _setup_for_resource : function(toolboxtarget) {
             toolboxtarget = Y.one(toolboxtarget);
-            // "Disable" show/hide icons (change cursor to not look clickable) if section is hidden
-            var showhide = toolboxtarget.all(CSS.COMMANDSPAN + ' ' + CSS.HIDE);
-            showhide.concat(toolboxtarget.all(CSS.COMMANDSPAN + ' ' + CSS.SHOW));
-            showhide.each(function(node) {
-                var section = node.ancestor(CSS.SECTIONLI);
-                if (section && section.hasClass(CSS.SECTIONHIDDENCLASS)) {
-                    node.setStyle('cursor', 'auto');
-                }
-            });
 
             // Set groupmode attribute for use by this.toggle_groupmode()
             var groups;
@@ -707,12 +698,6 @@ YUI.add('moodle-course-toolboxes', function(Y) {
                 if (Y.Array.indexOf(response.resourcestotoggle, activityid) != -1) {
                     this.toggle_hide_resource_ui(button);
                 }
-
-                if (value == 0) {
-                    button.setStyle('cursor', 'auto');
-                } else {
-                    button.setStyle('cursor', 'pointer');
-                }
             }, this);
         },
         toggle_highlight : function(e) {
index 024e81b..c9e2cc0 100644 (file)
@@ -634,9 +634,10 @@ function groups_parse_name($format, $groupnumber) {
  *
  * @param int groupingid
  * @param int groupid
+ * @param int $timeadded  The time the group was added to the grouping.
  * @return bool true or exception
  */
-function groups_assign_grouping($groupingid, $groupid) {
+function groups_assign_grouping($groupingid, $groupid, $timeadded = null) {
     global $DB;
 
     if ($DB->record_exists('groupings_groups', array('groupingid'=>$groupingid, 'groupid'=>$groupid))) {
@@ -645,7 +646,11 @@ function groups_assign_grouping($groupingid, $groupid) {
     $assign = new stdClass();
     $assign->groupingid = $groupingid;
     $assign->groupid    = $groupid;
-    $assign->timeadded  = time();
+    if ($timeadded != null) {
+        $assign->timeadded = (integer)$timeadded;
+    } else {
+        $assign->timeadded = time();
+    }
     $DB->insert_record('groupings_groups', $assign);
 
     return true;
index 841a000..671fad5 100644 (file)
@@ -1271,7 +1271,10 @@ class block_manager {
         } else if ($data = $mform->get_data()) {
             $bi = new stdClass;
             $bi->id = $block->instance->id;
+
+            // This may get overwritten by the special case handling below.
             $bi->pagetypepattern = $data->bui_pagetypepattern;
+            $bi->showinsubcontexts = $data->bui_contexts;
             if (empty($data->bui_subpagepattern) || $data->bui_subpagepattern == '%@NULL@%') {
                 $bi->subpagepattern = null;
             } else {
index ce5c160..f01219d 100644 (file)
@@ -1425,6 +1425,7 @@ function &get_mimetypes_array() {
         'isf'  => array ('type'=>'application/inspiration', 'icon'=>'isf'),
         'ist'  => array ('type'=>'application/inspiration.template', 'icon'=>'isf'),
         'java' => array ('type'=>'text/plain', 'icon'=>'sourcecode'),
+        'jar'  => array ('type'=>'application/java-archive', 'icon' => 'archive'),
         'jcb'  => array ('type'=>'text/xml', 'icon'=>'markup'),
         'jcl'  => array ('type'=>'text/xml', 'icon'=>'markup'),
         'jcw'  => array ('type'=>'text/xml', 'icon'=>'markup'),
index bbadd5c..29d5112 100644 (file)
@@ -521,7 +521,8 @@ M.form_dndupload.init = function(Y, options) {
             if (!overwrite) {
                 this.currentfilecount++;
             }
-            if (this.options.maxfiles > 0 && this.currentfilecount > this.options.maxfiles) {
+            // The value for "unlimited files" is -1, so 0 should mean 0.
+            if (this.options.maxfiles >= 0 && this.currentfilecount > this.options.maxfiles) {
                 // Too many files - abort entire upload.
                 this.uploadqueue = [];
                 this.renamequeue = [];
index c715811..21b4689 100644 (file)
@@ -169,8 +169,7 @@ M.form_filemanager.init = function(Y, options) {
                     scope: scope
                 },
                 headers: {
-                    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
-                    'User-Agent': 'MoodleFileManager/3.0'
+                    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
                 },
                 data: build_querystring(params)
             };
index f6d968d..bf3cbdc 100644 (file)
@@ -323,7 +323,8 @@ class form_filemanager implements renderable {
             $defaults['defaultlicense'] = $CFG->sitedefaultlicense;
         }
         foreach ($defaults as $key=>$value) {
-            if (empty($options->$key)) {
+            // Using !isset() prevents us from overwriting falsey values with defaults (as empty() did).
+            if (!isset($options->$key)) {
                 $options->$key = $value;
             }
         }
index 5e1cf96..d00f634 100644 (file)
@@ -2272,15 +2272,14 @@ class paging_bar implements renderable {
                 $lastpage = 1;
             }
 
-            if ($this->page > 15) {
-                $startpage = $this->page - 10;
+            if ($this->page > round(($this->maxdisplay/3)*2)) {
+                $currpage = $this->page - round($this->maxdisplay/3);
 
                 $this->firstlink = html_writer::link(new moodle_url($this->baseurl, array($this->pagevar=>0)), '1', array('class'=>'first'));
             } else {
-                $startpage = 0;
+                $currpage = 0;
             }
 
-            $currpage = $startpage;
             $displaycount = $displaypage = 0;
 
             while ($displaycount < $this->maxdisplay and $currpage < $lastpage) {
index 81ad764..ac7d2bb 100644 (file)
@@ -176,7 +176,7 @@ function plagiarism_cron() {
         $plagiarismplugin->cron();
     }
 }
-/** 
+/**
  * helper function - also loads lib file of plagiarism plugin
  * @return array of available plugins
  */
index c8bd732..03a19cf 100644 (file)
@@ -31,7 +31,7 @@ YUI.add('moodle-core-chooserdialogue', function(Y) {
         },
 
         prepare_chooser : function () {
-            if (this.overlay) {
+            if (this.panel) {
                 return;
             }
 
index 01d6668..39525db 100644 (file)
@@ -40,9 +40,17 @@ YUI.add('moodle-core-formautosubmit',
                 }
 
                 // Assign this select items 'nothing' value and lastindex (current value)
-                var thisselect = Y.one('select#' + this.get('selectid'));
-                thisselect.setData('nothing', this.get('nothing'));
-                thisselect.setData('startindex', thisselect.get('selectedIndex'));
+                if (this.get('selectid')) {
+                    var thisselect = Y.one('select#' + this.get('selectid'));
+                    if (thisselect) {
+                        if (this.get('nothing')) {
+                            thisselect.setData('nothing', this.get('nothing'));
+                        }
+                        thisselect.setData('startindex', thisselect.get('selectedIndex'));
+                    } else {
+                        Y.log("Warning: A single_select element was renderered, but the output is not displayed on the page.");
+                    }
+                }
             },
 
             /**
index b846573..8a89006 100644 (file)
@@ -54,7 +54,7 @@ function toolbook_importhtml_import_chapters($package, $type, $book, $context, $
     }
     if ($type == 0) {
         $chapterfile = reset($chapterfiles);
-        if ($file = $fs->get_file_by_hash("$context->id/mod_book/importhtmltemp/0/$chapterfile->pathname")) {
+        if ($file = $fs->get_file_by_hash(sha1("$context->id/mod_book/importhtmltemp/0/$chapterfile->pathname"))) {
             $htmlcontent = toolbook_importhtml_fix_encoding($file->get_content());
             $htmlchapters = toolbook_importhtml_parse_headings(toolbook_importhtml_parse_body($htmlcontent));
             // TODO: process h1 as main chapter and h2 as subchapters
index 106f0d9..4d350c7 100644 (file)
@@ -720,6 +720,11 @@ function forum_cron() {
                 $eventdata->contexturl = "{$CFG->wwwroot}/mod/forum/discuss.php?d={$discussion->id}#p{$post->id}";
                 $eventdata->contexturlname = $discussion->name;
 
+                // If forum_replytouser is not set then send mail using the noreplyaddress.
+                if (empty($CFG->forum_replytouser)) {
+                    $eventdata->userfrom->email = $CFG->noreplyaddress;
+                }
+
                 $mailresult = message_send($eventdata);
                 if (!$mailresult){
                     mtrace("Error: mod/forum/lib.php forum_cron(): Could not send out mail for id $post->id to user $userto->id".
@@ -1011,10 +1016,9 @@ function forum_cron() {
                 }
 
                 $attachment = $attachname='';
-                $usetrueaddress = true;
                 // Directly email forum digests rather than sending them via messaging, use the
                 // site shortname as 'from name', the noreply address will be used by email_to_user.
-                $mailresult = email_to_user($userto, $site->shortname, $postsubject, $posttext, $posthtml, $attachment, $attachname, $usetrueaddress, $CFG->forum_replytouser);
+                $mailresult = email_to_user($userto, $site->shortname, $postsubject, $posttext, $posthtml, $attachment, $attachname);
 
                 if (!$mailresult) {
                     mtrace("ERROR!");
index 8014bc1..d4a384b 100644 (file)
@@ -306,7 +306,11 @@ class restore_quiz_activity_structure_step extends restore_questions_activity_st
         $data->timestart = $this->apply_date_offset($data->timestart);
         $data->timefinish = $this->apply_date_offset($data->timefinish);
         $data->timemodified = $this->apply_date_offset($data->timemodified);
-        $data->timecheckstate = $this->apply_date_offset($data->timecheckstate);
+        if (!empty($data->timecheckstate)) {
+            $data->timecheckstate = $this->apply_date_offset($data->timecheckstate);
+        } else {
+            $data->timecheckstate = 0;
+        }
 
         // Deals with up-grading pre-2.3 back-ups to 2.3+.
         if (!isset($data->state)) {
index d332563..a3736e7 100644 (file)
@@ -197,6 +197,7 @@ $string['saving'] = 'Saving wiki page';
 $string['savingerror'] = 'Saving error';
 $string['searchcontent'] = 'Search in page content';
 $string['searchresult'] = 'Search results:';
+$string['searchterms'] = 'Search terms';
 $string['searchwikis'] = 'Search wikis';
 $string['special'] = 'Special';
 $string['tableofcontents'] = 'Table of contents';
index 974c46d..f42f3a6 100644 (file)
@@ -474,7 +474,8 @@ function wiki_search_form($cm, $search = '') {
     $output = '<div class="wikisearch">';
     $output .= '<form method="post" action="' . $CFG->wwwroot . '/mod/wiki/search.php" style="display:inline">';
     $output .= '<fieldset class="invisiblefieldset">';
-    $output .= '<label class="accesshide" for="searchwiki">' . get_string("searchwikis", "wiki") . '</label>';
+    $output .= '<legend class="accesshide">'. get_string('searchwikis', 'wiki') .'</legend>';
+    $output .= '<label class="accesshide" for="searchwiki">' . get_string("searchterms", "wiki") . '</label>';
     $output .= '<input id="searchwiki" name="searchstring" type="text" size="18" value="' . s($search, true) . '" alt="search" />';
     $output .= '<input name="courseid" type="hidden" value="' . $cm->course . '" />';
     $output .= '<input name="cmid" type="hidden" value="' . $cm->id . '" />';
index 64f0dbf..f1472af 100644 (file)
@@ -149,6 +149,40 @@ class qformat_xml extends qformat_default {
         return $xml;
     }
 
+    public function import_text_with_files($data, $path, $defaultvalue = '', $defaultformat = 'html') {
+        $field  = array();
+        $field['text'] = $this->getpath($data,
+                array_merge($path, array('#', 'text', 0, '#')), $defaultvalue, true);
+        $field['format'] = $this->trans_format($this->getpath($data,
+                array_merge($path, array('@', 'format')), $defaultformat));
+        $itemid = $this->import_files_as_draft($this->getpath($data,
+                array_merge($path, array('#', 'file')), array(), false));
+        if (!empty($itemid)) {
+            $field['itemid'] = $itemid;
+        }
+        return $field;
+    }
+
+    public function import_files_as_draft($xml) {
+        global $USER;
+        if (empty($xml)) {
+            return null;
+        }
+        $fs = get_file_storage();
+        $itemid = file_get_unused_draft_itemid();
+        foreach ($xml as $file) {
+            $filerecord = array(
+                'contextid' => context_user::instance($USER->id)->id,
+                'component' => 'user',
+                'filearea'  => 'draft',
+                'itemid'    => $itemid,
+                'filepath'  => '/',
+                'filename'  => $file['@']['name'],
+            );
+            $fs->create_file_from_string($filerecord, base64_decode($file['#']));
+        }
+        return $itemid;
+    }
 
     /**
      * import parts of question common to all types
@@ -156,7 +190,7 @@ class qformat_xml extends qformat_default {
      * @return object question object
      */
     public function import_headers($question) {
-        global $CFG;
+        global $CFG, $USER;
 
         // get some error strings
         $error_noname = get_string('xmlimportnoname', 'qformat_xml');
@@ -169,35 +203,42 @@ class qformat_xml extends qformat_default {
         $qo->name = $this->clean_question_name($this->getpath($question,
                 array('#', 'name', 0, '#', 'text', 0, '#'), '', true,
                 get_string('xmlimportnoname', 'qformat_xml')));
-        $qo->questiontext = $this->getpath($question,
-                array('#', 'questiontext', 0, '#', 'text', 0, '#'), '', true);
-        $qo->questiontextformat = $this->trans_format($this->getpath(
-                $question, array('#', 'questiontext', 0, '@', 'format'), 'html'));
-
-        $qo->questiontextfiles = $this->import_files($this->getpath($question,
-                array('#', 'questiontext', 0, '#', 'file'), array(), false));
-
+        $questiontext = $this->import_text_with_files($question,
+                array('#', 'questiontext', 0));
+        $qo->questiontext = $questiontext['text'];
+        $qo->questiontextformat = $questiontext['format'];
+        if (!empty($questiontext['itemid'])) {
+            $qo->questiontextitemid = $questiontext['itemid'];
+        }
         // Backwards compatibility, deal with the old image tag.
         $filedata = $this->getpath($question, array('#', 'image_base64', '0', '#'), null, false);
         $filename = $this->getpath($question, array('#', 'image', '0', '#'), null, false);
         if ($filedata && $filename) {
-            $data = new stdClass();
-            $data->content = $filedata;
-            $data->encoding = 'base64';
-            // Question file areas don't support subdirs, so convert path to filename if necessary.
-            $data->name = clean_param(str_replace('/', '_', $filename), PARAM_FILE);
-            $qo->questiontextfiles[] = $data;
-            $qo->questiontext .= ' <img src="@@PLUGINFILE@@/' . $data->name . '" />';
+            $fs = get_file_storage();
+            if (empty($qo->questiontextitemid)) {
+                $qo->questiontextitemid = file_get_unused_draft_itemid();
+            }
+            $filename = clean_param(str_replace('/', '_', $filename), PARAM_FILE);
+            $filerecord = array(
+                'contextid' => context_user::instance($USER->id)->id,
+                'component' => 'user',
+                'filearea'  => 'draft',
+                'itemid'    => $qo->questiontextitemid,
+                'filepath'  => '/',
+                'filename'  => $filename,
+            );
+            $fs->create_file_from_string($filerecord, base64_decode($filedata));
+            $qo->questiontext .= ' <img src="@@PLUGINFILE@@/' . $filename . '" />';
         }
 
         // restore files in generalfeedback
-        $qo->generalfeedback = $this->getpath($question,
-                array('#', 'generalfeedback', 0, '#', 'text', 0, '#'), $qo->generalfeedback, true);
-        $qo->generalfeedbackfiles = array();
-        $qo->generalfeedbackformat = $this->trans_format($this->getpath($question,
-                array('#', 'generalfeedback', 0, '@', 'format'), $this->get_format($qo->questiontextformat)));
-        $qo->generalfeedbackfiles = $this->import_files($this->getpath($question,
-                array('#', 'generalfeedback', 0, '#', 'file'), array(), false));
+        $generalfeedback = $this->import_text_with_files($question,
+                array('#', 'generalfeedback', 0), $qo->generalfeedback, $this->get_format($qo->questiontextformat));
+        $qo->generalfeedback = $generalfeedback['text'];
+        $qo->generalfeedbackformat = $generalfeedback['format'];
+        if (!empty($generalfeedback['itemid'])) {
+            $qo->generalfeedbackitemid = $generalfeedback['itemid'];
+        }
 
         $qo->defaultmark = $this->getpath($question,
                 array('#', 'defaultgrade', 0, '#'), $qo->defaultmark);
@@ -234,24 +275,15 @@ class qformat_xml extends qformat_default {
     public function import_answer($answer, $withanswerfiles = false, $defaultformat = 'html') {
         $ans = new stdClass();
 
-        $ans->answer = array();
-        $ans->answer['text']   = $this->getpath($answer, array('#', 'text', 0, '#'), '', true);
-        $ans->answer['format'] = $this->trans_format($this->getpath($answer,
-                array('@', 'format'), $defaultformat));
         if ($withanswerfiles) {
-            $ans->answer['files']  = $this->import_files($this->getpath($answer,
-                    array('#', 'file'), array()));
+            $ans->answer = $this->import_text_with_files($answer, array(), '', $defaultformat);
         } else {
+            $ans->answer = array();
+            $ans->answer['text']   = $this->getpath($answer, array('#', 'text', 0, '#'), '', true);
             $ans->answer['format'] = FORMAT_PLAIN;
         }
 
-        $ans->feedback = array();
-        $ans->feedback['text']   = $this->getpath($answer,
-                array('#', 'feedback', 0, '#', 'text', 0, '#'), '', true);
-        $ans->feedback['format'] = $this->trans_format($this->getpath($answer,
-                array('#', 'feedback', 0, '@', 'format'), $defaultformat));
-        $ans->feedback['files']  = $this->import_files($this->getpath($answer,
-                array('#', 'feedback', 0, '#', 'file'), array()));
+        $ans->feedback = $this->import_text_with_files($answer, array('#', 'feedback', 0), '', $defaultformat);
 
         $ans->fraction = $this->getpath($answer, array('@', 'fraction'), 0) / 100;
 
@@ -267,15 +299,8 @@ class qformat_xml extends qformat_default {
     public function import_combined_feedback($qo, $questionxml, $withshownumpartscorrect = false) {
         $fields = array('correctfeedback', 'partiallycorrectfeedback', 'incorrectfeedback');
         foreach ($fields as $field) {
-            $text = array();
-            $text['text'] = $this->getpath($questionxml,
-                    array('#', $field, 0, '#', 'text', 0, '#'), '', true);
-            $text['format'] = $this->trans_format($this->getpath($questionxml,
-                    array('#', $field, 0, '@', 'format'), $this->get_format($qo->questiontextformat)));
-            $text['files'] = $this->import_files($this->getpath($questionxml,
-                    array('#', $field, 0, '#', 'file'), array(), false));
-
-            $qo->$field = $text;
+            $qo->$field = $this->import_text_with_files($questionxml,
+                    array('#', $field, 0), '', $this->get_format($qo->questiontextformat));
         }
 
         if ($withshownumpartscorrect) {
@@ -296,15 +321,13 @@ class qformat_xml extends qformat_default {
      * @return object hint for storing in the database.
      */
     public function import_hint($hintxml, $defaultformat) {
+        $hint = new stdClass();
         if (array_key_exists('hintcontent', $hintxml['#'])) {
             // Backwards compatibility:
 
-            $hint = new stdClass();
-            $hint->hint = array('format' => FORMAT_HTML, 'files' => array());
-            $hint->hint['text'] = $this->getpath($hintxml,
-                    array('#', 'hintcontent', 0, '#', 'text', 0, '#'), '', true);
-            $hint->hint['format'] = $this->trans_format($defaultformat);
-            $hint->hint['files'] = array();
+            $hint->hint = $this->import_text_with_files($hintxml,
+                    array('#', 'hintcontent', 0), '', $defaultformat);
+
             $hint->shownumcorrect = $this->getpath($hintxml,
                     array('#', 'statenumberofcorrectresponses', 0, '#'), 0);
             $hint->clearwrong = $this->getpath($hintxml,
@@ -314,14 +337,7 @@ class qformat_xml extends qformat_default {
 
             return $hint;
         }
-
-        $hint = new stdClass();
-        $hint->hint['text'] = $this->getpath($hintxml,
-                array('#', 'text', 0, '#'), '', true);
-        $hint->hint['format'] = $this->trans_format($this->getpath($hintxml,
-                array('@', 'format'), $defaultformat));
-        $hint->hint['files'] = $this->import_files($this->getpath($hintxml,
-                array('#', 'file'), array(), false));
+        $hint->hint = $this->import_text_with_files($hintxml, array(), '', $defaultformat);
         $hint->shownumcorrect = array_key_exists('shownumcorrect', $hintxml['#']);
         $hint->clearwrong = array_key_exists('clearwrong', $hintxml['#']);
         $hint->options = $this->getpath($hintxml, array('#', 'options', 0, '#'), '', true);
@@ -440,9 +456,11 @@ class qformat_xml extends qformat_default {
         $qo->name = $this->clean_question_name($this->import_text($question['#']['name'][0]['#']['text']));
         $qo->questiontextformat = $questiontext['format'];
         $qo->questiontext = $qo->questiontext['text'];
-        $qo->questiontextfiles = $this->import_files($this->getpath($question,
+        $itemid = $this->import_files($this->getpath($question,
                 array('#', 'questiontext', 0, '#', 'file'), array(), false));
-
+        if (!empty($itemid)) {
+            $qo->questiontextitemid = $itemid;
+        }
         // Backwards compatibility, deal with the old image tag.
         $filedata = $this->getpath($question, array('#', 'image_base64', '0', '#'), null, false);
         $filename = $this->getpath($question, array('#', 'image', '0', '#'), null, false);
@@ -457,12 +475,13 @@ class qformat_xml extends qformat_default {
         }
 
         // restore files in generalfeedback
-        $qo->generalfeedback = $this->getpath($question,
-                array('#', 'generalfeedback', 0, '#', 'text', 0, '#'), $qo->generalfeedback, true);
-        $qo->generalfeedbackformat = $this->trans_format($this->getpath($question,
-                array('#', 'generalfeedback', 0, '@', 'format'), $this->get_format($qo->questiontextformat)));
-        $qo->generalfeedbackfiles = $this->import_files($this->getpath($question,
-                array('#', 'generalfeedback', 0, '#', 'file'), array(), false));
+        $generalfeedback = $this->import_text_with_files($question,
+                array('#', 'generalfeedback', 0), $qo->generalfeedback, $this->get_format($qo->questiontextformat));
+        $qo->generalfeedback = $generalfeedback['text'];
+        $qo->generalfeedbackformat = $generalfeedback['format'];
+        if (!empty($generalfeedback['itemid'])) {
+            $qo->generalfeedbackitemid = $generalfeedback['itemid'];
+        }
 
         $qo->penalty = $this->getpath($question,
                 array('#', 'penalty', 0, '#'), $this->defaultquestion()->penalty);
@@ -498,20 +517,9 @@ class qformat_xml extends qformat_default {
         foreach ($question['#']['answer'] as $answer) {
             $answertext = $this->getpath($answer,
                     array('#', 'text', 0, '#'), '', true);
-            $feedback = $this->getpath($answer,
-                    array('#', 'feedback', 0, '#', 'text', 0, '#'), '', true);
-            $feedbackformat = $this->getpath($answer,
-                    array('#', 'feedback', 0, '@', 'format'), $this->get_format($qo->questiontextformat));
-            $feedbackfiles = $this->getpath($answer,
-                    array('#', 'feedback', 0, '#', 'file'), array());
-            $files = array();
-            foreach ($feedbackfiles as $file) {
-                $data = new stdClass();
-                $data->content = $file['#'];
-                $data->encoding = $file['@']['encoding'];
-                $data->name = $file['@']['name'];
-                $files[] = $data;
-            }
+            $feedback = $this->import_text_with_files($answer,
+                    array('#', 'feedback', 0), '', $this->get_format($qo->questiontextformat));
+
             if ($answertext != 'true' && $answertext != 'false') {
                 // Old style file, assume order is true/false.
                 $warning = true;
@@ -525,17 +533,11 @@ class qformat_xml extends qformat_default {
             if ($answertext == 'true') {
                 $qo->answer = ($answer['@']['fraction'] == 100);
                 $qo->correctanswer = $qo->answer;
-                $qo->feedbacktrue = array();
-                $qo->feedbacktrue['text'] = $feedback;
-                $qo->feedbacktrue['format'] = $this->trans_format($feedbackformat);
-                $qo->feedbacktrue['files'] = $files;
+                $qo->feedbacktrue = $feedback;
             } else {
                 $qo->answer = ($answer['@']['fraction'] != 100);
                 $qo->correctanswer = $qo->answer;
-                $qo->feedbackfalse = array();
-                $qo->feedbackfalse['text'] = $feedback;
-                $qo->feedbackfalse['format'] = $this->trans_format($feedbackformat);
-                $qo->feedbackfalse['files'] = $files;
+                $qo->feedbackfalse = $feedback;
             }
             $first = false;
         }
@@ -650,13 +652,8 @@ class qformat_xml extends qformat_default {
         $qo->instructions['format'] = FORMAT_HTML;
         $instructions = $this->getpath($question, array('#', 'instructions'), array());
         if (!empty($instructions)) {
-            $qo->instructions = array();
-            $qo->instructions['text'] = $this->getpath($instructions,
-                    array('0', '#', 'text', '0', '#'), '', true);
-            $qo->instructions['format'] = $this->trans_format($this->getpath($instructions,
-                    array('0', '@', 'format'), $this->get_format($qo->questiontextformat)));
-            $qo->instructions['files'] = $this->import_files($this->getpath(
-                    $instructions, array('0', '#', 'file'), array()));
+            $qo->instructions = $this->import_text_with_files($instructions,
+                    array('0'), '', $this->get_format($qo->questiontextformat));
         }
 
         if (is_null($qo->showunits)) {
@@ -691,14 +688,9 @@ class qformat_xml extends qformat_default {
         $qo->subquestions = array();
         $qo->subanswers = array();
         foreach ($question['#']['subquestion'] as $subqxml) {
-            $subquestion = array();
-            $subquestion['text'] = $this->getpath($subqxml, array('#', 'text', 0, '#'), '', true);
-            $subquestion['format'] = $this->trans_format($this->getpath($subqxml,
-                    array('@', 'format'), $this->get_format($qo->questiontextformat)));
-            $subquestion['files'] = $this->import_files($this->getpath($subqxml,
-                    array('#', 'file'), array()));
-
-            $qo->subquestions[] = $subquestion;
+            $qo->subquestions[] = $this->import_text_with_files($subqxml,
+                    array(), '', $this->get_format($qo->questiontextformat));
+
             $answers = $this->getpath($subqxml, array('#', 'answer'), array());
             $qo->subanswers[] = $this->getpath($subqxml,
                     array('#', 'answer', 0, '#', 'text', 0, '#'), '', true);
@@ -728,12 +720,8 @@ class qformat_xml extends qformat_default {
                 array('#', 'responsefieldlines', 0, '#'), 15);
         $qo->attachments = $this->getpath($question,
                 array('#', 'attachments', 0, '#'), 0);
-        $qo->graderinfo['text'] = $this->getpath($question,
-                array('#', 'graderinfo', 0, '#', 'text', 0, '#'), '', true);
-        $qo->graderinfo['format'] = $this->trans_format($this->getpath($question,
-                array('#', 'graderinfo', 0, '@', 'format'), $this->get_format($qo->questiontextformat)));
-        $qo->graderinfo['files'] = $this->import_files($this->getpath($question,
-                array('#', 'graderinfo', '0', '#', 'file'), array()));
+        $qo->graderinfo = $this->import_text_with_files($question,
+                array('#', 'graderinfo', 0), '', $this->get_format($qo->questiontextformat));
 
         return $qo;
     }
@@ -767,13 +755,8 @@ class qformat_xml extends qformat_default {
         $qo->instructions = $this->getpath($question,
                 array('#', 'instructions', 0, '#', 'text', 0, '#'), '', true);
         if (!empty($instructions)) {
-            $qo->instructions = array();
-            $qo->instructions['text'] = $this->getpath($instructions,
-                    array('0', '#', 'text', '0', '#'), '', true);
-            $qo->instructions['format'] = $this->trans_format($this->getpath($instructions,
-                    array('0', '@', 'format'), $this->get_format($qo->questiontextformat)));
-            $qo->instructions['files'] = $this->import_files($this->getpath($instructions,
-                    array('0', '#', 'file'), array()));
+            $qo->instructions = $this->import_text_with_files($instructions,
+                    array('0'), '', $this->get_format($qo->questiontextformat));
         }
 
         // get answers array
@@ -817,13 +800,8 @@ class qformat_xml extends qformat_default {
         }
         $instructions = $this->getpath($question, array('#', 'instructions'), array());
         if (!empty($instructions)) {
-            $qo->instructions = array();
-            $qo->instructions['text'] = $this->getpath($instructions,
-                    array('0', '#', 'text', '0', '#'), '', true);
-            $qo->instructions['format'] = $this->trans_format($this->getpath($instructions,
-                    array('0', '@', 'format'), $this->get_format($qo->questiontextformat)));
-            $qo->instructions['files'] = $this->import_files($this->getpath($instructions,
-                    array('0', '#', 'file'), array()));
+            $qo->instructions = $this->import_text_with_files($instructions,
+                    array('0'), '', $this->get_format($qo->questiontextformat));
         }
 
         if (is_null($qo->unitpenalty)) {
diff --git a/question/format/xml/tests/fixtures/multichoice.xml b/question/format/xml/tests/fixtures/multichoice.xml
new file mode 100644 (file)
index 0000000..dbf5845
--- /dev/null
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<quiz>
+<!-- question: 0  -->
+  <question type="category">
+    <category>
+        <text>$course$/Default for testhead/Multichoice</text>
+
+    </category>
+  </question>
+
+<!-- question: 2295  -->
+  <question type="multichoice">
+    <name>
+      <text>Greeting</text>
+    </name>
+    <questiontext format="html">
+      <text><![CDATA[<p><a href="@@PLUGINFILE@@/bonjour.mp3">Listen to this greeting:</a><br /><br />What language is being spoken?</p>]]></text>
+<file name="bonjour.mp3" encoding="base64">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Fl7pz/jb6rABwGCAGDAGhSDiEYjCYFBTQjFYJHgumNR////////////+v69////////////7sToIDJhMBjQYMHDsFBgwCBDdpEfY20TiErmN0iYRIBteqiV1NLe81CJTXUoNyiIw8VAeLDFhQMML41sHTEYbBrIMVlcw8LjTAuaCxIzGXVfEoFMhG54CAIqFNyV/Xd56yYPTCzG6qYU61nheF5IKUtZ02WWOUqtKpuii81BRfNnAXD7ZoKY7khaoKOBNTRmrv05UBikgYAyIeNbxfsGhNUZAOB4XP4XDSeoX0MDAorApAOiIjOiWkfdiEMhcKNKEYuMJACDkt4qCQOBgwCAMZeCACCCOtosA4LgQlAAkDa6E0RCcvABA//LCwD145VuTxnQBnOAA8LFlX6lU8yoAghQIIF76FthgPtIBwAM3j9nrOc24l1nCFQE/YsAe/70ts5RICy7o6Dy4QiDIICRgYNhUXJfCME3/+Z3MgwAMVCoFBAQS4MTCMVFAYLyYYmFwDz//8Eqh0DLtlsoQ5AENltwENQMAiIA2f////////////JgBz////////////4dTEFNRTMuOTWqqqgAAHHsAAYVAUYBiiAh5BIHiRECotGiaPGD4vG5w/mDgamtpLmAwNmW/8GUxUGu6Dm2AuGVmHhAGGFaID4dmEYqmH4dnMYKBB1mAZgmvIQmFIyGWJxioCgAETJwvAUCq0jGkdS5AhAIHDSDAUMXgfRVCA1CojGKIKjgDFrhACQKIpTERhHOCEF0uSwAyARziqBcgWkUBk9xADLEyEBV9LRVqHgLL7GNwCr3HgJlooCpeEwDEgwaAWyztsinClBgaHimRZgBA2wwEBQNBgDgCMNgbkhfxsBbBp7WjBYGhAD6xnmBQBGAoE5MiMGgVbGFwNhquhiWpAAYqAigHmWQ9GP/ywsBMeP9qc8pgcZ3oAAgHBQANCAGCsACyw4DKlg8CQWDUKBGYShMYLE+YKBChjGB0DgICBEJJgWBTzRkIA0CAuBRKMUQCMNwssy53kIgEB6OMzFMv//8LARFy7wJBIgA4wjAYHCwWhMHAjKAixwwsdjhKBCA0FAyWAJKoFBcEDAsLDCMCh4LwwGtz0v68MDI7OwkkzVDqPAKNAIVAMLvMedTn////////////3+f////////////OcgAJmQABIvDDVFwE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T3y3///MCg7MVhnFiUMOhpMSAXMDAjMHg5yjL//ywsCcOINahC4EAZ3oABSqerSr////zAgDDC8RjBIQzFoWzGAiQCBhhSIRiiOxiAQte5yVQTMw7Eq3/////5jsGYyAxgABBjyXhmCQxhmERh0QJkMKZiUOJKTxluBRk2jxpKZFNTTU+wF0YQ1qozpGVpMC////////+YJjuAhCMTBlMKAyMIAdAIJBUGzCsPBEJpiwA5igRJi8DKPRgEAZgGDgcFUMujIHafaRv7KYq0p9pFqt3H//////////1Amxoqx1iLGoquZlbDnxdxyXqfNrUTkDSYTax5//rXcd81/7/9f///////////////1r8pyps0xBTUUzLjk1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/8sLAaDysAAADSAGAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//LCwByZ/wAAA0gBgAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjk1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==</file>    </questiontext>
+    <generalfeedback format="html">
+      <text></text>
+    </generalfeedback>
+    <defaultgrade>1.0000000</defaultgrade>
+    <penalty>0.1000000</penalty>
+    <hidden>0</hidden>
+    <single>true</single>
+    <shuffleanswers>true</shuffleanswers>
+    <answernumbering>abc</answernumbering>
+    <correctfeedback format="html">
+      <text></text>
+    </correctfeedback>
+    <partiallycorrectfeedback format="html">
+      <text></text>
+    </partiallycorrectfeedback>
+    <incorrectfeedback format="html">
+      <text></text>
+    </incorrectfeedback>
+    <answer fraction="0" format="html">
+      <text><![CDATA[<p><img src="@@PLUGINFILE@@/flag-uk.jpg" alt="British Flag" width="30" height="20" /> English</p>]]></text>
+<file name="flag-uk.jpg" encoding="base64">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</file>      <feedback format="html">
+        <text><![CDATA[<p>Sorry, listen again.</p>]]></text>
+      </feedback>
+    </answer>
+    <answer fraction="100" format="html">
+      <text><![CDATA[<p><img src="@@PLUGINFILE@@/flag-france.jpg" alt="French flag" width="30" height="20" /> French</p>]]></text>
+<file name="flag-france.jpg" encoding="base64">/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAFAAeAwERAAIRAQMRAf/EALYAAAMBAQAAAAAAAAAAAAAAAAgJCgcLAQADAQEAAAAAAAAAAAAAAAAHCAkFChAAAAEHCQEIEwEAAAAAAAAAAgEREgMTBAUAFBUGFgcXCAkYMUFhMkIjdSchUYEisjOktDZmN0dnxzhIiLgKOREAAAEIAwUQEAcAAAAAAAAAAQARAhIDEwQFFAYHQaEzFRYhMVFxscHRIkKCI3M0hDUXgZFyorLCQ4OTo7O0RYU3CbXFJjZHCBj/2gAMAwEAAhEDEQA/ABDzlatOaG7e+OM1XgMTdiOEPeX53ViG9vQBjCoeWYCiCAKJCkCSVB6p2YVcmEpQiWyIrpAFwNAl3m9aZlDxYskB2oCJWtaIl9Vb8w+mBljvir4tAvrXXDGilVoBjWBFZ/MJexVdxMNZ35UYbBFJOzvkkolsMohZFaNMZVBAaGZUdXfQrFMb6QkYamxjWPq3DRbfCpvD9hqmiF4CFzXNzN3i5ctl2wDwrUWxxspZNasVpWewjmBmZCnRpxdu9uQTnsU0hnTvdLXldkq1fbbsdqpazlnlOiKWL8UOjAA4fGa+fxKBTaPWo1mPer0YbGx1lWhUw2DrmMJA9LyOKxY8O706DXricYa0gV5SkLuEMThlioRjdJmnECO2RADBpiAFQ6sFg1nUqrTIbNoOCZhATSKiEm7YUQFqkDGCiG6CAXAQBNkiIhdHNEcwABJ+oX9RFaekIp56WViKi9BM+5DULkCn/SCWmJdED+cv/GjJz+Qn7UX4SRG3v6szbmvucOR6s/8A2jCed9s0IL/6S/sx/Ir5FSXesvkd/wCKVzftFfyD8i/OSlJL6ZE6JJ4YpYbLkbXSDwgKjlcvrjVDjY38MjSW5mgs5jxeZaS3dLWqik58cY84FxJ5zrE/E5KJjSpel1mUdjQ1aG7BR2ZU2ofRLjODJh4m+O+WFZbPPsFUzpW7cOwXcRgHijhN1n2UmzBh7Zbw6dQP6yzw/CeSm2k41y1jcdnxnwK58/AMle8VIuVZomI2FB5Lt1fSJnvnLA9WDa06hNoHE73pWSnM3+HNPIeRH7khdNqNwdINujXj6xUV/o/1tfqfqtX+HUpXn7k/rSTu6T6dRZpb6l6Odpu0ZtGU+d02CPNpM0jpck5t6WajQXSRjKZh+2GuTeTj/R2WkppzzKR42oxzn5K2eGuYJ4e6X//Z</file>      <feedback format="html">
+        <text><![CDATA[<p>Yes, well done!</p>]]></text>
+      </feedback>
+    </answer>
+    <answer fraction="0" format="html">
+      <text><![CDATA[<p><img src="@@PLUGINFILE@@/flag-german.jpg" alt="German flag" width="30" height="20" /> German</p>]]></text>
+<file name="flag-german.jpg" encoding="base64">/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAFAAeAwERAAIRAQMRAf/EAKYAAQACAwAAAAAAAAAAAAAAAAcACQEICgEAAQMFAQAAAAAAAAAAAAAAAAUGCQECAwQHCBAAAAMFBQMICwAAAAAAAAAAAQIFEQMEBggAMRIUByETFWEyldUWF1cYQVFxgZGhsSIjNSgRAAACBQYGDQ0AAAAAAAAAAAEEABECAwUhMRITBgdhk9MVFghBkaEiMtIjoxTUVVYXUYHBUmKiwnM1lSYnGP/aAAwDAQACEQMRAD8ApA1tqzq/RdQlxOSpRn4YGHinjtxuZTmM7vAUwlBhiQLLg9dk9qOQJkVNnSgDhfOw+JHm7uwvOfs1jizkfbdjMLMPNiA+cHIghOFZlahQYWVNRwALgCUpoAPgEFawY3Z0RWJwkI/OdcZMnhXer3atD9uOZFMDWZWoN8p6jD7ZSmgfrBWAjdnQmOksc64yVC629YJrNWi+3HMihAtVN1dKmqMnTVGImoIK0tPFR4kp3ZqYimO8UENUSYl4LgYPePTFgo94xgbL7ZAjMDFgWwNlKsJxrXatukpNdq7m8tl+yVagEdA01wWBIm6YyLFTNUsZAEZAmTqM1SpOqUjpyVomD0smN9DvIh4Lt4SPQylMAmFjAMslH5Wixjms9q/k4i8LmrSkWHzIygLsysNpwKT+2Rviu7LwNy6fRlyy8BkFhy3EQ78oVTvhPMvSKD13ZI/qjV370EMUZ6ujm8aLtu23HPZNJ5QqnfCeZekUHrux/VGrv3oIYoz1dDxou27bcc9k01zWqXah3Wu8mpDzTSYCqcTxTLwox6KLx5u0NVenwmBXF2GF27MO0wXWepXWRuLe2SMxR3aIkMPd0KTdWYUC3jABJULlEQCQNlOUxC9mwLd5BA6zF3IlmKxbXKqBbp4HqLnEAS+zXvzHdvY3gOS4EweG5HHzMX5M3j+7OYuf6GMZsZaHKC6C0X2ltZpHWjXUpl7FD2FcHZnXKtPBhnO62c3K6FR3qvTh8qCf9R8tlv8AUaav5Jh3Un9R8tj9RofkmHdQXU++PvXlvON7bNj+EXN/WR+Z92S3tn0U0H0ONVH0DeVmMYo+9RRKeZ2zk7pr6ZLR2hXuLT//2Q==</file>      <feedback format="html">
+        <text><![CDATA[<p>Sorry, listen again.</p>]]></text>
+      </feedback>
+    </answer>
+    <answer fraction="0" format="html">
+      <text><![CDATA[<p><img src="@@PLUGINFILE@@/flag-denmark.jpg" alt="Denmark flag" width="30" height="20" /> Danish</p>]]></text>
+<file name="flag-denmark.jpg" encoding="base64">/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAFAAeAwERAAIRAQMRAf/EALoAAAMBAQAAAAAAAAAAAAAAAAYJCgQHAQACAgMBAAAAAAAAAAAAAAAHCQYIAwQFChAAAAAKBwIIDwEAAAAAAAAAARECEgMTBBQVFwAFBhYIGAkxByFBM2QnR2cZYSJC0iNDhJSkVShoqOgKGhEAAAMEBQQICxkAAAAAAAAAARECEgMTFAAEBRUGMRYHFyFBIqJjCBgJUWFxcoJDg2RFZSaBkaGx0TJCUmKSsjNTcyREpOQl5aYnZygZ/9oADAMBAAIRAxEAPwAlxSak2IOwu9CtLP1O3oAMbEna0KMJTQ0ElFEok5hBwCSTQBAClHsTaRLeqNpKq7lQMJEQyjT1R6DuJpolxRghxa1oulTDxCBHcpHKkxo6HX9xWbzMMeUyXTSjZ77z3jCxKlRH3ak1DxKwBONj6fbsHQwadcUWlhu6rvEo0y12EuXwhot/moNBGCtNmf2eCBXdlyQSABKYveJl+YRSc3vWMTHzFn96afNpX7WhiP2weeNHB8hLQt8iv3qfVoD1tqfYnWy3FlK2vIWgQVQzVwVDELU0EsrclamJMxgSNgRHFgZyGg4gkQgFgGEfALO6x3iCsu3tpLeiCqsgGUgIkIrWlAirqAoSDo05VocU3Q9YddqGCavZ7tbu26ysHr9SQF47RV6u+rKUugyA08cpbUZinYAgM6L99n9Gcnbb1hY3JzeJwTNCGJZhIQtUJVZznI+tDD9oloRUNls8YG6K6qp3REZEQOaZydKWV6dFdaNOZ71iYZdYi1iScVKRh3DFJoD9ffTsy60KMH1RNUTu2ZG9Bs55zzM6zJdXbl1L7s+t3GIxfvmru6+tW+jnukvSXq7kvoU5ORu3QmIULgnjTUT3JM7Z7FSuI/xH+WXnP5T5t5t3d4OvCYvCf7/qUGDJcLEi+wY3amf9RP2N/kx+v1BZylfEv2z7rS+/+IH8n/pz8+pyi1H9Kcc3n7srXZLnW5RdpGuH5jF8Sitm63qBW9yJQuaiLrRqkpys0QDjid5xxiY9Tf1u5yggkSmzNpaU5ZbYJo8g5CpFbW5mW68R2XYGshu8nj1ETN9mHCq75+bN9i21CYJpJNNGJEM2WLycM+Lev0UFH6ydXh3Vu7wFW7eSpNFs49vDQS1rNCdfXzMTkQTaLe7RdSjEMP8AKLzXszVrc2bkmhmC0Zl20903121k2KOC16c830p5hnPrzuhC1PY9H15/sRovDQ66cM3fwu/2/rMNnuDR72in+au1zeXeqOX8CzcU/G0Bku7H5lJ4+lLnXwtAJ+3XC+hRuf8AczvDfUwFzGiSBc/PbqmdDXMzlES5YPxuSGIXHTpVbMOQrMKJLspb6JREEXZFSE25ys87rFnZO9oz+XI2WpSsRGtv4psi2yp//9k=</file>      <feedback format="html">
+        <text><![CDATA[<p>Sorry, listen again.</p>]]></text>
+      </feedback>
+    </answer>
+  </question>
+
+</quiz>
\ No newline at end of file
diff --git a/question/format/xml/tests/fixtures/truefalse.xml b/question/format/xml/tests/fixtures/truefalse.xml
new file mode 100644 (file)
index 0000000..2453a30
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<quiz>
+<!-- question: 0  -->
+  <question type="category">
+    <category>
+        <text>$course$/Default for testhead/TrueFalse</text>
+
+    </category>
+  </question>
+
+<!-- question: 2284  -->
+  <question type="truefalse">
+    <name>
+      <text>Moodle acronym (False)</text>
+    </name>
+    <questiontext format="html">
+      <text><![CDATA[<p>Moodle <img src="@@PLUGINFILE@@/logo.jpg" alt="Moodle logo" width="48" height="48" /> is an acronym for <span style="font-style: italic;">Modular Object-Oriented Dynamic Learning Education</span>.</p>]]></text>
+<file name="logo.jpg" encoding="base64">/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBggGBQkIBwgKCQkKDRYODQwMDRoTFBAWHxwhICocHh4jJzIqIyUvLR4eNzssLy41ODg0JSo4QTAqPDwsNDUBCQoKDQsNGQ4OGTUkHiQ1NTU1NTU1NTU1NTUuNTU1LTU1NTU1NTQsMjU1NTU1NSk0KSw0MjQ2Miw1NDQyNDQ0Nf/AABEIADAAMAMBIgACEQEDEQH/xAAbAAEAAgIDAAAAAAAAAAAAAAAHAAYDBQEECP/EADUQAAEDAwEEBgcJAAAAAAAAAAECAwQABREGEiExURNBYXORsQcUFRZDYqEXIyQ2QnGywfD/xAAYAQEAAwEAAAAAAAAAAAAAAAAAAQMEAv/EACIRAAEEAgIBBQAAAAAAAAAAAAMAAQIEETESIeEFUYGhsf/aAAwDAQACEQMRAD8AcalSsT8lmMkKfdbaSeBWoJH1oiy1K0z+sbDGTly7Q+WEuhR8BWW16lt16dUm3vF9KeLiUKCM8tojGaItpUqVKIqRq7Xr9sBj2i3yZEg/FUyoIT2jPH/caHbtepdzubqr3ch06fhLXgp7N/DwFOMwx/f9MZxoEuQUuBRJI3OKGMcOsdtHOsNMRGLxNu7TilqcfUVNuIBAwcYBGKpKcYcc3xlWjFMueDaVEj3Bj2mwOi9ZZ6QBaUfqGeA516GsKbTAtTD7LiSgpGyAN6ezZHDFG1j9GsyVLXd0pSwlP3jTSgOXnXfuM+VDiNR4qg2uSpKARu3msNu7MBIwjHPL9WqtViaDzeWkie9ltSrZcW432qbOK2caUzLZDsdxLrauCknIo6XpCdbrYJ65q3hu20L5E43eNcaZubtq1emEFH1eUkko6goddViuHhYYB2bvWF3OsKQXKF9e6sdzVI+0SGCn8N6go7Xz9Kn+qquskj2fK71f8qTHojTzyHlIBcQMJV1gccfQUa6ptl7lPSYzVv2mluKUle2N4Jzzp6oEheHBs4dcUiRg8uT46V8s35fa7s+VHN8QBNtffN+YpItTTjdjbQUkL6PGDzo6m2q9yrnEDtvKG47ySVBQO4H96i+EhDilBum39KapIxHNnfaQruM6acHyJ8xVAaSB6QIGOSqQbsy+7px1uO30j2wnZRnGSCKoVstt3e1dFly4JZbbyCQoGoshJK8ObN02O/l0CSLVpRd+38L/2Q==</file>    </questiontext>
+    <generalfeedback format="html">
+      <text><![CDATA[<p><img src="@@PLUGINFILE@@/infos.jpg" alt="Informations" width="34" height="49" />For further information, see the <a title="Moodle Docs - About Moodle" href="http://docs.moodle.org/en/About_Moodle">documentation about Moodle</a>.</p>]]></text>
+<file name="infos.jpg" encoding="base64">/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBggGBQkIBwgKCQkKGRYaDQwMDRodFBAhKhwlIB8lHh4jIjIoIyQvJSQeKy8sLzMtODgsISo9QTs2QTIuMywBCQoKDQsNGQ4OGTUkHiQ1NTU1NTU1NTU1NTU1NTU1Ly82NTU1NDUtLTQ0NTU1MCwsLCw0KTU0LzU2NjMpKTQ2Kf/AABEIADEAIgMBIgACEQEDEQH/xAAaAAEAAwEBAQAAAAAAAAAAAAAABQYHBAID/8QALhAAAQMCBAMHBAMAAAAAAAAAAgABAwQFBhEhMUFRgRITIjJxsfAHYWKRFBVC/8QAGQEAAgMBAAAAAAAAAAAAAAAAAAEDBAUC/8QAIREAAgEDBAMBAAAAAAAAAAAAAAECAxExBBITISIjQQX/2gAMAwEAAhEDEQA/ANxXk5AiHtSGINzJ8lz3GvitlCdTOTCAcVl16xZU3SoMhMoof8iz65fdWaGmlXfWCOpUUMmrDVwGbCM8RE+zMbZuvqsdvzR2WSme3Xf+W8o5n3ZeX11dsn5PyVowJjUrof8AX1xN3w+Qufzbq3TuppHCHJF3RzGqnLa8l6REVMmKV9UpzhsMLA7sJF4v2yySe5OD9mPV+LvwW84osg3+xzUj6G7eF23+cfVmWAXW01Vnrnp62JwJn0LLwn6fNFt/mzi4OH0p6iLvuJ3HZi01EUEQQCTFm0YMLPtyUdg+eePFNI8RF2vFx/F392ZSGN7va7sVva0yHI0Ik0jlG46u7ZZZ77Kx/TPBdQFc1zr4ii7HkAm1bjryd9NOWee7KS/Fo/Zl3FbdV8TV0RFgF0LiuFmoboDjWU4SZ75t78H6rtRCdgISiwdaKCbvYKUBPg4gIu3UWZ1MhGEQMEYsAtswtoy9Im5OXbYrWCIiQwiIgAiIgAiIgD//2Q==</file>    </generalfeedback>
+    <defaultgrade>1.0000000</defaultgrade>
+    <penalty>1.0000000</penalty>
+    <hidden>0</hidden>
+    <answer fraction="0" format="moodle_auto_format">
+      <text>true</text>
+      <feedback format="html">
+        <text><![CDATA[<p><img src="@@PLUGINFILE@@/thumbdown.jpg" alt="Thumb down" width="24" height="24" /> Your answer is incorrect.</p>]]></text>
+<file name="thumbdown.jpg" encoding="base64">/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRoPDxo3JR8lNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wAARCAAYABgDASIAAhEBAxEB/8QAGgABAAIDAQAAAAAAAAAAAAAAAAQFAQMGB//EACcQAAIBAwMDBAMBAAAAAAAAAAECAwAEBQYRIRITMTJBUXEiUmKh/8QAFwEAAwEAAAAAAAAAAAAAAAAAAgQFA//EACIRAAIBAwQCAwAAAAAAAAAAAAECAwAEERIhMVEFQROh8f/aAAwDAQACEQMRAD8A9AubiTK5m5t5JpEihZlVUiaTbpO3pX5PvWy4wLR2Ml1Fc9QRS/TJAYzsPPnn2+KqsdcompsksjxoO7MAZLpoBv3P2Uf5XTX17BFpm7l7iSKI2jJhnM4DNwPyPJ9QPPipiKkgZn537q9N8kLIkfBx17+6qrd7vC5i2tZpFKzMoKoSVIY7b/e9KrchmoMtqXGS2qyKglhTZwAd+5v7fdKYtGB1BTsDtSfkY2XQzjDEb1jVGlb45Oe6sYmmincuQnJUnzx91GgsdQQ4efFrj5jBO4diYh1Ajbwer+RSlC1jGWLAkZ6/KJPLzhFQgHGOR1x7qTpfSt8MnBdX0TQxQOHAfgsR44+6UpW8ECwrpWlLq7kun1yV/9k=</file>      </feedback>
+    </answer>
+    <answer fraction="100" format="moodle_auto_format">
+      <text>false</text>
+      <feedback format="html">
+        <text><![CDATA[<p><img src="@@PLUGINFILE@@/thumbup.jpg" alt="Thumb up" width="24" height="24" /> Your answer is correct.</p>]]></text>
+<file name="thumbup.jpg" encoding="base64">/9j/4AAQSkZJRgABAQEAYABgAAD/4RDARXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAExAAIAAAAuAAAIVgEyAAIAAAAUAAAIhIdpAAQAAAABAAAImOocAAcAAAgMAAAASgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE1pY3Jvc29mdCBXaW5kb3dzIFBob3RvIFZpZXdlciA2LjEuNzYwMC4xNjM4NQAyMDEzOjAxOjEwIDE4OjI1OjUzAAAB6hwABwAACAwAAAiqAAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4TG4aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+PHhtcDpDcmVhdG9yVG9vbD5NaWNyb3NvZnQgV2luZG93cyBQaG90byBWaWV3ZXIgNi4xLjc2MDAuMTYzODU8L3htcDpDcmVhdG9yVG9vbD48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpSREY+PC94OnhtcG1ldGE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSd3Jz8+/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAGAAYAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A99+OX7RviD/hMdS0fQrt9O0/TpzAzwLh5WUfP83+9WHqPjz4o6Z4D0zxZJ4n1FtPv5ngiCXKeYrLu+8vlf8ATJ61fB3wssfiL8W/FVjfyTRQ/a76dXhKht32nb/ED617p4Y8IadbfA3RbOSCKaFbZLtFvtPfUQkkh3N+6T5m/wBYy/L90e1fndHDYzHValWVVqOtrO2x+w4jG5RleGw9CGHjOS5XO63TXQ8T+CP7RviE+MtN0XxBdvqWn6lOsKNcDc8bsPl+f/eoqv4x0CGy+Lfhia2SCKNbuycrbaVLp6l/tP8Azykb9aK7MFjMRhoSo1ZtuL3/AKZ4ue4HA4ypSxNCkoKcU2vmzvdY0zV/hR4/1TUrOCNo7ySSRJpi5jZZG3bf97dV3Svi5LZ+GbXRbvShPFBGsHm2t+9qwVRhMbfmH3f71FFefi8TVwdepSouy1PXwOEoZlg6dfExvKy8tvQztH8PXHxB8d6TfQ2NxaWVpIksks13LcFfLfcB5sn95v4P9miiivpsqw8MRQdSpq2/L/I+SzitOjinRp6RirL+mf/Z</file>      </feedback>
+    </answer>
+  </question>
+
+<!-- question: 2283  -->
+  <question type="truefalse">
+    <name>
+      <text>Moodle acronym (True)</text>
+    </name>
+    <questiontext format="html">
+      <text><![CDATA[<p>Moodle <img src="@@PLUGINFILE@@/logo.jpg" alt="Moodle logo" width="48" height="48" /> is an acronym for <span style="font-style: italic;">Modular Object-Oriented Dynamic Learning Environment</span>.</p>]]></text>
+<file name="logo.jpg" encoding="base64">/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBggGBQkIBwgKCQkKDRYODQwMDRoTFBAWHxwhICocHh4jJzIqIyUvLR4eNzssLy41ODg0JSo4QTAqPDwsNDUBCQoKDQsNGQ4OGTUkHiQ1NTU1NTU1NTU1NTUuNTU1LTU1NTU1NTQsMjU1NTU1NSk0KSw0MjQ2Miw1NDQyNDQ0Nf/AABEIADAAMAMBIgACEQEDEQH/xAAbAAEAAgIDAAAAAAAAAAAAAAAHAAYDBQEECP/EADUQAAEDAwEEBgcJAAAAAAAAAAECAwQABREGEiExURNBYXORsQcUFRZDYqEXIyQ2QnGywfD/xAAYAQEAAwEAAAAAAAAAAAAAAAAAAQMEAv/EACIRAAEEAgIBBQAAAAAAAAAAAAMAAQIEETESIeEFUYGhsf/aAAwDAQACEQMRAD8AcalSsT8lmMkKfdbaSeBWoJH1oiy1K0z+sbDGTly7Q+WEuhR8BWW16lt16dUm3vF9KeLiUKCM8tojGaItpUqVKIqRq7Xr9sBj2i3yZEg/FUyoIT2jPH/caHbtepdzubqr3ch06fhLXgp7N/DwFOMwx/f9MZxoEuQUuBRJI3OKGMcOsdtHOsNMRGLxNu7TilqcfUVNuIBAwcYBGKpKcYcc3xlWjFMueDaVEj3Bj2mwOi9ZZ6QBaUfqGeA516GsKbTAtTD7LiSgpGyAN6ezZHDFG1j9GsyVLXd0pSwlP3jTSgOXnXfuM+VDiNR4qg2uSpKARu3msNu7MBIwjHPL9WqtViaDzeWkie9ltSrZcW432qbOK2caUzLZDsdxLrauCknIo6XpCdbrYJ65q3hu20L5E43eNcaZubtq1emEFH1eUkko6goddViuHhYYB2bvWF3OsKQXKF9e6sdzVI+0SGCn8N6go7Xz9Kn+qquskj2fK71f8qTHojTzyHlIBcQMJV1gccfQUa6ptl7lPSYzVv2mluKUle2N4Jzzp6oEheHBs4dcUiRg8uT46V8s35fa7s+VHN8QBNtffN+YpItTTjdjbQUkL6PGDzo6m2q9yrnEDtvKG47ySVBQO4H96i+EhDilBum39KapIxHNnfaQruM6acHyJ8xVAaSB6QIGOSqQbsy+7px1uO30j2wnZRnGSCKoVstt3e1dFly4JZbbyCQoGoshJK8ObN02O/l0CSLVpRd+38L/2Q==</file>    </questiontext>
+    <generalfeedback format="html">
+      <text><![CDATA[<p><img src="@@PLUGINFILE@@/infos.jpg" alt="Informations" width="34" height="49" />For further information, see the <a title="Moodle Docs - About Moodle" href="http://docs.moodle.org/en/About_Moodle">documentation about Moodle</a></p>\r
+<p>.</p>]]></text>
+<file name="infos.jpg" encoding="base64">/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBggGBQkIBwgKCQkKGRYaDQwMDRodFBAhKhwlIB8lHh4jIjIoIyQvJSQeKy8sLzMtODgsISo9QTs2QTIuMywBCQoKDQsNGQ4OGTUkHiQ1NTU1NTU1NTU1NTU1NTU1Ly82NTU1NDUtLTQ0NTU1MCwsLCw0KTU0LzU2NjMpKTQ2Kf/AABEIADEAIgMBIgACEQEDEQH/xAAaAAEAAwEBAQAAAAAAAAAAAAAABQYHBAID/8QALhAAAQMCBAMHBAMAAAAAAAAAAgABAwQFBhEhMUFRgRITIjJxsfAHYWKRFBVC/8QAGQEAAgMBAAAAAAAAAAAAAAAAAAEDBAUC/8QAIREAAgEDBAMBAAAAAAAAAAAAAAECAxExBBITISIjQQX/2gAMAwEAAhEDEQA/ANxXk5AiHtSGINzJ8lz3GvitlCdTOTCAcVl16xZU3SoMhMoof8iz65fdWaGmlXfWCOpUUMmrDVwGbCM8RE+zMbZuvqsdvzR2WSme3Xf+W8o5n3ZeX11dsn5PyVowJjUrof8AX1xN3w+Qufzbq3TuppHCHJF3RzGqnLa8l6REVMmKV9UpzhsMLA7sJF4v2yySe5OD9mPV+LvwW84osg3+xzUj6G7eF23+cfVmWAXW01Vnrnp62JwJn0LLwn6fNFt/mzi4OH0p6iLvuJ3HZi01EUEQQCTFm0YMLPtyUdg+eePFNI8RF2vFx/F392ZSGN7va7sVva0yHI0Ik0jlG46u7ZZZ77Kx/TPBdQFc1zr4ii7HkAm1bjryd9NOWee7KS/Fo/Zl3FbdV8TV0RFgF0LiuFmoboDjWU4SZ75t78H6rtRCdgISiwdaKCbvYKUBPg4gIu3UWZ1MhGEQMEYsAtswtoy9Im5OXbYrWCIiQwiIgAiIgAiIgD//2Q==</file>    </generalfeedback>
+    <defaultgrade>1.0000000</defaultgrade>
+    <penalty>1.0000000</penalty>
+    <hidden>0</hidden>
+    <answer fraction="100" format="moodle_auto_format">
+      <text>true</text>
+      <feedback format="html">
+        <text><![CDATA[<p><img src="@@PLUGINFILE@@/thumbup.jpg" alt="thumb up" width="24" height="24" /> Your answer is correct.</p>]]></text>
+<file name="thumbup.jpg" encoding="base64">/9j/4AAQSkZJRgABAQEAYABgAAD/4RDARXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAExAAIAAAAuAAAIVgEyAAIAAAAUAAAIhIdpAAQAAAABAAAImOocAAcAAAgMAAAASgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE1pY3Jvc29mdCBXaW5kb3dzIFBob3RvIFZpZXdlciA2LjEuNzYwMC4xNjM4NQAyMDEzOjAxOjEwIDE4OjI1OjUzAAAB6hwABwAACAwAAAiqAAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4TG4aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+PHhtcDpDcmVhdG9yVG9vbD5NaWNyb3NvZnQgV2luZG93cyBQaG90byBWaWV3ZXIgNi4xLjc2MDAuMTYzODU8L3htcDpDcmVhdG9yVG9vbD48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpSREY+PC94OnhtcG1ldGE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSd3Jz8+/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAGAAYAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A99+OX7RviD/hMdS0fQrt9O0/TpzAzwLh5WUfP83+9WHqPjz4o6Z4D0zxZJ4n1FtPv5ngiCXKeYrLu+8vlf8ATJ61fB3wssfiL8W/FVjfyTRQ/a76dXhKht32nb/ED617p4Y8IadbfA3RbOSCKaFbZLtFvtPfUQkkh3N+6T5m/wBYy/L90e1fndHDYzHValWVVqOtrO2x+w4jG5RleGw9CGHjOS5XO63TXQ8T+CP7RviE+MtN0XxBdvqWn6lOsKNcDc8bsPl+f/eoqv4x0CGy+Lfhia2SCKNbuycrbaVLp6l/tP8Azykb9aK7MFjMRhoSo1ZtuL3/AKZ4ue4HA4ypSxNCkoKcU2vmzvdY0zV/hR4/1TUrOCNo7ySSRJpi5jZZG3bf97dV3Svi5LZ+GbXRbvShPFBGsHm2t+9qwVRhMbfmH3f71FFefi8TVwdepSouy1PXwOEoZlg6dfExvKy8tvQztH8PXHxB8d6TfQ2NxaWVpIksks13LcFfLfcB5sn95v4P9miiivpsqw8MRQdSpq2/L/I+SzitOjinRp6RirL+mf/Z</file>      </feedback>
+    </answer>
+    <answer fraction="0" format="moodle_auto_format">
+      <text>false</text>
+      <feedback format="html">
+        <text><![CDATA[<p><img src="@@PLUGINFILE@@/thumbdown.jpg" alt="thumb down" width="24" height="24" /> Your answer is incorrect.</p>]]></text>
+<file name="thumbdown.jpg" encoding="base64">/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRoPDxo3JR8lNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wAARCAAYABgDASIAAhEBAxEB/8QAGgABAAIDAQAAAAAAAAAAAAAAAAQFAQMGB//EACcQAAIBAwMDBAMBAAAAAAAAAAECAwAEBQYRIRITMTJBUXEiUmKh/8QAFwEAAwEAAAAAAAAAAAAAAAAAAgQFA//EACIRAAIBAwQCAwAAAAAAAAAAAAECAwAEERIhMVEFQROh8f/aAAwDAQACEQMRAD8A9AubiTK5m5t5JpEihZlVUiaTbpO3pX5PvWy4wLR2Ml1Fc9QRS/TJAYzsPPnn2+KqsdcompsksjxoO7MAZLpoBv3P2Uf5XTX17BFpm7l7iSKI2jJhnM4DNwPyPJ9QPPipiKkgZn537q9N8kLIkfBx17+6qrd7vC5i2tZpFKzMoKoSVIY7b/e9KrchmoMtqXGS2qyKglhTZwAd+5v7fdKYtGB1BTsDtSfkY2XQzjDEb1jVGlb45Oe6sYmmincuQnJUnzx91GgsdQQ4efFrj5jBO4diYh1Ajbwer+RSlC1jGWLAkZ6/KJPLzhFQgHGOR1x7qTpfSt8MnBdX0TQxQOHAfgsR44+6UpW8ECwrpWlLq7kun1yV/9k=</file>      </feedback>
+    </answer>
+  </question>
+
+</quiz>
\ No newline at end of file
index fd5eb55..fd409c2 100644 (file)
@@ -202,9 +202,9 @@ END;
 
         $this->assertEquals(array(
                 array('text' => 'This is the first hint',
-                        'format' => FORMAT_HTML, 'files' => array()),
+                        'format' => FORMAT_HTML),
                 array('text' => 'This is the second hint',
-                        'format' => FORMAT_HTML, 'files' => array()),
+                        'format' => FORMAT_HTML),
                 ), $qo->hint);
         $this->assertFalse(isset($qo->hintclearwrong));
         $this->assertFalse(isset($qo->hintshownumcorrect));
@@ -232,9 +232,9 @@ END;
 
         $this->assertEquals(array(
                 array('text' => 'This is the first hint',
-                        'format' => FORMAT_HTML, 'files' => array()),
+                        'format' => FORMAT_HTML),
                 array('text' => 'This is the second hint',
-                        'format' => FORMAT_HTML, 'files' => array()),
+                        'format' => FORMAT_HTML),
                 ), $qo->hint);
         $this->assertEquals(array(1, 0), $qo->hintclearwrong);
         $this->assertEquals(array(0, 1), $qo->hintshownumcorrect);
@@ -360,7 +360,6 @@ END;
         $expectedq->attachments = 0;
         $expectedq->graderinfo['text'] = '';
         $expectedq->graderinfo['format'] = FORMAT_MOODLE;
-        $expectedq->graderinfo['files'] = array();
 
         $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
     }
@@ -405,7 +404,6 @@ END;
         $expectedq->attachments = -1;
         $expectedq->graderinfo['text'] = '<p>Grade <b>generously</b>!</p>';
         $expectedq->graderinfo['format'] = FORMAT_HTML;
-        $expectedq->graderinfo['files'] = array();
 
         $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
     }
@@ -531,12 +529,12 @@ END;
         $expectedq->questiontext = 'Match the upper and lower case letters.';
         $expectedq->questiontextformat = FORMAT_HTML;
         $expectedq->correctfeedback = array('text' => 'Well done.',
-                'format' => FORMAT_HTML, 'files' => array());
+                'format' => FORMAT_HTML);
         $expectedq->partiallycorrectfeedback = array('text' => 'Not entirely.',
-                'format' => FORMAT_HTML, 'files' => array());
+                'format' => FORMAT_HTML);
         $expectedq->shownumcorrect = false;
         $expectedq->incorrectfeedback = array('text' => 'Completely wrong!',
-                'format' => FORMAT_HTML, 'files' => array());
+                'format' => FORMAT_HTML);
         $expectedq->generalfeedback = 'The answer is A -> a, B -> b and C -> c.';
         $expectedq->generalfeedbackformat = FORMAT_HTML;
         $expectedq->defaultmark = 1;
@@ -544,14 +542,14 @@ END;
         $expectedq->penalty = 0.3333333;
         $expectedq->shuffleanswers = 0;
         $expectedq->subquestions = array(
-            array('text' => 'A', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => 'B', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => 'C', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => '', 'format' => FORMAT_HTML, 'files' => array()));
+            array('text' => 'A', 'format' => FORMAT_HTML),
+            array('text' => 'B', 'format' => FORMAT_HTML),
+            array('text' => 'C', 'format' => FORMAT_HTML),
+            array('text' => '', 'format' => FORMAT_HTML));
         $expectedq->subanswers = array('a', 'b', 'c', 'd');
         $expectedq->hint = array(
-            array('text' => 'Hint 1', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => '', 'format' => FORMAT_HTML, 'files' => array()),
+            array('text' => 'Hint 1', 'format' => FORMAT_HTML),
+            array('text' => '', 'format' => FORMAT_HTML),
         );
         $expectedq->hintshownumcorrect = array(true, true);
         $expectedq->hintclearwrong = array(false, true);
@@ -752,18 +750,15 @@ END;
         $expectedq->questiontextformat = FORMAT_HTML;
         $expectedq->correctfeedback = array(
                 'text'   => '<p>Your answer is correct.</p>',
-                'format' => FORMAT_HTML,
-                'files'  => array());
+                'format' => FORMAT_HTML);
         $expectedq->shownumcorrect = false;
         $expectedq->partiallycorrectfeedback = array(
                 'text'   => '<p>Your answer is partially correct.</p>',
-                'format' => FORMAT_HTML,
-                'files'  => array());
+                'format' => FORMAT_HTML);
         $expectedq->shownumcorrect = true;
         $expectedq->incorrectfeedback = array(
                 'text'   => '<p>Your answer is incorrect.</p>',
-                'format' => FORMAT_HTML,
-                'files'  => array());
+                'format' => FORMAT_HTML);
         $expectedq->generalfeedback = 'The even numbers are 2 and 4.';
         $expectedq->defaultmark = 2;
         $expectedq->length = 1;
@@ -772,20 +767,20 @@ END;
         $expectedq->single = false;
 
         $expectedq->answer = array(
-            array('text' => '1', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => '2', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => '3', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => '4', 'format' => FORMAT_HTML, 'files' => array()));
+            array('text' => '1', 'format' => FORMAT_HTML),
+            array('text' => '2', 'format' => FORMAT_HTML),
+            array('text' => '3', 'format' => FORMAT_HTML),
+            array('text' => '4', 'format' => FORMAT_HTML));
         $expectedq->fraction = array(0, 1, 0, 1);
         $expectedq->feedback = array(
-            array('text' => '', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => '', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => '', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => '', 'format' => FORMAT_HTML, 'files' => array()));
+            array('text' => '', 'format' => FORMAT_HTML),
+            array('text' => '', 'format' => FORMAT_HTML),
+            array('text' => '', 'format' => FORMAT_HTML),
+            array('text' => '', 'format' => FORMAT_HTML));
 
         $expectedq->hint = array(
-            array('text' => 'Hint 1.', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => 'Hint 2.', 'format' => FORMAT_HTML, 'files' => array()),
+            array('text' => 'Hint 1.', 'format' => FORMAT_HTML),
+            array('text' => 'Hint 2.', 'format' => FORMAT_HTML),
         );
         $expectedq->hintshownumcorrect = array(false, false);
         $expectedq->hintclearwrong = array(false, false);
@@ -954,11 +949,11 @@ END;
         $expectedq->fraction = array(1, 0, 0);
         $expectedq->feedback = array(
             array('text' => 'Well done!',
-                    'format' => FORMAT_HTML, 'files' => array()),
+                    'format' => FORMAT_HTML),
             array('text' => 'What were you thinking?!',
-                    'format' => FORMAT_HTML, 'files' => array()),
+                    'format' => FORMAT_HTML),
             array('text' => 'Completely wrong.',
-                    'format' => FORMAT_HTML, 'files' => array()));
+                    'format' => FORMAT_HTML));
         $expectedq->tolerance = array(0.001, 1, 0);
 
         $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
@@ -1090,8 +1085,8 @@ END;
         $expectedq->answer = array('Beta', '*');
         $expectedq->fraction = array(1, 0);
         $expectedq->feedback = array(
-            array('text' => 'Well done!', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => 'Doh!', 'format' => FORMAT_HTML, 'files' => array()));
+            array('text' => 'Well done!', 'format' => FORMAT_HTML),
+            array('text' => 'Doh!', 'format' => FORMAT_HTML));
 
         $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
     }
@@ -1209,9 +1204,9 @@ END;
         $expectedq->penalty = 1;
 
         $expectedq->feedbacktrue = array('text' => 'Well done!',
-                'format' => FORMAT_HTML, 'files' => array());
+                'format' => FORMAT_HTML);
         $expectedq->feedbackfalse = array('text' => 'Doh!',
-                'format' => FORMAT_HTML, 'files' => array());
+                'format' => FORMAT_HTML);
         $expectedq->correctanswer = true;
 
         $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
@@ -1313,8 +1308,8 @@ END;
         $expectedqa->penalty = 0.5;
 
         $expectedqa->hint = array(
-            array('text' => 'Hint 1', 'format' => FORMAT_HTML, 'files' => array()),
-            array('text' => 'Hint 2', 'format' => FORMAT_HTML, 'files' => array()),
+            array('text' => 'Hint 1', 'format' => FORMAT_HTML),
+            array('text' => 'Hint 2', 'format' => FORMAT_HTML),
         );
 
         $sa = new stdClass();
@@ -1406,4 +1401,30 @@ END;
 
         $this->assert_same_xml($expectedxml, $xml);
     }
+
+    public function test_import_files_as_draft() {
+        $this->resetAfterTest();
+        $this->setAdminUser();
+
+        $xml = <<<END
+<questiontext format="html">
+    <text><![CDATA[<p><a href="@@PLUGINFILE@@/moodle.txt">This text file</a> contains the word 'Moodle'.</p>]]></text>
+    <file name="moodle.txt" encoding="base64">TW9vZGxl</file>
+</questiontext>
+END;
+
+        $textxml = xmlize($xml);
+        $qo = new stdClass();
+
+        $importer = new qformat_xml();
+        $draftitemid = $importer->import_files_as_draft($textxml['questiontext']['#']['file']);
+        $files = file_get_drafarea_files($draftitemid);
+
+        $this->assertEquals(1, count($files->list));
+
+        $file = $files->list[0];
+        $this->assertEquals('moodle.txt', $file->filename);
+        $this->assertEquals('/',          $file->filepath);
+        $this->assertEquals(6,            $file->size);
+    }
 }
index 063446e..7b7d85e 100644 (file)
@@ -341,14 +341,16 @@ function question_preview_cron() {
             'quba.component = :qubacomponent
                     AND NOT EXISTS (
                         SELECT 1
-                          FROM {question_attempts} qa
-                          JOIN {question_attempt_steps} qas ON qas.questionattemptid = qa.id
-                         WHERE qa.questionusageid = quba.id
-                           AND (qa.timemodified > :qamodifiedcutoff
-                                    OR qas.timecreated > :stepcreatedcutoff)
+                          FROM {question_attempts}      subq_qa
+                          JOIN {question_attempt_steps} subq_qas ON subq_qas.questionattemptid = subq_qa.id
+                          JOIN {question_usages}        subq_qu  ON subq_qu.id = subq_qa.questionusageid
+                         WHERE subq_qa.questionusageid = quba.id
+                           AND subq_qu.component = :qubacomponent2
+                           AND (subq_qa.timemodified > :qamodifiedcutoff
+                                    OR subq_qas.timecreated > :stepcreatedcutoff)
                     )
             ',
-            array('qubacomponent' => 'core_question_preview',
+            array('qubacomponent' => 'core_question_preview', 'qubacomponent2' => 'core_question_preview',
                 'qamodifiedcutoff' => $lastmodifiedcutoff, 'stepcreatedcutoff' => $lastmodifiedcutoff));
 
     question_engine::delete_questions_usage_by_activities($oldpreviews);
index 714d6a8..f0d903e 100644 (file)
@@ -481,7 +481,7 @@ abstract class question_edit_form extends question_wizard_form {
         if (is_array($extraquestionfields) && !empty($question->options)) {
             array_shift($extraquestionfields);
             foreach ($extraquestionfields as $field) {
-                if (isset($question->options->$field)) {
+                if (property_exists($question->options->$field)) {
                     $question->$field = $question->options->$field;
                 }
             }
index 52e42cc..f3620fa 100644 (file)
@@ -454,21 +454,12 @@ class question_type {
                 $options->$questionidcolname = $question->id;
             }
             foreach ($extraquestionfields as $field) {
-                if (!isset($question->$field)) {
-                    $result = new stdClass();
-                    $result->error = "No data for field $field when saving " .
-                            $this->name() . ' question id ' . $question->id;
-                    return $result;
+                if (property_exists($question->$field)) {
+                    $options->$field = $question->$field;
                 }
-                $options->$field = $question->$field;
             }
 
-            if (!$DB->{$function}($question_extension_table, $options)) {
-                $result = new stdClass();
-                $result->error = 'Could not save question options for ' .
-                        $this->name() . ' question id ' . $question->id;
-                return $result;
-            }
+            $DB->{$function}($question_extension_table, $options);
         }
 
         $extraanswerfields = $this->extra_answer_fields();
index 17cdb57..6b11cfc 100644 (file)
@@ -440,7 +440,7 @@ class repository_flickr_public extends repository {
     }
 
     public function get_link($photoid) {
-        return $this->build_photo_id($photoid);
+        return $this->build_photo_url($photoid);
     }
 
     /**
index 5508530..9314951 100644 (file)
@@ -899,7 +899,6 @@ sup {vertical-align: super;}
 
 /* Only set these options if we're showing the js container */
 .jsenabled .choosercontainer #chooseform .alloptions {
-    max-height: 550px;
     overflow-x: hidden;
     overflow-y: auto;
     max-width: 20.3em;
@@ -973,7 +972,6 @@ sup {vertical-align: super;}
     background-color: #FFFFFF;
     overflow-x: hidden;
     overflow-y: auto;
-    max-height: 550px;
     line-height: 2em;
 }
 
index d073270..12a7208 100644 (file)
@@ -47,6 +47,9 @@
 .dir-rtl.path-course-view li.activity span.autocompletion {right:-20px;left:auto;padding:0px;}
 .dir-rtl.path-course-view .completionprogress {float: none;}
 
+li.section.hidden span.commands a.editing_hide,
+li.section.hidden span.commands a.editing_show {cursor:default;}
+
 .section img.movetarget {height:16px;width:80px;}
 
 #page-course-enrol .generalbox,
index 53670e9..879a35f 100644 (file)
@@ -96,6 +96,9 @@ class core_user_external_testcase extends externallib_advanced_testcase {
                     array('userid' => $user1->id, 'courseid' => $course->id),
                     array('userid' => $user2->id, 'courseid' => $course->id)));
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $enrolledusers = external_api::clean_returnvalue(core_user_external::get_course_user_profiles_returns(), $enrolledusers);
+
         // Check we retrieve the good total number of enrolled users + no error on capability.
         $this->assertEquals(3, count($enrolledusers));
 
@@ -109,6 +112,9 @@ class core_user_external_testcase extends externallib_advanced_testcase {
                     array('userid' => $user1->id, 'courseid' => $course->id),
                     array('userid' => $user2->id, 'courseid' => $course->id)));
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $enrolledusers = external_api::clean_returnvalue(core_user_external::get_course_user_profiles_returns(), $enrolledusers);
+
         foreach($enrolledusers as $enrolleduser) {
             if ($enrolleduser['username'] == $user1->username) {
                 $this->assertEquals($user1->idnumber, $enrolleduser['idnumber']);
@@ -163,6 +169,9 @@ class core_user_external_testcase extends externallib_advanced_testcase {
         // Call the external function.
         $createdusers = core_user_external::create_users(array($user1));
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $createdusers = external_api::clean_returnvalue(core_user_external::create_users_returns(), $createdusers);
+
         // Check we retrieve the good total number of created users + no error on capability.
         $this->assertEquals(1, count($createdusers));
 
@@ -261,6 +270,9 @@ class core_user_external_testcase extends externallib_advanced_testcase {
         $returnedusers = core_user_external::get_users_by_id(array(
                     $USER->id, $user1->id, $user2->id));
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $returnedusers = external_api::clean_returnvalue(core_user_external::get_users_by_id_returns(), $returnedusers);
+
         // Check we retrieve the good total number of enrolled users + no error on capability.
         $this->assertEquals(3, count($returnedusers));
 
@@ -272,6 +284,9 @@ class core_user_external_testcase extends externallib_advanced_testcase {
         $returnedusers = core_user_external::get_users_by_id(array(
                     $USER->id, $user1->id, $user2->id));
 
+        // We need to execute the return values cleaning process to simulate the web service server.
+        $returnedusers = external_api::clean_returnvalue(core_user_external::get_users_by_id_returns(), $returnedusers);
+
         foreach($returnedusers as $enrolleduser) {
             if ($enrolleduser['username'] == $user1->username) {
                 $this->assertEquals($user1->idnumber, $enrolleduser['idnumber']);
@@ -344,4 +359,4 @@ class core_user_external_testcase extends externallib_advanced_testcase {
         $this->setExpectedException('required_capability_exception');
         core_user_external::update_users(array($user1));
     }
-}
\ No newline at end of file
+}
index a970e61..471cb5d 100644 (file)
@@ -233,12 +233,16 @@ echo '</div>';
 
 echo '<table class="list" summary="">';
 
-//checks were performed above that ensure that if we've got to here either the user
-//is viewing their own profile ($USER->id == $user->id) or $user is enrolled in the course
+// Show email if any of the following conditions match.
+// 1. User is viewing his own profile.
+// 2. Has allowed everyone to see email
+// 3. User has allowed course members to can see email and current user is in same course
+// 4. Has either course:viewhiddenuserfields or site:viewuseridentity capability.
 if ($currentuser
-   or $user->maildisplay == 1 //allow everyone to see email address
-   or ($user->maildisplay == 2 && is_enrolled($coursecontext, $USER)) //fellow course members can see email. Already know $user is enrolled
-   or has_capability('moodle/course:useremail', $coursecontext)) {
+   or $user->maildisplay == 1
+   or ($user->maildisplay == 2 && is_enrolled($coursecontext, $USER))
+   or has_capability('moodle/course:viewhiddenuserfields', $coursecontext)
+   or has_capability('moodle/site:viewuseridentity', $coursecontext)) {
     print_row(get_string("email").":", obfuscate_mailto($user->email, ''));
 }