<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>data/listitem.xml</filename>
    </added>
    <added>
      <filename>data/search.xml</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -121,6 +121,7 @@ def getRelativeTime(rel, t=None):
 
     return rv
 
+
 class BackpackError(exceptions.Exception):
     &quot;&quot;&quot;Root exception thrown when a backpack error occurs.&quot;&quot;&quot;
 
@@ -154,6 +155,34 @@ class BackpackAPI(object):
 
         self.debug=debug
 
+    def _parseListItems(self, document):
+        &quot;&quot;&quot;Parses list items from from a minidom document
+
+        Returns a list of (id, completed boolean, item text)
+        &quot;&quot;&quot;
+        rv=[]
+        for item in document.getElementsByTagName(&quot;item&quot;):
+            rv.append((int(item.getAttribute(&quot;id&quot;)),
+                item.getAttribute(&quot;completed&quot;) == &quot;true&quot;,
+                unicode(item.firstChild.data)))
+        return rv
+
+    def _parseLists(self, document):
+        rv=[]
+        for list in document.getElementsByTagName(&quot;list&quot;):
+            rv.append( (int(list.getAttribute(&quot;id&quot;)),
+                unicode(list.getAttribute(&quot;name&quot;))) )
+        return rv
+
+    def _parseNotes(self, document):
+        rv=[]
+        for note in document.getElementsByTagName(&quot;note&quot;):
+            rv.append( (int(note.getAttribute(&quot;id&quot;)),
+                unicode(note.getAttribute(&quot;title&quot;)),
+                parseTime(note.getAttribute(&quot;created_at&quot;)),
+                unicode(note.firstChild.data).strip()))
+        return rv
+
     # Parse a backpack document, throwing a BackpackError if the document
     # indicates an exception
     def _parseDocument(self, docString):
@@ -260,7 +289,6 @@ class Page(object):
     &quot;&quot;&quot;An individual page.
 
     * Notes are in the form of (id, title, createdDate, msg).
-    * Complete and incomplete items are in the form of (id, text)
     * Links are in the form of (id, title)
     * Tags are in the form of (id, name)
 
@@ -269,13 +297,40 @@ class Page(object):
     title=None
     id=None
     emailAddress=None
-    body=None
     notes=[]
-    completeItems=[]
-    incompleteItems=[]
-    links=[]
+    lists=[]
     tags=[]
 
+class SearchResult(object):
+    &quot;&quot;&quot;An individual search result.  The object supports the ability to
+    retrieve it's full representation based on the type of result.  Retrieving
+    a writeboard only returns the id at this point, because no Writeboard
+    API is currently supported&quot;&quot;&quot;
+
+    bp=None         # Backpack instance to enable get
+    pageId=None
+    pageTitle=None
+    type=None
+    containerId=None
+
+    def get(self):
+        &quot;&quot;&quot;Returns the appropriate representation of itself based type
+        
+        list:       Returns the result of Backpack.list.get
+        note:       Returns the result of Backpack.notes.list
+        writeboard: Returns (page id, page title, writeboard id)
+        email:      Returns the result of Backpack.email.get
+        &quot;&quot;&quot;
+        if self.type == 'list':
+            return self.bp.list.get(self.pageId, self.containerId)
+        elif self.type == 'note':
+            return self.bp.notes.list(self.pageId)
+        elif self.type == 'writeboard_link':
+            return (self.pageId, self.pageTitle, self.containerId)
+        elif self.type == 'email':
+            return self.bp.email.get(self.pageId, self.containerId)
+
+
 class PageAPI(BackpackAPI):
     &quot;&quot;&quot;Backpack page API.&quot;&quot;&quot;
 
@@ -296,6 +351,20 @@ class PageAPI(BackpackAPI):
 
         return rv
 
+    def _parseSearchResult(self, document):
+        rv = []
+        pages = document.getElementsByTagName(&quot;page&quot;)
+        for p in pages:
+            for send in p.getElementsByTagName(&quot;send&quot;):
+                sr = SearchResult()
+                sr.bp = Backpack(self.url, self.key, self.debug)
+                sr.pageId = int(p.getAttribute(&quot;id&quot;))
+                sr.pageTitle = unicode(p.getAttribute(&quot;title&quot;))
+                sr.type = send.firstChild.data
+                sr.containerId = int(send.getAttribute(&quot;id&quot;))
+                rv.append(sr)
+        return rv
+
     # get an iterator on the named node of the zeroth node of the given list
     def __linkIter(self, node, container, elementname):
         rv=[]
@@ -304,14 +373,6 @@ class PageAPI(BackpackAPI):
             rv=nlist[0].getElementsByTagName(elementname)
         return rv
 
-    def _parseNotes(self, document):
-        rv=[]
-        for note in document.getElementsByTagName(&quot;note&quot;):
-            rv.append( (int(note.getAttribute(&quot;id&quot;)),
-                unicode(note.getAttribute(&quot;title&quot;)),
-                parseTime(note.getAttribute(&quot;created_at&quot;)),
-                unicode(note.firstChild.data).strip()))
-        return rv
 
     # Parse the individual page xml
     def _parsePage(self, document):
@@ -321,26 +382,8 @@ class PageAPI(BackpackAPI):
         rv.title=page.getAttribute(&quot;title&quot;)
         rv.id=int(page.getAttribute(&quot;id&quot;))
         rv.emailAddress=page.getAttribute(&quot;email_address&quot;)
-
-        desc=page.getElementsByTagName(&quot;description&quot;)[0]
-        rv.body=unicode(desc.firstChild.data).strip()
-
         rv.notes=self._parseNotes(page)
