code: def get_args(self, state, all_params, remainder, argspec, im_self):
          '''
          Determines the arguments for a controller based upon parameters
          passed the argument specification for the controller.
          '''
          args = []
          varargs = []
          kwargs = dict()
          valid_args = argspec.args[:]
          if ismethod(state.controller) or im_self:
              valid_args.pop(0)
          pecan_state = state.request.pecan
          remainder = [x for x in remainder if x]
          if im_self is not None:
              args.append(im_self)
          if 'routing_args' in pecan_state:
              remainder = pecan_state['routing_args'] + list(remainder)
              del pecan_state['routing_args']
          if valid_args and remainder:
              args.extend(remainder[:len(valid_args)])
              remainder = remainder[len(valid_args):]
              valid_args = valid_args[len(args):]
          if [i for i in remainder if i]:
              if not argspec[1]:
                  abort(404)
              varargs.extend(remainder)
          if argspec[3]:
              defaults = dict(izip(argspec[0][-len(argspec[3]):], argspec[3]))
          else:
              defaults = dict()
          for name in valid_args:
              if name in all_params:
                  args.append(all_params.pop(name))
              elif name in defaults:
                  args.append(defaults[name])
              else:
                  break
          if argspec[2]:
              for name, value in six.iteritems(all_params):
                  if name not in argspec[0]:
                      kwargs[name] = value
          return args, varargs, kwargs