function parse($sv, $si)
 {
     global $Conf;
     if (!$sv->newv("resp_active")) {
         return false;
     }
     $old_roundnames = $Conf->resp_round_list();
     $roundnames = array(1);
     $roundnames_set = array();
     if (isset($sv->req["resp_roundname"])) {
         $rname = trim(get_s($sv->req, "resp_roundname"));
         if ($rname === "" || $rname === "none" || $rname === "1") {
             /* do nothing */
         } else {
             if ($rerror = Conf::resp_round_name_error($rname)) {
                 $sv->set_error("resp_roundname", $rerror);
             } else {
                 $roundnames[0] = $rname;
                 $roundnames_set[strtolower($rname)] = 0;
             }
         }
     }
     for ($i = 1; isset($sv->req["resp_roundname_{$i}"]); ++$i) {
         $rname = trim(get_s($sv->req, "resp_roundname_{$i}"));
         if ($rname === "" && get($old_roundnames, $i)) {
             $rname = $old_roundnames[$i];
         }
         if ($rname === "") {
             continue;
         } else {
             if ($rerror = Conf::resp_round_name_error($rname)) {
                 $sv->set_error("resp_roundname_{$i}", $rerror);
             } else {
                 if (get($roundnames_set, strtolower($rname)) !== null) {
                     $sv->set_error("resp_roundname_{$i}", "Response round name “" . htmlspecialchars($rname) . "” has already been used.");
                 } else {
                     $roundnames[] = $rname;
                     $roundnames_set[strtolower($rname)] = $i;
                 }
             }
         }
     }
     foreach ($roundnames_set as $i) {
         $isuf = $i ? "_{$i}" : "";
         if (($v = parse_value($sv, "resp_open{$isuf}", Si::get("resp_open"))) !== null) {
             $sv->save("resp_open{$isuf}", $v <= 0 ? null : $v);
         }
         if (($v = parse_value($sv, "resp_done{$isuf}", Si::get("resp_done"))) !== null) {
             $sv->save("resp_done{$isuf}", $v <= 0 ? null : $v);
         }
         if (($v = parse_value($sv, "resp_grace{$isuf}", Si::get("resp_grace"))) !== null) {
             $sv->save("resp_grace{$isuf}", $v <= 0 ? null : $v);
         }
         if (($v = parse_value($sv, "resp_words{$isuf}", Si::get("resp_words"))) !== null) {
             $sv->save("resp_words{$isuf}", $v < 0 ? null : $v);
         }
         if (($v = parse_value($sv, "msg.resp_instrux{$isuf}", Si::get("msg.resp_instrux"))) !== null) {
             $sv->save("msg.resp_instrux{$isuf}", $v);
         }
     }
     if (count($roundnames) > 1 || $roundnames[0] !== 1) {
         $sv->save("resp_rounds", join(" ", $roundnames));
     } else {
         $sv->save("resp_rounds", null);
     }
     return false;
 }