code: def run(self, messages):
          
          if not self.args.unlock:
              return
  
          format.print_line('~')
          print('Unlocking tests')
          print()
  
          print('At each "{}", type what you would expect the output to be.'.format(
                self.PROMPT))
          print('Type {} to quit'.format(self.EXIT_INPUTS[0]))
          print()
  
          for test in self.assignment.specified_tests:
              log.info('Unlocking test {}'.format(test.name))
              self.current_test = test.name
  
              # Reset guidance explanation probability for every question
              self.guidance_util.prompt_probability = guidance.DEFAULT_PROMPT_PROBABILITY
  
              try:
                  test.unlock(self.interact)
              except (KeyboardInterrupt, EOFError):
                  try:
                      # TODO(albert): When you use Ctrl+C in Windows, it
                      # throws two exceptions, so you need to catch both
                      # of them. Find a cleaner fix for this.
                      print()
                      print('-- Exiting unlocker --')
                  except (KeyboardInterrupt, EOFError):
                      pass
                  print()
                  break
          messages['unlock'] = self.analytics
docs: Responsible for unlocking each test.
  
          The unlocking process can be aborted by raising a KeyboardInterrupt or
          an EOFError.
  
          RETURNS:
          dict; mapping of test name (str) -> JSON-serializable object. It is up
          to each test to determine what information is significant for analytics.