<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def do_summary(self, params):
 """ \x1b[1mNAME\x1b[0m summary - Prints summarized details of a path's children \x1b[1mSYNOPSIS\x1b[0m summary [path] [top] \x1b[1mDESCRIPTION\x1b[0m The results are sorted by name. \x1b[1mOPTIONS\x1b[0m * path: the path (default: cwd) * top: number of results to be displayed (0 is all) (default: 0) \x1b[1mEXAMPLES\x1b[0m > summary /services/registrations Created Last modified Owner Name Thu Oct 11 09:14:39 2014 Thu Oct 11 09:14:39 2014 - bar Thu Oct 16 18:54:39 2014 Thu Oct 16 18:54:39 2014 - foo Thu Oct 12 10:04:01 2014 Thu Oct 12 10:04:01 2014 0x14911e869aa0dc1 member_0000001 """


        self.show_output("%s%s%s%s",
                         "Created".ljust(32),
                         "Last modified".ljust(32),
                         "Owner".ljust(23),
                         "Name")

        results = sorted(self._zk.stat_map(params.path))

        # what slice do we want?
        if params.top == 0:
            start, end = 0, len(results)
        elif params.top > 0:
            start, end = 0, params.top if params.top < len(results) else len(results)
        else:
            start = len(results) + params.top if abs(params.top) < len(results) else 0
            end = len(results)

        offs = 1 if params.path == "/" else len(params.path) + 1
        for i in range(start, end):
            path, stat = results[i]

            self.show_output(
                "%s%s%s%s",
                time.ctime(stat.created).ljust(32),
                time.ctime(stat.last_modified).ljust(32),
                ("0x%x" % stat.ephemeralOwner).ljust(23),
                path[offs:]
            )