-
-        # Parse a task list into a destination list
-        def parseItems(n, which, destList):
-            for item in self.__linkIter(n, which, &quot;item&quot;):
-                destList.append( (int(item.getAttribute(&quot;id&quot;)),
-                    unicode(item.firstChild.data).strip()))
-
-        items=page.getElementsByTagName(&quot;items&quot;)
-        if len(items) &gt; 0:
-            parseItems(items[0], &quot;incomplete&quot;, rv.incompleteItems)
-            parseItems(items[0], &quot;completed&quot;, rv.completeItems)
-
-        for link in self.__linkIter(page, &quot;linked_pages&quot;, &quot;page&quot;):
-            rv.links.append( (int(link.getAttribute(&quot;id&quot;)),
-                unicode(link.getAttribute(&quot;title&quot;))))
+        rv.lists=self._parseLists(page)
 
         for tag in self.__linkIter(page, &quot;tags&quot;, &quot;tag&quot;):
             rv.tags.append( (int(tag.getAttribute(&quot;id&quot;)),
@@ -366,13 +409,13 @@ class PageAPI(BackpackAPI):
 
         return self._parsePage(x)
 
-    def create(self, title, description):
+    def create(self, title):
         &quot;&quot;&quot;Create a new page.
 
            Returns (id, title)&quot;&quot;&quot;
 
-        data=&quot;&lt;page&gt;&lt;title&gt;%s&lt;/title&gt;&lt;description&gt;%s&lt;/description&gt;&lt;/page&gt;&quot; \
-            % (title, description)
+        data=&quot;&lt;page&gt;&lt;title&gt;%s&lt;/title&gt;&lt;/page&gt;&quot; \
+            % (title,)
         try:
             x=self._call(&quot;/ws/pages/new&quot;, data)
         except urllib2.HTTPError, e:
@@ -389,16 +432,20 @@ class PageAPI(BackpackAPI):
         &quot;&quot;&quot;Delete a page&quot;&quot;&quot;
         x=self._call(&quot;/ws/page/%d/destroy&quot; % (id,))
 
+    def search(self, term):
+        &quot;&quot;&quot;Search for pages containing the term
+        
+        Returns a list of (page id, title)
+        &quot;&quot;&quot;
+        data=&quot;&lt;term&gt;%s&lt;/term&gt;&quot; % term
+        x = self._call(&quot;/ws/pages/search&quot;, data)
+        return self._parseSearchResult(x)
+
     def updateTitle(self, id, title):
         &quot;&quot;&quot;Update a title&quot;&quot;&quot;
         data=&quot;&lt;page&gt;&lt;title&gt;%s&lt;/title&gt;&lt;/page&gt;&quot; % (title,)
         x=self._call(&quot;/ws/page/%d/update_title&quot; % (id,), data)
 
-    def updateDescription(self, id, desc):
-        &quot;&quot;&quot;Update a description&quot;&quot;&quot;
-        data=&quot;&lt;page&gt;&lt;description&gt;%s&lt;/description&gt;&lt;/page&gt;&quot; % (desc,)
-        x=self._call(&quot;/ws/page/%d/update_body&quot; % (id,), data)
-
     def duplicate(self, id):
         &quot;&quot;&quot;Duplicate a page, get the new (id, title)&quot;&quot;&quot;
         x=self._call(&quot;/ws/page/%d/duplicate&quot; % (id,))
@@ -406,16 +453,6 @@ class PageAPI(BackpackAPI):
         p=x.getElementsByTagName(&quot;page&quot;)[0]
         return (int(p.getAttribute(&quot;id&quot;)), unicode(p.getAttribute(&quot;title&quot;)))
 
-    def linkTo(self, id, linkId):
-        &quot;&quot;&quot;Link a page to another page.&quot;&quot;&quot;
-        data=&quot;&lt;linked_page_id&gt;%d&lt;/linked_page_id&gt;&quot; % (linkId,)
-        x=self._call(&quot;/ws/page/%d/link&quot; % (id,), data)
-
-    def unlink(self, id, linkId):
-        &quot;&quot;&quot;Unlink a page from another page.&quot;&quot;&quot;
-        data=&quot;&lt;linked_page_id&gt;%d&lt;/linked_page_id&gt;&quot; % (linkId,)
-        x=self._call(&quot;/ws/page/%d/unlink&quot; % (id,), data)
-
     def share(self, id, emailAddresses=[], isPublic=False):
         &quot;&quot;&quot;Share this page with others.&quot;&quot;&quot;
         data=&quot;&quot;
@@ -457,9 +494,43 @@ class ExportAPI(PageAPI, ReminderAPI):
 
         return(self._parseBackup(x))
 
+
 class ListAPI(BackpackAPI):
     &quot;&quot;&quot;Backpack list API.&quot;&quot;&quot;
 
+    def __init__(self, u, k, debug=False):
+        &quot;&quot;&quot;Get a ListAPI object to the given URL and key&quot;&quot;&quot;
+        BackpackAPI.__init__(self, u, k, debug)
+
+    def create(self, pageId, name):
+        &quot;&quot;&quot;Creates a new list on the given page
+
+        Returns (id, name)
+        &quot;&quot;&quot;
+        data = &quot;&lt;name&gt;%s&lt;/name&gt;&quot; % name
+        x = self._call(&quot;/ws/page/%d/lists/add&quot; % pageId, data)
+        l = x.getElementsByTagName(&quot;list&quot;)[0]
+        return ( int(l.getAttribute(&quot;id&quot;)), unicode(l.getAttribute(&quot;name&quot;)) )
+
+    def update(self, pageId, listId, name):
+        &quot;&quot;&quot;Changes a list's name&quot;&quot;&quot;
+        data = &quot;&lt;list&gt;&lt;name&gt;%s&lt;/name&gt;&lt;/list&gt;&quot; % name
+        self._call(&quot;/ws/page/%d/lists/update/%d&quot; % (pageId, listId), data)
+
+    def destroy(self, pageId, listId):
+        self._call(&quot;/ws/page/%d/lists/destroy/%d&quot; % (pageId, listId))
+
+    def list(self, pageId):
+        &quot;&quot;&quot;Get a list of lists on the given page
+        
+        list of (id, name)
+        &quot;&quot;&quot;
+        x = self._call(&quot;/ws/page/%d/lists/list&quot; % pageId)
+        return self._parseLists(x)
+    
+class ListItemAPI(BackpackAPI):
+    &quot;&quot;&quot;Backpack list API.&quot;&quot;&quot;
+
     MOVE_LOWER='move_lower'
 
     MOVE_HIGHER='move_higher'
@@ -472,53 +543,53 @@ class ListAPI(BackpackAPI):
         &quot;&quot;&quot;Get a ListAPI object to the given URL and key&quot;&quot;&quot;
         BackpackAPI.__init__(self, u, k, debug)
 
-    def _parseList(self, x):
-        rv=[]
-        for item in x.getElementsByTagName(&quot;item&quot;):
-            rv.append((int(item.getAttribute(&quot;id&quot;)),
-                item.getAttribute(&quot;completed&quot;) == &quot;true&quot;,
-                unicode(item.firstChild.data)))
-        return rv
-
-    def list(self, pageId):
-        &quot;&quot;&quot;Get a list of the items on the given page.
+    def list(self, pageId, listId):
+        &quot;&quot;&quot;Get a list of the items on the given list.
 
         list of (id, completedBoolean, text)
         &quot;&quot;&quot;
-        x=self._call(&quot;/ws/page/%d/items/list&quot; % pageId)
-        return self._parseList(x)
+        x=self._call(&quot;/ws/page/%d/lists/%d/items/list&quot; % (pageId, listId))
+        return self._parseListItems(x)
 
-    def create(self, pageId, text):
+    def create(self, pageId, listId, text):
         &quot;&quot;&quot;Create a new entry.
         Return (id, completedBoolean, text)&quot;&quot;&quot;
         data=&quot;&lt;item&gt;&lt;content&gt;%s&lt;/content&gt;&lt;/item&gt;&quot; % (text,)
-        x=self._call(&quot;/ws/page/%d/items/add&quot; % (pageId,), data)
-        return self._parseList(x)[0]
+        x=self._call(&quot;/ws/page/%d/lists/%d/items/add&quot; % (pageId, listId), data)
+        return self._parseListItems(x)[0]
 
-    def update(self, pageId, id, text):
+    def update(self, pageId, listId, id, text):
         &quot;&quot;&quot;Update an entry.&quot;&quot;&quot;
         data=&quot;&lt;item&gt;&lt;content&gt;%s&lt;/content&gt;&lt;/item&gt;&quot; % (text,)
-        x=self._call(&quot;/ws/page/%d/items/update/%d&quot; % (pageId, id), data)
+        x=self._call(&quot;/ws/page/%d/lists/%d/items/update/%d&quot; % 
+                     (pageId, listId, id), data)
 
-    def toggle(self, pageId, id):
+    def toggle(self, pageId, listId, id):
         &quot;&quot;&quot;Toggle an entry.&quot;&quot;&quot;
-        x=self._call(&quot;/ws/page/%d/items/toggle/%d&quot; % (pageId, id))
+        x=self._call(&quot;/ws/page/%d/lists/%d/items/toggle/%d&quot; % 
+                     (pageId, listId, id))
 
-    def destroy(self, pageId, id):
+    def destroy(self, pageId, listId, id):
         &quot;&quot;&quot;Destroy an entry.&quot;&quot;&quot;
-        x=self._call(&quot;/ws/page/%d/items/destroy/%d&quot; % (pageId, id))
+        x=self._call(&quot;/ws/page/%d/lists/%d/items/destroy/%d&quot; % 
+                (pageId, listId, id))
 
-    def move(self, pageId, id, direction):
-        &quot;&quot;&quot;Move an entry.&quot;&quot;&quot;
+    def move(self, pageId, listId, id, direction):
+        &quot;&quot;&quot;Move an entry.
+        
+        direction can be 'move_lower', 'move_higher', 
+                         'move_to_top', and 'move_to_bottom'
+        &quot;&quot;&quot;
         data=&quot;&lt;direction&gt;%s&lt;/direction&gt;&quot; % (direction,)
-        x=self._call(&quot;/ws/page/%d/items/move/%d&quot; % (pageId, id), data)
+        x=self._call(&quot;/ws/page/%d/lists/%d/items/move/%d&quot; % 
+                (pageId, listId, id), data)
 
-class NoteAPI(PageAPI):
+class NoteAPI(BackpackAPI):
     &quot;&quot;&quot;API to Backpack Notes for a page.&quot;&quot;&quot;
 
     def __init__(self, u, k, debug=False):
         &quot;&quot;&quot;Get a NoteAPI object to the given URL and key&quot;&quot;&quot;
-        PageAPI.__init__(self, u, k, debug)
+        BackpackAPI.__init__(self, u, k, debug)
 
     def list(self, pageId):
         &quot;&quot;&quot;Get a list of the items on the given page.
@@ -644,6 +715,7 @@ class Backpack(object):
         self.reminder=ReminderAPI(url, key, debug)
         self.page=PageAPI(url, key, debug)
         self.list=ListAPI(url, key, debug)
+        self.listItem=ListItemAPI(url, key, debug)
         self.notes=NoteAPI(url, key, debug)
         self.email=EmailAPI(url, key, debug)
         self.tags=TagAPI(url, key, debug)</diff>
      <filename>backpack.py</filename>
    </modified>
    <modified>
      <diff>@@ -110,7 +110,7 @@ class BackpackAPITest(BaseCase):
             self.fail(&quot;Parsed 404 error into &quot; + data.toprettyxml())
         except backpack.BackpackError, e:
             self.assertEquals(e.code, 404)
-            self.assertEquals(e.msg, &quot;You failed&quot;)
+            self.assertEquals(e.msg, &quot;Record not found&quot;)
 
 class ReminderTest(BaseCase):
     &quot;&quot;&quot;Test reminder-specific stuff.&quot;&quot;&quot;
@@ -143,18 +143,29 @@ class PageTest(BaseCase):
         self.assertEquals(rv.title, 'Ajax Summit')
         self.assertEquals(rv.id, 1133)
         self.assertEquals(rv.emailAddress, 'ry87ib@backpackit.com')
-        self.assertEquals(rv.body,
-            &quot;With O'Reilly and Adaptive Path&quot;)
-        self.assertEquals(rv.notes, [(1020, 'Hotel',
-            1116114071.0, 'Staying at the Savoy')])
-        self.assertEquals(rv.incompleteItems, [(3308, 'See San Francisco')])
-        self.assertEquals(rv.completeItems, [
-            (3303, 'Meet interesting people'),
-            (3307, 'Present Backpack'), ])
-        self.assertEquals(rv.links, [(1141, 'Presentations')])
+        self.assertEquals(rv.notes, 
+                [(1019, '', 1116114071.0, &quot;With O'Reilly and AdaptivePath&quot;),
+                 (1020, 'Hotel', 1116106871.0, &quot;Staying at the Savoy&quot;)])
+        self.assertEquals(rv.lists, [(937,'Trip to SF')])
         self.assertEquals(rv.tags, [(4, 'Technology'),
             (5, 'Travel')])
 
+    def testSearchResultParser(self):
+        &quot;&quot;&quot;Test the search result parser&quot;&quot;&quot;
+        page = backpack.PageAPI(&quot;x&quot;, &quot;y&quot;)
+        data = page._parseDocument(self.getFileData(&quot;data/search.xml&quot;))
+        rv = page._parseSearchResult(data)
+
+        self.assertEquals(len(rv), 2)
+        self.assertEquals(rv[0].pageId, 1134)
+        self.assertEquals(rv[0].pageTitle, &quot;Haystack&quot;)
+        self.assertEquals(rv[0].type, &quot;note&quot;)
+        self.assertEquals(rv[0].containerId, 33469)
+        self.assertEquals(rv[1].pageId, 2482)
+        self.assertEquals(rv[1].pageTitle, &quot;Sewing&quot;)
+        self.assertEquals(rv[1].type, &quot;list&quot;)
+        self.assertEquals(rv[1].containerId, 34263)
+
 class ExportTest(BaseCase):
     &quot;&quot;&quot;Test the backup code.&quot;&quot;&quot;
 
@@ -173,16 +184,30 @@ class ExportTest(BaseCase):
         gotReminderIds=[x[1] for x in reminders]
         self.assertEquals(gotReminderIds, expectedReminderIds)
 
+
+class ListItemTest(BaseCase):
+    &quot;&quot;&quot;Test the list item code&quot;&quot;&quot;
+    
+    def testListItemParser(self):
+        &quot;&quot;&quot;Test the list item parser&quot;&quot;&quot;
+        li=backpack.ListItemAPI(&quot;x&quot;, &quot;y&quot;)
+        data = li._parseDocument(self.getFileData(&quot;data/listitem.xml&quot;))
+        actual = li._parseListItems(data)
+        expected = [(1, False, &quot;Hello world!&quot;), 
+                    (2, False, &quot;More world!&quot;),
+                    (3, True, &quot;Done world!&quot;)]
+        self.assertEquals(actual, expected)
+        
 class ListTest(BaseCase):
     &quot;&quot;&quot;Test the list code.&quot;&quot;&quot;
 
-    def testListParser(self):
-        &quot;&quot;&quot;Test the list lister.&quot;&quot;&quot;
+    def testListListParser(self):
+        &quot;&quot;&quot;Test parsing the List list&quot;&quot;&quot;
         l=backpack.ListAPI(&quot;x&quot;, &quot;y&quot;)
         data=l._parseDocument(self.getFileData(&quot;data/list.xml&quot;))
-        items=l._parseList(data)
-        self.assertEquals(len([i for i in items if not i[1]]), 19)
-        self.assertEquals(len([i for i in items if i[1]]), 1)
+        gotLists=l._parseLists(data)
+        expectedLists = [(1, &quot;greetings&quot;), (2, &quot;goodbyes&quot;)]
+        self.assertEquals(gotLists, expectedLists)
 
 class NotesTest(BaseCase):
     &quot;&quot;&quot;Test the notes code.&quot;&quot;&quot;
@@ -204,8 +229,8 @@ class EmailTest(BaseCase):
         e=backpack.EmailAPI(&quot;x&quot;, &quot;y&quot;)
         data=e._parseDocument(self.getFileData(&quot;data/emaillist.xml&quot;))
         emails=e._parseEmails(data)
-        expected=[(17507, 'test backpack email 2', 1124529799.0),
-            (17506, 'test backpack email 1', 1124529776.0)]
+        expected=[(17507, 'test backpack email 2', 1124522599.0),
+            (17506, 'test backpack email 1', 1124522576.0)]
         nobodies=[x[0:-1] for x in emails]
         self.assertEquals(nobodies, expected)
 
@@ -214,7 +239,7 @@ class EmailTest(BaseCase):
         e=backpack.EmailAPI(&quot;x&quot;, &quot;y&quot;)
         data=e._parseDocument(self.getFileData(&quot;data/email.xml&quot;))
         email=e._parseEmails(data)[0]
-        expected=(17507, 'test backpack email 2', 1124529799.0)
+        expected=(17507, 'test backpack email 2', 1124522599.0)
         self.assertEquals(email[0:-1], expected)
 
 class TagTest(BaseCase):</diff>
      <filename>bptest.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,13 +1,13 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;response success=&quot;true&quot;&gt;&lt;email subject=&quot;test backpack email 2&quot; id=&quot;17507&quot; created_at=&quot;2005-08-20 02:23:19&quot;&gt;
-     Hello again.
-
---
-SPY                      My girlfriend asked me which one I like better.
-pub  1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;lt;dustin@spy.net&amp;gt;
-|    Key fingerprint =  87 02 57 08 02 D0 DA D6  C8 0F 3E 65 51 98 D8 BE
-L_______________________ I hope the answer won't upset her. ____________
-
-
-
-&amp;lt;HTML&amp;gt;&amp;lt;BODY style=&quot;word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; &quot;&amp;gt;&amp;lt;DIV&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/DIV&amp;gt;&amp;lt;DIV&amp;gt;&#160;&#160;&#160; Hello again.&amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;DIV&amp;gt; &amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;--&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;SPY&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; My girlfriend asked me which one I like better.&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;pub&#160; 1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;amp;lt;&amp;lt;A href=&quot;mailto:dustin@spy.net&quot;&amp;gt;dustin@spy.net&amp;lt;/A&amp;gt;&amp;amp;gt;&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;|&#160; &#160; Key fingerprint =&#160; 87 02 57 08 02 D0 DA D6&#160; C8 0F 3E 65 51 98 D8 BE&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;L                        I hope the answer won't upset her.             &amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/P&amp;gt; &amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;
-&lt;/email&gt;&lt;/response&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;response success=&quot;true&quot;&gt;&lt;email subject=&quot;test backpack email 2&quot; id=&quot;17507&quot; created_at=&quot;2005-08-20 02:23:19&quot;&gt;
+     Hello again.
+
+--
+SPY                      My girlfriend asked me which one I like better.
+pub  1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;lt;dustin@spy.net&amp;gt;
+|    Key fingerprint =  87 02 57 08 02 D0 DA D6  C8 0F 3E 65 51 98 D8 BE
+L_______________________ I hope the answer won't upset her. ____________
+
+
+
+&amp;lt;HTML&amp;gt;&amp;lt;BODY style=&quot;word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; &quot;&amp;gt;&amp;lt;DIV&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/DIV&amp;gt;&amp;lt;DIV&amp;gt;&#160;&#160;&#160; Hello again.&amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;DIV&amp;gt; &amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;--&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;SPY&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; My girlfriend asked me which one I like better.&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;pub&#160; 1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;amp;lt;&amp;lt;A href=&quot;mailto:dustin@spy.net&quot;&amp;gt;dustin@spy.net&amp;lt;/A&amp;gt;&amp;amp;gt;&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;|&#160; &#160; Key fingerprint =&#160; 87 02 57 08 02 D0 DA D6&#160; C8 0F 3E 65 51 98 D8 BE&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;L                        I hope the answer won't upset her.             &amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/P&amp;gt; &amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;
+&lt;/email&gt;&lt;/response&gt;</diff>
      <filename>data/email.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1,25 +1,25 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;response success=&quot;true&quot;&gt;&lt;emails&gt;&lt;email subject=&quot;test backpack email 2&quot; id=&quot;17507&quot; created_at=&quot;2005-08-20 02:23:19&quot;&gt;
-     Hello again.
-
---
-SPY                      My girlfriend asked me which one I like better.
-pub  1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;lt;dustin@spy.net&amp;gt;
-|    Key fingerprint =  87 02 57 08 02 D0 DA D6  C8 0F 3E 65 51 98 D8 BE
-L_______________________ I hope the answer won't upset her. ____________
-
-
-
-&amp;lt;HTML&amp;gt;&amp;lt;BODY style=&quot;word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; &quot;&amp;gt;&amp;lt;DIV&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/DIV&amp;gt;&amp;lt;DIV&amp;gt;&#160;&#160;&#160; Hello again.&amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;DIV&amp;gt; &amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;--&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;SPY&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; My girlfriend asked me which one I like better.&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;pub&#160; 1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;amp;lt;&amp;lt;A href=&quot;mailto:dustin@spy.net&quot;&amp;gt;dustin@spy.net&amp;lt;/A&amp;gt;&amp;amp;gt;&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;|&#160; &#160; Key fingerprint =&#160; 87 02 57 08 02 D0 DA D6&#160; C8 0F 3E 65 51 98 D8 BE&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;L                        I hope the answer won't upset her.             &amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/P&amp;gt; &amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;
-&lt;/email&gt;&lt;email subject=&quot;test backpack email 1&quot; id=&quot;17506&quot; created_at=&quot;2005-08-20 02:22:56&quot;&gt;
-     Hello!
-
---
-SPY                      My girlfriend asked me which one I like better.
-pub  1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;lt;dustin@spy.net&amp;gt;
-|    Key fingerprint =  87 02 57 08 02 D0 DA D6  C8 0F 3E 65 51 98 D8 BE
-L_______________________ I hope the answer won't upset her. ____________
-
-
-
-&amp;lt;HTML&amp;gt;&amp;lt;BODY style=&quot;word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; &quot;&amp;gt;&amp;lt;DIV&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/DIV&amp;gt;&amp;lt;DIV&amp;gt;&#160;&#160;&#160; Hello!&amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;DIV&amp;gt; &amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;--&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;SPY&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; My girlfriend asked me which one I like better.&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;pub&#160; 1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;amp;lt;&amp;lt;A href=&quot;mailto:dustin@spy.net&quot;&amp;gt;dustin@spy.net&amp;lt;/A&amp;gt;&amp;amp;gt;&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;|&#160; &#160; Key fingerprint =&#160; 87 02 57 08 02 D0 DA D6&#160; C8 0F 3E 65 51 98 D8 BE&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;L                        I hope the answer won't upset her.             &amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/P&amp;gt; &amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;
-&lt;/email&gt;&lt;/emails&gt;&lt;/response&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;response success=&quot;true&quot;&gt;&lt;emails&gt;&lt;email subject=&quot;test backpack email 2&quot; id=&quot;17507&quot; created_at=&quot;2005-08-20 02:23:19&quot;&gt;
+     Hello again.
+
+--
+SPY                      My girlfriend asked me which one I like better.
+pub  1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;lt;dustin@spy.net&amp;gt;
+|    Key fingerprint =  87 02 57 08 02 D0 DA D6  C8 0F 3E 65 51 98 D8 BE
+L_______________________ I hope the answer won't upset her. ____________
+
+
+
+&amp;lt;HTML&amp;gt;&amp;lt;BODY style=&quot;word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; &quot;&amp;gt;&amp;lt;DIV&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/DIV&amp;gt;&amp;lt;DIV&amp;gt;&#160;&#160;&#160; Hello again.&amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;DIV&amp;gt; &amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;--&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;SPY&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; My girlfriend asked me which one I like better.&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;pub&#160; 1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;amp;lt;&amp;lt;A href=&quot;mailto:dustin@spy.net&quot;&amp;gt;dustin@spy.net&amp;lt;/A&amp;gt;&amp;amp;gt;&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;|&#160; &#160; Key fingerprint =&#160; 87 02 57 08 02 D0 DA D6&#160; C8 0F 3E 65 51 98 D8 BE&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;L                        I hope the answer won't upset her.             &amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/P&amp;gt; &amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;
+&lt;/email&gt;&lt;email subject=&quot;test backpack email 1&quot; id=&quot;17506&quot; created_at=&quot;2005-08-20 02:22:56&quot;&gt;
+     Hello!
+
+--
+SPY                      My girlfriend asked me which one I like better.
+pub  1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;lt;dustin@spy.net&amp;gt;
+|    Key fingerprint =  87 02 57 08 02 D0 DA D6  C8 0F 3E 65 51 98 D8 BE
+L_______________________ I hope the answer won't upset her. ____________
+
+
+
+&amp;lt;HTML&amp;gt;&amp;lt;BODY style=&quot;word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; &quot;&amp;gt;&amp;lt;DIV&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/DIV&amp;gt;&amp;lt;DIV&amp;gt;&#160;&#160;&#160; Hello!&amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;DIV&amp;gt; &amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;--&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;SPY&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; My girlfriend asked me which one I like better.&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;pub&#160; 1024/3CAE01D5 1994/11/03 Dustin Sallings &amp;amp;lt;&amp;lt;A href=&quot;mailto:dustin@spy.net&quot;&amp;gt;dustin@spy.net&amp;lt;/A&amp;gt;&amp;amp;gt;&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;|&#160; &#160; Key fingerprint =&#160; 87 02 57 08 02 D0 DA D6&#160; C8 0F 3E 65 51 98 D8 BE&amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;L                        I hope the answer won't upset her.             &amp;lt;/P&amp;gt;&amp;lt;P style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco&quot;&amp;gt;&amp;lt;BR class=&quot;khtml-block-placeholder&quot;&amp;gt;&amp;lt;/P&amp;gt; &amp;lt;/DIV&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;
+&lt;/email&gt;&lt;/emails&gt;&lt;/response&gt;</diff>
      <filename>data/emaillist.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1,5 @@
-&lt;?xml version=&quot;1.0&quot;?&gt;&lt;response success=&quot;false&quot;&gt;&lt;error code=&quot;404&quot;&gt;You failed&lt;/error&gt;&lt;/response&gt;
+&lt;?xml version=&quot;1.0&quot;?&gt;
+&lt;response success='false'&gt;
+  &lt;error code='404'&gt;Record not found&lt;/error&gt;
+&lt;/response&gt;
+</diff>
      <filename>data/error404.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1,36 +1,36 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;backpack username=&quot;dustinspy&quot;&gt;
-  &lt;pages&gt;
-&lt;page title=&quot;Backpack API&quot; id=&quot;173034&quot; email_address=&quot;wayne31bella@dustinspy.backpackit.com&quot;&gt;
-  &lt;description&gt;Stuff I need to do to complete the &quot;backpack API&quot;:http://www.backpackit.com/api/ .&lt;/description&gt;
-  &lt;items&gt;
-&lt;item completed=&quot;false&quot; id=&quot;781792&quot;&gt;List API.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781793&quot;&gt;&amp;amp;rarr; list for page&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781796&quot;&gt;&amp;amp;rarr; create item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781797&quot;&gt;&amp;amp;rarr; update item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781798&quot;&gt;&amp;amp;rarr; toggle item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781801&quot;&gt;&amp;amp;rarr; destroy item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781803&quot;&gt;&amp;amp;rarr; move item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781812&quot;&gt;Notes API.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781816&quot;&gt;&amp;amp;rarr; list&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781819&quot;&gt;&amp;amp;rarr; create&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781820&quot;&gt;&amp;amp;rarr; update&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781827&quot;&gt;&amp;amp;rarr; destroy&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781830&quot;&gt;Tags API.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781831&quot;&gt;&amp;amp;rarr; get pages for a tag&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781832&quot;&gt;&amp;amp;rarr; tag a page&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781833&quot;&gt;Emails&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781834&quot;&gt;&amp;amp;rarr; list for page&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781835&quot;&gt;&amp;amp;rarr; get&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781836&quot;&gt;&amp;amp;rarr; delete&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781837&quot;&gt;Export&lt;/item&gt;  &lt;/items&gt;
-&lt;/page&gt;
-&lt;page title=&quot;Home page&quot; id=&quot;166626&quot; email_address=&quot;zacharia72winfred@dustinspy.backpackit.com&quot;&gt;
-  &lt;description&gt;!http://bleu.west.spy.net/~dustin/images/spyvspy2.var!&lt;/description&gt;
-  &lt;items&gt;
-&lt;item completed=&quot;false&quot; id=&quot;913556&quot;&gt;Make a todo list.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;916954&quot;&gt;spy.jar bugs&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;913581&quot;&gt;Finish backpack API&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;935982&quot;&gt;New backup implementation&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;946323&quot;&gt;xml checksum thing&lt;/item&gt;&lt;item completed=&quot;true&quot; id=&quot;946392&quot;&gt;Fix temperature reports&lt;/item&gt;  &lt;/items&gt;
-&lt;/page&gt;
-&lt;page title=&quot;New Backup Implementation&quot; id=&quot;201574&quot; email_address=&quot;nelson74lattie@dustinspy.backpackit.com&quot;&gt;
-  &lt;description&gt;I would like to begin a rewrite of my backup software.  The purpose of this rewrite is to make it a bit easier to configure as well as distribute.  I'd also like to fix up a couple of inconveniences along the way.&lt;/description&gt;
-  &lt;items&gt;
-&lt;item completed=&quot;false&quot; id=&quot;936703&quot;&gt;Chunked data storage&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;936704&quot;&gt;block encrypt engine&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;936706&quot;&gt;linker&lt;/item&gt;&lt;item completed=&quot;true&quot; id=&quot;935983&quot;&gt;Python digest block class.&lt;/item&gt;  &lt;/items&gt;
-&lt;/page&gt;
-&lt;page title=&quot;Places to Go&quot; id=&quot;200381&quot; email_address=&quot;clint06elvira@dustinspy.backpackit.com&quot;&gt;
-  &lt;items&gt;
-&lt;item completed=&quot;false&quot; id=&quot;928967&quot;&gt;David suggested &quot;Markleeville&quot;:http://www.alpinecounty.com/markleeville.html for camping.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;929566&quot;&gt;&quot;Corpse Exhibit-SF&quot;:http://www.theuniversewithin.org/&lt;/item&gt;  &lt;/items&gt;
-&lt;/page&gt;
-&lt;page title=&quot;spy.jar&quot; id=&quot;198053&quot; email_address=&quot;adolph78bulah@dustinspy.backpackit.com&quot;&gt;
-  &lt;description&gt;Here are some spy.jar bugs that need to be fixed.
-
-!http://bleu.west.spy.net/~dustin/images/spyvspy2.var!
-!http://www.swarthmore.edu/Humanities/kjohnso1/pictures/jar.jpg!&lt;/description&gt;
-  &lt;items&gt;
-&lt;item completed=&quot;false&quot; id=&quot;916988&quot;&gt;Fix ThreadPool task sleep loop&lt;/item&gt;  &lt;/items&gt;
-&lt;/page&gt;
-&lt;page title=&quot;Work Stuff&quot; id=&quot;202561&quot; email_address=&quot;melvin08alvira@dustinspy.backpackit.com&quot;&gt;
-&lt;/page&gt;
-  &lt;/pages&gt;
-  &lt;reminders&gt;
-&lt;reminder remind_at=&quot;2005-07-18 07:01:00&quot; id=&quot;51604&quot;&gt;Make sure backpack reminders aren't filtered&lt;/reminder&gt;&lt;reminder remind_at=&quot;2005-07-18 17:35:00&quot; id=&quot;51613&quot;&gt;Clean up email.&lt;/reminder&gt;&lt;reminder remind_at=&quot;2005-07-18 20:57:00&quot; id=&quot;52079&quot;&gt;Status in workshop.&lt;/reminder&gt;&lt;reminder remind_at=&quot;2005-07-19 06:37:00&quot; id=&quot;52373&quot;&gt;Get API working.&lt;/reminder&gt;&lt;reminder remind_at=&quot;2005-07-19 08:38:00&quot; id=&quot;52403&quot;&gt;test reminder via phone&lt;/reminder&gt;  &lt;/reminders&gt;
-&lt;/backpack&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;backpack username=&quot;dustinspy&quot;&gt;
+  &lt;pages&gt;
+&lt;page title=&quot;Backpack API&quot; id=&quot;173034&quot; email_address=&quot;wayne31bella@dustinspy.backpackit.com&quot;&gt;
+  &lt;description&gt;Stuff I need to do to complete the &quot;backpack API&quot;:http://www.backpackit.com/api/ .&lt;/description&gt;
+  &lt;items&gt;
+&lt;item completed=&quot;false&quot; id=&quot;781792&quot;&gt;List API.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781793&quot;&gt;&amp;amp;rarr; list for page&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781796&quot;&gt;&amp;amp;rarr; create item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781797&quot;&gt;&amp;amp;rarr; update item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781798&quot;&gt;&amp;amp;rarr; toggle item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781801&quot;&gt;&amp;amp;rarr; destroy item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781803&quot;&gt;&amp;amp;rarr; move item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781812&quot;&gt;Notes API.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781816&quot;&gt;&amp;amp;rarr; list&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781819&quot;&gt;&amp;amp;rarr; create&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781820&quot;&gt;&amp;amp;rarr; update&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781827&quot;&gt;&amp;amp;rarr; destroy&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781830&quot;&gt;Tags API.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781831&quot;&gt;&amp;amp;rarr; get pages for a tag&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781832&quot;&gt;&amp;amp;rarr; tag a page&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781833&quot;&gt;Emails&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781834&quot;&gt;&amp;amp;rarr; list for page&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781835&quot;&gt;&amp;amp;rarr; get&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781836&quot;&gt;&amp;amp;rarr; delete&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781837&quot;&gt;Export&lt;/item&gt;  &lt;/items&gt;
+&lt;/page&gt;
+&lt;page title=&quot;Home page&quot; id=&quot;166626&quot; email_address=&quot;zacharia72winfred@dustinspy.backpackit.com&quot;&gt;
+  &lt;description&gt;!http://bleu.west.spy.net/~dustin/images/spyvspy2.var!&lt;/description&gt;
+  &lt;items&gt;
+&lt;item completed=&quot;false&quot; id=&quot;913556&quot;&gt;Make a todo list.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;916954&quot;&gt;spy.jar bugs&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;913581&quot;&gt;Finish backpack API&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;935982&quot;&gt;New backup implementation&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;946323&quot;&gt;xml checksum thing&lt;/item&gt;&lt;item completed=&quot;true&quot; id=&quot;946392&quot;&gt;Fix temperature reports&lt;/item&gt;  &lt;/items&gt;
+&lt;/page&gt;
+&lt;page title=&quot;New Backup Implementation&quot; id=&quot;201574&quot; email_address=&quot;nelson74lattie@dustinspy.backpackit.com&quot;&gt;
+  &lt;description&gt;I would like to begin a rewrite of my backup software.  The purpose of this rewrite is to make it a bit easier to configure as well as distribute.  I'd also like to fix up a couple of inconveniences along the way.&lt;/description&gt;
+  &lt;items&gt;
+&lt;item completed=&quot;false&quot; id=&quot;936703&quot;&gt;Chunked data storage&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;936704&quot;&gt;block encrypt engine&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;936706&quot;&gt;linker&lt;/item&gt;&lt;item completed=&quot;true&quot; id=&quot;935983&quot;&gt;Python digest block class.&lt;/item&gt;  &lt;/items&gt;
+&lt;/page&gt;
+&lt;page title=&quot;Places to Go&quot; id=&quot;200381&quot; email_address=&quot;clint06elvira@dustinspy.backpackit.com&quot;&gt;
+  &lt;items&gt;
+&lt;item completed=&quot;false&quot; id=&quot;928967&quot;&gt;David suggested &quot;Markleeville&quot;:http://www.alpinecounty.com/markleeville.html for camping.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;929566&quot;&gt;&quot;Corpse Exhibit-SF&quot;:http://www.theuniversewithin.org/&lt;/item&gt;  &lt;/items&gt;
+&lt;/page&gt;
+&lt;page title=&quot;spy.jar&quot; id=&quot;198053&quot; email_address=&quot;adolph78bulah@dustinspy.backpackit.com&quot;&gt;
+  &lt;description&gt;Here are some spy.jar bugs that need to be fixed.
+
+!http://bleu.west.spy.net/~dustin/images/spyvspy2.var!
+!http://www.swarthmore.edu/Humanities/kjohnso1/pictures/jar.jpg!&lt;/description&gt;
+  &lt;items&gt;
+&lt;item completed=&quot;false&quot; id=&quot;916988&quot;&gt;Fix ThreadPool task sleep loop&lt;/item&gt;  &lt;/items&gt;
+&lt;/page&gt;
+&lt;page title=&quot;Work Stuff&quot; id=&quot;202561&quot; email_address=&quot;melvin08alvira@dustinspy.backpackit.com&quot;&gt;
+&lt;/page&gt;
+  &lt;/pages&gt;
+  &lt;reminders&gt;
+&lt;reminder remind_at=&quot;2005-07-18 07:01:00&quot; id=&quot;51604&quot;&gt;Make sure backpack reminders aren't filtered&lt;/reminder&gt;&lt;reminder remind_at=&quot;2005-07-18 17:35:00&quot; id=&quot;51613&quot;&gt;Clean up email.&lt;/reminder&gt;&lt;reminder remind_at=&quot;2005-07-18 20:57:00&quot; id=&quot;52079&quot;&gt;Status in workshop.&lt;/reminder&gt;&lt;reminder remind_at=&quot;2005-07-19 06:37:00&quot; id=&quot;52373&quot;&gt;Get API working.&lt;/reminder&gt;&lt;reminder remind_at=&quot;2005-07-19 08:38:00&quot; id=&quot;52403&quot;&gt;test reminder via phone&lt;/reminder&gt;  &lt;/reminders&gt;
+&lt;/backpack&gt;</diff>
      <filename>data/export.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1,7 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;response success=&quot;true&quot;&gt;&lt;items&gt;&lt;item completed=&quot;false&quot; id=&quot;781792&quot;&gt;List API.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781793&quot;&gt;&amp;amp;rarr; list for page&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781796&quot;&gt;&amp;amp;rarr; create item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781797&quot;&gt;&amp;amp;rarr; update item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781798&quot;&gt;&amp;amp;rarr; toggle item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781801&quot;&gt;&amp;amp;rarr; destroy item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781803&quot;&gt;&amp;amp;rarr; move item&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781812&quot;&gt;Notes API.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781816&quot;&gt;&amp;amp;rarr; list&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781819&quot;&gt;&amp;amp;rarr; create&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781820&quot;&gt;&amp;amp;rarr; update&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781827&quot;&gt;&amp;amp;rarr; destroy&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781830&quot;&gt;Tags API.&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781831&quot;&gt;&amp;amp;rarr; get pages for a tag&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781832&quot;&gt;&amp;amp;rarr; tag &#229; page&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781833&quot;&gt;Emails&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781834&quot;&gt;&amp;amp;rarr; list for page&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781835&quot;&gt;&amp;amp;rarr; get&lt;/item&gt;&lt;item completed=&quot;false&quot; id=&quot;781836&quot;&gt;&amp;amp;rarr; delete&lt;/item&gt;&lt;item completed=&quot;true&quot; id=&quot;781837&quot;&gt;Export&lt;/item&gt;&lt;/items&gt;&lt;/response&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;response success='true'&gt;
+  &lt;lists&gt;
+    &lt;list id='1' name='greetings' /&gt;
+    &lt;list id='2' name='goodbyes' /&gt;
+  &lt;/lists&gt;
+&lt;/response&gt;</diff>
      <filename>data/list.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;response success=&quot;true&quot;&gt;&lt;notes&gt;&lt;note title=&quot;Test Note&quot; id=&quot;263366&quot; created_at=&quot;2005-08-20 02:07:54&quot;&gt;This is a test note.&lt;/note&gt;&lt;/notes&gt;&lt;/response&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;response success=&quot;true&quot;&gt;&lt;notes&gt;&lt;note title=&quot;Test Note&quot; id=&quot;263366&quot; created_at=&quot;2005-08-20 02:07:54&quot;&gt;This is a test note.&lt;/note&gt;&lt;/notes&gt;&lt;/response&gt;</diff>
      <filename>data/notelist.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1,27 +1,40 @@
-&lt;?xml version=&quot;1.0&quot;?&gt;
-&lt;response success='true'&gt;
-&lt;page title='Ajax Summit' id='1133' email_address='ry87ib@backpackit.com'&gt;
-  &lt;description&gt;With O'Reilly and Adaptive Path&lt;/description&gt;
-  &lt;notes&gt;
-    &lt;note title='Hotel' id='1020' created_at='2005-05-14 16:41:11'&gt;
-      Staying at the Savoy
-    &lt;/note&gt;
-  &lt;/notes&gt;
-  &lt;items&gt;
-    &lt;incomplete&gt;
-      &lt;item id='3308'&gt;See San Francisco&lt;/item&gt;
-    &lt;/incomplete&gt;
-    &lt;completed&gt;
-      &lt;item id='3303'&gt;Meet interesting people&lt;/item&gt;
-      &lt;item id='3307'&gt;Present Backpack&lt;/item&gt;
-    &lt;/completed&gt;
-  &lt;/items&gt;
-  &lt;linked_pages&gt;
-    &lt;page title='Presentations' id='1141' /&gt;
-  &lt;/linked_pages&gt;
-  &lt;tags&gt;
-    &lt;tag name='Technology' id='4' /&gt;
-    &lt;tag name='Travel' id='5' /&gt;
-  &lt;/tags&gt;
-&lt;/page&gt;
-&lt;/response&gt;
+&lt;response success='true'&gt;
+  &lt;page title='Ajax Summit' id='1133' email_address='ry87ib@backpackit.com'&gt;
+    &lt;belongings&gt;
+      &lt;belonging id='783'&gt;
+        &lt;position&gt;1&lt;/position&gt;
+        &lt;widget type='Note' id='1019' /&gt;
+      &lt;/belonging&gt;
+      &lt;belonging id='784'&gt;
+        &lt;position&gt;2&lt;/position&gt;
+        &lt;widget type='Note' id='1020' /&gt;
+      &lt;/belonging&gt;
+      &lt;belonging id='785'&gt;
+        &lt;position&gt;3&lt;/position&gt;
+        &lt;widget type='List' id='937' /&gt;
+      &lt;/belonging&gt;
+    &lt;/belongings&gt;
+    &lt;notes&gt;
+      &lt;note title='' id='1019' created_at='2005-05-14 16:39:02'&gt;
+        With O'Reilly and Adaptive Path
+      &lt;/note&gt;
+      &lt;note title='Hotel' id='1020' created_at='2005-05-14 16:41:11'&gt;
+        Staying at the Savoy
+      &lt;/note&gt;
+    &lt;/notes&gt;
+    &lt;lists&gt;
+      &lt;list id='937' name='Trip to SF'&gt;
+        &lt;items&gt;
+          &lt;item id='3308' completed=&quot;false&quot;&gt;See San Francisco&lt;/item&gt;
+          &lt;item id='3303' completed=&quot;true&quot;&gt;Meet interesting people&lt;/item&gt;
+          &lt;item id='3307' completed=&quot;true&quot;&gt;Present Backpack&lt;/item&gt;
+        &lt;/items&gt;
+      &lt;/list&gt;
+    &lt;/lists&gt;
+    &lt;tags&gt;
+      &lt;tag name='Technology' id='4' /&gt;
+      &lt;tag name='Travel' id='5' /&gt;
+    &lt;/tags&gt;
+  &lt;/page&gt;
+&lt;/response&gt;
+</diff>
      <filename>data/page.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
-&lt;?xml version=&quot;1.0&quot;?&gt;
-&lt;response success='true'&gt;
-  &lt;pages&gt;
-    &lt;page scope='personal' title='Example page' id='1134' /&gt;
-    &lt;page scope='personal' title='Movie Titles' id='1136' /&gt;
-    &lt;page scope='friends' title='Ajax Summit' id='1133' /&gt;
-  &lt;/pages&gt;
-&lt;/response&gt;
+&lt;?xml version=&quot;1.0&quot;?&gt;
+&lt;response success='true'&gt;
+  &lt;pages&gt;
+    &lt;page scope='personal' title='Example page' id='1134' /&gt;
+    &lt;page scope='personal' title='Movie Titles' id='1136' /&gt;
+    &lt;page scope='friends' title='Ajax Summit' id='1133' /&gt;
+  &lt;/pages&gt;
+&lt;/response&gt;</diff>
      <filename>data/pages.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;response success=&quot;true&quot;&gt;&lt;pages&gt;&lt;page title=&quot;Backpack API&quot; id=&quot;173034&quot;/&gt;&lt;page title=&quot;Nonsense&quot; id=&quot;18852&quot;/&gt;&lt;/pages&gt;&lt;/response&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;response success=&quot;true&quot;&gt;&lt;pages&gt;&lt;page title=&quot;Backpack API&quot; id=&quot;173034&quot;/&gt;&lt;page title=&quot;Nonsense&quot; id=&quot;18852&quot;/&gt;&lt;/pages&gt;&lt;/response&gt;</diff>
      <filename>data/pagesfortag.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;response success=&quot;true&quot;&gt;&lt;reminders&gt;&lt;reminder remind_at=&quot;2005-07-18 23:37:00&quot; id=&quot;52373&quot;&gt;Get API working.&lt;/reminder&gt;&lt;reminder remind_at=&quot;2005-07-19 02:00:00&quot; id=&quot;52372&quot;&gt;Be asleep.&lt;/reminder&gt;&lt;/reminders&gt;&lt;/response&gt;
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;response success=&quot;true&quot;&gt;&lt;reminders&gt;&lt;reminder remind_at=&quot;2005-07-18 23:37:00&quot; id=&quot;52373&quot;&gt;Get API working.&lt;/reminder&gt;&lt;reminder remind_at=&quot;2005-07-19 02:00:00&quot; id=&quot;52372&quot;&gt;Be asleep.&lt;/reminder&gt;&lt;/reminders&gt;&lt;/response&gt;</diff>
      <filename>data/reminders.xml</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7780a3830593602b167fd068c5ade568fedfedfa</id>
    </parent>
  </parents>
  <author>
    <name>tlovett</name>
    <email>devnull@localhost</email>
  </author>
  <url>http://github.com/dustin/py-backpack/commit/5010db1f777be24b9c7c57b13ccd71f4d3953661</url>
  <id>5010db1f777be24b9c7c57b13ccd71f4d3953661</id>
  <committed-date>2007-10-19T19:55:40-07:00</committed-date>
  <authored-date>2007-10-19T19:55:40-07:00</authored-date>
  <message>Updated to utilize the new backpack API (see http://developer.37signals.com/backpack/)</message>
  <tree>a3cdc3599ce33ac84f54617ca29215d539327107</tree>
  <committer>
    <name>tlovett</name>
    <email>devnull@localhost</email>
  </committer>
</commit>
